Bir dilden başka bir dile ait kodları çağırmak
İbrahim 2016-04-20, 18:35 #1
Konu adı: Bir dilden başka bir dile ait kodları çağırmak
Selamun Aleykum. Benim merak ettiğim konu mesela C++ içerisinde Java kodlarını nasıl cagirabiliyoruz? Yani bunun mantığı nedir? Örnek olmasi amacıyla QAndroidExtras kullanarak java kodları cagirabiliyoruz ama bu modülü yazanlar temelde nasıl yapıyorlar? Teşekkürler.
acehreli (Moderatör) 2016-04-20, 19:17 #2
Hızlıca baktım: JNI (Java Native Interface) ile yapılıyormuş. JNI; C, C++ vs. dillerle yazılmış programların içine JVM (Java Virtual Machine) yerleştirerek programın o Java ortamıyla etkileşmesini sağlıyormuş.
zekeriyadurmus 2016-04-21, 00:17 #3
Ali hocamın cevabına ek olarak;
Java gibi bir sanal makine üzerinde çalıştırılan executable bir dosyaya bir diğer deyişle makine koduna derlenmeyen dillerde Ali hocamın da dediği gibi o dilin yorumlayıcısını (Bu durumda Java) kullandığın dil içerisinde çağırman gerek.
Örnek vermek gerekirse oyunları c++ ile yazarken oyun içi bazı yerleri python, lua gibi scripting diller ile yazıp hız ve zamandan tasarruf yapıyorlar. Bunun içinse o dilin derleyici/yorumlayıcı ne var ise onun fonksiyonlarını çağırmak.
https://github.com/ariovistus/pyd bu projeyi incelersen D üzerinden nasıl python çağırılmış görebilirsin.
Benzer bir şekilde java yı da bu şekilde çağırmak mümkündür.
Gelelim ikinci noktaya. Eğer dilimiz c, c++ gibi makine koduna derleniyorsa. Aşağıdaki örnekte işlemin nasıl yapıldığını görebilirsin o yüzden sadece mantığını anlatacağım. Programı derlediğimizde saf bir object dosyası oluşur bu dosya linker işleminden geçtikten sonra executable dosya oluşturulmuş olur. Linker işleminden geçirirken başka bir dilde yazılıp derlenmiş object dosyasını da linker işlemine dahil edersek ve uygun bir şekilde header tanımlamalarını yaparsak 2 farklı dilde derlenmiş olan kodlar birbirine bağlanabilir ve beraber çalışabilir.
Birazcık araştırdığımda c üzerinden java yı nasıl çağırabileceğimize yönelik aşağıdaki linki buldum. Gerekli kütüphaneleri projeye dahil ettiğinde rahatlıkla çağırabilirsin.
Şu an: 2018-01-22, 15:53:17 (UTC -08:00)