2010-01-05 13 views
7

En la plataforma Windows/Linux, como usuario común de la computadora, casi no puedo encontrar ningún software escrito en Java.¿Hay alguna aplicación de kernel/escritorio Java?

  • El sistema operativo dos (Windows y Linux ) se escriben con C.
  • Los dos navegadores (IE y Firefox) se escriben con C++.
  • Los dos servidores web (IIS y Apache) están escritos con C++.
  • La mayoría del sistema de administración de bases de datos está escrito con C/C++.

Y no pude encontrar el software que fue escrito con Java en area.It aplicación de escritorio parece que los programadores prefieren utilizar widgets multiplataforma (Qt, wxWidgets, etc.) en lugar de Java.

Mi pregunta es:

  1. Por qué Java no es adecuado hacer aplicación del núcleo Si la razón es su lentitud, ¿cuántas veces es más lento que C/C++?
  2. Por qué los programadores prefieren C/C++ para aplicaciones de escritorio a pesar de que Java proporciona una biblioteca API consistente y excelente. Creo que debería requerir menos código usando Java en lugar de C/C++ para desarrollar la mayoría de las aplicaciones de escritorio (por ejemplo, juegos de cartas). la aplicación podría implementarse fácilmente en otra plataforma.
  3. ¿Hay alguna aplicación famosa hecha con Java desde el aspecto del usuario (es decir, la usamos todos los días)?

gracias.

+0

@ 3) un distribuidor en línea de mp3 en alemán (mp3.saturn.de) recientemente bajó porque todos querían descargar algo de música para Navidad; ellos usan Java, como descubrí ... http://mp3.saturn.de/servlets/2452685121528Dispatch/34/jspforward?file=.%2Findex.jsp&page=frontpage/Java on Mars: http: //www.sun. com/aboutsun/media/features/mars.html – miku

+0

En cuanto a "hay aplicaciones de escritorio Java famosas", eso es un duplicado de http://stackoverflow.com/questions/521110/examples-of-good-java-desktop-applications – Jonik

Respuesta

6

1.
Java no es bueno para el desarrollo de kernel. La razón principal es control. No se trata solo de velocidad (aunque eso es parte de esto). Java no les da a los programadores la misma cantidad de control sobre la memoria, sobre exactamente cómo se ejecuta su código. En C/C++, generalmente puede adivinar exactamente cuyo código de ensamblado se creará, en función de su código. No es así en Java.

Nota: Este es el caso de C, así como de partes de C++: Si está utilizando una gran cantidad de funcionalidad de nivel superior en C++, es obvio que tienen la misma pérdida de control. Pero C++ ofrece la opción de ir de cualquier manera.

2.
C/C++ es más utilizado que Java para el escritorio por muchas razones. Probablemente algunos de ellos son históricos (se han usado por mucho más), probablemente parte del problema es "Ver y sentir", lo que básicamente significa que los programas Java tienden a parecerse a los programas Java y no a la mayoría de los programas en la máquina del usuario (hay soluciones, pero esto solía ser cierto para casi todos los programas Java, lo que hacía que los programadores se mantuvieran alejados).

Pero lo más importante para entender, creo, es que C y C++ también son mucho menos utilizados para GUI hoy en día. Obviamente todavía se utilizan, pero muchos programadores se están moviendo a otros idiomas, como C# y otros.

3.
Si estás hablando de famosos aplicaciones de escritorio , creo que el más famoso (sin duda para los programadores) es Eclipse. También es una aplicación muy buena, y sin duda se ve muy bien, que simplemente muestra que Java puede ser utilizado para buenas aplicaciones de escritorio de aspecto natural.

No conozco realmente ninguna otra.

+2

Con respecto al n. ° 3 - para otros ejemplos, vea http://stackoverflow.com/questions/521110/examples-of-good-java-desktop-applications. Personalmente puedo decir que IntelliJ IDEA es una increíble aplicación de escritorio para Java. – Jonik

1

