Hlavní navigace

MAC OS X je taky unix (3): Dědictví NeXTStepu

Adam Šindelář

Dnešní díl Mac OS X bych chtěl začít malou omluvou; před týdnem jsem vám na dnešek slíbil nahlédnutí do Javy, Cocoa a OpenGL, ale tu posledně jmenovanou technologii tu dnes nenajdete. Když jsem procházel a doplňoval informace v dnešním článku, rozrostlo se povídání o Cocoa a Javě a na OpenGL už tedy nezbylo místo.

Cocoa

Pojďme tedy nahlédnout do objektového frameworku Cocoa vycházejícího z NeXTStepu. Jedná se o víceúrovňové API zajišťující snadný a rychlý přístup k určené podmnožině funkcí systému, stejně jako jednoduché propojení s dalšími systémovými knihovnami a frameworky. Aplikace využívající Cocoa mohou být napsány v Objective C nebo v Javě, a pokud jim nestačí kakaové funkce, mohou přistupovat i ke Carbon API a dalším součástem systému.

Díky svým NeXTStepovým kořenům je Cocoa velmi blízká například GNUstepu, ovšem vyvíjí se rychleji a je rozsáhlejší, takže portování Mac OS X aplikací na GNU systémy není rozhodně jednoduché. Všechny třídy v tomto frameworku se dají snadno identifikovat podle prefixu NS a můžeme si je rozdělit do dvou základních skupin.

Application Kit

Třídy Application Kitu, někdy zvaného také Cocoa Application Framework nebo prostě AppKit, slouží především k tvorbě frontendu programu – poskytují snadný přístup k technologiím jako QuickTime a OpenGL a snadnou integraci do zbytku systému. Všechny aplikace používající Application Kit samy od sebe reagují na stejné klávesové zkratky, automaticky pracují s kontrolou pravopisu, spolupracují v drag&drop a všemožně se chovají jako správní obyvatelé Mac OS X.

Foundation

Foundation třídy poskytují jednoduchý přístup k nízkoúrovňovým funkcím systému. Sem patří například vlákna, síťování a práce s daty. Foundation se většinou používá při psaní backendu aplikace. V Tigeru do této části API přibylo několik dalších nástrojů, například framework zvaný Core Data pro snadné zpracování dat podle programem definovaných pravidel. Stojí za zmínku, že vývojářské nástroje Applu (zejména XCode) obsahují tzv. Perfomance Tools, které jsou zaměřené především na Cocoa aplikace.

Tiger do Cocoa přispěl kromě technologie Core Data také mnoha desítkami drobných vylepšení, funkcemi pro integraci s novými technologiemi jako Spotlight nebo Core Image a také kompletně novým API pro Quick Time, PDFKit, synchronizaci a 64bitový backend. Apple si od tohoto kroku slibuje přilákání vývojářů z jiných platforem.

Cocoa je pravděpodobně nejpoužívanější, nejdůležitější a nejlépe integrovaný framework v dnešním Mac OS a jeho implementace prostupuje celým systémem. Důležitými rysy jsou vysoká míra integrace a abstrakce a jednoduché a intuitivní použití. Řekli jsme si, že kromě Objective C je možným jazykem pro Cocoa i Java; povězme si tedy něco o Javě v Mac OS X.

Java

Na rozdíl od implementací na jiných platformách si Apple vyvinul svou verzi Javy sám a začlenil ji rovnou do nízkoúrovňových součástí Mac OS X. V systému najdete Javu 2 Standard Edition ve verzi 1.4.2 včetně Java Developer Kitu integrovaného do vývojového prostředí XCode. Javové aplikace mají přístup k objektovému frameworku Cocoa, mohou exportovat akce do Apple Scriptu (a tedy i Automatoru), vypadají stejně jako nativní programy, a pokud si zrovna samy neimplementují kdeco, ani nepoznáte, že děláte s Java Virtual Machine. Java aplikace se také chovají podle accessibility pravidel, podporují macovské Services i hlasové ovládání či čtení textu.

Tohle vše bohužel platí pouze, pokud se autor aplikace nějak sám snaží o integraci s Mac OS X; pokud tedy například program používá vlastní widgety, nejsou nahrazeny nativním aqua vzhledem. Ale i možnost a jednoduchost portování se cení a při pohledu například na takový jEdit je vidět, že applovská Java skutečně má své nepopiratelné přednosti. Stejný pohled nám bohužel odhalí i druhý kámen úrazu, a tím je rychlost. Ačkoliv se Apple chlubí revoluční technologií umožňující sdílení Java knihoven a ušetření paměti, realita je bohužel až tristně pomalá a jak startovací časy, tak i výkon Java aplikací na Mac OS X uživatele nepotěší. Obecně se dá říct, že je-li program vyladěný pro Mac OS X, běhá poměrně svižně, ale standardní multiplatformní aplikace jsou většinou o dost pomalejší než na srovnatelných sestavách s jiným operačním systémem.

Apple si je, zdá se, vědom těchto nedostatků a problému se věnuje. Doslova s každým setinkovým updatem systému se implementace Javy zlepšuje a zrychluje a je pravděpodobné, že se časem podaří všechny chyby a zádrhele vychytat a Mac OS X se bude moci chlubit nejen skvělou integrací Javy, ale i její rychlostí.

Objective C

Objective C je samostatný a velmi univerzální a (dle mého názoru) krásný programovací jazyk, který byl poprvé představen v NeXTStepu společnosti NeXT. Postupně byl portován na mnoho platforem, a tak si ho dnes mohou uživatelé GNU/Linuxu užít například pomocí knihovny GNUStep. Nebudu se zde zabývat sémantikou, syntaxí ani fungováním Objective C, pouze vyjasním několik základních záležitostí, aby nedošlo ke zbytečným omylům.

Objective C je, jak už název říká, objektový jazyk. Na rozdíl od C++ má Objective C skutečné objekty a ne pouze trochu vylepšené structy, a přestože si mnoho lidí myslí opak, dokáže pracovat s knihovnami napsanými pro C a C++. Tento jazyk je mnohem podobnější SmallTalku než svému původnímu vzoru; třídy se chovají jako normální objekty, komunikace probíhá výměnou zpráv a všeobecné pojetí se kloní k oddělení definice a implementace entit v programu. Pokud vás Objective C zajímá, je Mac OS X nejlepší platformou, kde se mu můžete věnovat. Tento jazyk byl vybrán nejen díky dědictví NeXTStepu, ale také protože je jednoduché v něm psát. Pro více informací nejen o Objective-C doporučuji seriál Nastal čas na kakao na serveru Mujmac.cz.

Toliko tedy povídání o dědictví NeXTStepu, příště se podíváme na tradičnější C++ framework zvaný Carbon, krátce nahlédneme do starého Mac OS 9 a na s tím související implementaci X11 a správu procesů a vláken v Mac OS X. Na slibované OpenGL dojde později, pravděpodobně až se dostaneme k multimediálním knihovnám.

Našli jste v článku chybu?