2 puan yazan GN⁺ 2023-08-02 | 1 yorum | WhatsApp'ta paylaş
  • ORC bellek yönetimi varsayılan hâle geldi
  • JavaScript backend’i int64 ve uint64 için varsayılan olarak BigInt kullanıyor; JS backend’iyle entegre çalışan kodlarda bu tipler kullanılıyorsa güncelleme gerekebilir
  • --experimental:strictEffects her zaman etkin; callback parametreleri için effectsOf anotasyonu gerekiyor
  • Dokümantasyon yorumlarının varsayılan işaretleme dili mevcut RstMarkdown modundan Markdown’a değişti; {.doctype: Markdown | RST | RstMarkdown.} pragma’sı ile md2html ve rst2html komutları eklendi
  • Standart kütüphanedeki os ile ilgili işlevlerin bir kısmı, Path soyutlamasını kullanan yeni arayüzlere ayrıldı ve std/oserrors, std/envvars, std/paths, std/dirs, std/files, std/symlinks, std/appdirs, std/cmdline modülleri olarak sunuluyor
  • Birçok standart kütüphane modülü Nimble paketlerine taşındı; std/punycode, std/asyncftpclient, std/smtp, std/db_*, std/md5, std/sha1, std/sums kullanırken nimble veya atlas kurulumu gerekiyor
  • İsimsiz bir block içinde isimsiz break kullanma yöntemi kullanımdan kaldırılıyor (deprecation) ve gelecek sürümlerde hata olacak
  • "strictFuncs" tanımı değişti; ref veya ptr dereference’larına kayıt yapmak yasaklandı
  • Değişkenlerde tuple unpacking, birden fazla atamaya genişleyen sözdizimsel şeker olarak işleniyor; iç içe tuple unpacking mümkün hâle geldi
  • top-down inference birçok temel senaryoda uygulandı; örnekteki seq[(float, byte, cstring)] başlatma kodu derleniyor
  • Nesne alanlarına varsayılan değer atanabiliyor; açıkça başlatılmayan alanlarda bu varsayılan değer kullanılıyor
  • Deneysel strictDefs anahtarı eklendi; değişkenlerin kullanılmadan önce açıkça değer atanıp atanmadığını denetliyor, let değişkenlerinin ise tam olarak bir kez atanıp atanmadığını kontrol ediyor
  • C++ birlikte çalışabilirliği için virtual pragma’sı ve genişletilmiş constructor pragma’sı eklendi; C++ constructor’larına ve virtual metotlarına eşlenen constructor ve virtual proc tanımları yapılabiliyor
  • Nimble 0.14 birlikte geliyor ve lock-file desteği sunuyor; kütüphane depolama konumu $nimbleDir/pkgs’den $nimbleDir/pkgs2’ye değişti

