THE DARKEST PLACE
Zpráva o stavu Swiftu
Dec 1, 2016
Swift, nový jazyk Applu, dosáhl třetí verze. Od představení před pár lety docela vyzrál, ale stále ještě nevykazuje potřebnou stabilitu. I tak je ale univerzálně použitelný, rychlý, efektivní a snadno naučitelný.

Především je třeba říct, že z pohledu syntaxe nabízí Swift (už od začátku) nejvíce konstrukcí ze všech moderních procedurálních/OO jazyků (C++, Go, C#, Java apod.). Nabízí značnou volnost co do paradigmatu, je úsporný a dobře čitelný a přitom "C-like". Následuje výčet několika opravdu užitečných konstrukcí (a poté kritika několika problematických vlastností).

Použití objektů, jež mohou být nil, lze úsporně vyjádřit díky postfixu ? za výrazem, např. obj?.name nebo (pro zavolání bloku) block?(). Takový kód je mnohem čitelnější než explicitní rozbalení monády.

Protokoly lze přidávat i k existujícím objektům. Můžu mít například protokol
    protocol Doublable {
        var doubled:Self { get }
    }

a "donutit" například strukturu String, aby tento protokol implementovala:
    extension String : Doublable { ... }
Jedná se o velmi mocný nástroj, který žádný jiný mainstreamový jazyk nemá (kromě Objective-C, kde to je ale dáno dynamičností).

Ze Swiftu se dají přímo volat knihovny v C a na rozdíl od Javy a C# bez overheadu. Podobně je na tom například Go, kde se ovšem nedají kvůli GC předávat kódu v C reference k objektům, což je poměrně zásadní problém (ve Swiftu to jde, pokud se explicitně postaráme o správu paměti).

Nevýhodou je stále ještě nestabilita ABI, protože Swift ještě nemá plně implementovaná generika (byť už teď je dost před C#, o Javě ani nemluvě), kvůli čemuž se musí aplikace distribuovat se všemi knihovnami. Problémem je také v některých případech pomalá standardní knihovna, například práce s řetězci je někdy opravdu až ostudně neefektivní. A v neposlední řadě Swift stále nemá svatý grál OO přístupu, tedy volání neznámé metody jménem. To je sice potřeba jen v hodně okrajových případech, ale pak se jedná o jediné schůdné řešení (paradoxně Java i C# to umožňují).

Přes veškeré prozatímní nevýhody je Swift univerzálně použitelný (i na Linuxu) a nezbývá než těšit se na jeho čtvrtou verzi.