Skip to content

Swift compiler type-check #282

@mina-kleid-mobile

Description

@mina-kleid-mobile

In our project we enabled the swift compiler diagnostics -Xfrontend -debug-time-expression-type-checking and we found there were a lot of time spent type-checking code that uses combineLatest and/or with(latestFrom:).

After digging deep in the issue we fount the root cause is coming from having these overloaded functions with generics from the library itself

Is this a know issue? and do you have a solution for this?

Example that triggers the warning when limit is 100ms. It shows us 170ms is spent on type-checking this expression

 signal
      .combineLatest(with: signal2)
      .map { $0 + $1 }
      .combineLatest(with: signal3)
      .map { $0 + $1 }

The overloading of functions

To give a better look, here is a snippet for the 3 overloaded functions extracted from SignalProtocol + Combining. The way they are written, they checking on error types for Element & O.

protocol SignalProtocol {
   associatedType Element
    
   public func combineLatest<O: SignalProtocol>(with other: O) -> Signal<(Element, O.Element), Error> where O.Error == Error

   public func combineLatest<O: SignalProtocol>(with other: O) -> Signal<(Element, O.Element), Error> where O.Error == Never
}

extension SignalProtocol where Error == Never {
   public func combineLatest<O: SignalProtocol>(with other: O) -> Signal<(Element, O.Element), O.Error>
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions