Saya tertarik pada desain bahasa dan secara umum saya dapat dengan mudah menjelaskan tentang fitur-fitur yang dikenal luas (misalnya warisan, polimorfisme, delegasi, lambda, tangkapan, pengumpulan sampah, pengecualian, generik, varian, refleksi, dan sebagainya), interaksi mereka dalam bahasa tertentu, cara-cara mereka dapat diimplementasikan, keterbatasan mereka, dll.
Dalam beberapa bulan terakhir, saya mulai membaca tentang Rust, yang memiliki sistem kepemilikan yang menjamin keamanan memori dan manajemen sumber daya deterministik dengan memaksa masa hidup objek untuk diverifikasi secara statis. Dari sudut pandang pengguna bahasa yang sederhana, saya bisa segera mengambil sistem.
Namun, dari sudut pandang perancang bahasa, saya perlu waktu untuk menyadari mengapa segala sesuatu di Rust persis seperti itu. Saya tidak dapat segera memahami alasan di balik beberapa pembatasan sistem kepemilikan, sampai saya memaksakan diri untuk mengajukan kasus yang akan melanggar integritas sistem jika tidak memiliki aspek-aspek tersebut.
Pertanyaan utama saya tidak ada hubungannya dengan Rust dan kepemilikannya secara khusus - tetapi jangan ragu untuk menggunakannya sebagai contoh dalam komentar / jawaban Anda, jika perlu.
Ketika perancang bahasa merancang fitur baru, metodologi atau proses apa yang mereka gunakan untuk memutuskan bahwa fitur tersebut berfungsi dengan baik?
Maksud "baru" yang saya maksudkan bukanlah sesuatu yang telah diuji dalam bahasa yang ada (dan dengan demikian sebagian besar pekerjaan telah dilakukan oleh desainer lain). Dengan "berfungsi sebagaimana mestinya" maksud saya bahwa fitur memecahkan masalah yang dimaksud dengan benar, dan itu cukup antipeluru. Dengan "cukup antipeluru" Maksud saya tidak ada kode yang dapat ditulis dalam bahasa atau bagian tertentu dari bahasa (misalnya subset tanpa kode "tidak aman") yang akan melanggar integritas fitur.
Apakah ini proses coba-coba, dalam artian Anda menemukan bentuk fitur yang sederhana, kemudian mencoba menemukan cara untuk melanggarnya, kemudian menambalnya jika Anda berhasil melanggarnya, kemudian ulangi? Dan kemudian, ketika Anda tidak bisa memikirkan kemungkinan pelanggaran lain, Anda berharap tidak ada yang tersisa dan menyebutnya sehari?
Atau adakah cara formal untuk benar-benar membuktikan (dalam pengertian matematika dari kata) bahwa fitur Anda berfungsi dan kemudian menggunakan bukti itu untuk dengan percaya diri mendapatkan fitur yang benar (atau sebagian besar benar) sejak awal?
(Saya harus menyebutkan bahwa saya memiliki latar belakang teknik, bukan ilmu komputer. Jadi jika saya kehilangan sesuatu yang jelas bagi orang-orang CS, jangan ragu untuk menunjukkannya.)