Kompilator GNU dla Javy

Kompilator GNU dla Javy
Deweloperzy Projekt GNU
Pierwsze wydanie 6 września 1998 ; 24 lata temu ( 06.09.1998 )
Ostateczne wydanie
Edit this on Wikidata 6.5 / 26 października 2018 r
System operacyjny Uniksopodobny
Typ Kompilator
Licencja GNU GPL
Strona internetowa gcc .gnu .org

Compiler for Java ( GCJ ) jest wycofanym darmowym kompilatorem języka programowania Java . Był częścią kolekcji kompilatorów GNU .

kod źródłowy Java do kodu bajtowego maszyny wirtualnej Java (JVM) lub do kodu maszynowego dla wielu architektur procesorów . Może również kompilować pliki klas i całe pliki JAR zawierające kod bajtowy do kodu maszynowego.

Historia

Oryginalne źródło GCJ runtime-libraries pochodzi z projektu GNU Classpath , ale istnieje różnica w kodzie między bibliotekami libgcj . GCJ 4.3 używa Eclipse Compiler for Java jako front-end.

W 2007 roku wykonano wiele pracy, aby zaimplementować obsługę dwóch graficznych interfejsów API Javy w GNU Classpath : AWT i Swing . Wsparcie oprogramowania dla AWT jest wciąż w fazie rozwoju. „Kiedy obsługa AWT działa, można rozważyć obsługę Swing. Istnieje co najmniej jedna częściowa implementacja Swing w wolnym oprogramowaniu , która może być użyteczna”. ŚCIEŻKA GNU CLASSPATH nigdy nie została ukończona nawet do stanu Java 1.2, a teraz wydaje się, że została całkowicie porzucona.

Począwszy od 2015 r., nie ogłoszono żadnych nowych rozwiązań ze strony GCJ, a produkt był w trybie konserwacji , a rozwój łańcucha narzędzi Java typu open source odbywał się głównie w ramach OpenJDK . GCJ został usunięty z pnia GCC 30 września 2016 r. Ogłoszenie jego usunięcia nastąpiło wraz z wydaniem GCC 7.1, które go nie zawiera. GCJ pozostaje częścią GCC 6.

Wydajność

Funkcja kompilacji w GCJ powinna mieć szybszy czas uruchamiania niż równoważny kod bajtowy uruchamiany w JVM podczas kompilacji kodu Java do kodu maszynowego.

Skompilowany interfejs natywny (CNI)

Compiled Native Interface ( CNI ), poprzednio nazywany „Cygnus Native Interface”, jest strukturą programową dla GCJ, która umożliwia kodowi Java wywoływanie i bycie wywoływanym przez natywne aplikacje (programy specyficzne dla sprzętu i platformy systemu operacyjnego) oraz biblioteki napisane w C++ .

CNI bardzo przypomina platformę JNI (Java Native Interface), która jest standardem w różnych wirtualnych maszynach Java .

Porównanie użycia języka

Autorzy CNI twierdzą, że mają różne zalety w stosunku do JNI:

Używamy CNI, ponieważ uważamy, że jest to lepsze rozwiązanie, zwłaszcza w przypadku implementacji języka Java, która opiera się na założeniu, że Java jest po prostu kolejnym językiem programowania, który można zaimplementować przy użyciu standardowych technik kompilacji. Biorąc to pod uwagę oraz pomysł, że języki zaimplementowane przy użyciu Gcc powinny być kompatybilne tam, gdzie ma to sens, wynika z tego, że konwencja wywoływania w Javie powinna być tak samo praktyczna, jak konwencja używana w innych językach, zwłaszcza w C++, ponieważ możemy myśleć o Javie jako o podzbiór C++. CNI to po prostu zestaw funkcji pomocniczych i konwencji opartych na założeniu, że C++ i Java mają *taką samą* konwencję wywoływania i układ obiektów; są kompatybilne binarnie. (Jest to uproszczenie, ale wystarczająco bliskie.)

CNI zależy od klas Java pojawiających się jako klasy C++. Na przykład, biorąc pod uwagę klasę Java,

  

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

można użyć klasy w ten sposób:

 
 

    

     0
       
      
 #include  <gcj/cni.h>  #include  <Int>  Int  *  mult  (  Int  *  p  ,  int  k  )  {  if  (  k  ==  )  return  Int  ::  zero  ;  // Statyczny dostęp członka.  zwróć  nowy  Int  (  p  ->  i  *  k  );  } 

Zobacz też

Linki zewnętrzne