deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (native)

Hibana, Rust'a koreografik programlama ve runtime tarafından zorunlu kılınan protokolleri getiriyor

Yeni bir Rust crate'i, tek bir global koreografiyi her rol için kompakt programlara yansıtıyor ve her send, receive ve route adımını runtime'da bu programlara karşı kontrol ediyor; no_std gerektiriyor ve allocator'a ihtiyaç duymuyor.

Hibana, Rust'a koreografik programlama ve runtime tarafından zorunlu kılınan protokolleri getiriyor

Yeni yayınlanan açık kaynak bir Rust crate'i olan Hibana, geliştiricilerin çok taraflı bir etkileşimi bir kez global bir koreografi olarak tanımlamasını ve ardından katılan her endpoint'in kendi davranışını runtime'da bu tanıma karşı denetlemesini sağlıyor. Hacker News'in ana sayfasına ulaşan GitHub'daki proje README'sine göre koreografi, her rol için kompakt bir programa "yansıtılıyor" (projected) ve her send, receive veya yönlendirme kararı, runtime ilerlemeyi onaylamadan önce o programla eşleşmek zorunda.

Model nasıl çalışıyor

İş akışı tek bir koreografiden rol başına programlara, oradan çalışan endpoint'lere uzanıyor. Geliştirici protokolü bir kez yazıyor, her rol için bir kez project() çağırarak kompakt RoleProgram tanımlayıcıları elde ediyor, her rolü bir session tanımlayıcısına bağlıyor ve endpoint'i send, recv ve offer işlemleriyle yönetiyor. Her işlem ya yansıtılan programın izin verdiği tam olarak bir adımı onaylıyor ya da session neslini başarısız kılıyor. Protokol dışı bir adıma giden hiçbir yol yok.

Önemli bir tasarım tercihi, protokol durumunun her protokol durumu için ayrı bir Rust continuation tipi yerine küçük tanımlayıcılarda yaşaması. README, bunun protokoller büyüdükçe endpoint tiplerinin şişmesini engellediğini savunuyor: tek bir yansıtılmış artifact birçok izole session'da yeniden kullanılabilir ve endpoint tiplerini çoğaltmaz; tekrarlayan bölgeler endpoint'lere, tanımlayıcı satırlarına veya frame başlıklarına yineleme alanı eklemez. Tazelik ise yansıtılmış yürütme kurallarının, taşıyıcı FIFO sıralamasının, replay dışlamanın ve nesil izolasyonunun birleşiminden gelir.

Protokol dili

Koreografiler hibana::g modülündeki küçük bir kombinatör kümesinden oluşturulur: tek bir asenkron mesaj için send, sıralama için seq, eşzamanlı ilerleyebilen bağımsız kollar için par, mesaj dışı kararlara sahip açık bir çözücülü iki kol arasındaki seçim için route ve yeniden girebilen korumalı yapısal bir bölge için roll. Koreografi değerleri tarafından uygulanan Projectable trait'i mühürlüdür; yani bunları yalnızca Hibana'nın kendi kurucuları üretebilir.

Yansıtma aynı zamanda bir doğrulama geçişi olarak da iş görür. README, desteklenmeyen route biçimlerini, bir endpoint üzerindeki belirsiz eşzamanlı işlemleri, çakışan paralel şeritleri, boş paralel kolları ve korumasız yeniden girişi reddettiğini belirtir — hatalı biçimlendirilmiş protokoller üretimde değil, yansıtma anında başarısız olur.

Depoda cargo run --example ping_pong ile çalıştırılabilen, kendini denetleyen bir ping_pong örneği bulunuyor; bu örnekte iki rol sırayla bir u32 değeri değiş tokuş eder. Örnek, release gate tarafından çalıştırılır ve tam döngüyü gösterir: çağıranın sağladığı runtime deposu, bellek içi bir transport, tek bir session'a bağlı iki rol ve send() ile recv() ile yönetilen endpoint'ler.

Semantik ve entegrasyon

Modeli üç özellik tanımlar. Çok taraflılık (multiparty), her etkileşim için karşı tarafın, yönün ve sıranın her rol için yansıtılan tek bir koreografiden gelmesi anlamına gelir. Asenkronluk, başarılı bir send işleminin uzaktaki receive'i beklemeden bir frame'i taşıyıcıya aktarması anlamına gelir. Affine olması ise, canlı bir endpoint sahibinin yansıtılmış bir adımı en fazla bir kez ilerletebilmesi anlamına gelir — bir endpoint bırakılabilir, ama klonlanamaz veya yinelenen ilerleme yayınlamak için kullanılamaz.

Transport bilinçli olarak nötr tutulmuştur: taşıyıcılar beş işlemlilik bir Transport trait'ini uygular ve aynı genel API hem hosted hem gömülü hedeflerde sunulur. Crate koşulsuz olarak no_std'dir, allocator gerektirmez ve çağıranın sağladığı depoyu kullanır. Normal bağımlılığı yoktur, Rust 2024 kullanır ve stabil Rust 1.95 veya daha yenisini gerektirir.

Açık sınırlar ve uçlar

Roller 0 ile 255 arasındaki tam tek baytlık alanı kapsar ve 256 katılımcıya izin verir; olay kimlikleri 65.535 ile, program imajları ise global imaj ve rol başına imaj için 65.535 bayt ile sınırlıdır. Depolama, gerçek olaylardan ve yerel katılımcılardan türetilir; runtime tam 256 girişlik bir rol tablosu rezerve etmez.

README, crate'in neyi garanti etmediği konusunda alışılmadık derecede açık sözlü. Hibana bir ağ yığını değildir ve dağıtık bir algoritma değildir — protokolü bağlı her endpoint'te zorunlu kılar ve bu yerel sonucun dağıtık bir garantiye yükseltilmesi, belirtilen taşıyıcı, dağıtım, codec ve zamanlama koşullarına bağlıdır. Bir protokolü birkaç session'a bölmek de sınırı değiştirir: Hibana her session'ı denetler, orijinal koreografiyi tek bir global protokol olarak değil.

Neden önemli

Koreografik programlama — dağıtık bir protokolü rol rol yerine bir kez, küresel olarak tanımlamak — büyük ölçüde bir araştırma uğraşı olarak kaldı. Hibana bu fikri, zorlu pratik kısıtlar altında ana akım bir sistem diline taşıyor: allocator yok, standart kütüphane yok, çağıranın sağladığı bellek ve tek bir transport soyutlaması. Bu birleşim, crate'i yalnızca sunucular için değil, gömülü ve kaynak kısıtlı hedefler için de makul kılıyor.

En az bunun kadar dikkat çekici olan, çerçevelemenin açık sözlülüğü. Proje, uçtan uca doğruluk vaat etmek yerine, yerel olarak tam olarak neyi zorunlu kıldığını ve dağıtık bir sonuç için bir dağıtımın hangi dış koşulları sağlaması gerektiğini netleştiriyor. Hatalı koreografilerin yansıtma anında reddedilmesiyle birleşen bu netlik, kullanışlı bir zorunlu kılma aracını bir araştırma artifact'inden ayıran şeydir ve Rust ekiplerine çok taraflı protokoller kurarken protokol ihlallerinin endpoint'te gürültülü biçimde başarısız olmasının somut bir yolunu sunar.

  • #rust
  • #distributed-systems
  • #protocols
  • #embedded
  • #open-source

İlgili yazılar