Welche Sprache sollte ich zum Erstellen einer plattformübergreifenden Bibliothek verwenden? [geschlossen]

10

Ich möchte eine SyncML-Parsing-Bibliothek ( keine Benutzeroberfläche ) erstellen, die in der Lage sein sollte, Nachrichten basierend auf Informationen zu erstellen, die von der Host-Anwendung bereitgestellt werden und von den Methoden der Bibliothek eingegeben werden. Außerdem sollte die Bibliothek in der Lage sein, Rückrufe zu Methoden in der Hostanwendung durchzuführen.

Ich möchte dies kompilieren und auf so vielen Plattformen wie möglich verfügbar machen können: Windows, Windows Phone 7, OSX, iOS, Linux, Android, BlackBerry. Grundsätzlich so viele Plattformen wie möglich.

Die Priorität besteht darin, dies auf Mobilgeräten verfügbar zu haben.

Fragen:

  1. Welches Setup soll ich verwenden? (Programmiersprachen, Compiler, IDE usw.)
  2. Wie würde ich diese Bibliothek für diese verschiedenen Plattformen kompilieren und wie würde ich eine Verbindung dazu herstellen?
  3. Irgendwelche anderen Infos? zB Artikel zum Thema plattformübergreifende Entwicklung?

Ich habe noch nie so ein plattformübergreifendes Projekt durchgeführt, daher wären alle verfügbaren Informationen, die mich in die richtige Richtung bringen, willkommen.

Ich selbst habe einen Hintergrund in C # /. NET und Objective-C.

Andrei
quelle

Antworten:

8

Die Verwendung der Java-Plattform / JVM wäre die naheliegende Wahl - sie bietet die breiteste plattformübergreifende Abdeckung aller Sprachen, und wenn Sie über einen C # /. Net-Hintergrund verfügen, sind die Konzepte sehr vertraut.

Beachten Sie, dass Sie keine Java-Sprache verwenden müssen , um die Vorteile der Java-Plattform zu nutzen. Wenn Sie heutzutage ein Projekt von Grund auf neu starten, würde ich wahrscheinlich eine der folgenden Möglichkeiten empfehlen:

  • Scala - wenn Sie eine leistungsstarke, statisch typisierte Sprache mit mehreren Paradigmen und hervorragender Leistung für die JVM wünschen. Könnte zu Ihnen passen, wenn Sie einen C # -Hintergrund haben.
  • Clojure - wenn Sie funktionale Programmierung wie dynamische Sprachen bevorzugen und gerne auf dem neuesten Stand leben. Clojure verfügt über wirklich hervorragende Parallelitätsfunktionen, die möglicherweise ansprechend sind. Das verknüpfte Video ist einen Blick wert, um tiefgreifende Einblicke zu erhalten.
  • Groovy - wenn Sie eine einfache, aber effektive dynamische objektorientierte Skriptsprache wünschen, die C # / Java-Entwicklern sehr vertraut ist.

Alle diese Sprachen bieten alle Vorteile der JVM (fantastischer JIT-Compiler, sehr effektive Garbage Collection, eine große Anzahl von Bibliotheken), sind jedoch viel produktivere Sprachen.

Übrigens gibt es in Java bereits eine Open-Source-SyncML-Bibliothek namens Funambol . Ich bin mir nicht sicher, inwieweit dies direkt für Sie nützlich ist, aber es ist ein Beispiel dafür, dass es normalerweise eine Open-Source-Java-Bibliothek für so ziemlich alles gibt .......

Gedanken zu anderen Optionen:

  • C / C ++ kann sicherlich plattformübergreifend funktionieren, erfordert jedoch eine Neukompilierung (und anschließende Tests) in nativen Code für jede Plattform. Bei JVM-Sprachen ist dies nicht erforderlich, da der kompilierte Bytecode selbst portabel ist. Ich denke, es ist ein Kopfschmerz, den Sie vermeiden sollten, es sei denn, Sie benötigen unbedingt C / C ++ für die Leistung oder den Zugriff auf Rohhardwarefunktionen.
  • C # in Form von Mono könnte funktionieren (Zeuge des Erfolgs von Unity als plattformübergreifende Bibliothek zum Beispiel), aber es ist nirgends das JVM-Ökosystem in Bezug auf Reife, Bibliotheksverfügbarkeit oder sogar Rohleistung. Außerdem wird es niemals 100% kompatibel mit Microsoft .Net sein, da .Net Windows-spezifische Funktionen hat, die ein Albtraum für die Portabilität sind. Dennoch ist es eine Überlegung wert, wenn Sie entschlossen sind, bei C # zu bleiben.
  • Javascript kann eine externe Option sein, wenn Sie die Bibliothek sowohl auf Client- als auch auf Serverseite verwenden möchten.
mikera
quelle
1
Danke für die tolle Antwort. Wissen Sie, wie gut man Java in Form einer Bibliothek oder eines Frameworks auf das iPhone portieren kann? Ich kann Funambol auch nicht verwenden, es geht darum, meine eigene Bibliothek zu erstellen.
Andrei
2
Ich verstehe, dass Apple Java auf dem iPhone derzeit recht restriktiv behandelt. Ich gehe davon aus, dass der Marktdruck in Zukunft dazu führen wird, dass dies in Zukunft mehr geschieht. In diesem Artikel unter theserverside.com/discussions/thread.tss?thread_id=63072 wird beispielsweise über Oracle gesprochen, das eine Java-basierte App auf dem iPod Touch demonstriert.
Mikera
+1, um mir beizubringen, dass ich Java nicht per se verwenden muss, aber man kann Scala, Clojure, Groovy verwenden. Faszinierende Antwort.
Anthony
3

