Ist Java (noch) die plattformübergreifende Sprache der Wahl? [geschlossen]

20

Als ich in den Neunzigern mit Java anfing, war vom ersten Tag an alles " Einmal schreiben, überall ausführen! ". Das war damals wahrscheinlich alles wahr und ich war auch ein Teil des Chores.

Ich bin mir nicht mehr sicher, was ich davon halten soll, wenn ich all die anderen Sprachen betrachte, die Laufzeit auf mehreren Plattformen verwenden (Python, Flash, Perl, HTML, PHP ...). Aber ich sehe immer noch viele Argumente, die besagen, dass Sie Java verwenden sollten, weil es angeblich besser für die plattformübergreifende Entwicklung ist.

Also, Ist das noch heute wahr? Ist Java immer noch die Sprache der Wahl für die Entwicklung mehrerer Plattformen?

  • Bitte seien Sie spezifisch und konzentrieren Sie sich auf plattformübergreifende Aspekte.
  • Ich bitte nicht um allgemeine Sprachvergleiche.

Update: Bisher großartige Antworten! Die meisten Antworten scheinen Java oder das Internet zu bevorzugen. Irgendeine Eingabe von der Skriptmenge?

Martin Wickman
quelle
3
Dieser Kommentar befasst sich nicht mit dem Kern der Frage, ist jedoch ein zu berücksichtigender Faktor: Java-basierte Webanwendungen, die sich an Windows-Benutzer richten, sollten nicht berücksichtigt werden. Die Oracle JVM für Windows hatte in letzter Zeit viele Sicherheitsprobleme. Daher stellen Sie möglicherweise fest, dass versierte Benutzer keine Java-basierten Webanwendungen verwenden, da sie die JVM deinstalliert haben.
Poke
Ihre Frage basiert auf der Annahme, dass es sich anfangs sogar um die plattformübergreifende Sprache der Wahl handelte.
Lucas Ramage

Antworten:

10

Skriptsprachen wie Python erleichtern auch die plattformübergreifende Entwicklung. Nun, ob Sie Python (oder andere solche Sprachen) mögen, hängt von Ihnen ab, und wir brauchen diese Debatte wahrscheinlich hier nicht zu beginnen.

Java versucht, Sie zum Schreiben von Code zu zwingen, der portabel ausgeführt wird, während Sie mit Python portablen Code schreiben können. Die eigentliche Python-Sprache selbst wird portabel ausgeführt, aber externe Bibliotheken können oder können nicht. Darüber hinaus gewährt Python freien Zugriff auf plattformspezifische Dienste.

Hat Java da einen Vorteil? Ich denke in beiden Fällen können Sie den portablen Code mit ähnlicher Leichtigkeit schreiben. Das heißt, Sie können Code schreiben, der normalerweise auf verschiedenen Plattformen funktioniert. Aber Sie können nicht einfach nur Code schreiben und davon ausgehen, dass er überall funktioniert. Ich habe an einem Python-Projekt gearbeitet, das eine Version für Windows, Linux und Mac erstellt hat, und es gab nur wenige plattformübergreifende Probleme. (Das Einzige, an das ich mich erinnere, war ein Fehler in der Bibliothek, bei dem wir Pygame verwendeten, was zu Problemen beim Zeichnen unter Linux führte. Dies wurde durch ein Upgrade der von uns verwendeten Pygame-Version behoben.)

Ein weiteres Problem ist die Bereitstellung. Wenn Sie eigenständige Programme verteilen möchten, die Ihren Code ausführen, müssen Sie verschiedene Versionen für verschiedene Plattformen erstellen. Für Java können Sie eine Version verteilen und davon ausgehen, dass der Benutzer Java installiert hat, oder Sie können es installieren. In diesem Fall gewinnt Java wahrscheinlich an der Einfachheit der Implementierungsabteilung.

Letztendlich kommt es meiner Meinung nach darauf an, mit welcher Sprache Sie gerne arbeiten und welche Art von Bereitstellung Sie durchführen müssen.

Winston Ewert
quelle
18

Java ist möglicherweise nicht das oder das einzige funktionsfähige plattformübergreifende Tool, hat jedoch einige Stärken:

  • Das geht extrem schnell.
  • Es ist extrem robust.
  • Es ist extrem portabel (z. B. Bytecode, der vor 10 Jahren in Windows 95 kompiliert wurde, läuft heute in OS X einwandfrei).

und einige Schwächen:

  • Die wichtigsten GUI-Bibliotheken (Swing ...) zeigen ihr Alter an (hier helfen Ergänzungen von Drittanbietern).
  • Die Sprache selbst könnte weniger ausführlich sein (z. B. überprüfte Ausnahmen ...).
  • Die Startzeit könnte schneller sein (obwohl sie sich ständig verbessert).

