- Rust ile yazılmış ultra hızlı bir Python tür denetleyicisi ve dil sunucusu olan ty, beta sürümüyle yayımlandı
- mypy, Pyright ve Pylance için bir alternatif olarak tasarlandı ve 10 ila 60 kat daha yüksek performans sunuyor
- Artımlı mimari sayesinde kod değiştirildiğinde yalnızca gerekli bölümler yeniden hesaplanarak gerçek zamanlı yanıt hızı en üst düzeye çıkarılıyor
- Doğruluk ve kullanılabilirlik odağıyla kesişim türleri, gelişmiş tür daraltma ve erişilebilirlik analizi gibi modern tür sistemi özelliklerini destekliyor
- Astral, ty'yi Ruff ve uv ile birlikte Python ekosisteminin temel geliştirme araçlarından biri hâline getirmeyi planlıyor
ty'ye genel bakış
- ty, Astral tarafından geliştirilen bir Python tür denetleyicisi ve dil sunucusu olup Rust ile implemente edilmiştir
- Mevcut mypy, Pyright ve Pylance'a kıyasla çok daha hızlı bir alternatif olarak tasarlandı
- Astral'ın kurum içi projelerinde hâlihazırda kullanılıyor ve beta aşamasında dış kullanıcılara da öneriliyor
- Astral, Python ekosistemi için yüksek performanslı geliştirme araçları üreten bir ekip olup uv (paket yöneticisi) ve Ruff (linter ve formatter) ile tanınıyor
Performans ve mimari
- ty, dil sunucusu merkezli yapı ile tasarlandı ve dosya değiştirildiğinde yalnızca gerekli işlemleri yeniden çalıştıran artımlı işleme yaklaşımını benimsiyor
- Bu sayede editör içindeki gerçek zamanlı güncelleme hızı çok yüksek oluyor
- Önbellek olmadan çalıştırıldığında bile mypy ve Pyright'tan 10 ila 60 kat daha hızlı
- Örnek: PyTorch deposundaki ana dosyalarda değişiklik yapıldığında tanıların yeniden hesaplanma süresi 4,7 ms olup, bu değer Pyright'tan (386 ms) 80 kat, Pyrefly'dan (2,38 saniye) 500 kat daha hızlı
- Büyük ölçekli projelerde de artımlı güncellemelerde performans farkı onlarca katı aşıyor
Tür sistemi ve doğruluk
- ty, kesişim türleri (intersection types), gelişmiş tür daraltma (advanced type narrowing) ve tür tabanlı erişilebilirlik analizi (reachability analysis) gibi özellikleri destekliyor
- Bu özellikler sayesinde doğru tür geri bildirimi sağlıyor ve gereksiz yanlış pozitifleri azaltıyor
- Hedef yalnızca hız artışı değil, doğruluğu ve kullanıcı deneyimini birlikte iyileştiren bir tür denetleyicisi kurmak
Tanı sistemi
- ty, Rust derleyicisinin hata mesajı sisteminden ilham alan gelişmiş bir tanı sistemi içeriyor
- Tek bir tanı mesajında birden fazla dosyanın bağlamını birlikte sunarak sorunun nedenini ve çözüm yönünü açıkça gösteriyor
- Örnek: Hatalı sözlük anahtarı atamasında, tür uyumsuzluğunun olduğu yer ile bildirimin yapıldığı yeri birlikte gösteriyor
- Tanı çıktısı, ty'nin temel arayüzü olarak hem insanlar hem de yapay zeka için anlaşılması kolay bir yapıda tasarlandı
Dil sunucusu özellikleri
- ty, VS Code ve Cursor gibi LSP (Language Server Protocol) destekleyen tüm editörlerde kullanılabiliyor
- Tanıma git, sembol yeniden adlandırma, otomatik tamamlama, otomatik import, anlamsal sözdizimi vurgulama ve inlay hint gibi modern dil sunucusu özelliklerinin tamamını destekliyor
- VS Code uzantısı üzerinden kurulabiliyor; CLI kurulumu için
uv tool install ty@latest komutu da kullanılabiliyor
Gelecek planları
- Beta sonrası kısa vadeli hedefler arasında kararlılığın güçlendirilmesi ve hata düzeltmeleri, Python tür spesifikasyonunun tamamlanması ve Pydantic ile Django desteği yer alıyor
- Uzun vadede ty'nin, Astral araç zincirinin anlamsal özellik motoru olarak genişletilmesi hedefleniyor
- Ölü kod kaldırma, kullanılmayan bağımlılıkları tespit etme, güvenlik açığı (CVE) erişilebilirlik analizi ve tür farkındalıklı linting gibi özellikler planlanıyor
- Astral, ty'yi sürekli geliştirerek Python'u en üretken programlama ekosistemi hâline getirmeyi hedefliyor
Teşekkür
- ty'nin geliştirilmesine onlarca açık kaynak katkıcısı katıldı ve proje MIT lisansı ile yayımlandı
- Salsa, Elixir ve Python typing topluluğundan çeşitli kişi ve ekipler teknik iş birliği ve ilham sağladı
- Astral'ın çekirdek ekibi, tür teorisi, Python çalışma zamanı anlambilimi ve ekosistem kullanım kalıpları konusundaki derin anlayışa dayanarak ty'yi geliştirdi
2 yorum
Astral bir Python fanı mı yoksa Rust fanı mı…
Tam Astral’likmiş~
Hacker News görüşleri
Ty'nin bu karşılaştırma tablosuna eklenmesi iyi olurdu
Python typing conformance sonuç tablosu'na bakınca Pyright performansını küçümsememek gerektiğini düşünüyorum
Emacs'te Ty'yi (LSP) kısa süre denedim ve oldukça iyi çalıştı. Yalnız yöntem imzaları gösterilirken bazı parametrelerin tür notasyonlarının fazla uzun uzadıya görünmesi biraz rahatsız etti
Yine de uzun vadede Ty kullanma ihtimalimin yüksek olduğunu düşünüyorum. İlk beta sürüm için tebrikler
Gerçek kullanıcıların önem verdiği şeylerle pek örtüşmüyor. (Ben Python Typing Council içinde bu spesifikasyon ve testleri birlikte hazırladım)
Yine de uv'den memnun bir kullanıcıyım, Ty yeterince kararlı olduğunda geçmeyi düşünüyorum
Astral harika araçlar yapıyor, umarım yıkıcı para kazanma yöntemleri olmadan iyi şekilde büyürler
Sonunda eski araçlara geri dönmek zorunda kaldığınız durumlar oluyor. Benim için hızdan çok doğru type checking daha önemli
Astral ekibine teşekkürler. Biz Pydantic'i çok kullanıyoruz, bu yüzden Ty'nin resmî sürümünde birinci sınıf destek planlandığını duymak sevindirici
Şu anda Pyright ve Mypy'yi birlikte çalıştırıyoruz, ama farklı hataları yakaladıkları için biraz tekrarlı hissettiriyor
Bu tabloya göre Pyright bir superset gibi görünüyor ama benim gerçek deneyimim farklıydı
Analiz 2 yıl öncesine ait, şimdi durum değişmiş olabilir. Büyük ölçekli bir kod tabanında yalnızca Pyright'a geçmiş olan var mı merak ediyorum
mypy'nin daha esnek ve daha doğru çıkarım yaptığı durumlar sık oluyordu, Pyright ise çok false positive üretiyordu; hatta bir ara kapatmıştım
Bugünlerde Pyright çok gelişmiş olabilir ama BasedPyright bana tam tersine verimsiz geldi
Toplulukta mypy'yi küçümseyip Pyright'ı aşırı öven güçlü bir hava var ama benim deneyimim biraz farklı
Daha çok notasyonların semantiğine odaklandıkları için type checker seçme ölçütü olarak uygun değiller
(Ben de Python Typing Council içinde bu spesifikasyon ve testleri hazırlayanlardan biriydim)
Başlık olarak “Ty beta sürüm duyurusu” daha uygun olurdu sanırım
Ben Pyrefly'ı Pyright'a tercih ediyordum ama yakın zamanda çıkan bir hata yüzünden eski sürüme sabitlemek zorunda kaldım, bu da can sıkıcıydı
Ty'yi kurmaya çalıştığımda Cursor sürümü uyumluluk hatası aldım
Hâlâ tek bir dil için neden bu kadar çok type checker olduğunu anlamıyorum
Kütüphane geliştiricileri hepsine karşı test mi yapmalı? Geliştiriciler yalnızca belirli checker'ları destekleyen kütüphaneleri mi kullanmalı?
Paket sınırlarında açık türler gerekebiliyor ama iç kodda çok fazla belirsizlik var
Astral özellikle artımlı işleme performansını ana tasarım hedeflerinden biri yapıyor
Gerekirse uyumluluğu sağlamak için doğrudan type stub da sunabilirsin
Ty'nin “type checker'ı memnun etmek için notasyon eklemek gerekmez” yaklaşımını benimsemesi hoşuma gitti
Önceki checker'lar ufak uyarılarla insanı yoruyordu ama Ty gerçek mantıksal hataları iyi yakalıyor
Ty'nin aynı zamanda dil sunucusu (LSP) olarak da çalıştığını bugün ilk kez öğrendim
Yani Neovim veya VSCode'da hem mypy'nin hem de Pyright'ın yerini alabilir
Django desteğinin nasıl olduğunu merak ediyorum. Django'da çok fazla magic code var, bu da type checker'ların işini zorlaştırıyor
Django kullanıyorsan bir süre daha mypy veya Pyright'la devam etmen daha iyi olur
Ty hızlı olmasa bile yalnızca intersection type (A & B) desteğiyle bile kullanmaya değer bence
Standart Python tür sisteminde eksik olan bir özellik olduğu için sevindirici
Ruby için de uv benzeri bir şey var mı merak ediyorum. Python veya TypeScript'te uv ya da bun kullanıyorum ama Ruby biraz geride kalmış gibi geliyor