GNU-kompilator för Java

GNU-kompilator för Java
Utvecklare GNU-projektet
Initial release 6 september 1998 ; 24 år sedan ( 1998-09-06 )
Slutlig utgåva
Edit this on Wikidata 6.5 / 26 oktober 2018
Operativ system Unix-liknande
Typ Kompilator
Licens GNU GPL
Hemsida gcc .gnu .org

GNU Compiler for Java ( GCJ ) är en nedlagd gratis kompilator för programmeringsspråket Java . Det var en del av GNU Compiler Collection .

GCJ kompilerar Java- källkod till Java Virtual Machine (JVM) bytecode eller till maskinkod för ett antal CPU-arkitekturer . Det kan också kompilera klassfiler och hela JAR som innehåller bytekod till maskinkod.

Historia

GCJ runtime-libraries originalkälla är från GNU Classpath- projektet, men det finns en kodskillnad mellan libgcj -biblioteken. GCJ 4.3 använder Eclipse Compiler för Java som front-end.

Under 2007 gjordes mycket arbete för att implementera stöd för Javas två grafiska API:er i GNU Classpath : AWT och Swing . Programvarustöd för AWT är fortfarande under utveckling. "När AWT-stödet fungerar kan Swing-stöd övervägas. Det finns åtminstone en delimplementering av Swing med fri programvara som kan vara användbar." GNU CLASSPATH slutfördes aldrig till ens Java 1.2-status och verkar nu ha övergivits helt.

Från och med 2015 tillkännagavs inga nya utvecklingar från GCJ och produkten var i underhållsläge , med Java-verktygskedjeutveckling med öppen källkod som mestadels skedde inom OpenJDK . GCJ togs bort från GCC- stammen den 30 september 2016. Tillkännagivandet om borttagandet gjordes i och med lanseringen av GCC 7.1, som inte innehåller den. GCJ förblir en del av GCC 6.

Prestanda

Kompileringsfunktionen i GCJ bör ha en snabbare uppstartstid än motsvarande bytekod som lanseras i en JVM när Java-kod kompileras till maskinkod.

Compiled Native Interface (CNI)

The Compiled Native Interface ( CNI ), tidigare kallat "Cygnus Native Interface", är ett mjukvaruramverk för GCJ som tillåter Java-kod att anropa och anropas av inbyggda applikationer (program specifika för en hårdvaru- och operativsystemplattform) och bibliotek skrivna i C++ .

CNI påminner mycket om JNI- ramverket (Java Native Interface) som kommer som standard med olika virtuella Java-maskiner .

Jämförelse av språkanvändning

Författarna till CNI hävdar olika fördelar jämfört med JNI:

Vi använder CNI för att vi tycker att det är en bättre lösning, speciellt för en Java-implementering som bygger på tanken att Java bara är ytterligare ett programmeringsspråk som kan implementeras med standardkompileringstekniker. Med tanke på det, och tanken att språk som implementeras med Gcc bör vara kompatibla där det är meningsfullt, följer det att Java-anropskonventionen bör vara lika lik som praktisk den som används för andra språk, särskilt C++, eftersom vi kan tänka på Java som en delmängd av C++. CNI är bara en uppsättning hjälpfunktioner och konventioner byggda på idén att C++ och Java har *samma* anropskonvention och objektlayout; de är binärt kompatibla. (Detta är en förenkling, men tillräckligt nära.)

CNI beror på att Java-klasser visas som C++-klasser. Till exempel, givet en Java-klass,

  

     
          
         0
 public  class  Int  {  public  int  i  ;  public  Int  (  int  i  )  {  detta  .  i  =  i  ;  }  offentlig  statisk  Int  noll  =  ny  Int  (  );  } 

man kan använda klassen så här:

 
 

    

     0
       
      
 #include  <gcj/cni.h>  #include  <Int>  Int  *  mult  (  Int  *  p  ,  int  k  )  {  if  (  k  ==  )  returnera  Int  ::  noll  ;  // Statisk medlemsåtkomst.  returnera  ny  Int  (  p  ->  i  *  k  );  } 

Se även

externa länkar