Wenn es speziell um die Java- Plattform geht , gibt es einen Punkt mehr:

  • Es gibt durchaus ein paar Sprachen , dass auf der JVM und laufen interoperabel mit Java.
Joonas Pulakka
quelle
19
Extrem schnell? Verglichen mit was?
HardCode
18
@HardCode: Verglichen mit jeder interpretierten Sprache oder den meisten kompilierten Sprachen. C und C ++ können in einigen Fällen schneller gemacht werden, aber es ist schwierig und wird immer schwieriger, wenn die Anzahl der Kerne wächst. Mit Java-Parallelität (effizientes Ausnutzen dieser mehreren Kerne) ist dies in der Praxis viel einfacher zu erreichen.
Joonas Pulakka
5
@ HardCode, anscheinend ist die JVM die schnellste verfügbare Laufzeit für fast jede interpretierte Sprache (im Gegensatz zu den von den Sprachhackern selbst erstellten)
14

Es ist heute so wahr wie damals - das heißt nicht ganz. Java ist einmal schreiben, testen und debuggen überall. Sicher, das ist viel weniger Arbeit als ein völlig frischer Port, aber im Allgemeinen ist es mehr Arbeit, als der anfängliche Hype von uns angenommen hat.

Unser Produkt verfügt über einen Java-Server, der entweder unter Windows oder Linux ausgeführt werden kann. Wir haben jedoch betriebssystemspezifische Probleme festgestellt und stellen sicher, dass sowohl Linux- als auch Windows-Server für Support- / Testzwecke zur Verfügung stehen. Java-Benutzeroberflächen weisen in der Regel mehr Probleme auf als die Server (obwohl viele kosmetisch sind und daher je nach Anwendung möglicherweise ignoriert werden können).

Das Web ist für mich zwar nicht unbedingt eine Sprache, aber die plattformübergreifende Plattform der Wahl. Ein HTML / JavaScript-Frontend bedeutet, dass Ihre Anwendung auf nahezu jeder Client-Plattform ausgeführt werden kann. In den meisten Fällen war dies das eigentliche Ziel - Sie müssen sich keine Sorgen machen, ob es sich um einen Mac oder einen PC handelt, welche Betriebssystemversion usw.

Natürlich bestimmen Sie im Allgemeinen immer noch die Serverplattform, aber wenn die Leute viel flexibler werden, insbesondere heutzutage, wenn die meisten Unternehmen bereits eine Mischung aus Windows- und Linux-Servern unterstützen.

Jon Hopkins
quelle
8
Gute Antwort. Natürlich kann es auch Kopfzerbrechen bereiten, sicherzustellen, dass Ihre App in allen verschiedenen Browserversionen richtig funktioniert.
Tim Goodman
5
@ Tim: guter Punkt. Ich bin der Meinung, dass Browser-Apps weitaus mehr Funktionen zum Testen und Debuggen bieten als Java-Desktop-Apps.
Joonas Pulakka
5
@Tim: +1. Es ist genauso schwierig, eine Webapp-App für alle gängigen Browser gleich zu machen, wie eine Java-App für mehrere Betriebssysteme gleich zu machen.
Yevgeniy Brikman
3
"einmal schreiben, überall debuggen" trifft meiner Erfahrung nach nicht zu. Solange Sie vernünftig sind und plattformspezifische Abhängigkeiten vermeiden, hatte ich keine Probleme, denselben Java-Code auf mehreren Plattformen (einschließlich GUI-Plattformen) auszuführen. Ja, natürlich sollten Sie es testen, aber ich glaube, in fast 15 Jahren der Java-Codierung hatte ich nur einmal ein echtes Portabilitätsproblem (was meine eigene Schuld war, wenn ich Windows-Verzeichnisseparatoren hartcodierte, anstatt den plattformübergreifenden File.pathSeparator von Java zu verwenden) !)
mikera
2
@mikera - Wir haben Probleme zwischen Linux und Windows gesehen, die nichts mit unserem Code zu tun hatten. Sie sind selten, aber sie existieren.
Jon Hopkins
9

