2009-08-09 11 views
9

Ich arbeite an einer Cocoa App mit der Absicht, sie unter Windows und Linux mit GNUstep zu verwenden. Ich habe Objective-C 2.0-Funktionen bisher ausgelassen, aber ich würde wirklich gerne anfangen, zumindest Eigenschaften zu verwenden. Was Google mir zu sagen scheint (obwohl ich Probleme habe, viel zu diesem Thema zu finden) ist, dass derzeit keine Objective-C 2.0-Funktionen mit GNUstep funktionieren. Weiß jemand, ob es Pläne für GNUstep gibt, @property und @synthesize zu unterstützen?Wird GNUstep @property und @ synthesize unterstützen?

Ich frage mich auch, ob es eine gute Strategie zum "Expandieren" gibt? Ich könnte mir sicherlich ein Programm vorstellen, das Code mit @property und @synthesize in Code erweitern kann, der keine Objective-C 2.0-Funktionen verwendet, aber ich mache mir Sorgen, dass es so wenig Nachfrage gibt, also habe ich wahrscheinlich gewonnen. Ich kann einen finden.

Glauben Sie, dass GNUstep gute Chancen hat, @property und @synthesize im nächsten Jahr zu unterstützen?

+0

Zum Thema „Tun Sie es nicht!“: Es ist eine interessante Situation - ich brauche nicht viel außerhalb der Stiftung, und Der Großteil des Codes ist Tonnen meiner eigenen Klassen, zusammen mit ziemlich viel XML-Lesen und Schreiben. Daher dachte ich, es wäre keine große Sache, mit GNUstep kompatibel zu bleiben. Um meine Benutzer zu veranlassen, eine Runtime zu installieren, habe ich gehofft, das mit einem gut geschriebenen Installer zu bekämpfen, der alles für sie erledigt, wenn sie wollen. (Ich bin jedoch daran interessiert, Einwände gegen diese beiden Punkte zu hören.) – andyvn22

+1

Wenn jemand versucht, dies zu tun: Ich konnte Obj-C 2.0 nie mit GNUstep arbeiten, aber es scheint großartig mit Cocotron zu funktionieren (obwohl du Zugriff auf einen Mac für die Kompilierung benötigst. – andyvn22

Antwort

12

Dies ist ein paar Monate zu spät, aber die Antwort ist ja; GNUstep unterstützt Objective-C 2.0 Features (sowie Blöcke). Derzeit ist alles mehr oder weniger implementiert, aber es muss getestet und debuggt werden. Diese Funktionen erfordern Clang statt GCC, und derzeit müssen Sie die Stammversion verwenden.

Siehe David Chisnall Erklärung in diesem Thread für weitere Informationen: http://groups.google.com/group/gnu.gnustep.discuss/browse_thread/thread/b0a5fa4e3be71bb1#

+0

Dieser Link ist jetzt tot, aber hier ist eine andere Quelle mit der gleichen Info: http://wiki.gnustep.org/index.php/ObjC2_FAQ – andyvn22

2

Ich bin nicht sicher, ob die GNUstep-Implementierung von Objective-C Apples Führung in der Accessor/Mutator-Synthese folgen wird, aber wenn Sie versuchen, eine App für Mac, Windows und Linux zu machen, ist GNUstep wahrscheinlich nicht die beste Wahl. Es sollte ziemlich einfach sein, den Code von Cocoa nach GNUstep zu portieren (und Sie könnten vielleicht sogar ein Makro schreiben, um Ihre Eigenschaftsdeklarationen zu konvertieren), aber sehr wenige Leute benutzen GNUstep unter Linux und noch weniger unter Windows. Ich mag die Idee einer plattformübergreifenden OpenStep-Implementierung, aber im Moment ist sie nicht wirklich praktisch, adoptionsbezogen.

3

Nein, ich weiß nicht, ob es Pläne gibt, Immobilien zu unterstützen, aber wenn GNUstep plant, lebensfähig zu bleiben (wenn auch nur in dem begrenzten Ausmaß, in dem es jetzt ist), sollte dies eine Priorität sein. Wenn sich GNUstep nicht dazu entschließt, Objective-C 2.0-Funktionen zu übernehmen, wird es aufgrund der Kluft zwischen ihm und der Implementierung von Apple zunehmend schwieriger, guten plattformübergreifenden Code zu schreiben. (Es ist für die meisten Entwickler schon grenzwertig.)

Obwohl ich normalerweise Antworten hasse, die im Wesentlichen sagen "Tu das nicht, es ist eine schlechte Idee", muss ich @ Jonathan zu diesem Thema zustimmen, besonders vom Standpunkt aus von Praktikabilität. Obwohl der Code plattformübergreifend kompiliert werden kann, wird die Wahrscheinlichkeit, dass jemand Ihre App verwendet, erheblich verringert, wenn Benutzer eine Laufzeitumgebung nur für die Verwendung Ihrer App installieren müssen.

This SO answer fasst es gut zusammen. Ich schlage vor, es zu lesen und Ihre eigene Schlussfolgerung zu ziehen.

Es ist auch eine Überlegung wert, dass das "objective-c" Tag hat über 3280 Fragen, während "gnustep" hat 9. Ich sage nicht, dass Frage Volumen ist ein Maß für Qualität, aber es ist eine Parallele mit Aktivität und Interesse, und möglicherweise eine geringe Anzahl von Leuten mit GNUstep-Kenntnissen auf dieser Seite, so dass es weniger wahrscheinlich ist, dass Sie gute Hilfe bekommen, wenn Sie sich entscheiden, den Weg zu gehen, den Sie in Betracht ziehen Features im Namen der Kompatibilität ist ein "kleinsten gemeinsamen Nenner" Verhalten, das auf lange Sicht Ihren Code weniger elegant und weniger "funktionsreich" machen wird. Es ist ähnlich wie nur mit APIs unter 10.2 oder 10.3 - jede aktuelle OS X oder ein iPhone-Entwickler wird Ihnen sagen, dass sie lieber etwas unternehmen würden Der Vorteil der coolen neuen Funktionen und nicht durch die Einschränkungen der Vergangenheit behindert werden. Heutzutage benötigen neue Apps fast immer 10.5 - die Unterstützung für ältere Versionen ist charakteristischer für etablierte Software, die abwärtskompatibel ist, und viele Apps löschen sogar alte Betriebssysteme im Laufe der Zeit.

Wenn Sie in Erwägung ziehen, eine Anwendung zu verkaufen, wird die Verwendung von nur GNUstep-kompatiblen APIs Ihren Markt stark einschränken und sogar Ihre App auf grundlegende Weise einschränken, einschließlich des Niveaus von Politur und Funktionalität, die Sie erreichen können. Selbst wenn die App nicht kommerziell ist, ist es im Allgemeinen sinnvoll, die Sprache und die Frameworks zu verwenden, die für eine bestimmte Plattform am besten geeignet sind.Wenn Sie wirklich nach einer plattformübergreifenden Unterstützung suchen, wird Sie Java wahrscheinlich mit weniger Sodbrennen näher bringen. (Java ist definitiv nicht meine Lieblingssprache, und es ist nicht Cocoa, aber es tut viele Dinge gut.) Obwohl es immer noch das gleiche Problem der Sprachversion über Clients und Plattformen gibt, ist es zumindest entworfen plattformübergreifend zu sein Alle Verbraucherplattformen haben eine solide Java-Unterstützung.

+0

Aaaund der obligatorische zufällige downvoter schlägt wieder ... –

Verwandte Themen