JavaSvet - otvorena java zajednica

 
glavna stranica arr2javasvet  english version arr2java.net

Bytecode vs. Bytecode

Mateja Opačić
16 Nov 2004
Članak je objavljen u časopisu "COM", broj 157, strana 24.


Sada već davne 1995. godine kada se Java prvi put pojavila Miscrosoft je suvereno vladao alatima za programiranje i programskim jezicima i nije imao skoro nikakvu konkurenciju. Za samo 5-6 godina Java postaje najpopularniji programski jezik, tako da je Miscrosoft primoran da napravi neku promenu kako bi zadržao bar deo programera i vezao ih za Windows platformu i njihove alate. MS je predstavio svoj koncept savremenog programskog jezika, koji je veoma sličan Javi, pod nazivom C#. Ono što zaista donosi pravi preokret je .Net platforma koja obezbeđuje virtuelnu mašinu za izvršavanje aplikacija. Ovo je naravno koncept na kome je bazirana Java. Zahvaljujući ovom novom pristupu počeli su da se pojavljuju projekti koji omogućavaju pokretanje .Net aplikacija i na ne Windows operativnim sistemima. (Projekat Mono o kome je već bilo reči u ovom časopisu).

Virtuelna mašina?

Programer piše aplikaciju i kompajliranjem je prevodi u takozvani bytecode. Za razliku od ovog savremenog pristupa nekada (u C, C++, Paskal,...) su kompajleri pravili “native code”. “Native code” pravi kod koji se izvršava na ciljnom operativnom sistemu dok u slučaju bytecode pravi se kod za međusloj – virtuelnu mašinu koja taj kod posle tumači i prosleđuje operativnom sistemu. Iako je nakon pojave Jave bilo mnogo protivnika bytecode sistema, pogotovu iz MS tabora, na kraju se ipak došlo do zaključaka da takav sistem donosi mnogo više prednosti nego što ima mana. Iako postoji dosta razlika između Javine virtuelne mašine i .Net verzije ipak su oba sistema jako slična. Od pojave .Net platforme počelo se sa nagađanjima kako bi mogao da se napravi alat koji bi konvertovao Java kod u .Net i obrnuto. Napokon su se pojavili alati koji to rade i to izuzetno uspešno.

Microsoft-ovo jednosmerno rešenje

Kako je Microsoft-u jedan od glavnim marketinških poteza da Java programere vrati na svoju platformu, izdali su besplatno rešenje pod nazivom Java Language Conversion Assistant (JLCA). JLCA omogućava da svoje Java projekte prebacite na .Net Visual Studio projekat. Ovo donosi mogućnost da se neke aplikacije rađene pre svega za Linux platformu pretvore u Windows aplikacije. Microsoft je naravno pre svega imao na umu J2EE projekte mada bi i ostali Java projekti trebali biti bez problema konvertovani na Microsoftovu .Net platformu. Naravno da nije neophodno pretvarati Java kod u .Net kod da bi radio na Windowsu ali je neophodno ako želimo da taj kod dalje razvijamo u .Net-u ili da ga povežemo sa postojećim .Net projektom. JLCA u verziji 1 se nalazi na CD gde je i razvojno okruženje Visual Studio.NET 2003. Trenutno aktuelna verzija je JLCA 2 dok je verzija 3 u Beta fazi dostupna za download samo za beta testere. Verzija 3 obećava potpunu J2EE podršku. (Napomena: beta verzija nema sve potrebne fajlove tako da je neophodno da se ima instalirana bar verzija 1 pre nego što instalirate beta verziju 3 JLCA). Microsoft Javine tehnologije konvertuje u svoje tako da EJB komponente konvertuje u COM objekte. JDBC konvertuje u ODBC, JSP strane u ASP, JNDI kod u .Net directory serivces. AWT i Swing se konvertuju u odgovarajuće Windows i Web forme, a RMI se konvertuje u .Net remoting calls. Dobijeni C# kod je čisti .Net kod i nema ni traga od izvornog Java koda.

Pod ruku sa Microsoftom

