Gibt es Java-Kernel / Desktop-Anwendungen? [geschlossen]

7

Auf der Windows / Linux-Plattform konnte ich als gewöhnlicher Computerbenutzer fast keine in Java geschriebene Software finden.

  • Die beiden Betriebssysteme (Windows und Linux) werden mit C geschrieben.
  • Die beiden Webbrowser (IE und Firefox) sind geschrieben mit C ++.
  • Die beiden Webserver (IIS und Apache) sind mit C ++ geschrieben.
  • Die meisten Datenbankverwaltungssysteme sind mit C / C ++ geschrieben.

Und ich konnte keine Software finden, die mit Java auf dem Desktop-Anwendungsgebiet geschrieben wurde. Es scheint, dass Programmierer lieber plattformübergreifende Widgets (Qt, wxWidgets usw.) als Java verwenden würden.

Meine Frage ist:

  1. Warum Java nicht geeignet ist Kernel-Anwendung? Wenn der Grund ist seine Langsamkeit, wie oft ist es langsamer als C / C ++?
  2. Warum Programmierer C / C ++ für Desktop-Anwendungen bevorzugen, obwohl Java eine konsistente und exzellente API-Bibliothek bietet. Ich denke, dass Java weniger C / C ++ benötigt, um die meisten Desktop-Anwendungen (z. B. Kartenspiele) zu entwickeln Anwendung könnte leicht auf andere Plattform eingesetzt werden.
  3. Gibt es irgendwelche berühmten Anwendungen, die mit Java vom Benutzeraspekt (dh wir verwenden es jeden Tag) gemacht werden?

danke.

    
Jichao 05.01.2010, 08:52
quelle

8 Antworten

6

1.
Java ist nicht gut für die Kernel-Entwicklung. Der Hauptgrund ist Kontrolle . Es geht nicht nur um Geschwindigkeit (obwohl das ein Teil davon ist). Java gibt Programmierern nicht die gleiche Menge an Kontrolle über Speicher, genau wie ihr Code ausgeführt wird. In C / C ++ können Sie normalerweise genau erraten, welcher Assembler-Code basierend auf Ihrem Code erstellt wird. Nicht so in Java.

Hinweis : Das gilt sowohl für C als auch für Teile von C ++: Wenn Sie in C ++ eine Menge übergeordneter Funktionalität verwenden, haben Sie offensichtlich der gleiche Kontrollverlust. Aber C ++ gibt die Möglichkeit, in beide Richtungen zu gehen.

2.
C / C ++ wird aus vielen Gründen mehr als Java für den Desktop verwendet. Wahrscheinlich sind einige von ihnen historisch (sie wurden für viel länger verwendet), wahrscheinlich ist ein Teil davon das Problem von "Look and feel", was im Grunde bedeutet, dass Java-Programme eher wie Java-Programme aussehen. und nicht wie die meisten Programme auf der Maschine des Benutzers (es gibt Lösungen, aber das galt früher für fast alle Java-Programme, die Programmierer davon abhielten).

Aber das Wichtigste, was ich zu verstehen habe, ist, dass C und C ++ heutzutage auch für GUI viel weniger verwendet werden. Offensichtlich werden sie immer noch verwendet, aber viele Programmierer wechseln zu anderen Sprachen wie C # und anderen.

3.
Wenn Sie über berühmte Desktop Anwendungen sprechen, denke ich, dass Eclipse am bekanntesten ist (sicherlich für Programmierer). Es ist auch eine wirklich großartige Anwendung, und sieht auf jeden Fall gut aus, was Ihnen nur zeigt, dass Java für gut aussehende Desktop-Apps verwendet werden kann.

