File C# yang kita tulis hanyalah teks biasa, sedangkan prosesor komputer hanya mengerti instruksi bahasa mesin. Ada jurang besar di antara keduanya, dan memahami jembatan yang menghubungkan keduanya menjelaskan banyak hal: kenapa ada file .dll, kenapa error sintaks terdeteksi sebelum program berjalan, dan kenapa program yang sama dapat berjalan di Windows maupun Linux. Chapter ini mengikuti perjalanan sebuah program C# dari teks sampai output di layar.
Perjalanan Source Code Menjadi Output #
Ketika kita menjalankan perintah dotnet run, rangkaian berikut terjadi di belakang layar:
Tahapan tersebut dapat kita ringkas menjadi tiga langkah:
- Kompilasi. Compiler Roslyn memeriksa sintaks dan tipe data, lalu menerjemahkan source code menjadi bytecode bernama IL (Intermediate Language). Hasilnya disimpan sebagai file assembly — biasanya
.dll. - Eksekusi. Runtime CLR mengambil assembly tersebut. JIT compiler (just-in-time) menerjemahkan setiap method IL menjadi machine code sesuai prosesor komputer yang sedang dipakai.
- Hasil. Machine code dijalankan prosesor, dan program mulai menampilkan output.
Contoh Program Sederhana #
Mari kita lihat program yang akan menjadi teman utama kita di awal course. Berikut isi file Program.cs:
string nama = "Budi";
int tahunMulai = 2025;
int lamaBelajar = 1;
Console.WriteLine($"Halo, {nama}!");
Console.WriteLine($"Kamu mulai belajar C# pada tahun {tahunMulai}.");
Console.WriteLine($"Tahun ini adalah {tahunMulai + lamaBelajar}.");Ketika file tersebut dieksekusi dengan dotnet run, compiler dan runtime bekerja sesuai urutan di atas, lalu menghasilkan:
Output yang Dihasilkan:
Halo, Budi!
Kamu mulai belajar C# pada tahun 2025.
Tahun ini adalah 2026.Mari kita telaah baris-baris kode di atas:
- Baris 1 (
string nama = "Budi";): variablenamadideklarasikan dengan tipestringdan diisi teks"Budi". Compiler mengingat bahwanamahanya boleh menampung teks. - Baris 2 (
int tahunMulai = 2025;): variabletahunMulaibertipeintmenyimpan bilangan bulat2025. - Baris 3 (
int lamaBelajar = 1;): variablelamaBelajarmenyimpan angka1sebagai data untuk perhitungan. - Baris 5 (
Console.WriteLine($"Halo, {nama}!");): string interpolation — tanda$sebelum tanda kutip membuat compiler menyisipkan nilainamake posisi{nama}. MethodConsole.WriteLine()mencetak hasilnya beserta pindah baris. - Baris 6 (
Console.WriteLine($"Kamu mulai ...");): pola yang sama berlaku; nilaitahunMulaidisisipkan ke dalam teks sebelum dicetak. - Baris 7 (
Console.WriteLine($"Tahun ini adalah {tahunMulai + lamaBelajar}.");): expressiontahunMulai + lamaBelajardievaluasi terlebih dahulu menjadi2026, baru kemudian hasilnya disisipkan ke string.
Konsekuensi Bagi Kita #
Alur ini menjelaskan dua perilaku yang akan sering kita temui:
- Error sintaks terdeteksi lebih dulu. Kompilasi berlangsung sebelum eksekusi; kesalahan penulisan menghentikan proses build dan compiler melaporkan nomor barisnya.
- Satu assembly, banyak platform. Assembly berisi IL yang netral terhadap prosesor; JIT compiler di tiap sistem operasi menerjemahkannya menjadi machine code yang sesuai.
Tahapan kompilasi dan eksekusi tersebut melibatkan dua aktor besar: compiler dan runtime. Keduanya kita bedah lebih dalam pada Chapter Compiler dan Runtime.