1 yorum

 
GN⁺ 2023-08-02
Hacker News yorumları
  • Nim’i production’da memnuniyetle kullanıyorum. Çoğunlukla veri analizi ve rapor oluşturma araçları geliştiriyorum; bunları sunucu script’lerinin çağırdığı CLI çalıştırılabilir dosyaları olarak derliyorum.
    Nim hızlı ve küçük çalıştırılabilir dosyalar üretir; heterojen JSON veri yapıları ve dataframe kütüphanesi iyidir. Stack’i güçlü biçimde tercih eder; bu yüzden sequence ve table gibi dinamik veri yapılarında bile stack üzerindeki pointer heap verisini gösterir, ömür ise stack frame tarafından yönetilir.
    Program içinde neredeyse hiç dinamik referans yok ve GC’yi dert etmem gerekmiyor. Tip sistemi basit ve makul; insanı kolayca doğru koda yönlendiriyor. Varsayılanlar da referans şeffaflığına yakın; açıkça dışına çıkmadığınız sürece her şey değişmez değer aktarımıdır.
    Generic’ler güçlü ve beklendiği gibi çalışıyor; evrensel fonksiyon çağırma sözdizimi akıl almaz derecede kullanışlı. Belirli bir tipi ilk argüman olarak alan prosedür ve fonksiyonlar yazmanız yeterli; böylece metod veya interface karşılığı olan şeyi yazabiliyorsunuz, bu soyutlamalara ihtiyaç azalıyor ve kod yapısı basit ve düz kalıyor.
    Eskiden D’yi keşfettiğim zamanı hatırlatacak kadar keyifli, hatta daha iyi. Neredeyse %100’ü iş mantığı olan, fazlalıksız, native derlenen ve tip anotasyonlu Python hayal ederseniz Nim deneyimine yakın olur.

    • Bu açıklama, stack’e konmuş bir C++ vector veya map gibi değil mi? Gerektiğinde içeride allocation yapar, container’ın tamamı scope dışına çıkınca yok edilir.
    • Nim’e bir göz atmak istedim. Build sistemi nasıl merak ediyorum. CMake gerçekten eziyet.
    • Gerçekten Python’a benziyor. Daha popüler olmasını isterim; çok daha kolay kullanılan bir Rust gibi görünüyor.
    • İyi görünüyor. Paket yönetimi ne durumda ve mevcut ekosistem ne kadar sağlam, merak ediyorum.
  • Bu sürümü denemeyi sabırsızlıkla bekliyorum. 25 yıldır profesyonel olarak programlama yapan biri olarak Nim’in birçok dünyanın iyi yanlarını güzelce bir araya getiren bir dil olduğunu düşünüyorum.
    Python gibi kullanımı kolay; güçlü tipli ama tip çıkarımı mükemmel, varsayılanları hızlı ve güvenli olacak şekilde ayarlanmış. Embedded’den yüksek başarımlı hesaplamaya kadar iyi uyuyor.
    UFCS, generic’ler ve concepts sayesinde OOP’nin avantajlarını alırken, organizasyon için kırılgan veri ilişkilerini sonsuza dek kuran iskele kodu yazma ihtiyacınız azalıyor. Python’dan farklı olarak belirsizlikler derleme hatası oluyor.
    Aynı programın çoğu başka dile göre çok daha küçük, okunur ve anlaşılır olduğunu hissediyorum. Arkada dönen sihir de fazla değil; çünkü varsayılanlar mantıklı.
    Compile-time metaprogramming başka bir seviyede. Ayrı bir lehçe ya da ikame oyunları olmadan dil tasarımının merkezinde yer alıyor ve kullanımı da sezgisel. Örneğin bir dosyadan özel parsing kodu üretmek kolay; tekrar eden boilerplate’i ortadan kaldırabiliyorsunuz ve derleme de hızlı.
    Üstün tip sistemi sayesinde Python’a göre iyi kod yazmak daha kolay, ama performansı C/C++ ile boy ölçüşüyor; küçük ve bağımsız çalıştırılabilir dosyalar olarak dağıtımı da çok kolay.
    C, C++, ObjC ve JS için native ABI, mükemmel FFI ve iyi Python birlikte çalışabilirliği var. Mevcut ekosistemleri yeniden yazmadan doğrudan kullanabiliyorsunuz.
    ESP32 için Python tarzı sözde kod yazdığınızı, bunun fazla çaba harcamadan çok verimli olduğunu ve istediğinizde bare-metal kontrol de yapabildiğinizi hayal edin. Aynı verimli dille hem backend’i hem frontend’i olan bir web uygulaması yazmak, hızlı bir bullet hell oyunu yapmak ve açıkça belirtmediğiniz sürece stack allocation olduğu için GC’yi dert etmemek gibi.
    İş açısından da Python gibi hızlı prototip çıkarıp, bunun zaten production için yeterince hızlı ve hafif olması büyük değer. Bir şirketin gizli silahı olabilir.

    • Oyunlarda ve ayrıntı veremeyeceğim başka amaçlarda script hedefi olarak Nim kullanıyorum. Çünkü C ve C++’a çevrilebiliyor.
      Alttaki runtime olan C ortamını doğrudan yönetirken, onun üzerinde JSON gibi şeylerin birinci sınıf desteklendiği modern, yüksek seviyeli bir dil kullanabilmek gerçekten güzel. Python’u seven biri olarak bile Nim daha iyi; daha iyi bir Python.
    • Backend ve frontend’i aynı verimli dille web uygulaması yazmak somut olarak nasıl çalışıyor, merak ediyorum.
      Özellikle geliştirme sırasında JS birlikte çalışabilirliği ne kadar rahat; Nim’i bağımsız bir kütüphane olarak JS’e derlemenin ötesine geçiyor mu bilmek isterim. Nim’den tarayıcı API’lerini doğrudan çağırmak ya da oldukça basit wrapper’larla çağırmak mümkün mü?
    • ESP32 üzerinde 22 kSPS ADC işleyen kod gibi mikrosaniyelerin önemli olduğu durumlarda, dürüst olmak gerekirse yaklaşık 2 saatlik tuning gerekti. O sırada Nim’i yeni öğreniyordum; işin çoğu ek allocation’dan kaçınmaktı.
      Yine de yaklaşık 4 yıl boyunca büyük bir performans gerilemesi ya da gerekli değişiklik olmadı.
  • Emeği geçen herkesi ve tüm Nim topluluğunu tebrik ederim. Son 10 yıldır Nim’i ana dilim olarak kullanıyorum ve Nim 2.0’ın yeni özelliklerini çok beğendim.
    Bazıları projelerim için gerçekten oyunu değiştiren özellikler. Örneğin object default values, teoride Norm[1]’un yalnızca object instance’larıyla değil, object type’larla da çalışmasını sağlayabilir. Yeni eklenen overload edilebilir enum’lar olmasaydı Karkas[2] hiç mümkün olmazdı. Gerçi hâlâ üzerinde çalışıyorum.
    [1] https://norm.nim.town
    [2] https://karkas.nim.town

    • Son değişiklikler içinde en çok default values’ı beğendim. Genel olarak kullanışlı ve initialization boilerplate’ini daha da azaltmakla kalmıyor, enum gibi şeylerde compile-time’da geçerli durum garanti etmeyi de mümkün kılıyor. Muhtemelen object variant’ları için de geçerlidir.
  • Nim yazılım geliştirmek için gerçekten iyi bir dil. Hızlıca dağıtım yapıp keyifli geliştirme yaparken çok performanslı yazılımlar üretebiliyorsunuz.
    Ancak deneyimime göre hâlâ keskin köşeleri var. C/C++ derleyicisi ve seçenekleriyle uyum sağlamanız gerekiyor; hata mesajları çok zayıf ve bazı kütüphaneler yalnızca belirli ayar ve sistemlerde çalışıyor. Yine de topluluğun küçük olduğunu düşününce bunu fazla suçlamak zor. VS Code entegrasyonu iyi çalıştı ve neredeyse hiç çökmedi.

  • Manning Publications bunu görürse, en güncel Nim sürümünü kapsayan bir kitabın çıkmasını isterim; ayrıca daha okunaklı yazı tipine sahip farklı bir dizgi düşünmelerini umarım
    Dominik Picheta’nın mükemmel kitabını satın aldım ama basılı kitabı, ince yazı tipi yüzünden gözlük yaptırmama rağmen okumak çok zordu; bu yüzden PDF’i kullanmak zorunda kaldım. Harflerin çizgi ve gövde gibi tipografik bileşenleri fazla ince
    Yaşlandım da sorun bende mi diye K&R 2. baskının orijinaliyle karşılaştırdım; o kitap hâlâ kusursuz şekilde okunabiliyordu

  • Reddit, Nim’i nasıl kullandığı hakkında bir yazı yazmıştı: https://www.reddit.com/r/RedditEng/comments/yvbt4h/why_i_enj...
    Giderek daha fazla büyük şirket ve startup Nim’i benimsiyor. Nim 2.0 için çok heyecanlıyım ve katkıda bulunan herkese çok teşekkür ederim

    • Giderek daha fazla büyük şirket ve startup’ın benimsiyor olması ilginç. Bununla ilgili istatistik ya da veri var mı, yoksa anekdot düzeyinde bir şey mi, merak ediyorum
      Anekdot düzeyinde olsa bile birkaç şirket adı verilebilir mi?
  • Nim bir süredir en sevdiğim dildi ve sonunda 2.0’ın yayımlanmış olmasına çok sevindim. Bu sürümdeki özelliklerin önemli bir kısmı uzun zamandır bekleniyordu
    Tek dezavantaj, en altta belirtildiği gibi bazı birlikte gelen modüllerin üçüncü taraf depolara taşınmış olması. Büyük bir sorun değil ama SQLite desteğinin kütüphanede yerleşik olması hoşuma gidiyordu. Birkaç veritabanını desteklemeye başladığınızda daha fazla veritabanı desteği baskısı da gelecektir. Yine de MD5 ve SHA1 desteğinin bile çıkarılması biraz şaşırtıcı

    • “Pilleri dahil” bir kütüphaneye girince kütüphanenin durağanlaşması kolay oluyor. Python 90’lardan beri bazı ölü pilleri yanında taşıyor ama orada buna ihtiyaç var
      Yol ya da günlükleme desteğinin standartta olması iyi, fakat bazı şeyler üçüncü taraf olarak kalırsa daha iyi evrilebilir
  • Emeği geçen herkesi tebrik ederim. Nim gerçekten ilginç bir dil gibi geliyor
    İşte kullanmak için bir gerekçe arıyorum. Benim işim mobilin çevresinde olduğu için JS ve ObjC’ye derlenebilmesi çekici geliyor ama şimdilik kurcalama düzeyinin ötesine geçemedim. Rust ile karşılaştırınca başlaması çok daha basit

    • Biraz bağlantılı olarak, Denim kullanırsanız Node.js/Bun içinden Nim kodu çağırabilirsiniz: https://github.com/openpeeps/denim
      Node eklentisi oluşturma yöntemiyle çalışıyor. Web uygulamalarında Nim kodunu yeniden kullanmak ya da performans açısından kritik kodlarda kullanmak için iyi
  • Birkaç ay önce Nim’e bakmıştım; özellikler açısından Python’da olmasını istediğim pek çok şey vardı. C/C++ ile kolay birlikte çalışabilirlik, statik tipler, derleme, Android/iOS’e çapraz derleyip çalıştırabilme gibi noktalar
    Ama dil yeni olmamasına rağmen ekosistemi küçük. Python’daki numpy, scipy, pandas, opencv gibi yüksek kaliteli kütüphaneler çok değil. Büyük oyuncuların benimsememesi üzücü; Unreal Engine’in kendi yeni betik dili Verse’ü yapmak yerine Nim’i benimsemeyi denemesini isterdim
    Bir diğer üzücü nokta, doğrudan adaptör yazmadan C/C++ kütüphaneleriyle anında birlikte çalışabilme özelliği. Sadece header’ı içe aktarınca iş bitse güzel olurdu
    Rust ile de benzer şekilde kolay birlikte çalışabilirlik olsa iyi olurdu. Benimsenmeyi artırabilir; çünkü Rust’ta mobil cihazlarda da pek sorun çıkarmadan çalışan yüksek kaliteli çapraz platform crate’ler bulmak daha kolay
    Birkaç yıl içinde daha hızlanmış Python, GIL’in kaldırılması, nuitka, mobil için briefcase gibi gelişmelerle Python’ın arayı kapatmasından ya da Mojo’nun Nim’in yerini almasından endişe ediyorum

    • Nim’i savunmak gerekirse numpy, scipy, pandas, opencv, pytorch, tensorflow, keras gibi devasa bir makine öğrenimi ekosistemine sahip olan dil fiilen yalnızca Python. ML/AI tarzı işleri Python dışı bir dille yapmak gerçekten zor
      Yine de Nim’de Python ile neredeyse sorunsuz birlikte çalışabilen nimpy kütüphanesi var. Yani PyTorch, scipy, opencv’yi doğrudan içe aktarıp Nim’de kullanabilirsiniz
  • Nim ve Zig’i pratikte kullanmış olan var mı merak ediyorum. İkisinin nasıl benzer ve farklı olduğunu duymak isterim. Nim v2 bazında iki dilin idiomatik web sunucusu benchmark’larını da görmek isterim

    • Hobi OS projemde ikisini de kullandım. Nim[1] ve Zig[2] kullandım; ben Nim’i çok daha fazla tercih ediyorum. Kod kısa ve zarif; dille boğuşmak yerine temel mantığa odaklanmamı sağlıyor
      Zig de iyi; optional değer desteğini ve hata işleme yaklaşımını seviyorum. Ama !?[]u8 gibi, uint8 çoklu işaretçisine optional pointer’ın error union’ını ifade eden gürültülü söz dizimi beni soğuttu
      Dinamik ayırma gerektiren çoğu kodda allocator hazırlayıp geçirmek zorunda olmak da temel mantığı bölüyor. String birleştirme veya biçimlendirme gibi küçük işler bile uğraşa dönüşüyor
      Zig’de dinamik dispatch de yok; bu yüzden polimorfik kod yazmak zor, bir tür duck typing ile etrafından dolaşmak gerekiyor. Sonuçta Zig’in bana uygun olmadığına karar verdim
      [1] https://github.com/khaledh/axiom
      [2] https://github.com/khaledh/axiom-zig
    • C kütüphanem için Zig, Nim, Odin ve Rust’a yönelik otomatik üretilmiş binding’leri sürdürüyorum. Rust binding’lerinin daha idiomatik olması için kesinlikle elden geçirilmesi gerekiyor
      Örneklere bakınca neredeyse aynı kodun farklı dillerde yazılmış hâli olduğu için büyük resmi anlayabiliyorsunuz; ama dil özellikleri açısından sadece yüzeyi kazıyorlar. Örneğin Zig örneği comptime özelliklerini kullanmıyor
      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
    • İkisiyle de program yazdım ama Nim kullanmayalı biraz oldu. Kod yazma keyfi açısından Nim daha iyiydi sanırım
      Zig daha sıkıcı, ama bunun hepsi iyi nedenlerden dolayı. Kişisel olarak bir OS’i Nim ile yazmazdım; Zig ise olgunlaştığında bu kullanım için harika olacak gibi. Ben gömülü yazılımda kullanmaya başladım
      Nim’i CLI araçları, sunucu uygulamaları, belki GUI uygulamaları ve oyunlar için kullanırdım
      Zig ekibi tüm derleyici altyapısına çok daha fazla emek veriyor gibi görünüyor ve deneyimime göre gerçekten etkileyici. Çok iyi yenilikler var
    • Nim ve Zig’i yeni projelerde kullandım. Somut farklar çok, ama özelliklerini basitçe anlatmak gerekirse Nim, Python benzeri bir İsviçre çakısını derlenen bir dil olarak yapmaya daha yakın
      Zig ise C’nin halefi ve alternatifi olma gibi belirli bir nişi hedefleyen çok daha odaklı bir dil ve bu hedefi çok iyi tutturuyor
      Dil tercihlerinin, şu an kullanılan dilin karşılayamadığı kişisel ihtiyaç ve isteklere bağlı olduğunu düşünüyorum. Ben C halefi olmayı hedefleme biçimini ilginç bulduğum için Zig tarafına yerleştim; ama başkalarının Nim’i seçme nedenlerini de anlıyorum
    • Zig’in TechEmpower Benchmarks implementasyonu yok gibi görünüyor ama Nim’in var: https://www.techempower.com/benchmarks/#section=data-r21&l=y...