Ich bin mir keiner anderen wirklich bewusst.

    
Edan Maor 05.01.2010, 09:11
quelle
7
  1. Es gibt mindestens einige Betriebssysteme, die in Java implementiert sind, nämlich JNode , JOS und JX . Natürlich werden Sie kein Betriebssystem sehen, das seine Geschichte vor dem Beginn von Java begonnen hat, um in dieser Sprache implementiert zu werden. Darüber hinaus scheint es eine langzeitige Voreingenommenheit gegenüber verwalteten Sprachen für einen Betriebssystemkern zu geben; Es gibt einige Forschungsprojekte wie Singularity , die die Machbarkeit eines solchen Ansatzes testen, aber wir sind bei weitem nicht in der Nähe von Punkt, wo dies für "normale" Verwendung bereit ist. Sie werden jedoch immer einen Kernel-Kern benötigen, der in Assembly oder einer anderen Low-Level-Sprache erstellt wird, die Ihnen Zugriff auf Teile gewährt, die Sie normalerweise nicht hätten. Aber das kann sehr klein gehalten werden.

  2. Ob die Java-API konsistent oder exzellent ist, mag strittig sein, aber für viele Umgebungen sind die bevorzugten Sprachen entweder C (UNIX-like meist, viele Teile der Windows-API), Derivate wie Objective-C (Mac OS X) oder C ++ (COM-basierte Programmierung unter Windows, KDE, Qt). Dies bedeutet nicht, dass Sie dies nicht in einer anderen Sprache tun könnten, aber die Dokumentation geht normalerweise davon aus, dass Sie sich an die bevorzugten Sprachen halten. Ein weiterer wichtiger Faktor, den Sie scheinbar auszählen, ist, dass Sie eine JVM auf dem Zielsystem benötigen. Das einzige Betriebssystem, das nativ mit Java ausgeliefert wird, ist Mac OS X. Sie würden also die Benutzer mit zusätzlichen Abhängigkeiten belästigen. Unternehmen wie Microsoft sind auch sehr zurückhaltend, selbst wenn sie Software von Drittanbietern, die sie unter Windows nicht kontrollieren können, in Erwägung ziehen, so dass Sie nie eine JVM mit dem Betriebssystem dort veröffentlicht sehen werden. (Ja, da war einmal ein Java 1.1, aber diese Zeiten sind längst vorbei und werden wahrscheinlich nicht mehr zurückkehren. Auch dieser wurde von Microsoft selbst geliefert.)

  3. Die meisten Java-Entwickler verwenden wahrscheinlich mindestens einen von Tag zu Tag, Eclipse und Netbeans zum Beispiel sind in Java geschrieben. Wie einige andere Software-Entwicklungswerkzeuge, wie Maven oder Ant . Ein weiteres beliebtes Programm ist zum Beispiel der BitTorrent-Client Vuze (ehemals Azureus). Aber zumindest für mich gibt es derzeit nicht viele Java-Desktop-Anwendungen, die ich sogar wöchentlich benutze.

    Es ist jedoch völlig anders für Web-Anwendungen, da Sie nicht wirklich sagen können, was von außen geschrieben wurde.

Joey 05.01.2010 09:04
quelle
4

Eine der bekanntesten Anwendungen in Java ist wahrscheinlich Vuze (früher bekannt als Azureus), ein BitTorrent-Client für Windows und Windows Linux.

    
Bombe 05.01.2010 09:04
quelle
2

Ich frage Ihre Verwendung von "Kernel-Anwendung", ich denke, es gibt keinen solchen Begriff. Entweder ist irgendein Code Teil des Betriebssystemkernels, in diesem Fall muss er normalerweise in der Sprache des Betriebssystems geschrieben werden, oder es ist eine Anwendung, in diesem Fall könnte er in jeder Sprache geschrieben werden, die das Betriebssystem unterstützt.

Jetzt gibt es viel genutzte, vielleicht "essentielle" Anwendungen, die manche Leute als "Kern" -Anwendungen bezeichnen, wie Browser, DBMs und so weiter. Vielleicht sprichst du darüber.

Die meisten Anwendungen haben eine visuelle Schnittstelle. Alle C / C ++ - Programme haben ein Aussehen und Verhalten, das mehr oder weniger häufig und gemeinsam ist (einige gängige Toolkits) und können in gewissem Umfang über Einstellungen im Betriebssystem geändert werden. Java (normalerweise) "tut" sein eigenes Aussehen und Verhalten, und es sieht normalerweise viel anders als das sonst übliche Aussehen aus; viele Leute halten es für hässlich.

Die Leistung von Java ist mittlerweile in etwa gleichwertig mit C-Anwendungen, aber das schließt den JVM-Start nicht ein. Es dauert relativ lange, bis Java-Programme gestartet werden, und Benutzer hassen es zu warten.

Eine Handvoll von Datenbank-Engines ist in Java geschrieben. Derby kommt mir in den Sinn, und ich denke, HQL. Aber das sehen Software-Benutzer nicht oft. In ähnlicher Weise sind die Webanwendungsserver Jetty und Tomcat in Java und natürlich in Unternehmensanwendungsservern wie WebSphere, WebLogic, JBoss, GlassFish geschrieben. Aber auch dies sind keine Benutzer-Apps.

    
Carl Smotricz 05.01.2010 09:01
quelle
2
  

Warum Java nicht geeignet ist, Kernel-Anwendungen zu machen? Wenn der Grund seine Langsamkeit ist, wie oft ist es langsamer als C / C ++?

Java läuft auf einer virtuellen Maschine. Um es irgendwo laufen zu lassen, müssen Sie diesen Kernel (der in C ++ geschrieben ist) auf die Plattform portieren. Der Hauptgrund dafür ist, dass es derzeit keine (weit verbreitete) CPU gibt, die Java nativ verstehen kann. Die üblichen CPUs verstehen nur Assembly.

Heute ist Java so schnell wie vergleichbares C / C ++.

  

Warum bevorzugen Programmierer C / C ++ für Desktop-Anwendungen [...]?

