INTRO Questo breve articolo introduce alla programmazione in ambiente Apple, in particolar modo in ambiente OSX. OSX è il nuovo sistema operativo installato su ogni Mac ormai da 4 anni. La sua genesi è lunga e ne darò qualche spunto qua e là. Diciamo solo per chi non è familiare con OSX, che è un successore di Unix, stile BSD, e NON è Linux: qualcuno storcerà il naso.. ma non ha mai usato Mac.. A parte gli scherzi, OSX porta quindi con sé tutto il bagaglio di sistemi di sviluppo cari ai guru di Unix. E’ quindi possibile avere shell, gcc, gdb etc. Ma Mac senza la sua superiore grafica non è Mac: vedremo quindi cosa è possibile creare in ambiente grafico sotto OSX utilizzando le tecnologie di punta della casa di Cupertino. Talora ripercorro parti della storia di Mac e del suo sviluppo, forse troppo personale, ma la ho vissuta. Mi hanno chiesto di scrivere un articolo: "Come si sviluppa su Mac?" e descrivo anche come si è sviluppata la programmazione sotto la mela negli ultimi 20 anni. Prima di passare ai linguaggi, un brevissimo glossarietto dei termini appena citati e di quelli che verranno utilizzati più avanti. shell il consueto ambiente in modalità carattere di unix in cui si digitano (orrore!! non si fa tutto in modalità grafica??) i comandi e che permette di lanciare tutti i classici programmi di unix. compilatore un programma che legge un file di testo (detto sorgente) e produce un file binario (anche se non direttamente eseguibile) gnu una iniziativa in ambiente open source di free software. gcc Acronimo che sta per GNU C Compiler. È un compilatore open source, free, che compila su tutto e per tutto, ossia esiste per ogni s.o. e produce binario per ogni tipo di microprocessore e ambiente. Anche se si chiama "C" compiler, compila anche ben altro: C++, Objectve C, asm.. gdb GNU debugger: un potentissimo debugger a livello di sistema in ambiente Unix. Aqua La tecnologia di disegno 2D di Apple per creare le interfacce utente e le finestre. OpenGl Tecnologia open source per disegno e rendering 3D Quarz La tecnologia 2D di Apple per i documenti: ingloba PostScript e PDF, and many more..
LINGUAGGI Passiamo brevemente in rassegna i linguaggi utilizzabili. In ambiente OSX esistono un po’ tutti i linguaggi disponibili, meno il Visual basic (evviva!), ma ovviamente la parte del leone la fanno tutti quei linguaggi derivati da Unix. Il C è il re (quasi) incontrastato dei linguaggi sotto Unix, e ovviamente qui è presente ed utilizzabile. Il suo successore, (non me ne vogliano i "puristi" dei linguaggi..) il C++ è utilizzato, utilizzabile e comodo, ma va scomparendo. Il Pascal esiste, ma è poco utilizzato: richiede fra l’altro tool a parte un po’ costosi. É un peccato: lo ritengo un ottimo linguaggio. Su Mac ha poi una storia: è stato per anni il linguaggio ufficiale di sviluppo del s.o. Orde di programmatori Mac hanno scritto i primi "VAR event: OSEvent;" prima di arrivare al brutto: "OSEvent event;". L’Assembler puo’essere impiegato sotto OSX, non è pero’ molto in voga: la sua sintassi e la sua logica richiedono skill tecnici elevati. Sarà poco comodo, ma ci sono affezionato: un vero programmatore o sa l’assembler o non sa programmare.. (nda). A parte gli scherzi, l’asm sotto OSX gode di un buon supporto sia come strumenti di scrittura che di debugging. Esistono vari esempi di codice sul sito del supporto Apple, rivolti in particolar modo a chi vuole ottimizzare oltre ogni limite funzionalità p.e.s di calcolo. Java: è presente, funziona, è allineato e Apple punta non poco su questo linguaggio/sistema/piattaforma. I tool sono buoni, il debugger funziona, il supporto sistemico è adeguato. Apple ha anche deciso di integrarlo pesantemente con QuickTime per il Multimedia ma soprattutto con Cocoa (vedi sotto) per le funzioni di sistema, Applicazioni ibride/JNI. A mio parere ha alcune pecche, non sotto OSX, ma in generale, fra cui spiccano:
Ne apprezzo invece la estrema pulizia formale della sintassi. Comunque esiste, funziona, si puo’ sviluppare decentemente. Fortran: esistono ottimi tool, professionali, che permettono di utilizzare routine di calcolo stra-testate da 50 anni di fortran, con la performance del nuovo G5. Non li ho mai usati, anche perché onestamente il Fortran non mi piace. Objective C: Un linguaggio nato dopo il C++, che pretende di aver veramente incarnato la programmazione ad oggetti portando la OOP dentro il C, dopo il tentativo (mal riuscito, secondo i guru di Obj C..) del C++, che a loro dire è un brutto ibrido. La sintassi di base è la stessa del C, ma sono completamente diversi i seguenti aspetti:
Mamma mamma; (dove ovviamente "lapasta " e "vongole" sono parametri)
..io tifo per objC. (dopo l’assembler.. ovvio).
COCOA: it comes from Next Step.. Cosa è veramente? Che definizione dare? Dal mio punto di vista è alla fine una tecnologia. Ma vediamo che dice Apple: "Cocoa is a rich set of object-oriented frameworks that allow for the most rapid development of applications on Mac OS X." In definitiva Cocoa è un insieme di tecnologie, di librerie, di header, basati su un approccio OOP per scrivere applicazioni con interfaccia grafica avanzata. Cocoa implementa il paradigma Interface/Implementation: scrivo l’interfaccia con elementi grafici, menu, bottoni e così via e a parte scrivo il codice di elaborazione. Non mischio mai codice con interfaccia. La storia di Cocoa è un po’ lunga, deriva dall’ambiente di sviluppo OpenStep che Next creò qualche anno addietro. Quando Apple acquistò la Next, ebbe anche OpenStep, e direi anzi che acquistò proprio per questo Next: Next aveva un sistema di sviluppo basato su un s.o. robusto, a base Unix con un sistema di sviluppo veloce, ad oggetti, potente, ma soprattutto testato. Questo sistema di sviluppo era nato prima sul mitico cube di Next, a base motorola 68000, poi portato sotto Intel, ma con un approccio diverso: sotto Intel si installava uno strato (appunto un framework) sopra windows ( rigorosamente NT.. per avere un sottosistema affidabile, e per avere posix). Lo ho usato quasi 10 anni fa in Apple ad un corso "per iniziati". Sotto Mac è stato poi portato riscrivendo completamente le parte sottostanti Unix per adattarle al PPC: era nato Rhapsody. Ho usato anche quello in Apple, ad un altro corso, l’effetto fu strano: l’hw erano dei Mac (pompati a manetta.. per avere prestazioni accettabili..) con su uno strano sistema operativo a finestre, a cui non eravamo abituati, con sotto quelle bruttissime cose, nere, le console.. Caspita, il prompt a noi programmatori Mac che "vivevamo" solo di interfaccia grafica da 10 anni? Ma ricordo che l’impressione fu di essere dieci anni avanti windows, che nel 96 rilasciava win95! (stendo un velo pietoso su cosa fosse linux nel 96..). Rhapsody era un bel derivato di Unix, stabile, carino, e sì su esso si sviluppava ad oggetti, appunto in OpenStep, il nonno di Cocoa. Noi programmers della mela avevamo visto negli anni precedenti tecnologie fra le più strane, poteva essere l’ennesimo flop, ma la tecnologia era buona.. Fortunatamente fu così. Grazie, Steve, ora abbiamo OSX. Tornando ad oggi, Cocoa rappresenta quindi la tecnologia de-facto per sviluppare applicazioni col look and feel di Apple. I suoi punti di forza:
TOOL Passiamo ora ai tool attualmente disponibili. Cito l’ottimo Metrowerks Codewarrior X, figlio del mitico Codewarrior che ha permesso a tutti noi di vivere in un ambiente decente, ben debuggabile, veloce, a differenza del vecchio kit di sviluppo ufficiale di Apple, MPW (finalmente è morto..). MW CodeWarrior è un ottimo IDE, compila sia per OS9 che per OSX e fa anche cross-compiling. La versione completa fa anche cross-compiling fra OSX e Windows. Perché non usarlo ancora? Semplicemente perché costa circa 800$ e li varrebbe, ma le alternative sono valide. (vedi sotto.) Ora è stato acquistato da Motorola, e la mia impressione è che finirà per essere un tool per sistemi embedded, non più per Mac. La vera parte del leone la fa XCode, figlio di Project Builder, nipotino di OpenStep. Per spiegarne l’adozione, cito quanto mi ha detto uno sviluppatore italiano che vive a Londra, nel corso di "Carbon Kitchen 2001" nella sede di Apple. Alla mia domanda: "Perché non usi codewarrior per osx?" la risposta fu: "Project Builder è gratis e funziona". Non aveva torto. Il primo PB era un po' lento, anche perché era stato un porting da OpenStep. Via via si è raffinato fino ad ora, e si chiama Xcode. Vediamo le caratteristiche salienti:
XCODE: impressioni d’uso Lo uso da ormai 2 anni. Le prime versioni erano un po’ "ruvide", l’ambiente non era perfettamente omogeneo. Talora il debugger tracciava su linee di sorgente errate. La versione attuale mi pare proprio professionale. Notate che per un uso serio dovete avere (obbligatorio al 90%):
Xcode: confronti Confrontiamo Xcode con il "nemico": MSVC 6.0 sotto Windows (non ho paragonabile feedback su dot Net, anche se lo ho usicchiato). Molte cose sono simili: syntax coloring, scorciatoie utili, ottimo debugger, ottima e produttiva integrazione fra interfaccia e codice. Ho usato per anni MSVC 6.0 e lo ritengo molto bello, utile, produttivo. Direi che Xcode non è da meno: i tool sono ancor più raffinati. Ritengo più veloce la integrazione fra codice e interfaccia in Xcode, meno confusiva di quella di MSVC, dove ho ancora da gestire #define. Forse MSVC chiede meno Hardware per funzionare. Li ritengo due ottimi tool di programmazione, soprattutto efficienti e produttivi. Quando passo a php e devo debuggare con "echo" mi vien male..
|