Por qué Java no es conveniente hacer uso del kernel? Si la razón es su lentitud, ¿cuántas veces es más lento que C/C++?

Esa no es realmente o no necesariamente la única razón. Las aplicaciones Kernel como los sistemas operativos necesitan acceso al kernel y la máquina a la que Java puede acceder es virtual.

Por qué los programadores prefieren C/C++ para hacer aplicación de escritorio a pesar de Java proporciona una API consistente y excelente library.I piensa que debería requiere menos código usando Java en lugar de C/C++ para desarrollar la mayor parte de aplicaciones de escritorio (por ejemplo, juegos de cartas) y la aplicación desarrollada podría implementarse fácilmente en otra plataforma.

Eso es correcto, pero resulta que con el fin de tener una experiencia perfecta en una aplicación de escritorio que necesita para acceder a una serie de recursos nativos. Windows, Linux y OSX tienen sus propias complejidades y la mayoría de las aplicaciones de Java se ven fuera de lugar.

Trabajar con las bibliotecas nativas le permite una integración perfecta con el sistema host.

Sin embargo, creo que es factible escribir todas las partes comunes y el núcleo de una aplicación en Java y luego agregar un código nativo para enganchar correctamente en el host.

Así se escriben IDE como NetBeans, Eclipse e Idea.

Sobre los navegadores y otras aplicaciones importantes, la razón por la que están en C++ no es solo su velocidad, sino el hecho de que son códigos heredados de décadas.

Solo por mencionar un ejemplo reciente. Google Chrome, hereda mucho código de WebKit, cientos de miles de líneas. Se puede decir que acaba de hacer el "cromo" del navegador (como que era una cosa fácil)

¿Hay algunas aplicaciones famosas hechas con Java desde los aspectos de usuario (medios que utilizamos todos los días)?

¿Alguna vez ha oído hablar de Gmail LimeWire?

+0

Creo que dije * any * como en * cualquier cosa del mundo para cualquier cosa *: P – OscarRyz

2

Cuestiono su uso de la "aplicación kernel", creo que no existe tal término. O bien algún código es parte del kernel del sistema operativo, en cuyo caso generalmente TIENE que estar escrito en el idioma del sistema operativo, o es una aplicación, en cuyo caso podría escribirse en cualquier idioma compatible con el sistema operativo.

Ahora hay aplicaciones muy usadas, tal vez "esenciales", que algunas personas podrían llamar aplicaciones "centrales", como navegadores, DBM, etc. Tal vez eso es de lo que estás hablando.

La mayoría de las aplicaciones tienen una interfaz visual. Todos los programas C/C++ tienen una apariencia más o menos común y compartida (algunos kits de herramientas comunes), y se pueden modificar hasta cierto punto a través de la configuración en el sistema operativo. Java (por lo general) "tiene" su propio aspecto, y por lo general se ve muy diferente de la apariencia común; muchas personas lo consideran feo.

Mientras tanto, el rendimiento de Java está a la par de las aplicaciones C, pero eso no incluye el inicio de JVM. Los programas Java tardan un tiempo relativamente largo en iniciarse y los usuarios detestan esperar.

Un puñado de motores de base de datos están escritos en Java. Derby viene a la mente, y creo que HQL. Pero eso no es lo que los usuarios de software ven mucho. Del mismo modo, los servidores de aplicaciones web Jetty y Tomcat están escritos en Java y, por supuesto, en servidores de aplicaciones empresariales como WebSphere, WebLogic, JBoss, GlassFish. Pero, de nuevo, estas no son aplicaciones de usuario.

+0

(a) El * idioma * es irrelevante para el SO, tanto en el kernel como en el modo de usuario. Al final todo es solo ejecución de código de máquina. Por supuesto, si quieres Java en el kernel, necesitarás una JVM en el kernel, pero teóricamente es posible (aunque quizás no sea una muy buena idea). (b) SWT es un juego de herramientas GUI de Java que hace uso de widgets nativos. Swing no es el único jugador allí y recuerda que GTK y Qt, por ejemplo, son juegos de herramientas C/C++ que también se representan a sí mismos. – Joey