Weil Microsoft Java nicht unterstützt (zumindest nicht auf die gleiche Weise wie etwa C #).

  

Gibt es irgendwelche berühmten Anwendungen, die mit Java vom Benutzeraspekt (dh wir verwenden es jeden Tag) gemacht werden?

Die meisten Dienste im Internet sind in Java geschrieben. Eine Menge Software auf Ihrem Mobiltelefon ist Java. Mit dem Aufkommen von Qt Jambi und SWT , Java-Apps sehen aus und fühlen sich an wie jede andere Art von App (einschließlich der wahnsinnigen Startzeiten), daher ist dies nicht mehr so ​​offensichtlich.

Die Gründe, warum dies nicht viel beworben wird, sind a) die Menschen glauben immer noch, dass der "Java ist langsam" Mythos und b) den Menschen egal ist, in welcher Sprache etwas geschrieben wird. Sie kümmern sich, ob es für sie arbeitet. Außerdem hat Sun bei der Bereitstellung wirklich Spaß gemacht. Um ein Windows-Installationsprogramm von VisualStudio zu erstellen, müssen Sie nur auf eine Schaltfläche klicken. Für Java braucht man Skripts zum Schreiben von Startup-Skripten, Lizenzprobleme, Größenprobleme (schließe ich die JRE ein oder nicht?), Die Befürchtung, dass nicht mehr als ein einziges Java auf einem PC installiert sein kann usw. Es hilft wirklich, positive Gefühle für Java zu sammeln.

    
Aaron Digulla 05.01.2010 09:07
quelle
1
  

Warum ist Java nicht für Kernel-Anwendungen geeignet? Wenn der Grund seine Langsamkeit ist, wie oft ist es langsamer als C / C ++?

Das ist nicht wirklich oder nicht unbedingt der einzige Grund. Kernel-Anwendungen wie Betriebssysteme benötigen Zugriff auf den Kernel und die Maschine, auf die Java zugreifen kann, ist eine virtuelle Maschine.

  

Warum Programmierer C / C ++ für Desktop-Anwendungen bevorzugen, obwohl Java eine konsistente und ausgezeichnete API-Bibliothek bietet.Ich denke, dass es weniger Code mit Java anstelle von C / C ++ benötigt, um die meisten Desktop-Anwendungen zu entwickeln (zB Kartenspiele) und die entwickelte Anwendung könnte leicht auf anderen Plattformen eingesetzt werden.

Das ist richtig, aber es stellt sich heraus, dass Sie, um eine nahtlose Erfahrung in einer Desktop-Anwendung zu haben, auf eine Reihe nativer Ressourcen zugreifen müssen. Windows, Linux und OSX haben ihre eigene Komplexität und die meisten Java-Anwendungen sehen fehl am Platze aus.

Die Arbeit mit den nativen Bibliotheken ermöglicht eine nahtlose Integration mit dem Host-System.

Ich denke jedoch, dass es möglich ist, alle gemeinsamen Teile und den Kern einer Anwendung in Java zu schreiben und dann nativen Code für das korrekte Einhängen in den Host hinzuzufügen.

So werden IDEs wie NetBeans, Eclipse und Idea geschrieben.

Bei den Browsern und anderen wichtigen Anwendungen liegt der Grund, warum sie in C ++ sind, nicht nur in ihrer Geschwindigkeit, sondern auch in der Tatsache, dass sie seit Jahrzehnten Legacy-Code sind.

Um nur ein aktuelles Beispiel zu nennen. Google Chrome, erben eine Menge Code von WebKit, Hunderttausende von Zeilen. Sie können sagen, dass sie nur das "Chrome" des Browsers gemacht haben (so war das eine einfache Sache).

  

Gibt es irgendwelche berühmten Anwendungen, die mit Java vom Benutzeraspekt (dh wir verwenden es jeden Tag) gemacht werden?

Haben Sie schon einmal von gmail LimeWire gehört?

    
OscarRyz 05.01.2010 08:54
quelle
0
  1. Java ist nicht zum Schreiben von Kernel-Programmen geeignet, da Java-Programme so konzipiert sind, dass sie nativ unter dem virtuellen System und nicht unter dem zugrunde liegenden Betriebssystem ausgeführt werden. Unter einer virtuellen Maschine wird das, was wir tun können, im Austausch gegen höhere Sicherheit begrenzt sein. Während Geschwindigkeit ist hier kaum ein Hauptthema.

  2. Ich bin mir nicht sicher, ob es andere Entwickler gibt, aber meine persönliche Erfahrung ist, dass, obwohl Java behauptet wird "einmal schreiben, irgendwo laufen", es ziemlich viele inkonsistente Verhaltensweisen der JVM gibt unter verschiedenen Betriebssystemen. Um diese Inkonsistenzen zu überwinden, müssen Entwickler möglicherweise Workarounds in ihre Programme integrieren, um eine einzigartige Benutzererfahrung zu bieten. Im schlimmsten Fall kann es einfach nicht repariert werden, ohne die JVM selbst zu modifizieren. Daher kann es weniger schmerzhaft sein, die plattformübergreifende Basis mit C / C ++ - Bibliotheken zu erstellen, da Sie die Kontrolle über alle von Ihnen geschriebenen Komponenten haben.

  3. Es gibt einen Bittorrent-Client namens Vuze (früher Azureus), der ziemlich berühmt ist IMO. Sie können hier nachsehen.

shinkou 05.01.2010 09:11
quelle
0

Hast du schon mal von Limewire gehört?

    
Salvin Francis 05.01.2010 10:56
quelle