venerdì 26 novembre 2010

Sfatiamo un'assunzione di Carmack su Android

Leggendo la recensione di Eurogamer UK (ma c'è anche la mia su Ars Ludica), che ha (giustamente) fatto a pezzi Rage HD ma non ha avuto le balle di dare una strigliatina anche ad AppStore (il gioco al lancio crashava all'avvio, altro che mettere fine alle App amatoriali o di scarsa qualità), mi è giunta voce che Carmack abbia giustificato l'assenza di una versione Android dell'applicazione per l'assenza di supporto C/C++, piuttosto che con ragioni puramente marketing.

In realtà, il supporto per C/C++ su Android c'è ed è piuttosto completo, anche in virtù della possibilità di poter programmare utilizzando un compilatore veramente molto ottimizzato, rispetto al figlio bastardo di g++ che fornisce Apple. Per architettura ed ottimizzazioni iOS o una piattaforma Android sono praticamente identici, essendo entrambi basati su ARM e OpenGL/ES. L'unica differenza è che Android non supporta gli shader OpenGL/ES 2.0 ma poiché la piattaforma iOS è frammentata su almeno 5 dispositivi in produzione più almeno altrettanti legacy o in dismissione, quasi nessuno li usa, anche perché vorrebbe dire restringere il parco macchine al solo iPhone 4 e 3GS, ed avere comunque molti limiti con il supporto iPad, grazie al suo OS ballerino. Ovvero a poco meno di 20 milioni di dispositivi, su un parco macchine di oltre 100 (venduti, quelli attivi sul web sono poco meno della metà, che diventa meno di un terzo per l'iPad).

Una piccola differenza tra le due piattaforme esiste: i microprocessori Apple di nuova generazione sono un derivato di una famiglia ARM di microcontrollori basati su ARM7 (i vecchi, sono basati su ARM5, praticamente un GBA overclockato), mentre Android ha come target i più moderni microprocessori ARM11, che sono più efficienti in termini di consumi e clock, permettendo prestazioni sensibilmente migliori a velocità meno elevate. Anche per quello un Samsung Galaxy riesce a fare videostreaming di filmati HD mentre il vistro iPhone muore dietro un MP4 SD riprodotto in locale ed ha moltissimi limiti sui formati supportati, nonostante i clock siano simili e/o sbilanciati in favore dell'hardware Apple.

La differenza tra microcontrollore e microprocessore è tutt'altro che trascurabile ma in soldoni può essere riassunta nella possibilità per un microprocessore di riuscire a fare operazioni più complesse in meno tempo e più efficientemente. Ovviamente produrre un microcontrollore costa meno.

Tornando su OpenGL/ES, inoltre, bisogna anche sfatare il mito che scrivere un'applicazione nativa in C++ sia sempre la soluzione migliore. Questa tecnologia è nata per funzionare con le virtual machine hardware dei dispositivi mobili e, spesso, funziona con più efficienza se appaiata ad un linguaggio managed, come si dice in gergo. Ancora una volta è il programmatore più che il linguaggio a fare la differenza, visto che i modi di scrivere e pensare il codice sono molto differenti.

Non bisogna dimenticare che un'applicazione C++ su iOS è gestita comunque da una virtual machine managed software, con tutti i problemi che ne conseguono (stuttering, lag ed instabilità sono problemi tristemente noti e Rage HD ne è un'esempio), problemi che non ci sono invece ad utilizzare il Native Development Kit di Android dove si programma "direttamente sul ferro", come amano dire i programmatori embedded.

Nessun commento:

Posta un commento