Překladač GNU pro Javu - GNU Compiler for Java

Překladač GNU pro Javu
Gcj2.png
Vývojáři Projekt GNU
První vydání 6. září 1998 ; Před 23 lety ( 06.09.1998 )
Konečné vydání
6.5 / 26. října 2018 ; Před 2 roky ( 26. 10. 2018 )
Operační systém Unixové
Typ Překladač
Licence GNU GPL
webová stránka gcc .gnu .org

GNU Compiler pro Javu ( GCJ ) je zdarma překladač pro programovací jazyk Java . Byla součástí kolekce kompilátorů GNU více než deset let, ale od roku 2017 již není udržována a nebude součástí budoucích verzí.

GCJ kompiluje zdrojový kód Java do bajtového kódu Java Virtual Machine nebo do strojového kódu pro řadu architektur CPU . Mohlo by to také kompilovat soubory třídy a celé JAR, které obsahují bytecode, do strojového kódu.

Dějiny

Původní zdroj runtime knihoven GCJ je z projektu GNU Classpath , ale mezi libgcjknihovnami je rozdíl v kódu . GCJ 4.3 používá jako front-end kompilátor Eclipse pro Javu.

V roce 2007 bylo provedeno mnoho práce na implementaci podpory dvou grafických API Java v GNU Classpath : AWT a Swing . Softwarová podpora pro AWT je stále ve vývoji. "Jakmile podpora AWT funguje, je možné uvažovat o podpoře Swingu. Existuje alespoň jedna částečná implementace Swingu v bezplatném softwaru, kterou lze použít.". GNU CLASSPATH nebyl nikdy dokončen ani do stavu Java 1.2 a nyní se zdá, že byl zcela opuštěn.

Od roku 2015 nebyly od GCJ oznámeny žádné nové vývojové události a produkt byl v režimu údržby , přičemž vývoj open-source nástroje Java se většinou odehrával v rámci OpenJDK . GCJ byl odstraněn z kufru GCC 30. září 2016. Oznámení o jeho odstranění bylo učiněno s vydáním GCC 7.1, které jej neobsahuje. GCJ zůstává součástí GCC 6.

Výkon

Při kompilaci kódu Java do strojového kódu by funkce kompilace v GCJ měla mít rychlejší čas spuštění než ekvivalentní bytecode spuštěný v JVM.

Kompilované nativní rozhraní (CNI)

Kompilovaný Native Interface ( CNI ), dříve s názvem „Cygnus Native Interface“, je software rámec pro GCJ, který umožňuje kód v jazyce Java hovoru , a být nazýván tím, nativních aplikací (programy specifické pro hardware a operačního systému platformy) a knihovny napsané v C ++ .

CNI se velmi podobá rámci JNI (Java Native Interface), který je standardem různých virtuálních strojů Java .

Porovnání používání jazyka

Autoři CNI tvrdí o různých výhodách oproti JNI:

CNI používáme, protože si myslíme, že je to lepší řešení, zejména pro implementaci Java, která je založena na myšlence, že Java je jen další programovací jazyk, který lze implementovat pomocí standardních kompilačních technik. Vzhledem k tomu a myšlence, že jazyky implementované pomocí Gcc by měly být kompatibilní tam, kde to dává smysl, vyplývá, že konvence volání v jazyce Java by měla být stejně praktická jako praktická v jiných jazycích, zejména v jazyce C ++, protože o Javě můžeme uvažovat jako o podmnožina C ++. CNI je jen sada pomocných funkcí a konvencí postavených na myšlence, že C ++ a Java mají * stejnou * konvenci volání a rozložení objektů; jsou binárně kompatibilní. (Toto je zjednodušení, ale dost blízko.)

CNI závisí na třídách Java, které se zobrazují jako třídy C ++. Například vzhledem k třídě Java

public class Int
{
   public int i;
   public Int(int i) { this.i = i; }
   public static Int zero = new Int(0);
}

třídu lze použít takto:

#include <gcj/cni.h>
#include <Int>

Int *mult(Int *p, int k)
{
  if (k == 0)
    return Int::zero;  // Static member access.
  return new Int(p->i * k);
}

Viz také

Reference

externí odkazy