Vielleicht möchten Sie Java ausprobieren - Java Runtime Environment (die virtuelle Maschine) ist plattformübergreifend, Java kann auf Mobilgeräten mit Android (oder mit Java ME) verwendet werden und .NET ist dem sehr ähnlich.

malejpavouk
quelle
3

Dies ist nicht eine Wahl, sondern viele. Es ist zwar verlockend, eine Sache zu finden , die überall hinkommt, aber es ist nicht immer der beste Weg, dies zu tun.

  1. Während es beispielsweise möglich sein kann, einen C ++ - Code in einer Windows Mobile-Plattform zu komprimieren, ist alles, was .NET hier ist, aus Sicht der Unterstützung immer einfacher als sein Gegenstück.

  2. In ähnlicher Weise muss man eine wichtige Entscheidung treffen, ob es nativ oder zur Laufzeit sein soll, und sind Sie streng auf webzentrierte oder generisch leistungsfähigere beschränkt? Zum Beispiel ist Adobe Runtime allgegenwärtiger, beschränkt sich jedoch auf das, was Sie im Vergleich zu den wichtigsten Programmiersprachen tun können.

  3. Das Wichtigste, denke ich, ist die Art und Ebene der GUI, die Sie erstellen möchten.

Kommen wir nun zu den vielversprechendsten Entscheidungen.

ein. Für Symbian, Blackberry, Android, BREW und Bada (Samsung) ist Java / J2ME der häufigste Weg. In vielen Fällen sind Sie jedoch mit C / C ++ besser dran, wenn es um native Kernaufgaben auf einer bestimmten Plattform geht.

b. Für Windows .NET wäre jede unterstützte Sprache gut.

c. Für iOS gibt es keine andere Wahl als Ziel C. Dies ist NICHT sehr viel C ++, daher zähle ich es nicht als Ziel

Hier ist eine Wiki-Referenz, die eine Reihe aller Plattformen zeigt, die Ihnen alle Optionen und deren Anwendung zeigt.

Dank Ihrer Frage habe ich über den obigen Wiki-Link erfahren, dass es jetzt SDKs gibt, die versuchen, das oben genannte Problem zu lösen. Die zwei, die am nächsten kommen, sind:

  1. Marmelade: http://www.madewithmarmalade.com/marmalade/supported-platforms unterstützt interessanterweise fast alle Plattformen. Windows wird nur hinzugefügt, um einen vollständigen Kreis zu bilden.

  2. Partikelcode: http://www.particlecode.com/

Ich habe sie noch nicht benutzt, klingt aber nach interessanter Arbeit.

Dipan Mehta
quelle
Android bietet Bada und iOS ermöglichen C ++.
Klaim
3

.NET ist auf vielen Plattformen kaum verfügbar, und Objective-C ist noch schlimmer. Außerdem ist .NET etwas langsam und ObjC hat außerhalb von Apple im Grunde keine Unterstützung. C als Sprache ist im Grunde nicht einmal eine Überlegung wert, es sei denn, Sie werden von einem externen Faktor verwendet.

Die einzige realisierbare Sprache ist C ++.

DeadMG
quelle
2
Wissen Sie etwas über die Vorteile der Verwendung des Mono-Projekts in Kombination mit C #? Warum ist C nicht erwägenswert?
Andrei
2
@Andrei: Soweit ich weiß, ist Mono kaum das Bild der Verfügbarkeit auf allen von Ihnen aufgelisteten Plattformen. Und C ist keine Überlegung wert, weil es genau wie C ++ ist, aber mit all den guten Funktionen, die geschnitten wurden, was offensichtlich eine dumme Sache ist, wenn Sie C ++ verwenden können.
DeadMG
4
@DeadMG: Ich würde gerne sehen, wie Sie diesen Punkt mit Linus Torvalds diskutieren : thread.gmane.org/gmane.comp.version-control.git/57643/… - ohne zu sagen, dass er 100% Recht haben muss, würde ich Ich mag es einfach, den Flammenkrieg zu beobachten.
Michael Borgwardt
2
@DeadMG C ist nicht C ++ mit den guten Funktionen geschnitten; C ++ ist C mit schrecklichen Funktionen hinzugefügt. Es ist nichts falsch mit C.
rechtsfalten
2
@WTP: Er bat um eine Empfehlung, nicht um meine Lebensgeschichte. Die einfache Tatsache ist, dass, was auch immer Sie von den zusätzlichen Funktionen von C ++ halten, diese existieren und C ++ - nur Code zugänglich machen, was ein Bonus ist und C nichts ist, was C ++ nicht ist - das Gegenteil ist nicht der Fall. Wenn Sie C ++ über C verwenden, fügen Sie nur Auswahlmöglichkeiten hinzu. Daher ist C ++ per Definition eine überlegene Sprache, und Sie können jederzeit entscheiden , die C ++ - Funktionen nicht zu verwenden. Welches wäre Wahnsinn, aber Sie können.
DeadMG