Protobuf-py: Python için tavizsiz Protocol Buffers
Sıfırdan yazılan protobuf-py, tüm Protobuf spesifikasyonunu destekleyip Rust hızlandırıcısıyla Google'ın C tabanlı upb motoruna denk performans sunuyor.
Yeni duyurulan protobuf-py, Python için sıfırdan yazılmış bir Protocol Buffers kütüphanesi olarak öne çıkıyor. Google'ın conformance test paketindeki tüm binary ve JSON senaryolarını proto2, proto3 ve editions genelinde geçiyor; extension, özel seçenekler, bilinmeyen alanlar, dinamik mesajlar ve well-known type'lar dahil spesifikasyonun tamamını destekliyor. Kütüphane, saf Python 3.10+ üzerinde çalışıyor, harici bağımlılık gerektirmiyor ve isteğe bağlı Rust hızlandırıcısı sayesinde üretim iş yüklerinde Google'ın C tabanlı upb motoruyla rekabet edebiliyor.
Google'ın resmi paketi upb motorunu kullanıyor; mesaj verisi C arena'sında tutulup Python nesnesi sadece bir handle görevi görüyor, bu da HasField, WhichOneof gibi C++/Java kökenli, Python'a yabancı bir API ile sonuçlanıyor. betterproto gibi alternatifler daha kullanıcı dostu olsa da proto3 dışını desteklemiyor. protobuf-py ise mesaj verisini doğrudan Python nesnesi olarak tutuyor; üretilen kod okunabilir, tip destekli ve oneof'lar pattern-matching ile kullanılabiliyor, ayrıca göreli import ve açık bir registry mekanizması sayesinde paketleme sorunları ortadan kalkıyor.
Proje aslında bir ConnectRPC implementasyonu olan connect-py için sağlam bir mesaj katmanı arayışından doğdu. Performans testlerinde izole parse/serialize işlemlerinde upb önde olsa da, gerçek dünya senaryosunu yansıtan uçtan uca bir iş akışında protobuf-py, upb'yi geçebiliyor; çünkü parse sonrası alan okumaları ekstra çeviri maliyeti gerektirmiyor. Bu sonuç, Python geliştiricilerine artık eksiksiz spesifikasyon desteği ile idiomatic API arasında seçim yapma zorunluluğunu ortadan kaldırıyor.