Hlavní navigace

Stručná historie Objective-C

20. 9. 2011 8:04 (aktualizováno) zboj

Jazyk Objective-C (ObjC) je (ze současného pohledu právem) spojován především s Applem a jeho systémem OS X (a iOS). Jen ti zasvěcenější ale vědí, jak tento jazyk vznikl a jak se vyvíjel. Zde je tedy stručné shrnutí.

Vznik Objective-C

Objective-C vytvořili Brad Cox a Tom Love jako objektově-orientované rozšíření populárního jazyka C. Základem návrhu jazyka byla úplná zpětná kompatibilita s „céčkem“. Objektovou syntax si vypůjčili ze Smalltalku (s přidanými hranatými závorkami kolem posílání zpráv). Původní verze byla jen jakýmsi prepocesorem převádějícím zdrojový kód v ObjC do čistého C. Výsledný kód využíval malé běhové prostředí (runtime), jehož značně dokonalejší podobu máme k dispozici i v dnešních překladačích pro ObjC.

Proč vlastně ObjC vzniklo? Tehdy bylo C++ ještě neznámé a jiný vhodný OO jazyk neměli autoři k dispozici. Smalltalk se jim zamlouval, ale byl na tehdejším hardwaru relativně pomalý a hlavně drahý. Spojili tedy výhody Smalltalku s rychlostí jazyka C. Navíc existovalo mnoho knihoven napsaných v C, které by při vytvoření zcela nového jazyka nebylo možné jednoduše použít.

Počáteční vývoj

První verze ObjC byla jen holým jazykem bez OO knihoven. K dispozici byla třída Object, jež se starala pouze o vytváření a zánik objektů a posílání zpráv (tedy v podstatě volání metod). Veškerý podpůrný kód byl k dispozici v C.

Hned v začátcích se objevilo několik návrhů, jak ObjC obohatit o uzávěry (closures), které Smalltalk měl. Sám Brad Cox navrhl syntax a implementaci uzávěrů (nazývaných bloky), do hlavní vývojové větvě jazyka se ale nedostaly. Až mnohem později je do C/C++ (nejen ObjC) přidali vývojáři pracující na překladači clang/LLVM (nově je můžeme v poněkud jiné podobě najít také v nejnovější verzi standardu C++ – C++0×, resp. C++11).

NeXT a Sun

V roce 1988 zakoupila licenci na ObjC společnost NeXT a založila na tomto jazyku vývojové nástroje pro svůj systém NextStep. Knihovny pro ObjC byly stále velmi primitivní a vývojáři byli do značné míry odkázaní na C.

Důležitým mezníkem byl pro ObjC ro 1994. V té době byl vydán OpenStep, vývojové prostředí vyvinuté Sunem (za přispění NeXTu) založené na ObjC. V OpenStepu se také poprvé objevily knihovny, jak je známe dnes, se zabudovaným čítačem referencí, poloautomatickou správou paměti (autorelease pools) atd. Z této doby také pochází prefix NS- u knihovních tříd, přičemž „S“ znamená Sun (dřívější verze NextStepu používaly NX-).

Sun na OpenStepu postavil několik produktů (zejména pro servery), ale nakonec v roce 1995 vydal první verzi Javy a OpenStep úplně ignoroval. Zajímavé je, že právě návrh Javy byl jazykem ObjC a jeho knihovnami výrazně ovlivněn. Syntax Javy je sice založená na C++, ale sémanticky je blíže Smalltalku (a tím i ObjC). Mnoho vývojářů, kteří se podíleli na OpenStepu, pracovalo později v Sunu na Javě, a tak se do ní už v zárodku (nazývaném tehdy Oak) dostaly takové věci jako rozhraní (interface, vytvořené podle protokolů v ObjC) a mnohu konceptů z knihoven (kolekce, boxing primitivních datových typů apod.). Sun dokonce koupil firmu Lighthouse, jež vyvíjela pro OpenStep, a nasadil její vývojáře na rozvoj Javy, zcela podle hesla „Java everywhere“.

Apple a OS X

Nový život vdechla jazyku ObjC akvizice NeXTu Applem. Apple potřeboval moderní operační systém a nakonec se rozhodl pro NextStep. Koupí NeXTu tehdy získal skomírající Apple nejen jazyk a operační systém, ale také na tehdejší dobu pokročilé vývojové nástroje (ze kterých se vyvinulo dnešní Xcode). Knihovna pro ObjC (nyní nazývaná Cocoa) se ani dnes výrazně neliší od API OpenStepu z doby „předapplovské“.

Narozdíl od Sunu a později Microsoftu zůstal Apple věrný ObjC a nezavedl nový jazyk s bajtkódem a automatickou správou paměti (tu nakonec ObjC dostalo později ve verzi OS X 10.5), což se nakonec ukázalo s ohledem na první verze iPhonu s minimem operační paměti jako velká výhoda. Ostatně i Microsoft se u Windows 8 vrací k nativnímu kódu (WinRT a C++/CX).

iOS

Když Apple uvedl na trh iPhone, nasadil na něm operační systém založený na OS X. Některé knihovny byly přepsány, většina ale zůstala stejná jako na OS X. Poslední verze (10.7 Lion) dokonce přebrala některé prvky z nejnovější verze iOS.

Některé pojmy spojené s ObjC:

Objective-C++

Jde o „smalltalkovskou“ nadstavbu jazyka C++. Třídy v C++ a ObjC jsou ovšem vzájemně nekompatibilní. Má smysl jen pro využití knihoven v C++. Zdrojový kód funguje zhruba jako u C++/CLI (generuje ale pouze nativní kód) a umožňuje smíchat dva jazyky v jednom souboru.

Objective-C 2.0

Rozšíření původního ObjC (od OS X 10.5 Leopard). Byly přidány vlastnosti (properties) tříd, které pomocí tečkové notace usnadňují správu paměti. Stolní OS X dostal také plnohondotný garbage collector.

Dalším významným rozšířením jsou bloky (uzávěry) zavedené v OS X 10.6 Snow Leopard.

Clang a LLVM

Překladač Clang/LLVM nahrazuje GCC. Je rychlejší, dává rozumnější chybové hlášky a generuje efektivnější kód. Nejnovější verze navíc podporuje automatické počítání referencí (překladač generuje za programátora kód pro správu paměti, podobně jako překladač C++/CX pro Windows 8).

Nejedná se o překladač pouze pro ObjC, stejně dobře jej lze použít i pro C/C++ včetně zcela nové a mnohem efektivnější STL knihovny (ta navíc využívá možností C++11).

Sdílet