La differenza fra le due API di Mac
OS X
Carbon vs Cocoa
di Luca Torella
Livello: Base
Introduzione
Da quando Mac OS X è stato annunciato, notizie di nuove versioni
di programmi che girano nativamente sotto il nuovo sistema operativo,
sono ormai giornaliere. Alcuni annunci annunciano che la nuova versione
dell'applicazione è basata su Cocoa, altri che l'applicazione
è basata Carbon.
La Apple spesso spiega agli sviluppatori i vantaggi comportati dall'utilizzo
di Cocoa e come risultato molti utenti Mac hanno cominciato a pensare
che le applicazioni Cocoa avevano qualcosa di più rispetto alle
applicazioni Carbon.
Questo articolo si propone di spiegare cosa sono Cocoa e Carbon.
Un po' di storia
Quando Mac OS fu introdotto nel 1984 era un moderno ambiente di sviluppo.
Intanto le altre piattaforme, che esistevano già da parecchi anni
prima dell'uscita del Mac, stavano sviluppando altre tecnologie
come la memoria protetta e il multi-tasking. La Apple non sviluppò
queste funzioni nel Mac OS semplicemente perché il processore che
utilizzava al tempo non era sufficientemente veloce per queste funzioni.
Successivamente fu difficile introdurre queste funzioni poiché
interessavano il cuore del sistema operativo; a dir la verità più
volte la Apple ci provò, ma mai venendo a capo.
Infine la Apple decise di comprare un moderno sistema operativo. Considerarono
di prendere BeOS della Be, Inc., ma poi optarono per NEXTSTEP della NeXT,
Inc., la compagnia che Steve Jobs fondò quando lasciò la
Apple. Con tale acquisto, Steve Jobs tornò a lavorare per la casa
della Mela. NEXTSTEP procurò alla Apple il moderno sistema operativo
di cui aveva bisogno, ma aveva un'interfaccia utente completamente
diversa da quella del tradizionale Mac OS.
La Apple cominciò a modificare NEXTSTEP in modo che si avvicinasse
di più al Mac OS. Il risultato fu un progetto che la Apple nominò
Rhapsody. Rhapsody era un nuovo e moderno sistema operativo con l'interfaccia
utente molto simile a quella di Mac OS. Il passo successivo era quello
di portare tutte le applicazioni esistenti sotto il classico Mac OS, come
Adobe Photoshop o Microsoft Office, sotto Rhapsody in modo che ogni utente
avrebbe avuto un buon motivo per utilizzarlo.
Sfortunatamente sistemi operativi differenti sono come diverse lingue
parlate: possono eseguire le medesime funzioni ma in modi completamente
differenti. Far diventere una applicazione Mac OS un'applicazione
in grado di girare sotto Rhapsody voleva dire cambiare ogni riga di codice
che comunicava con Mac OS in un nuovo linguaggio in grado di comunicare
con Rhapsody. Infatti mentre le applicazioni per Mac OS erano scritte
in Pascal, C o C++, l'unico linguaggio che poteva comunicare con
Rhapsody era l'Objective-C (un linguaggio completamente nuovo sviluppato
da NeXT). Gli sviluppatori Mac che avrebbero voluto portare le proprie
applicazioni sul nuovo sistema operativo sarebbero stati costretti a imparare
un nuovo linguaggio di programmazione e a riscrivere ex novo le loro applicazioni.
La Apple aveva bisogno di un modo per rendere più semplici il porting
verso Rhapsody.
Cosa sono le API
Le API permettono ad una qualunque applicazione di comunicare con il sistema
operativo. Queste API permettono ad un programma di dire al sistema operativo
di fare qualcosa di semplice come riprodurre un suono o qualcosa di più
complesso come il drag & drop. Per esempio per riprodurre un beep
su Mac OS, un'applicazione chiama SysBeep(). Con Rhapsody la stessa
funzione si schiama NSBeep.
Cos'è esattamente Cocoa?
Cocoa è il nome che la Apple usa per rappresentare le API che già
esistevano in Rhapsody. Le applicazioni originariamente scritte per NEXTSTEP
sono scritte in Objective-C e usano le API Cocoa. Alcune delle applicazioni
che sono in bundle con Mac OS X (come Mail e Chess) originariamente erano
scritte per NEXTSTEP e quindi utilizzano le API Cocoa. Ci sono anche applicazioni
di terze parti originariamente scritte per NEXTSTEP che sono state aggiornate
per girare sotto Mac OS X.
Cos'è Carbon?
Quando Rhapsody fu rinominato Mac OS X, venne introdotta la soluzione
che permetteva di portare le applicazioni Mac esistenti sotto Mac OS X.
Venne aggiunto un altro set di API che utilizza (in maggioranza) gli stessi
nomi e gli stessi parametri che venivano utilizzati dagli sviluppatori
per creare applicazioni per Mac OS. Così applicazioni esistenti
sotto Mac OS potevano girare nativamente sotto Mac OS X modificando solo
una piccola porzione di codice.
Comunque uno sviluppatore doveva riscrivere in parte il suo programma,
ma sempre meglio di riscriverlo da capo.
Questo set di API venne chiamato Carbon.
Cocoa è migliore di Carbon?
La risposta è assolutamente no. Entrambe le API richiamano le stesse
procedure di Mac OS X. Diversamente da quanto qualcuno potrebbe pensare,
le API Carbon non chiamano le API Cocoa.
Più precisamente se decidi di scrivere una nuova applicazione per
Mac OS X in un linguaggio come Java o C e ti preoccupi che la tua applicazione
funzioni solo sotto Mac OS X ti conviene potresti imparare le API Cocoa
perché sono ad un livello più alto rispetto a quelle Carbon.
La maggior parte degli sviluppatori che vuole, invece, utilizzare la gran
parte del codice scritto finora, lungo gli anni, e le proprie conoscenze
di C e C++, userà Carbon piuttosto che imparare un nuovo linguaggio
di programmazione e riscrivere i propri programmi ex novo secondo le API
Cocoa.
In generale le applicazioni che usano Cocoa, potenzialmente, non possono
fare più cose rispetto a quelle scritte rispettando le API Carbon.
Comunque c'è un piccolo set di funzioni che la Apple non ha ancora
reso disponibile a Carbon semplicemente perché non sono necessarie
a rendere l'applicazione nativa. Vice versa c'è un piccolo set
di funzioni accessibili dalle applicazioni Carbon, ma non alle applicazioni
Cocoa. La Apple sta lavorando per ridurre queste differenze a zero.