Java.Net projekat firme Remotesoft je sličan Microsoftovom i omogućava da koristite Javu kao jedan od jezika .Net platforme. Ono što posebno izdvaja ovo rešenje je što i dalje možete da koristite Java sintaksu pa čak i da se pozivate na Sun-ove API-e pod uslovom da ih propustite kroz ovaj alat. Na primer Javin JDBC će se pojaviti kao native komponenta .Net platforme i možete da joj pristupate iz Javinog koda kao u nekom Java razvojnom okruženju. Naravno u svojim Java.Net aplikacijama ćete moći da koristite sve komponente .Net okruženja. Rezultat vašeg Java koda će biti exe ili dll kao i bilo kog drugog .Net programskog jezika. Da bi ovo sve bilo moguće Java.Net ima dve bitne komponente. Prva komponenta je za prevođenje Java koda u .Net (jnc.exe), a druga je za prevođenje Java klasa na .Net platformu (j2il.exe). Koncept koji se koristi u Java.Net projektu je malo drugačiji od Microsoftovog rešenja jer ne prevodi kod u C# već kod ostaje Javin.

I u kontra smeru

Kompanija Stryon je napravila kontra varijantu. Njihov proizvod iNet pretvara .Net kod iz VB.NET, C# ili J# u čist Java (J2EE) kod. Sposoban je da konvertuje i aplikacije i webservice. iNet radi tako što bytecod koji je generisan za .Net platformu konvertuje u čist Java kod koji posle može da se kompajlira za Java virtuelnu mašinu. Naravno sve Microsoftove tehnologije tipa ADO.Net, XML, i ASP.Net. kao i osnovne .Net biblioteke konvertuje u odgovarajuće Javine tehnologije. Jedan od sporednih efekata ove tehnologije je i mogućnost portovanja .Net aplikacija na Linux platformu, ili bilo koju drugu jer je Java prisutna na svim operativnim sistemima. Jedina mana ovog rešenja je cena. Za razliku od Microsofta koji svoje rešenje nudi besplatno, Stryon naplaćuje svoj trud. Tako da varijanta za Linux i Windows košta $995, za Unix sisteme košta $9.995, dok za mainframe iznosi čak $19.995. Naravno moguće je probati i besplatnu verziju koja traje 30 dana.

Dvosmerna ulica IKVM

Iako postoje verzije koje vas teraju da sa Jave prelazite na .Net platformu kao i one koje vam omogućavaju da .Net pretvarate u Java aplikacije verovatno najinteresantnije rešenje je kada možete bez nekih ograničenja da koristite najbolje iz oba sveta. Projekat IKVM je upravo to. IKVM je u stvari Java Virtuelna Mašina za .Net bytecod. IKVM ima nekoliko bitnih komponenti. Jedna od njih je kompajler koji Java bytecode pretvara u .Net bytecod. Na taj način možete Java aplikacije da konvertujete u .Net aplikacije i to na dva načina. Dinamički i Statički. Ako se Java kod statički pretvori u .Net kod onda on postaje dostupan kao kod i može da se dalje razvija u nekom .Net razvojnom okruženju. U slučaju dinamičkog prevođenja mogu da se koriste neke Javine napredne tehnike, kao što je učitavanje klasa u letu što naravno nije dostupno u statičkog varijanti, ali ovde nemamo kod u koji možemo da ubacimo pozive nekih .Net komponenti već samo izvršavamo Java aplikaciju kao .Net aplikaciju. Posebno interesantna komponenta je ikvmstub compiler, koji od .Net klasa pravi Java klase tako da možete da koristite .Net klase kao biblioteke za Java projekte. Naravno tako napravljen projekat može da se izvršava samo na IKVM JVM koja predstavlja posebnu komponentu ovog projekta i koja praktično predstavlja idealnu virtuelnu mašinu s obzirom da može da pokreće i .Net bytecode i Java bytecod. Iako je ceo ovaj projekat još u razvojnoj fazi već sada pokazuje jako velike potencijale i solidnu stabilnost. Najveći problem trenutne verzije je loša implementacija AWT i Swinga. Za razliku od Stryon-ovog rešenja ovo je besplatno.

I za kraj

Industrijski giganti su došli do jednostavnog zaključka da je ne isplativo opredeliti se samo za jednu platformu Javu ili .Net već je idealno da one koegzistiraju zajedno. Ovo dovodi programere u ne zavidan položaj da moraju da paralelno razvijaju aplikacije za obe platforme. Sada postoje i ovi alati, koje smo prikazali, koji omogućavaju programerima da koriste Java i .Net platforme po potrebi i bez bojazni da će im kod pravljen za jednu platformu biti beskoristan na drugoj.

Mateja Opačić – Digital Wizards

mateja@dw.co.yu

Korisni Linkovi

msdn.microsoft.com/vstudio/java/migrate/jlca
www.stryon.com
www.remotesoft.com
www.ikvm.net