Nim 2.0 - Emirsel programlama paradigmasına ve makro sistemine odaklanan programlama dili
(nim-lang.org)- ORC bellek yönetimi varsayılan hâle geldi
- JavaScript backend’i
int64veuint64için varsayılan olarak BigInt kullanıyor; JS backend’iyle entegre çalışan kodlarda bu tipler kullanılıyorsa güncelleme gerekebilir --experimental:strictEffectsher zaman etkin; callback parametreleri içineffectsOfanotasyonu gerekiyor- Dokümantasyon yorumlarının varsayılan işaretleme dili mevcut
RstMarkdownmodundan Markdown’a değişti;{.doctype: Markdown | RST | RstMarkdown.}pragma’sı ilemd2htmlverst2htmlkomutları eklendi - Standart kütüphanedeki
osile ilgili işlevlerin bir kısmı,Pathsoyutlamasını kullanan yeni arayüzlere ayrıldı vestd/oserrors,std/envvars,std/paths,std/dirs,std/files,std/symlinks,std/appdirs,std/cmdlinemodü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/sumskullanırkennimbleveyaatlaskurulumu gerekiyor - İsimsiz bir
blockiçinde isimsizbreakkullanma yöntemi kullanımdan kaldırılıyor (deprecation) ve gelecek sürümlerde hata olacak "strictFuncs"tanımı değişti;refveyaptrdereference’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
strictDefsanahtarı eklendi; değişkenlerin kullanılmadan önce açıkça değer atanıp atanmadığını denetliyor,letdeğişkenlerinin ise tam olarak bir kez atanıp atanmadığını kontrol ediyor - C++ birlikte çalışabilirliği için
virtualpragma’sı ve genişletilmişconstructorpragma’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
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 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.
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.
Ö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ü?
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
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
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ı
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
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
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
Zig de iyi; optional değer desteğini ve hata işleme yaklaşımını seviyorum. Ama
!?[]u8gibi, uint8 çoklu işaretçisine optional pointer’ın error union’ını ifade eden gürültülü söz dizimi beni soğuttuDinamik 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
Ö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
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
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