stringtranslate.com

Compilador GNU para Java

El compilador GNU para Java ( GCJ ) es un compilador gratuito descontinuado para el lenguaje de programación Java . Era parte de la Colección de Compiladores GNU . [3] [4]

GCJ compila el código fuente de Java en código de bytes de máquina virtual Java (JVM) o en código de máquina para varias arquitecturas de CPU . También podría compilar archivos de clase y JAR completos que contengan código de bytes en código de máquina. [5] [6]

Historia

La fuente original de las bibliotecas de tiempo de ejecución de GCJ proviene del proyecto GNU Classpath , pero existe una diferencia de código entre las libgcjbibliotecas. GCJ 4.3 utiliza el compilador Eclipse para Java como interfaz. [7]

En 2007, se trabajó mucho para implementar soporte para las dos API gráficas de Java en GNU Classpath : AWT y Swing . El soporte de software para AWT aún está en desarrollo. "Una vez que el soporte AWT esté funcionando, se podrá considerar el soporte Swing. Hay al menos una implementación parcial de software libre de Swing que puede ser utilizable". [8] GNU CLASSPATH nunca se completó ni siquiera hasta el estado de Java 1.2 y ahora parece haber sido abandonado por completo.

A partir de 2015, no se anunciaron nuevos desarrollos por parte de GCJ y el producto estaba en modo de mantenimiento , y el desarrollo de la cadena de herramientas Java de código abierto se realiza principalmente dentro de OpenJDK . [9] GCJ fue eliminado del tronco de GCC el 30 de septiembre de 2016. [10] [11] El anuncio de su eliminación se realizó con el lanzamiento de GCC 7.1, que no lo contiene. [12] GCJ sigue siendo parte del GCC 6.

Actuación

La función de compilación en GCJ debería tener un tiempo de inicio más rápido que el código de bytes equivalente lanzado en una JVM al compilar código Java en código de máquina. [13]

Interfaz nativa compilada (CNI)

La interfaz nativa compilada ( CNI ), anteriormente denominada "interfaz nativa Cygnus", es un marco de software para GCJ que permite que el código Java llame y sea llamado por aplicaciones nativas (programas específicos de una plataforma de hardware y sistema operativo) y Bibliotecas escritas en C++ .

CNI se parece mucho al marco JNI (Java Native Interface) que viene como estándar con varias máquinas virtuales Java .

Comparación del uso del lenguaje

Los autores de CNI afirman varias ventajas sobre JNI: [14]

Usamos CNI porque creemos que es una mejor solución, especialmente para una implementación de Java que se basa en la idea de que Java es simplemente otro lenguaje de programación que se puede implementar utilizando técnicas de compilación estándar. Teniendo en cuenta eso, y la idea de que los lenguajes implementados usando Gcc deberían ser compatibles cuando tenga sentido, se deduce que la convención de llamada de Java debería ser lo más similar posible a la utilizada para otros lenguajes, especialmente C++, ya que podemos pensar en Java como un subconjunto de C++. CNI es sólo un conjunto de funciones auxiliares y convenciones basadas en la idea de que C++ y Java tienen la *misma* convención de llamadas y diseño de objetos; son compatibles binariamente. (Esta es una simplificación, pero lo suficientemente cercana).

CNI depende de que las clases de Java aparezcan como clases de C++. Por ejemplo, [15] dada una clase Java,

clase pública Int { pública int i ; público Int ( int i ) { este . yo = yo ; } public static Int cero = nuevo Int ( 0 ); }                    

se puede utilizar la clase así:

#incluye <gcj/cni.h> #incluye <Int>  Int * mult ( Int * p , int k ) { si ( k == 0 ) return Int :: cero ; // Acceso a miembros estáticos. devolver nuevo Int ( p -> i * k ); }                

Ver también

Referencias

  1. ^ Anthony Green, Soluciones Cygnus. "Anuncio de GCJ".
  2. ^ "Lanzamientos del CCG - Proyecto GNU".
  3. ^ "GCJ: El compilador GNU para Java - Proyecto GNU - Free Software Foundation (FSF)". Archivado desde el original el 9 de mayo de 2007 . Consultado el 22 de abril de 2010 .
  4. ^ Campbell, Bill (2013). Introducción a la construcción de compiladores en un mundo Java. CRC Press Taylor & Francis Group. ISBN 978-1-4398-6088-5. Consultado el 6 de febrero de 2014 .
  5. ^ "Compilación de Java con GCJ | Linux Journal".
  6. ^ "Compilador GNU para Java".
  7. ^ "gcj utilizará el compilador Eclipse como interfaz". 2007-01-08. Archivado desde el original el 9 de mayo de 2007 . Consultado el 20 de mayo de 2007 .
  8. ^ Preguntas frecuentes de GCJ
  9. ^ GCC busca desactivar Java y reemplazarlo con Go o ADA
  10. ^ Andrew Haley (30 de septiembre de 2016). "[gcc] Revisión 240661".
  11. ^ Tromey, Tom (2 de octubre de 2016). "La eliminación de gcj". Los acantilados de la inanidad . Consultado el 3 de octubre de 2016 .
  12. ^ "Serie de lanzamientos de GCC 7: cambios, nuevas funciones y correcciones" . Consultado el 9 de mayo de 2017 .
  13. ^ "GCJ: el compilador estático de Java GNU" (PDF) . Archivado desde el original (PDF) el 7 de junio de 2011 . Consultado el 2 de agosto de 2009 .
  14. ^ Preguntas frecuentes de GCJ - Proyecto GNU - Free Software Foundation (FSF)
  15. ^ El ejemplo proviene de: https://gcc.gnu.org/onlinedocs/gcj/Objects-and-Classes.html#Objects-and-Classes Archivado el 20 de octubre de 2016 en Wayback Machine.

Enlaces externos