Wednesday, August 1, 2012

Yeni Bir Sanal Makina Kodu ve Derleyicisi - LLVM

Ismindeki VM harfleri cogunlukla insanlara bu urunun JVM gibi sanal bir makina oldugu intibaini veriyorsa da aslinda kendilerinin de soyledigi gibi LLVM bir "derleyici ve alakali araclardan olusan bir alet cantasidir". Degisik olan tarafi LLVM'in kendisinin tanimladigi temiz, sade bir sanal makina koduna derleme yapiyor olmasi, ve bilinen, taninan mikrociplerin kodlarina bu genel koddan sonra gecilmesi. Bazi yeni yaklasimlar kullanarak bu ortak makina kodu hizli, optimal bir hale getirmek icin kullanilmis, boylece nihai makina kodu da daha hizli hale getirilmis oluyor. Bundan sonra artik herhangi bir bilgisayar dili LLVM ile bu genel makina koduna derlenirse, bu optimizasyonlari bedava elde etmis olacak. JVM'den farki burada, sadece bu temel islere odakli, bu yuzden bir cop toplayici (garbage collector'a) sahip degil mesela.

LLVM'in beni en cok ilgilendiren kismi Python'un istenen parcalarinin hizli bir koda derlenebilmesine ihtimal vermesi ve diller arasi iletisim. Mesela artik kullanmadigim Java dili ile yazilmis bir kodu Python ile genisletebilmeliyim (Jython ile degil), bu da eger her iki dil icin LLVM derleyicisi mevcut ise mumkun olabilir, ve iki taraf ta normal kullanim sekillerinden feragat etmek zorunda olmazlar (Python'u Jython ile kullanirsak, boyle yapmis oluyoruz mesela, Numpy, Scipy gibi yerel Python'da yani cython ile calisan bir suru ozellik kaybediliyor).

Pek cok yerden dillerin LLVM'e gecirildigini duyuyoruz. Mesela Google Python'un ana cython derleyicisi, yorumlayicisini Unladen Swallow diye bir proje ile LLVM'e gecirme cabasi surada

http://code.google.com/p/unladen-swallow/

Yine Python (ve ozellikle Numpy icin) Numpy'in yaraticisinin baslattigi yeni sirket ContiuumIO'dan Numba

http://numba.github.com/numba/

Rubinius Ruby'nin LLVM'e gecirilme cabasi

http://rubini.us/

LLVM'in VM olmadigini soylemistik, ama tabii ki LLVM kullanan bir VM gayet mantikli, mesela cop toplayici vs burada eklenebilir, ki VMkit bunu yapmis

http://vmkit.llvm.org/

Bunun gibi pek cok diger proje var, bunlarin bir listesi surada bulunabilir

http://llvm.org/ProjectsWithLLVM/

Bitirirken sunu belirtmek iyi olur, LLVM JVM ile degil, GCC ile rekabet etmekte.

No comments: