1. Main Idea

ุฅุญู†ุง ุนู†ุฏู†ุง ุชู‚ุฑูŠุจู‹ุง ู†ูุณ ุงู„ูู„ูˆ ููŠ ุงู„ู†ุงุญูŠุชูŠู†:

ููŠ C# / .NET

ู„ู…ุง ุชูƒุชุจ ูƒูˆุฏ C#:

  1. ุจุชูƒุชุจ C# source code
  2. ุงู„ู€ C# compiler ุจูŠุญูˆู„ู‡ ู„ู€ Intermediate Language (IL) + ุดูˆูŠุฉ metadata ูˆุจูŠุญุทู‡ู… ููŠ assembly
    (ู…ู„ู .dll ุฃูˆ .exe)
  3. ูˆู‚ุช ุงู„ุชุดุบูŠู„ุŒ ุงู„ู€ CLR (Common Language Runtime) ุจูŠุงุฎุฏ ุงู„ู€ IL ูˆุจูŠุญูˆู„ู‡ ุจู€ JIT Compiler ู„ู€ native machine code ุงู„ู„ูŠ ุงู„ู…ุนุงู„ุฌ ูŠูู‡ู…ู‡.

ููŠ Java

  1. ุจุชูƒุชุจ Java source code
  2. ุงู„ู€ javac ุจูŠุญูˆู„ู‡ ู„ู€ bytecode ููŠ ู…ู„ู .class
  3. ูˆู‚ุช ุงู„ุชุดุบูŠู„ุŒ ุงู„ู€ JVM (Java Virtual Machine) ูŠุง ุฅู…ุง:
    • ุชูุณุฑ ุงู„ู€ bytecode ู…ุจุงุดุฑุฉุŒ ุฃูˆ
    • ุชุณุชุฎุฏู… JIT compiler ูˆุชุญูˆู„ู‡ ู„ู€ native machine code.

ุฅุฐู† ู…ู† ุงู„ุขุฎุฑ:

  • ุงู„ู€ IL ููŠ .NET
  • ุงู„ู€ bytecode ููŠ Java

ุงู„ุงุชู†ูŠู† ุนุจุงุฑุฉ ุนู† ู„ุบุฉ ูˆุณูŠุทุฉ ู…ุด ู…ุฑุชุจุทุฉ ู…ุจุงุดุฑุฉ ุจุงู„ู€ CPU.


2. Main Difference

ููŠ Java:

  • ุงู„ู€ platform ู…ุนู…ูˆู„ ุฃุณุงุณู‹ุง ุญูˆุงู„ูŠู† ู„ุบุฉ ูˆุงุญุฏุฉ: Java
  • ูŠุนู†ูŠ ุชู‚ุฑูŠุจู‹ุง ูƒู„ ุงู„ู€ toolchain ู…ุชุฎูŠู„ ุฅู†ูƒ ุจุชูƒุชุจ Java (ููŠ ู„ุบุงุช ุชุงู†ูŠุฉ ููˆู‚ JVM ุจุณ ุฏู‡ ู…ุด ุชุตู…ูŠู…ู‡ุง ุงู„ุฃุตู„ูŠ).

ููŠ .NET:

ูŠุนู†ูŠ:

  • ุชู‚ุฏุฑ ุชูƒุชุจ C#
  • ุฃูˆ VB.NET
  • ุฃูˆ F#
  • ุฃูˆ ุฃูŠ ู„ุบุฉ ุชุงู†ูŠุฉ targeting .NET

ูˆููŠ ุงู„ุขุฎุฑ ูƒู„ู‡ ุจูŠุทู„ุน IL ูˆูŠุชุดุบู„ ุนู„ู‰ ู†ูุณ ุงู„ู€ CLR.

ูู€ ุงู„ูุฑู‚:

  • ุงู„ู€ Java bytecode ู…ุนู…ูˆู„ ุฃุณุงุณู‹ุง ุนุดุงู† Java.
  • ุงู„ู€ .NET IL ู…ุนู…ูˆู„ ู…ู† ุงู„ุฃูˆู„ ุนุดุงู† ูŠูƒูˆู† target ู…ุดุชุฑูƒ ู„ุฃูƒุชุฑ ู…ู† ู„ุบุฉ.

3. Example

ู†ุงุฎุฏ ุฏุงู„ุฉ ุจุณูŠุทุฉ ุจุชุฌู…ุน ุนุฏุฏูŠู†.

C# code

public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}

