[Programlama] Native Code ile Java Byte Code / MSIL Hakkında...

CrafterMan24

Arduino is my life :C
En iyi cevaplar
0
Merhaba arkadaşlar, bugün programlama ile alakalı bir konu açayım dedim.

Native Code'a derlenen ve derlenmeyen diller hakkında birkaç bilgi vereceğim.

Native Code'a derlenen diller, derleyicinin direkt olarak makine koduna dönüştürdüğü ve "Runtime Compilation" işlemine maruz kalmayan diller olarak örneklenebilir.

Bu diller: Assembly, C, C++, D, FreeBasic, ...

Native Code'a derlenmeyen, yani tam olarak makine koduna dönüşmeyen ve "Runtime Compilation" işlemine maruz kalan dillerdir.

Bu diller: Tüm .NET (Visual C#, Visual Basic, Visual F#, Managed Visual C++) Dilleri, Java, ...

Managed Visual C++, Visual C++'dan farklı olarak diğer .NET dilleri gibi MSIL, yani Microsoft Intermediate Language haline derlenir, tabii ki bu özellik Visual Studio 2010'dan sonra default olarak açık değil kapalı hale getirildi, açmak isterseniz yapmanız gereken bir form oluşturmaktır, form oluşturmak .NET Kütüphanelerini, dolayısıyla JIT (Just In Time) Runtime Derleyicisini çalıştıracağı için MSIL kodlarına derlenecektir.

Java için ise JIT derleyicisinin yerine JRE, yani Java Runtime Environment, MSIL'ın yerine ise Java Byte Code'u koyabiliriz...

.NET MSIL Kodu Örneği:

Kod:
.assembly extern mscorlib {}

.assembly Test
{
    .ver 1:0:1:0
}
.module test.exe

.method static void main() cil managed
{
    .maxstack 1
    .entrypoint
   
    ldstr "I am from the IL Language!"
   
    call void [mscorlib]System.Console::WriteLine (string)
    ret
}


Java Byte Code Örneği:

Kod:
0:   iconst_2
1:   istore_1
2:   iload_1
3:   sipush  1000
6:   if_icmpge       44
9:   iconst_2
10:  istore_2
11:  iload_2
12:  iload_1
13:  if_icmpge       31
16:  iload_1
17:  iload_2
18:  irem
19:  ifne    25
22:  goto    38
25:  iinc    2, 1
28:  goto    11
31:  getstatic       #84; // Field java/lang/System.out:Ljava/io/PrintStream;
34:  iload_1
35:  invokevirtual   #85; // Method java/io/PrintStream.println:(I)V
38:  iinc    1, 1
41:  goto    2
44:  return


İki tür dil arasındaki basit farklar bu kadar. Şimdi bunları biraz açalım, öncelikle "Runtime Compilation" nedir?

Runtime Compilation, aslında Native Code'a derlenmeyen dillerde yatıyor. Native Code'a derlenmeyen diller, ürettikleri Byte Code'u çıkış dosyasına yazdırarak, Just In Time derleyicisinin Byte Code'u derleyerek aşama aşama çalıştırma işlemi de diyebiliriz Runtime Compilation'a...

Ne yazık ki Native Code'a derlenmeyen diller, ortak platform amaçlı iyi olsa da, hız bakımında Native Code'a derlenemeyen dillerden geride kalıyor. Ayrıca Native Code'a derlenmeyen diller belirli bir JIT derleyicisine bağlı çalışacağından IL2CPU gibi üçüncü parti derleyiciler kullanılmadan işletim sistemi yapmak ne yazık ki mümkün olmuyor...

Kısacası her iki tür dilin de birbirlerine göre artıları ve eksileri var, yapacağınız projeye göre size en uygununu seçmeniz en mantıklısı olacaktır.

İyi forumlar! :)
 
Son düzenleme:
Üst