2010-11-12 18 views
13

La pregunta puede parecer tonta al principio, pero tal vez no lo sea en absoluto.¿Qué es exactamente Java?

  • Java no es el lenguaje Java, la mayoría de las personas saben que, ya que se puede programar Java con lots of other langauges como Scala o Groovy

  • Java no es una aplicación VM concreta, ya que hay otra aplicación por ahí, no solo de SUN, Microsoft o IBM.

  • Java no es el marco de clase ya que muchas implementaciones agregan o dejan de lado las clases a voluntad.

  • ni siquiera es una especificación que VM común o incluso el código de bytes de Java debe ser utilizado, ver Dalvik VM

  • Tal vez es sólo un conjunto de principios que comparten, lo que sea. Definitivamente no es "Escribe una sola vez, corre a todas partes", ya que este no es el caso, al menos para Dalvik y Microsoft VM/J #.

Entonces la pregunta es, ¿qué es exactamente Java? ¿Hay incluso una definición exacta?

EDIT Mucha gente parece tener la opinión de que java solo significa el lenguaje de programación. Por lo tanto, un teléfono móvil habilitado para Java debe ser un teléfono que permita al usuario usar programas que consisten en archivos de clases creados únicamente con el lenguaje Java. Si esto fuera cierto, la java virtual machine/java runtime environment/java development kit se crearía solo para java y otros jvm tendrán sus propios xvm/xre/xdk correspondientes.

+6

+1 Definitivamente no es una pregunta tonta. – helpermethod

+2

En cuanto a la pregunta sobre la especificación de VM no común, eso es falso ya que me he vinculado a él en mi comentario sobre la respuesta de Andrzej. La VM Dalvik no pretende ser una JVM. (Otorgado Oracle está actualmente demandando a Google por este punto.) – Poindexter

+0

http://www.jwz.org/doc/java.html: El hecho es que hay cuatro cosas completamente diferentes que llevan el nombre '' Java ' ': Un idioma; Una enorme biblioteca de clases; Una máquina virtual; Un modelo de seguridad. –

Respuesta

39

Java es el lenguaje Java, en realidad. Groovy, Scala y otros compilar hasta un bytecode equivalente que se puede ejecutar en la JVM, pero no son Java.

Formalmente, diría que Java es el JLS.

+7

+1 Esta es la respuesta correcta. La especificación es todo para un idioma. Todo lo demás es solo detalles de implementación. – Poindexter

+0

@Poindexter: su afirmación solo es válida si Java es un lenguaje. :) – MicSim

+3

@McSim: Yo diría que el término "Java" se refiere al idioma. La "Máquina virtual Java (JVM)" es una entidad relacionada pero completamente separada. La JVM tiene un idioma separado (el bytecode) y tiene una especificación separada: http://java.sun.com/docs/books/jvms/ – Poindexter

6

Java es un lenguaje de programación. La parte de sintaxis

+5

¿No es la parte semántica? – Ishtar

5

En mi opinión es el idioma. No creo que la gente diga que están programando Java con Groovy, o si lo hacen, están siendo inexactos.

1

La mayoría de las personas ven a Java como el lenguaje de programación (como se define en la Especificación del lenguaje Java). Pero hay muchos otros que lo dividen en el lenguaje de programación, las diversas máquinas virtuales y el ecosistema más grande.

También hay definiciones legales de lo que puede llamarse de Java (por ejemplo, la marca comercial), pero creo que voy a dejar que uno solo en el momento :-)

3

En realidad, depende del contexto donde se usa la palabra Es todo: sintaxis, tecnología, marco, lenguaje de programación.

Como comentario, Oracle responde a esta pregunta de la siguiente manera: What is Java? Java

+0

Interesante. Oracle parece pensar que es tanto el lenguaje como la "plataforma" (VM?) – justkt

5

En sentido estricto es un lenguaje de programación. Pero es un lenguaje de programación que incluye muchos, muchos estándares: por ejemplo, muchas API y especificaciones de JVM. Es por eso que SUN y otros se refieren a ella como una plataforma.

Otros lenguajes como Scala, Ruby, etc. son no Java, simplemente compilan en código de bytes que se ejecuta en una máquina virtual Java. Solo se basan en la plataforma Java, pero no son Java.

La JVM está altamente estandarizada y muchas empresas pueden y ofrecen sus propias implementaciones para sus plataformas de hardware. Esto tampoco es Java, estas son solo implementaciones de una parte de la plataforma Java.

La especificación de Java VM es 100% estandarizada, algo que forzará Oracle ya que reclaman el derecho de autor sobre Java. Es por eso que el Android (Dalvik VM) está actualmente sujeto a un caso judicial de Oracle contra Google.

2

No se puede decir que Scala sea Java más de lo que se puede decir que un tenedor es un peine solo porque se cepilla el pelo con él. O, si puedo mostrar la analogía clásica, clavar las uñas con la llave inglesa no lo convierte en un martillo.

Puede hacer un compilador que compila COBOL en C++ si lo desea, pero eso no significa que COBOL sea C++.

Muchos idiomas tienen el código de máquina x86 como idioma compilado, ¿significa esto que son todos lo mismo?

No importa si otros idiomas pueden compilarse en el bytecode de la JVM, ni importa que usted pueda compilar Java en el código máquina de una arquitectura específica. La JVM sigue siendo la plataforma de Java; otros idiomas simplemente lo comparten, y es muy posible que Java pueda compilar objetivos que no sean el bytecode de JVM. De la misma manera que un tenedor, simplemente es capaz de peinar tu cabello dependiendo de cómo lo manejes.

Creo que esta es una pregunta tonta (y no tiene nada que ver con la programación además). ¿Es posible que alguien actúe como un filósofo renacentista y trate de argumentar que su tenedor es en realidad un peine porque nunca lo ha usado como tenedor y siempre lo usa solo en el cabello? Claro, adelante y discuta, y tal vez incluso tenga un punto, pero ojalá nadie pierda su tiempo escuchándolo. Todo esto es solo un juego de semántica, y una vez que comienzas a discutir sobre semántica todo el mundo pierde.

(editar) ¡Bah! ¡Me acabo de dar cuenta de que estoy discutiendo sobre semántica!

+0

¡Oh, no, si COBOL se convierte en código nativo y C++ se convierte en código nativo significa que COBOL es C++, entonces HipHop convirtió C++ en PHP! – JAL