Nim 2.0 - Bahasa pemrograman yang berfokus pada paradigma pemrograman imperatif dan sistem makro
(nim-lang.org)- Manajemen memori ORC kini menjadi default
- Backend JavaScript kini menggunakan BigInt secara bawaan untuk
int64danuint64, sehingga kode yang menggunakan tipe tersebut saat berinteraksi dengan backend JS mungkin perlu diperbarui --experimental:strictEffectsselalu diaktifkan, dan parameter callback memerlukan anotasieffectsOf- Bahasa markup default untuk komentar dokumentasi berubah dari mode
RstMarkdownmenjadi Markdown, serta ditambahkan pragma{.doctype: Markdown | RST | RstMarkdown.}dan perintahmd2html·rst2html - Sebagian fungsi terkait
osdi pustaka standar dipisahkan ke antarmuka baru yang menggunakan abstraksiPath, dan disediakan melalui modulstd/oserrors,std/envvars,std/paths,std/dirs,std/files,std/symlinks,std/appdirs,std/cmdline - Sejumlah modul pustaka standar dipindahkan ke paket Nimble, sehingga penggunaan
std/punycode,std/asyncftpclient,std/smtp,std/db_*,std/md5,std/sha1,std/sumsmemerlukan instalasinimbleatauatlas - Penggunaan
breaktanpa nama di dalamblocktanpa nama dinyatakan usang (deprecated), dan akan menjadi error pada versi mendatang - Definisi
"strictFuncs"berubah sehingga penyimpanan ke hasil dereferensirefatauptrdilarang - Unpacking tuple pada variabel diperlakukan sebagai syntax sugar yang diperluas menjadi beberapa assignment, dan kini mendukung nested tuple unpacking
- Top-down inference kini diterapkan pada banyak kasus default, sehingga kode inisialisasi
seq[(float, byte, cstring)]pada contoh dapat dikompilasi - Kini dimungkinkan menetapkan nilai default untuk field objek, dan nilai tersebut akan digunakan untuk field yang tidak diinisialisasi secara eksplisit
- Switch eksperimental
strictDefsditambahkan untuk memeriksa apakah variabel telah diberi nilai secara eksplisit sebelum digunakan, dan apakah variabelletdi-assign tepat satu kali - Pada interoperabilitas C++, ditambahkan pragma
virtualdan pragmaconstructoryang diperluas, sehingga memungkinkan definisi konstruktor dan proc virtual yang dipetakan ke konstruktor dan metode virtual C++ - Nimble 0.14 disertakan bersama rilis ini, mendukung lock-file, dan lokasi penyimpanan library berubah dari
$nimbleDir/pkgsmenjadi$nimbleDir/pkgs2
1 komentar
Komentar Hacker News
Saya menggunakan Nim dengan puas di produksi. Utamanya saya membuat alat analisis data dan pembuatan laporan, lalu mengompilasinya menjadi executable CLI yang dipanggil oleh skrip server
Nim menghasilkan executable yang cepat dan kecil, serta punya struktur data JSON heterogen dan pustaka dataframe yang bagus. Nim sangat menyukai stack, sehingga struktur data dinamis seperti sequence dan table pun berupa pointer di stack yang menunjuk ke data heap, sementara masa hidupnya dikelola oleh stack frame
Hampir tidak ada referensi dinamis di dalam program, dan saya tidak perlu memikirkan GC. Sistem tipenya sederhana dan masuk akal, serta mudah mengarahkan kita ke kode yang benar. Nilai default-nya juga mendekati transparansi referensial; selama tidak keluar secara eksplisit, semuanya adalah nilai immutable yang diteruskan sebagai value
Generic-nya kuat dan berperilaku sesuai dugaan, dan sintaks pemanggilan fungsi universal sangat luar biasa berguna. Cukup membuat prosedur dan fungsi yang menerima tipe tertentu sebagai argumen pertama, maka Anda bisa menulis padanan method atau interface, sehingga abstraksi semacam itu tidak diperlukan dan struktur kode menjadi sederhana dan datar
Rasanya menyenangkan seperti saat dulu menemukan D, malah lebih baik. Bayangkan Python dengan anotasi tipe yang dikompilasi native, hampir 100% berisi logika bisnis tanpa embel-embel; itulah kira-kira pengalaman memakai Nim
Saya menantikan untuk mencoba rilis ini. Dari sudut pandang seseorang yang sudah 25 tahun memprogram secara profesional, Nim adalah bahasa yang menggabungkan keunggulan dari banyak dunia dengan baik
Mudah digunakan seperti Python, strongly typed tetapi type inference-nya sangat baik, dan default-nya dibuat cepat serta aman. Cocok dari embedded hingga high-performance computing
Berkat UFCS, generic, dan concepts, kita mendapat keunggulan OOP, tetapi lebih sedikit perlu menulis kode pijakan yang terus-menerus membangun relasi data rapuh demi organisasi. Berbeda dari Python, ambiguitas menjadi error kompilasi
Saya merasa program yang sama jauh lebih kecil, lebih mudah dibaca, dan lebih mudah dipahami dibanding kebanyakan bahasa lain. Tidak banyak sihir yang terjadi di balik layar, karena default-nya memang masuk akal
Metaprogramming saat compile time berada di level lain. Ia masuk ke inti desain bahasa tanpa dialek terpisah atau permainan substitusi, dan penggunaannya juga intuitif. Misalnya, mudah menghasilkan kode parsing khusus dari file untuk menghilangkan boilerplate berulang, dan kompilasinya juga cepat
Berkat sistem tipe yang luar biasa, menulisnya lebih mudah daripada Python, tetapi performanya setara C/C++, dan distribusinya pun sangat mudah sebagai executable kecil yang berdiri sendiri
Nim punya ABI native untuk C, C++, ObjC, JS, FFI yang hebat, serta interoperabilitas Python yang baik. Anda bisa memakai ekosistem yang sudah ada secara langsung tanpa menulis ulang
Bayangkan menulis pseudocode bergaya Python untuk ESP32, tetapi tanpa banyak usaha hasilnya sangat efisien, dan saat diinginkan Anda juga bisa melakukan kontrol bare-metal. Menulis aplikasi web dengan backend dan frontend dalam bahasa efisien yang sama, membuat game bullet hell yang cepat, sambil tidak khawatir soal GC karena selama tidak dinyatakan lain alokasinya di stack
Dari sudut pandang bisnis, nilainya besar karena Anda bisa membuat prototipe secepat Python, tetapi hasilnya sudah cukup cepat dan ringan untuk produksi. Ini bisa menjadi senjata rahasia perusahaan
Sangat menyenangkan bisa mengelola langsung lingkungan C sebagai runtime di bawahnya, sambil menggunakan bahasa modern tingkat tinggi di atasnya yang mendukung hal seperti JSON sebagai warga kelas satu. Meski saya menyukai Python, Nim adalah Python yang lebih baik dan lebih bagus
Terutama saya ingin tahu seberapa nyaman interoperabilitas JS saat pengembangan, dan apakah itu melampaui sekadar mengompilasi Nim menjadi library independen untuk JS. Bisakah API browser dipanggil langsung dari Nim, atau lewat wrapper yang cukup sederhana?
Meski begitu, selama sekitar 4 tahun tidak ada regresi performa besar atau perubahan yang diperlukan
Selamat kepada semua yang terlibat dan seluruh komunitas Nim. Saya telah menggunakan Nim sebagai bahasa utama selama 10 tahun terakhir, dan sangat menyukai fitur-fitur baru Nim 2.0
Beberapa di antaranya benar-benar mengubah permainan untuk proyek saya. Misalnya, nilai default objek secara teoritis bisa membuat Norm[1] bekerja tidak hanya dengan instance objek, tetapi juga dengan tipe objek. Tanpa enum overloadable yang baru ditambahkan, Karkas[2] tidak akan mungkin dibuat sama sekali. Meski masih dalam pengerjaan
[1] https://norm.nim.town
[2] https://karkas.nim.town
Nim adalah bahasa yang benar-benar bagus untuk menulis software. Anda bisa merilis dengan cepat dan mengembangkan dengan menyenangkan, sambil tetap membuat software yang sangat berperforma
Namun dari pengalaman saya, masih ada sisi-sisi tajam. Kita harus menyesuaikan compiler dan opsi C/C++, pesan error-nya sangat buruk, dan sebagian library hanya berjalan pada konfigurasi dan sistem tertentu. Meski begitu, mengingat komunitasnya kecil, sulit juga untuk terlalu menyalahkannya. Integrasi VS Code berjalan baik dan hampir tidak pernah crash
Jika Manning Publications melihat ini, saya berharap ada buku untuk versi Nim terbaru, dan mereka mempertimbangkan tata letak lain dengan font yang lebih mudah dibaca
Saya membeli buku bagus karya Dominik Picheta, tetapi versi cetaknya sangat sulit dibaca meski sudah memakai kacamata karena font-nya tipis, jadi saya harus memakai PDF. Komponen font seperti goresan dan batangnya terlalu tipis
Karena saya sudah berumur, saya sempat mengira ini masalah saya, lalu membandingkannya dengan edisi asli K&R edisi ke-2, dan buku itu masih bisa dibaca dengan sempurna
Reddit menulis tentang bagaimana mereka menggunakan Nim: https://www.reddit.com/r/RedditEng/comments/yvbt4h/why_i_enj...
Semakin banyak perusahaan besar dan startup yang mengadopsi Nim. Saya sangat menantikan Nim 2.0 dan sangat berterima kasih kepada semua yang berkontribusi
Kalau pun anekdotal, bisakah menyebutkan beberapa nama perusahaan?
Nim sudah lama menjadi bahasa favorit saya, dan saya sangat senang akhirnya 2.0 dirilis. Banyak fitur kali ini adalah hal-hal yang sudah lama ditunggu
Satu-satunya kekurangan adalah, seperti disebutkan di bagian paling bawah, beberapa modul bawaan dipindahkan ke repositori pihak ketiga. Bukan masalah besar, tetapi saya suka dukungan SQLite yang dulu sudah tertanam di library. Memang, begitu mulai mendukung beberapa database, akan ada tekanan untuk mendukung lebih banyak database. Namun agak mengejutkan juga bahwa dukungan MD5 dan SHA1 ikut dihapus
Dukungan untuk path atau logging memang bagus ada di standar, tetapi beberapa hal sebaiknya menjadi pihak ketiga agar bisa berevolusi dengan lebih baik
Selamat untuk semua yang terlibat. Nim terasa seperti bahasa yang benar-benar menarik
Saya sedang mencoba mencari alasan untuk memakainya di pekerjaan. Pekerjaan saya berada di sekitar mobile, jadi fakta bahwa Nim bisa dikompilasi ke JS dan ObjC menarik, tetapi sejauh ini saya belum melampaui tahap coba-coba. Dibandingkan Rust, memulainya jauh lebih sederhana
Cara kerjanya seperti membuat addon Node. Cocok untuk menggunakan ulang kode Nim di aplikasi web atau untuk kode yang sensitif terhadap performa
Beberapa bulan lalu saya melihat Nim, dan dari sisi fitur ada banyak hal yang saya harap ada di Python. Misalnya interoperabilitas mudah dengan C/C++, static typing, kompilasi, serta bisa cross-compile dan berjalan di Android/iOS
Namun meski bahasanya tidak baru, ekosistemnya kecil. Tidak banyak library berkualitas tinggi seperti numpy, scipy, pandas, opencv di Python. Sayang tidak ada pemain besar yang mengadopsinya, dan rasanya akan menarik kalau Unreal Engine mencoba mengadopsi Nim alih-alih membuat bahasa scripting baru sendiri, Verse
Hal lain yang disayangkan adalah kemampuan interoperabilitas langsung dengan library C/C++ tanpa harus membuat adapter sendiri. Akan bagus jika cukup mengimpor header saja
Akan bagus juga jika ada interoperabilitas yang sama mudahnya dengan Rust. Itu bisa meningkatkan adopsi, karena di Rust lebih mudah menemukan crate lintas platform berkualitas tinggi yang juga berjalan tanpa banyak masalah di perangkat mobile
Saya khawatir dalam beberapa tahun, Python yang makin cepat, penghapusan GIL, nuitka, briefcase untuk mobile, dan sebagainya akan membuat Python mengejar, atau Mojo akan mengambil posisi Nim
Meski begitu, Nim punya library nimpy yang memungkinkan interoperabilitas hampir mulus dengan Python. Artinya PyTorch, scipy, dan opencv bisa langsung diimpor dan dipakai di Nim
Saya penasaran apakah ada yang benar-benar pernah memakai Nim dan Zig. Ingin mendengar bagaimana keduanya mirip dan berbeda. Saya juga ingin melihat benchmark web server idiomatis untuk kedua bahasa, berdasarkan Nim v2
Zig juga bagus, dan saya suka dukungan nilai opsional serta pendekatannya terhadap penanganan error. Namun, saya kurang suka sintaks yang berisik seperti
!?[]u8untuk menyatakan error union dari pointer opsional ke multi-pointer uint8Keharusan menyiapkan dan meneruskan allocator di sebagian besar kode yang membutuhkan alokasi dinamis juga mengganggu logika inti. Pekerjaan kecil seperti penggabungan string atau pemformatan pun jadi merepotkan
Zig juga tidak memiliki dynamic dispatch, sehingga sulit menulis kode polimorfik, dan harus diakali dengan semacam duck typing. Pada akhirnya saya menyimpulkan Zig tidak cocok untuk saya
[1] https://github.com/khaledh/axiom
[2] https://github.com/khaledh/axiom-zig
Dari contoh-contohnya, kita bisa mendapat gambaran besar karena pada dasarnya kode yang hampir sama ditulis dalam beberapa bahasa, tetapi dari sisi fitur bahasa ini baru menyentuh permukaannya saja. Misalnya, contoh Zig tidak memakai fitur comptime
Zig: https://github.com/floooh/sokol-zig/tree/master/src/examples
Nim: https://github.com/floooh/sokol-nim/tree/master/examples
Odin: https://github.com/floooh/sokol-odin/tree/main/examples
Rust: https://github.com/floooh/sokol-rust/tree/main/examples
Zig lebih membosankan, tetapi itu semua karena alasan yang baik. Secara pribadi saya tidak akan menulis OS dengan Nim, tetapi Zig tampaknya akan sangat bagus untuk penggunaan itu setelah matang. Saya mulai memakainya untuk software embedded
Nim akan saya pakai untuk tool CLI, aplikasi server, dan mungkin juga aplikasi GUI serta game
Tim Zig tampaknya mencurahkan jauh lebih banyak upaya pada keseluruhan infrastruktur compiler, dan berdasarkan pengalaman saya itu benar-benar mengesankan. Ada banyak inovasi hebat
Zig adalah bahasa yang jauh lebih terfokus, menargetkan ceruk tertentu sebagai penerus dan pengganti C, dan ia sangat tepat mengenai sasaran itu
Menurut saya preferensi bahasa bergantung pada kebutuhan dan keinginan pribadi yang tidak terpenuhi oleh bahasa yang sedang digunakan. Saya sendiri menetap di Zig karena tertarik pada pendekatannya yang menargetkan penerus C, tetapi saya juga mengerti mengapa orang lain memilih Nim