Nim adalah bahasa pemrograman tujuan umum yang dikompilasi menjadi kode native, yakni instruksi mesin yang dijalankan langsung oleh prosesor. Kode sumbernya diterjemahkan oleh compiler, yaitu program yang mengubah kode sumber menjadi bentuk lain yang dapat dieksekusi. Sintaks Nim meniru Python melalui indentasi yang signifikan, sedangkan mekanisme kompilasinya melalui C mewarisi performa dan portabilitas dunia C. Topik ini membahas posisi Nim di antara bahasa lain, cara kerja kompilasinya, tiga backend utamanya, dan program kecil yang dikompilasi dengan Nim 2.4.0.
Karakteristik utama Nim#
Nim tergolong bahasa terkompilasi, yaitu seluruh kode sumber diterjemahkan menjadi biner sebelum program dijalankan. Pola ini berbeda dari bahasa yang dieksekusi langsung oleh interpreter seperti Python, yang membutuhkan runtime, yakni lingkungan eksekusi bahasa yang terpasang di setiap mesin tempat program berjalan. Hasil kompilasi Nim berupa biner yang dijalankan sistem operasi secara langsung, sehingga program dapat didistribusikan tanpa memasang Nim pada mesin tujuan.
Nim juga bertipe statis, sehingga tipe setiap variabel diperiksa pada waktu kompilasi dan ketidakcocokan tipe terdeteksi sebelum program berjalan. Di sisi sintaks, blok kode ditandai dengan indentasi sebagaimana Python, bukan dengan kurung kurawal sebagaimana C atau Java. Contoh berikut memperlihatkan blok percabangan yang tubuhnya ditentukan oleh lekukan baris:
if suhu > 30:
echo "Panas"
else:
echo "Sejuk"Baris echo yang menjorok ke dalam adalah tubuh blok, dan pergantian lekukan menandai akhir blok tersebut. Penandaan blok dengan indentasi membuat kode Nim terbaca lebih pendek daripada padanan C-nya tanpa mengorbankan kejelasan struktur.
Pengelolaan memori bawaan pada Nim 2.4 menggunakan skema ORC, yang mengatur pembersihan objek melalui penghitungan referensi dan membersihkan siklus referensi secara otomatis. Pengembang tidak perlu melepas memori secara manual seperti pada C, tetapi juga tidak bergantung pada pengumpul sampah yang menghentikan eksekusi sewaktu-waktu. Pembersihan yang bersifat deterministik semacam ini menghindarkan program dari jeda eksekusi yang tidak terduga saat program berjalan.
Cara kerja kompilasi melalui C#
Compiler Nim tidak langsung menghasilkan instruksi mesin. Kode Nim terlebih dahulu ditranspilasi, yaitu diterjemahkan ke bahasa pemrograman lain, menjadi kode C. Selanjutnya compiler C seperti GCC atau Clang mengompilasi kode tersebut menjadi biner native. Dua tahap itu berlangsung otomatis dalam satu perintah, sehingga pengguna tidak perlu memanggil compiler C secara terpisah.
Penempatan C sebagai perantara bukan kebetulan. Compiler C telah dimatangkan selama puluhan tahun di beragam arsitektur prosesor dan sistem operasi, sehingga Nim mewarisi jangkauan platformnya tanpa menulis ulang backend untuk setiap arsitektur. Optimasi yang tersedia pada compiler C juga langsung dimanfaatkan oleh hasil transpilasi tersebut. Selain itu, karena hasil antaranya berupa kode C, pustaka C dapat dipanggil dari Nim dengan mudah, sebuah kemampuan yang menjadi fondasi interoperabilitas bahasa ini.
Diagram berikut merangkum alur dari berkas sumber hingga biner yang siap dijalankan.
Meski keluaran antaranya berupa kode C, itu bukan berarti kode Nim berubah menjadi C secara harfiah. Pemetaannya berstruktur, sehingga pesan error tetap menunjuk baris pada berkas .nim aslinya, bukan baris pada kode C yang dihasilkan.
Tiga backend utama#
Bagian compiler yang menghasilkan kode untuk bahasa target disebut backend. Nim menyediakan tiga backend utama untuk tiga kebutuhan yang berbeda. Backend C merupakan pilihan bawaan dan menjadi target default perintah nim c. Backend C++ diaktifkan melalui nim cpp ketika proyek perlu ditautkan dengan kode C++ yang sudah ada. Backend JavaScript diaktifkan melalui nim js dan menghasilkan berkas .js yang dijalankan browser, sehingga logika program yang sama dapat digunakan di sisi server maupun di browser.
Selain ketiganya, compiler juga menyediakan backend Objective C melalui nim objc, sedangkan backend berbasis LLVM masih berstatus eksperimental. Semua backend berbagi frontend yang sama, sehingga pemeriksaan tipe dan sebagian besar pustaka standar berlaku sama di setiap target. Perbedaan yang paling terasa ada pada hasil akhirnya, yaitu biner native untuk backend C dan C++, serta berkas JavaScript untuk target browser. Pilihan backend tidak mengubah cara menulis kode, tetapi memengaruhi cara program didistribusikan. Biner hasil backend C dijalankan langsung di mesin target tanpa memasang Nim, sedangkan keluaran nim js dipasangkan dengan halaman web sebagaimana berkas JavaScript lainnya.
Program pertama: dari sumber menjadi biner#
Berkas halo.nim berikut adalah program Nim yang lengkap dan dapat langsung dikompilasi. Baris pertama menampilkan satu baris teks, sedangkan perulangan for mengulang tiga kali dengan bantuan variabel i. Tubuh perulangannya diletakkan dua spasi ke dalam, persis seperti gaya penulisan Python.
echo "Halo, dunia!"
for i in 1 .. 3:
echo "Perulangan ke-", iKompilasi dan eksekusi dilakukan dengan satu perintah. Perintah nim c mengompilasi melalui backend C, sedangkan sakelar -r langsung menjalankan biner yang dihasilkan.
# mengompilasi sekaligus menjalankan halo.nim
nim c -r --hints:off halo.nimHalo, dunia!
Perulangan ke-1
Perulangan ke-2
Perulangan ke-3Secara bawaan, compiler juga menampilkan hint, yaitu pesan progres berisi konfigurasi yang digunakan, statistik jumlah baris, dan lokasi biner hasil kompilasi. Contoh pada jalur ini menonaktifkan hint dengan --hints:off agar keluarannya ringkas. Program menghasilkan empat baris keluaran, satu dari echo pertama dan tiga dari perulangan yang menghitung 1 hingga 3.
Hasil kompilasi berupa biner bernama halo yang diletakkan di direktori yang sama dengan berkas sumbernya. Biner itu dijalankan sistem operasi secara langsung tanpa interpreter, memperlihatkan sifat terkompilasi Nim secara nyata. Proses yang sama, dengan backend yang berbeda, menghasilkan kode C++ atau JavaScript bila sakelarnya diganti.
Ringkasan#
- Nim adalah bahasa terkompilasi bertipe statis dengan sintaks mirip Python, yaitu blok kode ditandai indentasi dan tanpa kurung kurawal.
- Compiler Nim menerjemahkan kode sumber menjadi kode C, lalu compiler C seperti GCC menghasilkan biner native.
- Backend utamanya adalah C, C++, dan JavaScript, ditambah Objective C, sedangkan backend LLVM masih eksperimental.
- Pengelola memori bawaan Nim 2.4 adalah ORC, berbasis penghitungan referensi dengan pembersihan siklus referensi.
Referensi#
- Nim version 2.4.0 released — The Nim Team — Pengumuman resmi rilis Nim 2.4.0 pada 28 Oktober 2026 beserta rangkuman perubahannya.
- Nim Compiler User Guide — The Nim Team — Panduan resmi compiler yang mencakup backend c, cpp, objc, dan js serta perintah compile, run, dan doc.
- Nim Tutorial (Part I) — The Nim Team — Tutorial resmi versi 2.4.0 untuk mempelajari sintaks dasar Nim bagi pembaca yang mengenal konsep pemrograman dasar.