ู„ู…ุง ุชูƒูˆู…ุจุงูŠู„ ุงู„ูƒูˆุฏ ุฏู‡ุŒ ุงู„ู€ C# compiler ู‡ูŠุทู„ุน IL (ู‡ูƒุชุจู„ูƒ ุดูƒู„ ู…ุจุณุทุŒ ู…ุด ู„ุงุฒู… ูŠุจู‚ู‰ 100% ู…ุทุงุจู‚ ู„ุฅุฎุฑุงุฌ ุงู„ูƒูˆู…ุจุงูŠู„ุฑ):

.class public Calculator extends [System.Runtime]System.Object
{
    .method public hidebysig instance int32 Add(int32 a, int32 b) cil managed
    {
        .maxstack 2
        .locals init (
            [0] int32 result
        )
 
        ldarg.1        // load a
        ldarg.2        // load b
        add            // a + b
        stloc.0        // store in result
        ldloc.0        // load result
        ret            // return result
    }
}

ุงู„ู„ูŠ ู…ู‡ู… ู‡ู†ุง ุฅู†:

  • ุงู„ู€ .method ุจุชุนุฑู ุงู„ู…ูŠุซูˆุฏ
  • ุงู„ู€ ldarg.1 ูˆ ldarg.2 ุจูŠุญู…ู‘ู„ูˆุง ุงู„ุจุฑุงู…ูŠุชุฑุฒ
  • ุงู„ู€ add ุจูŠุฌู…ุนู‡ู…
  • ุงู„ู€ ret ุจูŠุฑุฌุน ุงู„ู‚ูŠู…ุฉ

ุฏู‡ ูƒู„ู‡ ุจูŠุชู‚ุฑูŠ ุนู† ุทุฑูŠู‚ ุงู„ู€ CLR ุจุนุฏูŠู† ูˆูŠุชุญูˆู‘ู„ ู„ู€ native code.


Java code

ู†ูุณ ุงู„ููƒุฑุฉ ููŠ Java:

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
}

ู„ู…ุง ุชูƒู…ุจุงูŠู„ ุจู€ javac, ู‡ูŠุทู„ุน Calculator.class ููŠู‡ bytecode. ุชู‚ุฏุฑ ุชุดูˆูู‡ ุจุฃู…ุฑ ุฒูŠ javap -c Calculator. ุดูƒู„ ู…ุจุณุท ู…ู† ุงู„ู€ bytecode ูŠูƒูˆู† ุฒูŠ:

public int add(int a, int b);
  Code:
     0: iload_1       // load a
     1: iload_2       // load b
     2: iadd          // a + b
     3: ireturn       // return result

ุจุฑุถู‡ ู‡ู†ุง:

  • ุงู„ู€ iload_1 ูˆ iload_2 ุจูŠุญู…ู„ูˆุง ุงู„ุจุฑุงู…ูŠุชุฑุฒ
  • ุงู„ู€ iadd ุจูŠุฌู…ุน
  • ุงู„ู€ ireturn ุจูŠุฑุฌุน

ุงู„ู€ JVM ุจุชู‚ุฑุฃ ุงู„ู€ bytecode ุฏู‡ุŒ ูˆุชูุณู‘ุฑู‡ ุฃูˆ ุชุญูˆู„ู‡ ู„ู€ native code.


4. Summary

ู†ู„ุฎุตู‡ุง ูƒุฏู‡:

  1. ุงู„ุงุชู†ูŠู† intermediate representation:
    • ู…ุด machine code ู…ุจุงุดุฑ
    • ู…ุด ุงู„ูƒูˆุฏ ุงู„ู„ูŠ ุงู†ุช ูƒุชุจุชู‡
  2. ุงู„ุงุชู†ูŠู† cross-platform:
    • ุงู„ู€ IL ุจูŠุดุชุบู„ ุนู„ู‰ ุฃูŠ platform ููŠู‡ CLR
    • ุงู„ู€ Bytecode ุจูŠุดุชุบู„ ุนู„ู‰ ุฃูŠ platform ููŠู‡ JVM
  3. ุงู„ูุฑู‚ ุงู„ู…ู‡ู… ููŠ ุงู„ุชุตู…ูŠู…:
    • ุงู„ู€ Java bytecode: ู…ุนู…ูˆู„ุฉ ุฃุณุงุณู‹ุง ู„ู„ุบุฉ Java
    • ุงู„ู€ .NET IL: ู…ุนู…ูˆู„ุฉ ู…ู† ุงู„ุจุฏุงูŠุฉ ุนุดุงู† ุชูƒูˆู† common target ู„ู„ุบุงุช ู…ุฎุชู„ูุฉ ุนู„ู‰ ู†ูุณ ุงู„ู€ runtime
  4. ุงู„ุงุชู†ูŠู† ุจูŠุนุฏูˆุง ุนู„ู‰ ู…ุฑุญู„ุฉ JIT compilation ููŠ runtime ุนุดุงู† ูŠุจู‚ูˆุง native machine code.