4 puan yazan GN⁺ 2025-12-04 | Henüz yorum yok. | WhatsApp'ta paylaş
  • Zig dili, mevcut asenkron I/O tasarımındaki karmaşıklığı azaltmak amacıyla yeni bir Io arayüzü tabanlı model benimsiyor
  • Bu model, senkron ve asenkron kod ayrımı yapmadan aynı fonksiyon yapısını koruyor ve Io.Threaded ile Io.Evented olmak üzere iki uygulama sunuyor
  • Io.Threaded varsayılan olarak senkron çalıştırma yaparken, Io.Evented olay döngüsü tabanlı asenkron çalıştırma gerçekleştirir
  • Geliştiriciler async() ve concurrent() işlevleriyle eşzamanlı yürütmeyi kontrol edebilir ve kodu değiştirmeden performans optimizasyonu yapabilir
  • Bu yaklaşım, fonksiyon renklendirme sorununu çözerken, Zig’in sadelik ve kontrol edilebilirliğini koruyarak asenkron performans sağlamayı hedefliyor

Zig'in Asenkron Tasarımındaki Değişim

  • Zig, mevcut asenkron tasarımın dilin minimalist felsefesi ile iyi örtüşmediğini görerek yeni bir yaklaşım aradı
    • Eski tasarımın diğer özelliklerle entegrasyon seviyesi düşüktü
    • Yeni model, senkron/asenkron I/O'yu aynı kod yapısıyla işleyebilir
  • Yeni tasarım, Io jenerik arayüzü etrafında çalışıyor
    • Tüm I/O işlevleri bir Io örneğini parametre olarak alır
    • Allocator arayüzüne benzer şekilde, bellek tahsisi gibi bir modelle I/O kontrol edilebilir

Io Arayüzünün Yapısı

  • Standart kütüphanede iki temel uygulama bulunuyor
    • Io.Threaded: Varsayılan olarak senkron çalıştırma, gerektiğinde iş parçacığıyla paralel işleme
    • Io.Evented: Olay döngüsü tabanlı asenkron çalıştırma (io_uring, kqueue gibi)
  • Kullanıcılar doğrudan yeni Io uygulamaları yazabilir, böylece yürütme biçimi üzerinde ayrıntılı kontrol sağlayabilir

Kod Örneği ve Çalışma Şekli

  • Örnek saveFile() işlevi dosya oluşturma, yazma ve kapatma adımlarını gerçekleştirir
    • Io.Threaded kullanıldığında normal sistem çağrılarıyla çalışır
    • Io.Evented kullanıldığında asenkron bir arka uçla çalışır
    • İki durumda da writeAll() çağrısı yapılınca işin tamamlandığı garanti edilir
  • Aynı kod, senkron ve asenkron ortamların her ikisinde de aynı şekilde çalışır
    • Kütüphane yazarı çalıştırma biçimiyle ilgilenmek zorunda kalmaz

Paralel Yürütme ve async() / concurrent()

  • async() işlevi asenkron çalıştırmayı talep eder ancak Io.Threaded içinde anında da çalıştırılabilir
    • Io.Evented içinde ise gerçek asenkron çalıştırma ile iki dosya aynı anda kaydedilebilir
  • concurrent() işlevi gerçek paralel çalıştırmanın gerektiği durumlarda kullanılır
    • Io.Threaded iş parçacığı havuzunu kullanır
    • Io.Evented async() ile aynı şekilde davranır
  • Yanlış fonksiyon seçimi (async yerine concurrent) hata olarak kabul edilir ve dil düzeyinde engellenmesi mümkün değildir

Kod Stili ve Dil Bütünleşmesi

  • Asenkrona özel bir sözdizimi olmadan normal Zig kod stili korunur
    • try, defer gibi mevcut kontrol akışı sözdizimleri aynen kullanılır
    • Andrew Kelley, bunun “standart bir Zig kodu gibi okunduğunu” belirtiyor
  • Örnek olarak asenkron DNS sorgusu gösterildi
    • getaddrinfo() yerine ilk başarılı yanıt döndürülür ve kalan istekler iptal edilir

Gelecek Planlar ve Geliştirme Durumu

  • Io.Evented henüz deneysel, bazı işletim sistemlerinde desteklenmiyor
  • WebAssembly uyumlu bir Io uygulaması planlanıyor ve ilgili işlevlerin geliştirilmesi gerekiyor
  • Io ile ilgili 24 takip görevi var ve çoğu hâlâ tamamlanmamış durumda
  • Zig henüz 1.0'a gelmedi; asenkron I/O ve yerel kod üretimi hâlâ ana kalan meselelerdir
  • Bu modelle I/O arayüzü değişiklikleri nedeniyle kod yeniden yazma sıklığının azalması bekleniyor

Topluluk Tartışmasının Özeti

  • Yorumlarda birçok kişi, Zig’in yaklaşımının Rust’ın async/await modelinden daha basit ve esnek olduğunu değerlendirdi
    • Rust’ta farklı executor’ların birlikte kullanımıyla karmaşıklık artabiliyor
    • Zig, Io arayüzüyle çoklu executor’ların bir arada var olmasını mümkün kılıyor
  • Bazıları kodun biraz uzun olabileceğini eleştirdi
    • Ancak açık API tasarımıyla güvenlik, performans ve test kontrolünün iyileşmesi hedefleniyor
  • Asenkron çalıştırma ile iş parçacığı çalıştırmasının farkı, stackful vs stackless coroutine gibi teknik konular da tartışılıyor
  • Zig’in Io uygulaması dil düzeyinde özel bir işleme ihtiyaç duymadan standart kütüphane genişlemesi biçiminde uygulanıyor
    • İleride stackless coroutine özelliğinin eklenmesi planlanıyor

Sonuç

  • Zig’in yeni asenkron modeli, dil sadeliğini korurken yüksek performanslı I/O hedefler
  • Fonksiyon renklendirme sorunu çözümü, senkron/asenkron kod entegrasyonu ve açık kontrol yapılarıyla Zig 1.0 kararlılığı için kritik bir adım olarak görüldü

Henüz yorum yok.

Henüz yorum yok.