+0

Tienes razón, por supuesto. Al pasar por alto algunos detalles, de hecho, introduje información incorrecta, ¡lo siento! Sin embargo, SWT: las aplicaciones de escritorios Java son lo suficientemente raras, pero las aplicaciones de escritorio Java SWT, sin contar Eclipse, son ... –

+0

No lo he visto demasiado. Google Web Toolkit lo usa para el modo alojado local, pero aparte de eso ... no lo sé. http://en.wikipedia.org/wiki/Standard_Widget_Toolkit#Applications enumera algunos ejemplos, sin embargo. El muy citado Vuze es aparentemente SWT también. – Joey

7
  1. hay por lo menos algunos sistemas operativos implementados en Java, a saber JNode, JOS y JX. Por supuesto, no verá ningún sistema operativo que haya comenzado su historia antes del amanecer de Java para implementarse en ese idioma. Además, parece haber un sesgo de larga data contra los lenguajes administrados para un kernel del sistema operativo; hay algunos proyectos de investigación como Singularity que prueban la viabilidad de dicho enfoque, pero no estamos cerca de un punto en el que esté listo para un uso "normal". Sin embargo, siempre necesitará un kernel "core" que se hace en ensamblador u otro lenguaje de bajo nivel que le da acceso a partes que normalmente no tendría. Pero esto se puede mantener muy pequeño.

  2. Si la API de Java es consistente o excelente puede ser discutible, pero para muchos entornos los lenguajes preferidos son C (UNIX-like, muchas partes de la API de Windows), derivados como Objective-C (Mac OS X) o C++ (programación basada en COM en Windows, KDE, Qt).Esto no significa que no pudo hacer esto en otro idioma, pero la documentación asume que usted se apega a los idiomas preferidos. Otro factor importante que aparentemente está contando es que requerirá una JVM en el sistema de destino. El único sistema operativo que se envía de forma nativa con Java del que soy consciente es Mac OS X. Por lo tanto, molestaría a los usuarios con dependencias adicionales. Las corporaciones como Microsoft también son muy reacias a incluso considerar lanzando un software de terceros que no tienen control con Windows por lo que nunca verá una JVM que se libera con el sistema operativo allí. (Sí, había una vez un Java 1.1 uno, IIRC pero esos días han quedado atrás y no es probable que el retorno. Además de que uno fue suministrado por Microsoft sí mismos.)

  3. mayoría de los desarrolladores de Java, probablemente, utilizan al menos un día de Hoy, por ejemplo, Eclipse y Netbeans están escritos en Java. Al igual que otras herramientas de desarrollo de software, como Maven o Ant. Otro programa popular es, por ejemplo, el cliente BitTorrent Vuze (anteriormente Azureus). Pero al menos para mí, actualmente no hay muchas aplicaciones de escritorio Java que incluso use semanalmente.

    Sin embargo, es completamente diferente para las aplicaciones web, ya que no se puede decir en qué están escritas desde el exterior.

+0

+1, excelente y completo tratamiento! –

+1

