Yararlılığı requiredbirçok tartışma ve alev savaşının kalbinde olmuştur. Her iki tarafta da büyük kamplar vardı. Bir kamp, bir değerin mevcut olduğunu garanti etmeyi severdi ve sınırlamaları ile yaşamak isterdi, ancak diğer kamp required, güvenli bir şekilde eklenemeyeceği veya kaldırılamayacağı için tehlikeli veya yararsız hissetti .
requiredAlanların neden az kullanılmaları gerektiğinin gerekçelerini daha fazla açıklayayım . Zaten bir protokol kullanıyorsanız, zorunlu bir alan ekleyemezsiniz çünkü eski uygulamaların bu alanı sağlamaması ve genel olarak uygulamalar hatayı iyi işlemez. Önce tüm eski uygulamaların yükseltildiğinden emin olabilirsiniz, ancak bir hata yapmak kolay olabilir ve protoları herhangi bir veri deposunda (kısa süreli, hatta memcached gibi) saklıyorsanız yardımcı olmaz . Gerekli alan kaldırılırken aynı durum geçerlidir.
Zorunlu alanların birçoğu zorunlu olana kadar "açıkça" zorunluydu. Diyelim ki idbir Getyöntem için bir alanınız var . Bu kesinlikle gerekli. Dışında, daha sonra idint'den dizeye veya int32'den int64'e değiştirmeniz gerekebilir . Bu, yeni bir muchBetterIdalan eklemeyi gerektirir ve şimdi belirtilmesi gereken eski idalanla bırakılırsınız , ancak sonunda tamamen göz ardı edilir.
Bu iki sorun birleştirildiğinde, yararlı requiredalanların sayısı sınırlı hale gelir ve kamplar hala değerinin olup olmadığını tartışırlar. Muhalifler requiredbu fikre mutlaka karşı değil, şu anki biçimine karşıydılar. Bazıları , requireddaha gelişmiş bir şeyle birlikte kontrol edebilecek daha iyi bir doğrulama kütüphanesi geliştirmeyi name.length > 10ve aynı zamanda daha iyi bir başarısızlık modeline sahip olmayı önerdi .
Proto3 genel olarak basitliği destekliyor gibi görünüyor ve requiredkaldırma işlemi daha basit. Ancak, daha ikna edici olabilir, requiredilkel öğeler için alan varlığının kaldırılması ve geçersiz kılınan varsayılan değerlerin kaldırılması gibi diğer özelliklerle birleştirildiğinde proto3 için mantıklı bir şekilde kaldırılır.
Ben bir protobuf geliştiricisi değilim ve bu konuda hiçbir şekilde yetkili değilim, ama yine de açıklamanın yararlı olduğunu umuyorum.