Le applicazioni Cocoa sono "più
native" di quelle Carbon?
No. Sia Cocoa sia Carbon chiamano le stesse parti del sistema operativo.
Le applicazioni Cocoa non sono né più né meno native
rispetto a quelle Carbon. Le API Carbon sono più nuove a Mac OS
X e quindi è possibile che ci sia qualche problema in più
rispetto alle API Cocoa che da sempre sono presenti nel sistema operativo.
Comunque questo è un problema a breve termine dato che la Apple
presto risolverà il problema.
Conclusioni
Come detto in precedenza, gli sviluppatori di applicazioni già
esistenti nel Mac OS classico difficilmente abbandoneranno le loro conoscenze
di C/C++ per imparare l'Objective-C e difficilmente riscriveranno
le loro applicazioni da capo. Inoltre le applicazioni scritte con le API
Carbon sono più portabili verso altre piattaforme dove C e C++
sono i linguaggi di sviluppo principali. Le applicazioni Cocoa non sono
portabili verso altre piattaforme e di solito gli sviluppatori vogliono
vendere i propri prodotti su più piattaforme.
Pertanto la Apple continuerà a sviluppare sia Carbon sia Cocoa,
poiché sa che la maggior parte delle applcazioni che hanno fatto
la storia del Mac (Photoshop, Office…) sono scritte sfruttando le
API Carbon.Se la Apple vuole che queste applicazioni continuino a sfruttare
le tecnologie messe a disposizione da Mac OS X, deve continuare a rendere
disponibili queste tecnologie anche alle API Carbon.
Luca Torella
17 giugno 2002
Chi è l'autore:
Luca
Torella
è il responsabile dell'area Mac
del sito www.programmazione.it,
portale dedicato agli sviluppatori.
Home Page: http://www.torellasoft.com/
E-mail: postmaster@torellasoft.com
|