Dil tasarımıyla ilgileniyorum ve genel olarak yaygın olarak bilinen özellikler (örneğin kalıtım, polimorfizm, delegeler, lambdalar, yakalamalar, çöp toplama, istisnalar, jenerikler, varyans, yansıma vb.), belirli bir dil, uygulanabilme biçimleri, sınırlamaları vb.
Son birkaç ay içinde, nesne yaşamlarını statik olarak doğrulanabilir olmaya zorlayarak bellek güvenliğini ve deterministik kaynak yönetimini sağlayan bir sahiplik sistemine sahip olan Rust hakkında okumaya başladım. Dilin sade bir kullanıcısı açısından, sistemi hemen alabilirim.
Bununla birlikte, bir dil tasarımcısı bakış açısından, Rust'daki şeylerin neden oldukları gibi olduğunu anlamak biraz zaman aldı. Kendimi, bu yönlere sahip olmasaydı bir sistemin bütünlüğünü ihlal edecek davaları ortaya çıkarmaya zorlayana kadar, sahiplik sisteminin bazı kısıtlamalarının ardındaki mantığı anlayamadım.
Benim ana sorum Rust ve onun mülkiyeti ile hiçbir ilgisi yok - ama gerekirse yorumlarınızda / cevaplarınızda örnek olarak kullanmaktan çekinmeyin.
Dil tasarımcıları yeni bir özellik tasarladığında, özelliğin düzgün çalıştığına karar vermek için hangi metodoloji veya süreci kullanıyorlar?
"Yeni" demek istediğim, mevcut dillerde zaten test edilmiş bir şey değil (ve dolayısıyla işin büyük kısmı diğer tasarımcılar tarafından yapılmıştır). "Düzgün çalışıyor" ile, özelliğin amaçlanan sorunu doğru bir şekilde çözdüğünü ve makul derecede kurşun geçirmez olduğunu kastediyorum. "Makul kurşun geçirmez" ile, dilde veya dilin belirli bir alt kümesinde (örneğin "güvenli olmayan" kodu olmayan bir alt küme) özelliğin bütünlüğünü ihlal edecek hiçbir kod yazılamayacağı anlamına gelir.
Özelliğin basit bir formunu bulmanız, daha sonra onu ihlal etmenin yollarını bulmaya çalışın, ardından başarılı bir şekilde ihlal ederseniz yama yapın ve tekrarlayın. Ve sonra, başka olası ihlalleri düşünemediğinizde, bir şey kalmayacağını ve bir gün diyeceğini umuyor musunuz?
Yoksa özelliğinizin işe yaradığını (kelimenin matematiksel anlamıyla) gerçekten kanıtlamanın resmi bir yolu var mı ve daha sonra özelliği en baştan (veya çoğunlukla doğru) güvenle elde etmek için bu kanıtı mı kullanıyorsunuz?
(Bilgisayar bilimi değil, mühendislik geçmişim olduğunu belirtmeliyim. Bu yüzden CS çalışanlarına açık olacak bir şeyi kaçırırsam, lütfen bunu belirtmekten çekinmeyin.)