Jank Lang alfa sürümü duyuruldu
(github.com/jank-lang)- Clojure sözdizimi ile LLVM tabanlı yerel performansı birleştiren bir programlama dili olup, C++ ile sorunsuz birlikte çalışabilirlik sunuyor
- Clojure'un fonksiyonel ve değer odaklı özelliklerini korurken, JVM yerine LLVM'i ana çalışma ortamı olarak kullanıyor
- Tüm veri yapıları kalıcı ve değişmez (persistent & immutable) olup, C++ standart kütüphanesiyle doğrudan entegre olabilir
- Şu anda alfa (Alpha) aşamasında ve resmi belgeler ile örnekler jank book üzerinde sunuluyor
- Clojure ekosistemi ile C++ yerel performansını birleştirmeyi hedefleyen bir girişim olarak, fonksiyonel diller ile sistem dilleri arasındaki sınırı daraltma anlamı taşıyor
jank genel bakış
- jank, Clojure'un sözdizimi ve felsefesini temel alan LLVM üzerinde barındırılan bir dil
- JVM yerine LLVM'i temel alıyor ve C++ ile birlikte çalışabilirliği (interoperability) destekliyor
- Clojure'un fonksiyonel, etkileşimli ve değer merkezli özelliklerini koruyor
- Clojure ile yüksek uyumluluk hedefliyor; Clojure'un Java ile etkileşime girmesi gibi, jank de C++ ile bütünleşiyor
- Şu anda alfa sürümü olarak geliştiriliyor; ayrıntılar resmi belgelerde görülebilir
Dil özellikleri
- Tüm yerleşik veri yapıları kalıcı ve değişmez (persistent & immutable) yapıdadır
- Örnek:
(def george {:name "George Clooney"})
- Örnek:
- Yan etkiler (side effect) gerektiğinde açıkça gerçekleştirilebilir
- Örnek:
(defn say-hi [who] (println (str "Hi " (:name who) "!")) (assoc who :greeted? true))
- Örnek:
- C++ standart kütüphanesiyle doğrudan entegrasyon mümkündür
- Örnek:
(cpp/std.this_thread.sleep_for (cpp/std.chrono.milliseconds ms))
- Örnek:
- Fonksiyonel veri işleme için çeşitli çekirdek fonksiyonlar sunar
- Örnek:
(apply + (distinct [12 8 12 16 8 6])) ; => 42
- Örnek:
Geliştirme ve belgeler
- Resmi belgeler: jank book
- Proje LLVM 22 tabanlıdır ve güncel C++ standartlarıyla uyumludur
- AOT derleme, GC profilleme, CMake derleme seçenekleri gibi özellikleri destekler
- Nix ortamı ve CI otomatik derleme yapılandırması içerir
Topluluk ve sponsorluk
- Proje GitHub Sponsors üzerinden desteklenebilir
- Destek veren şirket ve bireyler: Clojure Together, nubank, multiply.co, modulr-software vb.
- Topluluk kanalları: Slack (Clojurians), Twitter
İlgili sunumlar ve tanıtımlar
- Clojure Conj 2023 sunum videosu
- The REPL Interview ve Compiler Spotlight programlarında dil tanıtımı
- YouTube: Language Introduction videosu mevcut
Özet:
jank, Clojure'un fonksiyonel felsefesini LLVM ve C++ yerel ortamına taşıyan bir dil olup, Clojure'un üretkenliği ile C++'ın performansını birleştirmeyi amaçlıyor. Şu an alfa aşamasında olsa da, hem Clojure geliştiricileri hem de sistem programcıları için yeni bir birleşik geliştirme deneyimi sunuyor.
1 yorum
Hacker News yorumları
jank alpha ile ilgili içerikler için resmi kitap sitesine bakılmasını rica ediyorum
Henüz tamamen duyurmaya hazır değiliz ama insanların ilgi göstermesi sevindirici
Derleyicide birkaç özelliğin daha birleştirilmesiyle birlikte, kitabı takip ederek jank’i bizzat kullanabilecek kadar hazır olacak
Birkaç yazım/dilbilgisi hatası fark ettim;
bookbölümüne PR göndermemin uygun olup olmadığını, yoksa yazarın üslubunu korumak için geri bildirimi başka bir şekilde vermemin daha iyi olup olmayacağını merak ediyorumjank, Clojure’un bir lehçesi; Clojure da Lisp’in bir lehçesi
Esas olarak işlevsel ama değiştirilebilir durum ve yan etkileri de destekliyor
Tüm veri yapıları varsayılan olarak değiştirilemez ve Clojure gibi güvenli değişim mekanizmaları sunarak eşzamanlılığı kolaylaştırıyor
Ayrıca C++ ile derin entegrasyon sağlıyor; çalışma zamanında yeni C++ tipleri, fonksiyonlar ve şablonlar tanımlayabiliyorsunuz
Clang ve LLVM kullanan JIT derleme sayesinde C/C++ kütüphanelerine kolayca erişilebiliyor
Ayrıntılar için resmi kitaba bakabilirsiniz
Clojure’u seviyorum ama yerel hedefe sahip olması özellikle cazip
jank’te derleme/yeniden derleme hızının nasıl olduğunu merak ediyorum
jank geliştirmesinin Clojure’u ne kadar yakından takip edeceğini merak ediyorum
cljs gibi mümkün olduğunca aynı kalmasının mı planlandığını, yoksa bir noktada ayrışıp ayrışmayacağını merak ediyorum
Daha önce Clojure’a yaklaşık %90 benzeyen bir dil yapmıştım ama tam uyumluluğu garanti edemediğim için ona bu adı vermedim
jank bir drop-in replacement gibi görünüyor; bu da çok hoş duruyor
Clojure ekibi ve diğer lehçe geliştiricileriyle birlikte çalışıyoruz; bunun için cross-dialect clojure-test-suite çalışmasına öncülük ediyoruz
Clojure JVM, ClojureScript, Clojure CLR, babashka, Basilisp ve jank için destek var ya da üzerinde çalışılıyor
Bununla birlikte, Carp’tan ilham alan isteğe bağlı modlar da eklenecek, ancak varsayılan uyumluluk korunacak
Bir an jank değil de Jack Lang’den (Fransız siyasetçi) bahsedildiğini sandım
Birlikte bakılabilecek kitap: https://book.jank-lang.org/
1 yıldır jank blogunu takip ediyorum; alpha sürümünü tebrik ederim
Bir Emacs kullanıcısı olarak CIDER gibi geliştirme araçları desteğinin durumunu merak ediyorum
Ayrıca Welcome bölümündeki bağlantıda bir yazım hatası fark ettim — “foreward” değil, “foreword” olmalı
try-jank içinde görebilirsiniz
Clang kaynaklı bir hata yüzünden ilerleme yavaşladı ama bu yüksek öncelikli bir iş
Bağlantıdaki yazım hatasını da zaten düzelttim
jank’in Rust kod tabanıyla entegre olup olamayacağını merak ediyorum
C ABI ya da C++/Rust birlikte çalışabilirlik mekanizmaları üzerinden bağlanabilirsiniz
İçinde statik tip sistemi olup olmadığını merak ediyorum
Ancak geliştirici, kademeli tip sistemi¹ ekleme planından söz etmişti
Vizyon, bir kısmının tamamen dinamik ve GC tabanlı, bir kısmının ise daha kontrollü ve optimize bir biçimde çalışabilmesi
¹ ilgili blog yazısı
C++ ile interop kısmı statik olarak tiplenmiş, ancak Clojure tarafına döndüğünüzde her şey tamamen dinamik ve polimorfik
Carp benzeri isteğe bağlı statik tipli bir mod araştırılacak ama bu yıl değil
İlk başta bunun, “Jank Lang” adlı birinin yatırım alfası bulduğu haberi olduğunu sandım