2 poin oleh GN⁺ 2023-08-02 | 1 komentar | Bagikan ke WhatsApp
  • Manajemen memori ORC kini menjadi default
  • Backend JavaScript kini menggunakan BigInt secara bawaan untuk int64 dan uint64, sehingga kode yang menggunakan tipe tersebut saat berinteraksi dengan backend JS mungkin perlu diperbarui
  • --experimental:strictEffects selalu diaktifkan, dan parameter callback memerlukan anotasi effectsOf
  • Bahasa markup default untuk komentar dokumentasi berubah dari mode RstMarkdown menjadi Markdown, serta ditambahkan pragma {.doctype: Markdown | RST | RstMarkdown.} dan perintah md2html·rst2html
  • Sebagian fungsi terkait os di pustaka standar dipisahkan ke antarmuka baru yang menggunakan abstraksi Path, dan disediakan melalui modul std/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/sums memerlukan instalasi nimble atau atlas
  • Penggunaan break tanpa nama di dalam block tanpa nama dinyatakan usang (deprecated), dan akan menjadi error pada versi mendatang
  • Definisi "strictFuncs" berubah sehingga penyimpanan ke hasil dereferensi ref atau ptr dilarang
  • 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 strictDefs ditambahkan untuk memeriksa apakah variabel telah diberi nilai secara eksplisit sebelum digunakan, dan apakah variabel let di-assign tepat satu kali
  • Pada interoperabilitas C++, ditambahkan pragma virtual dan pragma constructor yang 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/pkgs menjadi $nimbleDir/pkgs2

1 komentar

 
GN⁺ 2023-08-02
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

    • Bukankah penjelasan itu seperti C++ vector atau map yang diletakkan di stack? Secara internal ia mengalokasikan saat diperlukan, lalu seluruh container dihancurkan ketika keluar dari scope
    • Saya jadi ingin melihat Nim. Penasaran seperti apa build system-nya. CMake benar-benar menyakitkan
    • Benar-benar terlihat seperti Python. Semoga makin populer, dan tampak seperti Rust yang jauh lebih mudah digunakan
    • Kelihatannya bagus. Saya penasaran bagaimana kondisi manajemen paket-nya, dan seberapa solid ekosistemnya saat ini
  • 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

    • Saya menggunakan Nim sebagai target scripting untuk game dan penggunaan lain yang tidak bisa saya jelaskan detailnya. Alasannya karena Nim bisa ditranspilasi ke C dan C++
      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
    • Saya penasaran secara konkret bagaimana cara kerja menulis aplikasi web dengan backend dan frontend dalam bahasa efisien yang sama
      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?
    • Untuk kasus ketika mikrodetik penting, seperti kode yang menangani ADC 22 kSPS di ESP32, sejujurnya diperlukan sekitar 2 jam tuning. Saat itu saya baru mulai belajar Nim, jadi sebagian besar pekerjaannya adalah menghindari alokasi tambahan
      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

    • Di antara perubahan terbaru, default adalah yang paling saya sukai. Selain berguna secara umum dan makin mengurangi boilerplate inisialisasi, ini juga memungkinkan menjamin state yang valid saat compile time pada hal seperti enum. Mungkin juga berlaku untuk varian objek
  • 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

    • Menarik bahwa semakin banyak perusahaan besar dan startup yang mengadopsinya. Saya penasaran apakah ada statistik atau data terkait, atau ini hanya cerita anekdotal
      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

    • Jika masuk ke library “batteries included”, library cenderung mandek. Python masih membawa sebagian baterai mati sejak tahun 90-an, tetapi di sana itu diperlukan
      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

    • Sedikit terkait, dengan Denim Anda bisa memanggil kode Nim dari Node.js/Bun: https://github.com/openpeeps/denim
      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

    • Untuk membela Nim, sebenarnya hampir hanya Python yang punya ekosistem machine learning raksasa seperti numpy, scipy, pandas, opencv, pytorch, tensorflow, keras. Melakukan pekerjaan bergaya ML/AI dengan bahasa selain Python memang sangat sulit
      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

    • Saya pernah memakai keduanya di proyek OS hobi. Saya menggunakan Nim[1] dan Zig[2], dan saya jauh lebih menyukai Nim. Kodenya ringkas dan elegan, serta membuat saya fokus pada logika inti alih-alih bertarung dengan bahasanya
      Zig juga bagus, dan saya suka dukungan nilai opsional serta pendekatannya terhadap penanganan error. Namun, saya kurang suka sintaks yang berisik seperti !?[]u8 untuk menyatakan error union dari pointer opsional ke multi-pointer uint8
      Keharusan 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
    • Saya memelihara binding yang dibuat otomatis untuk library C saya, untuk Zig, Nim, Odin, dan Rust. Binding Rust jelas perlu dipoles agar lebih idiomatis
      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
    • Saya pernah menulis program dengan keduanya, tetapi sudah agak lama tidak memakai Nim. Sepertinya Nim lebih menyenangkan untuk dipakai menulis kode
      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
    • Saya pernah memakai Nim dan Zig di proyek baru. Ada banyak perbedaan spesifik, tetapi jika disederhanakan, Nim lebih dekat ke upaya membuat pisau Swiss Army ala Python dalam bentuk bahasa terkompilasi
      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
    • Zig tampaknya tidak memiliki implementasi TechEmpower Benchmarks, tetapi Nim punya: https://www.techempower.com/benchmarks/#section=data-r21&l=y...