JNode (http://www.jnode.org) es un mejor ejemplo de un sistema operativo Java que JOS porque * realmente funciona *. –

+0

Gracias, lo agregué. Nunca he probado ninguno de ellos, pero apenas recordaba que había alguno. Así que fue principalmente un viaje de búsqueda rápida. – Joey

4

Una de las aplicaciones más conocidas escritas en Java es probablemente Vuze (anteriormente conocido como Azureus), un cliente de BitTorrent para Windows y Linux.

+0

Nunca supe esto. ¿Tiene algún artículo o prueba que demuestre que esto es cierto? –

2

Por qué Java no es adecuado hacer kernel aplicación? Si la razón es su lentitud, ¿cuántas veces es más lento que C/C++?

Java se está ejecutando en una máquina virtual. Para hacerlo funcionar en algún lugar, debe portar este kernel (que está escrito en C++) a la plataforma. La razón principal de esto es que actualmente no hay una CPU (extendida) que pueda entender Java de forma nativa. Las CPU comunes solo entienden el ensamblaje.

Hoy, Java es tan rápido como C/C++ comparable.

Por qué los programadores prefieren C/C++ para hacer uso de escritorio [...]?

Porque Microsoft no es compatible con Java (al menos no de la misma manera que, por ejemplo, C#).

¿Hay alguna aplicación famosa hecha con Java desde el aspecto del usuario (es decir, la usamos todos los días)?

La mayoría de los servicios en la 'red están escritos en Java. Una gran cantidad de software en su teléfono móvil es Java.Con la llegada de Qt Jambi y SWT, las aplicaciones Java se ven y se sienten como cualquier otro tipo de aplicación (incluidos los inicios de arranque), así que esto ya no es tan obvio.

Razones por las que esto no se anuncia mucho es a) las personas aún creen que el mito de "Java es lento" yb) a las personas no les importa en qué idioma se escribe algo. Les importa si funciona para ellos. Además, Sun realmente explotó cuando se trata de la implementación. Para crear un instalador de Windows desde VisualStudio, solo tiene que hacer clic en un botón. Para Java, toma escribir scripts de inicio, problemas de licencia, problemas de tamaño (¿incluyo el JRE o no?), El temor de que no puedas tener más de un solo Java instalado en una PC, etc. Además, los applets no Realmente ayuda a reunir sentimientos positivos hacia Java.

+0

FYI, Qt Jambi ha sido descontinuado por Nokia: http://qt.nokia.com/about/news/preview-of-final-qt-jambi-release-available – HostileFork

+0

@ AaronDigulla ¿Podría dar un enlace a alguna fuente de apoyo? su argumento es que * 'Hoy, Java es tan rápido como C/C++ comparable' * *? Es interesante. – user3150201

+0

@ user3150201: hay muchos puntos de referencia que lo demuestran. Para obtener una descripción general: http://stackoverflow.com/questions/145110/c-performance-vs-java-c y http://en.wikipedia.org/wiki/Java_performance. En general, puede escribir código incorrecto en cualquier idioma. Pero un buen programador puede escribir código que funciona igual de bien en Java y C/C++. –

0
  1. Java no es adecuado para la escritura de programas del núcleo debido a los programas de Java están diseñados para ejecutarse en una máquina virtual en lugar del sistema operativo subyacente de forma nativa. En una máquina virtual, lo que podemos hacer será limitado a cambio de una mayor seguridad. Mientras que la velocidad no es un problema importante aquí.

  2. No estoy seguro para otros desarrolladores, pero mi experiencia personal es que, a pesar de que se afirma que Java "escribe una vez, corre en cualquier lugar", hay bastantes comportamientos incoherentes de la JVM bajo diferentes sistemas operativos. Para superar esas incoherencias, los desarrolladores pueden tener que poner soluciones provisionales en sus programas para ofrecer una experiencia de usuario única. En el peor de los casos, simplemente no se puede arreglar sin modificar la JVM.Como resultado, hacer la base multiplataforma con librerías C/C++ podría ser menos doloroso porque tendrás el control de todos los componentes que escribes.

  3. Hay un cliente bittorrent llamado Vuze (solía ser Azureus) que es bastante famoso IMO. Puede echar un vistazo here.

0

¿Has oído hablar de Limewire?

+1

También hay softwares completos 3D hechos en Java. Por supuesto, no se puede esperar que Java se use para hacer programas de sistema ya que su plataforma es independiente (por supuesto no es la definición de "independiente" de la plataforma: poder ejecutarse en todos los sistemas de Windows) –

+0

Ahora que lo mencionas, acabo de recordar Runescape. MMORPG muy popular, y es un applet 3D de Java. –

Cuestiones relacionadas