Quo vadis? aneb Moderní Objective-C

6. 6. 2012 13:13 zboj

U C++ je módní mluvit o „moderním“ C++ jakožto protikladu k předpotopní verzi jazyka. Celé to začal Andrei Alexandrescu svou knihou, jež měla slovo „modern“ přímo v názvu. Přirozeným vyústěním ®evolučních snah je nový standard C++11.

Pochopitelně každý jazyk se vyvíjí a přizpůsobuje aktuálním potřebám a výzvám. Některé jazyky se rozšiřují spíše konzervativně (Java), jinde to dopadá jako dort pejska a kočičky (C#). Výjimkou není samozřejmě ani Objective-C, jež získalo v posledních letech na popularitě.

Na ObjC celkem dlouho nikdo nesáhl, až do tzv. ObjC 2.0 nedocházelo ani k větším rozšířením standardní knihovny. Teprve ObjC 2.0 přineslo velké zlepšení hlavně pro správu paměti. Další drobné úpravy a nápravy chybného návrhu následovaly během posledních cca. čtyř let, takže teď už konečně nemusíme psát explicitní instanční proměnné, @synthesize apod.

Celá evoluce se zrychlila adopcí clangu:

[…] now that Apple pretty much controls the compiler, we have the possibility to improve the language and add features which we always dreamt to have.

Celkem logické. A dále:

Maintaining a strict separation between language and runtime and library is now only a small consideration for our designs. If we can improve […] programming by moving library concepts or functionality into the language, then we will do it even if it is not what a language purist would want.

Co to konkrétně znamená? Tak například místo [NSNumber numberWithUnsignedInteger: 1234] lze psát @1234u. Vůbec celý jazyk se teď v některých ohledech blíží skriptovacím (např. JS), třeba literály pro pole a asociativní pole (silně připomínající JSON) jsou velkým přínosem pro čitelnost kódu.

Obecné doporučení asi neexistuje, resp. odvíjí se od konkrétního projektu, nicméně místo delegátů je teď mnohem vhodnější používat bloky (lambda výrazy), až na výjimky je hloupost vypínat ARC, hlavičkové soubory by neměly být zaneřáděné implementačními detaily atd. Podobně jako u C++11 lze při využití nových prostředků jazyka značně zkrátit a zčitelnit jinak ekvivalentní kód.

Sdílet