2009-08-09 9 views
9

Sto lavorando ad un'app Cocoa con l'intenzione di usarla su Windows e Linux usando GNUstep. Finora ho evitato le funzionalità di Objective-C 2.0, ma mi piacerebbe davvero iniziare a utilizzare almeno le proprietà. Quello che Google sembra dirmi (anche se ho difficoltà a trovare molto sull'argomento) è che al momento, nessuna funzionalità di Objective-C 2.0 funziona con GNUstep. Qualcuno sa se ci sono piani per GNUstep per supportare @property e @synthesize?GNUstep supporta @property e @synthesize?

Mi chiedo anche se esista una buona strategia per "espanderli"? Potrei sicuramente immaginare un programma in grado di espandere il codice usando @property e @synthesize in codice che non usa alcuna caratteristica di Objective-C 2.0, ma sono preoccupato che non ci sia molta richiesta per una cosa del genere, quindi probabilmente ho vinto " essere in grado di trovarne uno

Pensi che ci siano buone probabilità che GNUstep supporti @property e @synthesize nel prossimo anno o giù di lì?

+0

In tema di "Non farlo!": E 'una situazione interessante - Non ho bisogno di molto al di fuori della Fondazione, e la maggior parte del codice è composta da tonnellate di mie classi, oltre a un bel po 'di lettura e scrittura XML. Quindi, ho pensato che non sarebbe stato un grosso problema mantenere compatibile con GNUstep. Per quanto riguarda il fatto che i miei utenti installino un runtime, speravo di combatterlo con un programma di installazione ben scritto che gestisce tutto per loro, se lo desiderano. (Mi interessa sentire eventuali obiezioni a questi due punti, però.) – andyvn22

+1

Se qualcuno sta provando a fare questo: non sono mai riuscito a far funzionare Obj-C 2.0 con GNUstep, ma sembra funzionare alla grande con Cocotron (anche se avrai bisogno di accedere a un Mac per la compilazione). – andyvn22

risposta

12

Questo è un ritardo di alcuni mesi, ma la risposta è sì; GNUstep supporterà le funzioni di Objective-C 2.0 (oltre ai blocchi). Attualmente, tutto è più o meno implementato, ma necessita di test e debug. Queste funzionalità richiedono Clang piuttosto che gcc e attualmente è necessario utilizzare la versione trunk.

spiegazione di See David Chisnall in questa discussione per maggiori dettagli: http://groups.google.com/group/gnu.gnustep.discuss/browse_thread/thread/b0a5fa4e3be71bb1#

+0

Questo link è morto, ma qui c'è una fonte diversa con le stesse informazioni: http://wiki.gnustep.org/index.php/ObjC2_FAQ – andyvn22

2

Non sono sicuro che l'implementazione GNUstep di Objective-C seguirà il ruolo di Apple nella sintesi di accessor/mutator, ma se si sta tentando di creare un'app per Mac, Windows e Linux, GNUstep probabilmente non è il migliore scelta. Dovrebbe essere abbastanza facile portare il codice da Cocoa a GNUstep (e potresti anche scrivere una macro per convertire le tue dichiarazioni di proprietà), ma pochissime persone usano GNUstep su Linux e ancora meno su Windows. Adoro l'idea di un'implementazione OpenStep multipiattaforma, ma al momento non è molto pratica, in termini di adozione.

3

No, non so se ci sono piani per supportare le proprietà, ma se GNUstep intende rimanere valido (anche se solo nel grado limitato a cui è ora) questa dovrebbe essere una priorità. A meno che GNUstep non decida di adottare le funzionalità di Objective-C 2.0, il divario tra esso e l'implementazione di Apple renderà sempre più difficile scrivere un buon codice cross-platform. (È già inutile per la maggior parte degli sviluppatori.)

Anche se di solito odio le risposte che essenzialmente dicono "non farlo, è una cattiva idea", devo essere d'accordo con @ Jonathan su questo, specialmente dal punto di vista di praticità. Sebbene il codice possa essere compilato su più piattaforme, se gli utenti devono installare un runtime solo per utilizzare la tua app, la probabilità che qualcuno utilizzi la tua app è notevolmente ridotta.

This SO answer riassume bene. Suggerisco di leggerlo e di trarre le tue conclusioni.

E 'anche la pena di considerare che il "tag objective-c" ha oltre 3280 domande, mentre "gnustep" ha 9. Non sto dicendo che il volume di domanda è una metrica di qualità, ma è un parallelo con l'attività e l'interesse, e molto probabilmente un basso numero di persone con esperienza in GNUstep su questo sito, quindi è meno probabile avere un buon aiuto se scegli di seguire il percorso che stai considerando

A proposito, la mentalità di evitare nuovi le funzionalità in nome della compatibilità sono un "minimo comune denominatore" che, a lungo termine, renderà il tuo codice meno elegante e meno "featureful". È simile alla sola codifica con le API disponibili su 10.2 o 10.3 - qualsiasi OS X recente o lo sviluppatore iPhone ti dirà che preferirebbero farlo Il vantaggio delle nuove fantastiche funzioni, e non essere ostacolato dalle passate limitazioni. Oggigiorno, le nuove app richiedono quasi sempre 10.5 - il supporto per le versioni precedenti è più caratteristico di un software consolidato che è retrocompatibile, e molte app fanno cadere nel tempo anche i vecchi SO.

Se stai pensando di vendere un'applicazione, utilizzare solo API compatibili con GNUstep limiterà seriamente il tuo mercato e persino limiterà la tua app in modi fondamentali, incluso il livello di lucidità e funzionalità che puoi sperare di ottenere. Anche se l'app non sarà commerciale, generalmente è opportuno utilizzare la lingua e le strutture che si adattano meglio a una data piattaforma.Se stai davvero cercando il supporto multipiattaforma, è probabile che Java ti avvicini con meno bruciori di stomaco. (Java non è sicuramente la mia lingua preferita, e non è Cocoa, ma fa molte cose bene.) Anche se c'è ancora lo stesso problema della versione linguistica su client e piattaforme, almeno è progettato per essere multipiattaforma, e tutte le piattaforme consumer hanno un solido supporto Java.

+0

Aaa e il downvoter casuale obbligatorio colpisce ancora ... –

Problemi correlati