deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (native)

Crystal 1.22.0 tüm hedeflere native event loop getiriyor, SIGPIPE emülasyonu ve LLVM 23/24 desteği sunuyor

Crystal 1.22.0, her hedefte native bir event loop, standart akışlar için SIGPIPE benzeri davranış, çok daha hızlı bir DWARF ayrıştırıcısı ve LLVM 23 ile 24 desteğiyle geliyor.

Crystal 1.22.0 tüm hedeflere native event loop getiriyor, SIGPIPE emülasyonu ve LLVM 23/24 desteği sunuyor

Crystal 1.22.0 yayınlandı; crystal-lang.org'daki duyuruya göre 1.21.1 sürümünden bu yana 33 katkımcıdan 251 değişiklik içeriyor. Öne çıkan maddeler, artık desteklenen tüm hedeflerde varsayılan olarak etkinleştirilen native event loop, standart akışlar için SIGPIPE tarzı davranış, hız için baştan yazılan bir DWARF ayrıştırıcısı ve LLVM 23.1 ile 24.0 desteği.

Her hedefte native event loop

Runtime, artık tüm hedeflerde doğrudan işletim sisteminin hazırlık seçicisi (readiness selector) üzerine kurulu native bir event loop sunuyor ve bu varsayılan durum. Sürüm notlarına göre Solaris'te epoll etkinleştirildi ve kqueue, daha önce taşınabilir yedek mekanizmaya bel bağlamış olan kalan BSD varyantlarını kapsıyor. libevent hâlâ mevcut, ancak kesinlikle isteğe bağlı ve ekip bunu bir sonraki sürümde kullanımdan kaldırmayı bekliyor.

Standart akışlar SIGPIPE'ı taklit ediyor

STDOUT veya STDERR'ye yazma EPIPE ile (bir pipe'ın okuma ucunun kapanmasıyla oluşan hata) başarısız olduğunda, Crystal süreci artık hemen çıkıyor. Bu, Unix sistemlerindeki SIGPIPE sinyalinin varsayılan davranışıyla eşleşiyor ve Crystal programlarının kabuk pipeline'larında geleneksel biçimde davranmasını sağlıyor. Önceden başarısız yazma işlemi IO::Error yükseltiyor ve çıkışta arkada bir hata mesajı bırakıyordu. Eski davranışı tercih eden programlar STDOUT.exit_on_broken_pipe = false ayarlayabilir.

Daha hızlı bir DWARF ayrıştırıcısı

Backtrace çözümlemesi DWARF hata ayıklama bilgilerine dayanıyor ve bu sürüm o ayrıştırma yolunu baştan elden geçiriyor. Ayrıştırıcı artık bölümleri hevesle değil, gerektiğinde okuyor, indeks tablosunu bir kez oluşturuyor ve çözülmüş backtrace satırlarını least-recently-used önbelleğinde tutuyor; duyuruya göre bu, çok daha düşük bellek kullanımıyla çarpıcı biçimde daha hızlı aramalar sağlıyor. DWARF 5 formlarından DW_FORM_addrx ve DW_FORM_strx desteği de eklendi.

Dil, runtime ve HTTP değişiklikleri

Sabitler artık tip bildirimleri taşıyabiliyor, örneğin BAR : Int32 = 1; sayısal literaller bildirilen tipe otomatik olarak dönüştürülüyor. 1.0'dan önce kullanımdan kaldırılan Process.fork nihayet tamamen kaldırıldı. Derleme zamanı metaprogramlama, StringLiteral#bytesize, NumberLiteral#chr ve RangeLiteral#each içinde CharLiteral desteği kazanırken, yeni Crystal::ALL_FLAGS ve Crystal::USER_FLAGS sabitleri derleme zamanı bayraklarını açığa çıkarıyor. OpenSSL bağlarında Kernel TLS artık varsayılan olarak etkin.

HTTP, uzun bir düzeltme ve sağlamlaştırma listesi aldı. #remote_address ve #local_address HTTP::Request'ten HTTP::Context'e taşındı, HTTP::Headers bir merge metodu kazandı ve IO::Memory gövdeleri artık Content-Length başlığıyla serileştiriliyor. Daha katı doğrulama, tanınmayan Transfer-Encoding değerlerini, geçersiz Content-Encoding'i ve bozuk trailer'ları reddediyor. Bir değişiklik kırıcı olarak işaretlendi: HTTP::Request#body= ve #content_length= dönüş değerleri düzeltildi.

Standart kütüphanenin diğer yerlerinde, File.exists? ile File::Info'nun readable?, writable? ve executable? koşulları bir follow_symlinks argümanı kabul ediyor, Time::Span to_nanoseconds ve ilgili dönüşümleri kazandı ve backtrace'ler artık musl-libc ile -static-pie kullanılarak bağlanırken çalışıyor.

Platformlar, LLVM ve uyumluluk

aarch64-linux-gnu ve aarch64-linux-musl hedefleri Tier 2'den Tier 1'e yükseltildi. Duyuru, resmi derlemelerin tek eksik gereklilik olduğunu ve bunların 1.19'dan beri mevcut olduğunu açıklıyor. Bu sürüm ayrıca aarch64-windows-msvc için derlemelerle gelen ilk sürüm.

Derleyici tarafında LLVM 23.1 ve 24.0 destekleniyor ve RFC 30, önyükleme (bootstrapping) için ileriye dönük uyumluluk politikası getiriyor: Crystal 1.22'yi derlemek için 1.14 veya daha yüksek sürümlü bir stage-0 derleyicisi gerekiyor.

Neden önemli

Her yerde native event loop'lara geçiş, libevent'ı varsayılan yürütme yolundan çıkarıyor, runtime'ı sadeleştiriyor ve Crystal'ın G/Ç'yi her işletim sisteminin sunduğu temel yapılar üzerinde doğrudan zamanlamasını sağlıyor. SIGPIPE emülasyonu, pipeline'lardaki gereksiz hata çıktılarının yaygın bir kaynağını ortadan kaldırıyor ve dili köklü Unix geleneğiyle uyumlu hale getiriyor. Daha hızlı ve daha yalın DWARF ayrıştırma, backtrace üretimini iyileştiriyor; bu, sembolikleştirmenin kritik yolda olduğu üretim hata raporlaması için önemli. aarch64 Linux için Tier 1 durumu, ARM sunuculara veya container'lara dağıtım yapan herkes için pratik bir kazanç ve yeni ileriye dönük uyumluluk politikası, dağıtımcılara hangi derleyicinin hangi sürümü önyükleyebileceğine dair daha net kurallar veriyor.

  • #crystal-lang
  • #programming-languages
  • #compilers
  • #open-source
  • #llvm

İlgili yazılar