Persönlich würde ich sagen, dass Java immer noch die plattformübergreifende Sprache der Wahl ist und wahrscheinlich (neben Webanwendungen) noch einige Zeit dort verbleibt. Ich habe in diesem Beitrag etwas mehr zum Thema Java als Plattform der Wahl geschrieben , insbesondere aber plattformübergreifend:

  • Solange Sie mit Ihren Abhängigkeiten vorsichtig umgehen (z. B. Bibliotheken vermeiden, die JNI für die Schnittstelle mit nativem Code verwenden), kann Java auf allen wichtigen JVM-Plattformen unverändert ausgeführt werden

  • Da Java normalerweise als maschinenunabhängiger Bytecode verteilt wird, können Sie es ohne erneute Kompilierung auf jeder JVM ausführen (da die lokale JVM selbst die JIT-Kompilierung in nativen Code übernimmt). Zum Beispiel ist es mir gelungen, eine vernünftig komplexe GUI-App nach der Entwicklung unter Windows zum ersten Mal auf einem Mac auszuführen - mit derselben JAR-Datei . Vergleichen Sie dies mit den meisten anderen plattformübergreifenden Sprachen, für die normalerweise andere Bibliotheken oder eine Neukompilierung für eine andere Plattform erforderlich sind.

  • Viele der benötigten Kernbibliotheken (GUI, Networking, IO usw.) sind Bestandteil der Standardlaufzeit und plattformübergreifend geschrieben. Damit Sie nicht nach plattformübergreifenden Bibliotheken suchen und diese testen müssen, ist garantiert, dass praktisch alles, was Sie benötigen, bereits in der Laufzeitumgebung vorhanden ist.

mikera
quelle
3

Ich denke, Sie haben die Wahl:

1) benutze entweder a

  • kompiliert oder
  • interpretierte Sprache.

2) Wie werden Sie Ihren Code verpacken und ausliefern?

  • Ein "Front-End", eine Binärdatei / ein Skript?
  • Ein "Front-End", mehrere Binärdateien / Skripte?
  • Mehrere "Frontends", mehrere Binärdateien / Skripte?

Diese Auswahlmöglichkeiten wirken sich auf die Leistung, die Sichtbarkeit des Quellcodes und die Verteilung aus.

Macht es Ihnen etwas aus, Ihren Quellcode preiszugeben? Kompilierte Sprachen könnten für Sie sein. Kompilierte Sprachen scheinen in Mikro-Benchmarks eine bessere Leistung zu erbringen als interpretierte Sprachen (sogar JIT-Sprachen). Auch wenn Sie auf eine Laufzeitumgebung wie Java, Python, Ruby usw. angewiesen sind, ist Ihr Code möglicherweise schwerer zu verbreiten.

Ich fand heraus, dass die beliebtesten plattformübergreifenden Desktop-Anwendungen "Ein Front-End, mehrere Binärdateien" mit C / C ++ und einer plattformübergreifenden Widget-Bibliothek verwenden, z. VLC.

LennyProgrammierer
quelle
Sie haben einen interessanten Fehler bei der Auflistung von Skype in Ihren Beispielen gemacht, aber diese sehr beliebte Anwendung wurde tatsächlich mit Delphi / Pascal unter Windows gestartet und mit C / C ++ unter Linux und Objective-C unter MacOS / iPhone
portiert
Ich halte die kompilierte / interpretierte Dichotomie für etwas irreführend - Java ist in gewissem Sinne auch nicht, weil es zu maschinenunabhängigem Bytecode für die Verteilung kompiliert wird (dh nicht mehr in Quellform) und JIT zu einem späteren Zeitpunkt in nativen Code kompiliert wird Auf welcher Maschine auch immer Sie arbeiten. Es ist vollständig plattformübergreifend, bietet jedoch auch native Leistung und Sie müssen Ihre Quelle nicht weitergeben, wenn Sie dies nicht möchten. win / win / win.
mikera
0

Ich werde nein sagen. Python und Ruby werden häufig verwendet, ebenso Javascript auf Client- und Serverseite. Ich persönlich benutze .NET und habe keine Probleme damit, es auf Mac und Linux (während der Entwicklung unter Windows) laufen zu lassen.

-edit- Ich höre, LLVM wird immer beliebter, ist aber immer noch extrem klein. Auf diese Weise können Sie plattformübergreifendes C ++ in einer einzelnen Binärdatei verwenden. Anscheinend wird es auf dem Browser ausgeführt, aber ich habe noch kein Beispiel gesehen, in dem Sie den Dom ändern oder Javascript aufrufen können.


quelle
Bei LLVM geht es nicht darum, auf einem Browser zu laufen ... Sprechen Sie von Emscripten?
Camilo Martin
Überprüfen Sie das Datum. Vor 4 Jahren existierte emscripten nicht. NativeClient sollte funktionieren (und hatte Doom Running), tat es aber nicht.
Jetzt sehe ich das Datum, aber dennoch ging es in LLVM nie speziell um Browser, oder?
Camilo Martin
1
Nee. Obwohl ich wünschte, ich könnte C ++ oder eine andere Sprache schreiben, die LLVM anstelle von JS unterstützt ...
In dieser Hinsicht ...
Camilo Martin
-1

Wenn Sie mobile Plattformen in den Mix einbinden, müssen Sie zumindest die Neukompilierung einbeziehen. ZB Android, j2me.

Conor
quelle