- Unison, kod tanımlarını isimle değil içerikle (hash) tanımlayan bir yapı üzerine kurulu, kod depolama, sürüm yönetimi ve dağıtımın tamamını yeniden kurgulayan bir fonksiyonel programlama dili
- Tüm kod, metin dosyaları yerine bir codebase (DB) içinde saklanır; isimler yalnızca etiket olarak ele alınır ve bu sayede aynı isim/dosya çakışmaları ile refactoring çakışmaları yapısal olarak ortadan kalkar
- UCM (Unison Codebase Manager) üzerinden tanım ekleme, silme, taşıma, yeniden adlandırma, test etme ve çalıştırma yapılır; LSP, UCM Desktop ve Unison Share ile bağlantılı bir iş birliği araçları ekosistemi sunulur
- Abilities tabanlı etki sistemi, ertelenmiş hesaplama ve yapısal pattern matching gibi dil özelliklerinin yanı sıra, aynı program içinde uygulama mantığı ile bulut dağıtımını (Cloud/BYOC) birlikte tanımlayan birleşik bir modele genişler
- Hash tabanlı yapı sayesinde yinelenen derlemelerin kaldırılması, sürüm çakışmalarının azaltılması ve statik referans keşfi temel özellikler haline gelir; Share, Cloud, Projects ve Branch sistemiyle tutarlı bir dağıtık geliştirme deneyimi sunar
Unison diline genel bakış
- Tanımlar, içerik tabanlı kimliklendirme (content-addressable code) ile yönetilir; aynı isim kullanılsa bile içerik farklıysa tamamen ayrı tanımlar olarak kabul edilir
- Yeniden derleme gerekmez, API evrimi sırasında çatışmalar en aza iner, referans kararlılığı tamdır
- Codebase, SQLite tabanlı bir DB olarak tutulur; kod, isimler ve dokümantasyonun tamamı veri olarak saklanır
- Yapı,
ls, view gibi UCM komutlarıyla gezilebilir
- Metin dosyaları yalnızca düzenleme arayüzüdür; gerçek kaynağın tek doğrusu DB'dir
- İsim çakışmaları, dosya birleştirme çakışmaları ve repo yapısı yönetimi artık eski kavramlara indirgenir
Dil özellikleri
- Abilities: IO, Exception gibi etkileri tür sistemiyle denetleyen özellik
- Yapısal pattern matching: Türleri yapısal olarak ayrıştırarak kontrol akışını kurma
- Ertelenmiş hesaplama (Delayed computations): strict olmayan değerlendirmeyi açıkça ifade etme
- Güçlü statik tür sistemi + zengin tür çıkarımı + Kind-checking
Geliştirme ortamı ve araç zinciri
- UCM (Unison Codebase Manager)
- Tanım oluşturma, silme, yeniden adlandırma, test etme, çalıştırma
- Proje, branch, clone, merge gibi Git benzeri sürüm yönetimini dilin içine yerleşik olarak sunar
- UCM Desktop
- Codebase yapısını gezme, tıklama tabanlı tanımlar arası geçiş, doküman render etme
- LSP desteği
- Çoğu popüler editörde IDE özellikleri kullanılabilir
- Unison Share
- Merkezi kod merkezi: proje barındırma, arama, review, katkı (=Pull Request), tür tabanlı arama
- Tüm tanımlar hash tabanlı olduğu için referanslar her zaman bir hyperlink gibi izlenebilir
Dağıtım modeli: Unison Cloud & BYOC
- Aynı dille uygulama mantığı + altyapı tanımı yazılır ve doğrudan dağıtılır
- YAML, Helm veya karmaşık RPC sözleşmeleri olmadan yalnızca “kod” ile dağıtık sistem kurma
- BYOC (Bring Your Own Cloud) ile kendi container altyapınız üzerinde de Cloud stack çalıştırılabilir
- OrderedTable gibi tür güvenli depolama, Daemon desteği ve otomatik orkestrasyon içerir
Örnek: Guessing Game
- Abilities (IO, Exception) kullanan basit bir CLI örneği
- Random, console IO, pattern matching ve ertelenmiş hesaplama gibi dil öğeleri doğal biçimde birleşir
Ekosistem ve topluluk
- Share üzerinden katkı, review ve organizasyon hesabı desteği
- Tür tabanlı tüm ekosistemde arama, yapay zeka ajanları için MCP sunucusu
- C FFI üzerinde aşamalı çalışma sürüyor
- Git tarzı diff görüntüleyici, branch açıklamaları gibi iş birliği verimliliği özellikleri genişliyor
Başlıca tarihçe (özet)
- 2018: Unison Computing kuruldu
- 2019: İlk alfa sürümü
- 2021: Codebase SQLite'a geçirildi (100x küçülme)
- 2021: Unison Share yayınlandı
- 2022~2024: LSP, Projects, Kind-checking, Pull Request, Cloud GA
- 2025: Desktop App, büyük ölçekli runtime optimizasyonları, MCP sunucusu, BYOC desteği
- 2025 Kasım: Unison 1.0 kararlı sürümü yayımlandı
SSS
- Neden yeni bir dil?
- Hash tabanlı kod modeli, mevcut dillere eklenti şeklinde taşınması neredeyse imkânsız bir yaklaşım
- Kod depolama, sürüm yönetimi, dağıtım ve iş birliği biçimleri bu fikirden doğal olarak türediği için en baştan yeni bir dil olarak tasarlanması gerekti
- Gerçek kullanım örnekleri?
- Unison Cloud'un tamamı Unison'ın kendisiyle yazılmış durumda ve çalışıyor
- Organizasyon ve ekip düzeyinde iş birliği ile dağıtık uygulama geliştirme için ticari düzeyde workflow sunuyor
- Vendor lock-in endişesi: Açık kaynak bir dil; Docker vb. ile serbestçe dağıtılabilir ve BYOC desteklenir
- İş birliği modeli: Organizasyon, ticket, code review, PR vb. desteklenir; yalnızca tanım düzeyinde çakışmalar oluşur
- Sürüm yönetimi: Git olmadan kendi proje, branch, push, pull ve merge özelliklerini sunar
- IDE kısıtı yok: LSP sunucusu sayesinde farklı editörler kullanılabilir
- Diğer dillerle entegrasyon: C FFI geliştiriliyor
- Dosyasız codebase erişimi: Yapı CLI (UCM) komutları veya Desktop uygulamasıyla gezilebilir
1 yorum
Hacker News görüşleri
Unison’ı çok uzun zamandır takip ediyorum. Paul’ün kişisel blog günlerinden beri; yani 10 yılı geçti bile. Bu 1.0 sürümü gerçekten büyük bir dönüm noktası, ama dürüst olmak gerekirse biraz hayal kırıklığı da yaratıyor
Programlama dillerini gerçekten seviyorum; Rust, Go, Zig gibi dillerin büyümesini de izledim, ama Unison’ın bu olgunluk seviyesine rağmen ekosistem yayılımı zayıf gibi geliyor
Bence bunun nedeni, özelliklerin çoğunun buluta bağımlı tasarlanmış bir iş modeline dayanması. BYOC seçeneği var ama yeterli değil. Genel hava biraz uyumsuz geliyor
Share projesi açık kaynak ve GitHub’ın da fiili bağımlılıkları var ama hâlâ popüler.
Bunu inkâr etmeye çalışmıyorum; sadece insanların bunu bizzat deneyip başka dil tasarımlarına da katkı sağlayabilecek yanlarını görmesini isterim
Ama öğrenme materyallerinin çoğu bulut altyapısı kullanımını varsayıyor, bu yüzden çevrimdışı ortamda ilerlemek zorlaşıyor.
Belki Unison usulü bir yaklaşım vardır ama pazarlama katmanı o yolu gölgeliyor
Ücretli kullanıcılar olduğunda, teknolojinin gerçekçi ve pratik kalması için bir motivasyon oluşur.
Ticari unsur olmasaydı, bana sadece bir başka esolang gibi gelirdi. Artık bunu yan projelerimden birinde denemeyi düşünüyorum
Belgelerde Unison Share’den söz ediliyor ve bu da unison-lang.org üzerinde barındırılıyor.
BYOC seçeneği var ama yine de unison.cloud hesabı ve abonelik gerekiyor. Keşke pazarlama ve dokümantasyonda bunlar daha açık belirtilse
Merhaba, ben Unison dilinin ortak yaratıcılarından biriyim. Aklınıza takılan ne varsa sorabilirsiniz
Unison, algebraic effects (Abilities) özelliğini ana özelliklerinden biri olarak öne çıkaran ilk dillerden biriydi.
Başta bunun ne kadar iyi karşılanacağından emin olmadığınızı hatırlıyorum; şimdi bundan memnun musunuz merak ediyorum.
Etki sisteminin dilin diğer kısımlarıyla iyi bütünleşip bütünleşmediğini, sözdizimini sevip sevmediğinizi ve iç uygulamaya dair ilginç hikâyeleri de duymak isterim
İlgili doküman: Unison Abilities
Sadece ifadenin hash’i ve “passed” değeri mi saklanıyor, yoksa tüm değerlerin hash’ini hesaplamak da mümkün mü?
Eğer ikincisiyse, Nix ya da Trustix benzeri yeniden üretilebilir derlemeler daha da genişletilebilir gibi görünüyor.
Muhtemelen mevcut önbellekleme yalnızca bağlanmış ifadeleri kapsıyordur, ama çalışma zamanında dış dünyaya açılan bir köprü işlevi de görebilir gibi duruyor
Ama şu an biraz probleme çözüm arayan bir çözüm gibi hissettiriyor.
Bu dil kime hitap ediyor ve Unison Cloud dışında bunu gerçekten prodüksiyonda kullanan yerler var mı, merak ediyorum
İlk bakışta BEAM tabanlı bir dil sanmıştım ama kendi VM’i üzerinde çalışıyor.
BEAM dilleriyle karşılaştırıldığında fault tolerance açısından farkı nedir ve Unison hangi kullanım senaryolarına daha uygun olur, merak ediyorum
Dış bir veritabanını mı çağırıyorlar, yoksa tamamen Unison içinde mi uygulanmışlar, bilmek isterim.
Database soyutlamasıyla birlikte düşününce çok ilginç bir birleşim ama kavramı tamamen anlamak kolay değil
Bana göre Unison, en ilginç dillerden biri.
algebraic effects’in yeni neslin temel kavramlarından biri olacağına inanıyorum.
Unison’ın bunun dışında da pek çok harika fikri var.
Kişisel olarak oyun mod geliştirme için de uygun olabileceğini düşünüyorum.
İstemci tarafında güvenilmeyen kod çalıştırmanız gerektiğinde, Unison’ın ability sistemi sayesinde kolayca sandbox ortamı kurulabilir gibi görünüyor.
Ayrıca ECS(Entity Component System) uygulamaları için de yararlı olabilir.
Eğer bir fonksiyonun hangi yeteneklere ihtiyaç duyduğu çıkarımlanabiliyorsa, paralel çalıştırma güvenliği otomatik olarak sağlanabilir
Cloud’da IO ability doğrudan kullanılamıyor; onun yerine güvenli biçimde denetlenen Http ability gibi şeylere izin veriliyor.
Böylece kullanıcılar dosya sistemine erişemiyor.
Ben de bu özelliği oyun geliştirmede kullanmayı düşünüyorum.
Başka kullanıcılar da native service olarak ability uygulayıp oyuna katkı sunabilir.
İlgili bağlantılar: Unison Cloud, validateSandboxed kodu, ECS örneği
Bu projeyi ilk gördüğümde “5 yıl sonra acaba ne olacak” diye düşünmüştüm ve gerçekten o kadar zaman geçti.
Şimdi 1.0 sürümünü görmek beni gerçekten mutlu ediyor
Böyle radikal bir dili gerçek endüstri ortamlarında da kullanılabilir hâle getirmek büyük bir başarı. Tebrikler
Ben Unison gibi sistemlerin bilişimin geleceği olduğunu düşünüyorum.
Ama bu geleceğin ne zaman geleceğini bilmiyorum.
Böyle sistemlerin güzelliği; altyapı, veri ve servis katmanlarını tek ve birleşik bir sistem içinde toplaması.
Belki de AI kodlama ajanları için daha iyi bir temel olabilir.
Yine de bunun VC modelinden ziyade sürdürülebilir bağımsız geliştirme yaklaşımına daha uygun olduğunu düşünüyorum.
Bu kadar uzun vadeli bir projeyi sürdürmeye devam eden ekip gerçekten etkileyici
Rúnar’ın Unison’a başlayacağını söylediği günü hatırlıyorum.
Bunun bambaşka bir paradigmanın kapısını açan bir proje olduğunu düşünmüştüm; şimdi 1.0 sürümünü görünce gerçekten gurur duyuyorum.
Umarım bir gün Unison benim ana dilim olur
Unison web sitesinde benchmark olmasını isterdim.
Performans karakteristiklerini bilmek, ne tür işler için uygun olduğunu anlamaya yardımcı olur.
Django, Express.js, ASP.NET ile istek işleme hızı karşılaştırmaları gibi basit sayılar bile faydalı olurdu.
Fikirler ilginç ama web dışı çalışma zamanı hedeflerinin de gelmesini isterim.
Kişisel olarak yeni bir dili büyük web projelerinden çok CLI araçları gibi alanlarda denemek daha kolay geliyor
2023’te yayımlanan Unison inceleme yazısına baktım; epey yardımcı oldu
Fikirler ilginç ama Unison, dil + kaynak yönetimi + barındırma bileşenlerini aynı anda benimsemeyi gerektiren hepsi bir arada bir yapı sunuyor.
Yığının tek bir parçası bile hoşunuza gitmezse tümünü kullanmak zorlaşıyor.
Bu yüzden bu fikirlerin doğrudan yaygınlaşması zor olabilir gibi geliyor
Dilin kendi araç kalitesi çok yüksek ve mevcut sistemlerle entegrasyon da mümkün.
Örneğin Unison Cloud’un çoğu Unison ile yazılmış olsa da bazı kısımlarında Haskell kullanılıyor.
İlgili tartışmalar: HN başlığı 1, HN başlığı 2
Birden fazla teknolojiyi organik biçimde tasarlayıp birlikte iyi çalışır hâle getirmekte büyük değer olduğunu düşünüyorum