Sobes.tech
Middle+

Hoe schrijf je code zodat deze snel werkt vanuit het perspectief van dynamische dispatch?

sobes.tech AI

Antwoord van AI

Gebruik struct en enum in plaats van class waar mogelijk. Value types gebruiken standaard geen dynamische dispatch.

Pas final toe op klassen en methoden om overerving en overschrijving te voorkomen, zodat de compiler directe dispatch kan uitvoeren.

final class MyFinalClass { // Klasse kan niet worden overgeërfd
    final func myFinalMethod() { // Methode kan niet worden overschreven
        // ...
    }
}

Gebruik protocollen met alleen static of final methoden/eigenschappen, of met generics die tijdens compilatie kunnen worden gespecialiseerd.

protocol MyProtocol {
    static func staticMethod()
}

Gebruik private en fileprivate voor methoden en eigenschappen binnen klassen/structs/enums. Dit kan de compiler toestaan snellere dispatch te gebruiken, omdat de scope beperkt is.

class MyClass {
    private func privateMethod() {
        // ...
    }
}

Vermijd het veelvuldig gebruik van algemene protocollen in runtime, waar de specifieke types vooraf niet bekend zijn, omdat calls via protocollen gebruik maken van een virtuele tabel. Geef de voorkeur aan generics waar mogelijk tijdens compilatie.

Gebruik het attribuut @inline(__always). Dit is een suggestie aan de compiler om te proberen de body van de functie inline te plaatsen, waardoor de overhead van een functieaanroep wordt vermeden. Het biedt niet altijd voordeel.

@inline(__always)
func myInlinedFunction() {
    // ...
}