Apakah ada perbedaan antara keamanan tipe dan kesehatan tipe?

9

Saya sudah mencoba untuk memisahkan definisi dari tipe keselamatan dan tipe kesehatan dan saya mengalami masa-masa itu. Saya bertanya kepada seorang profesor baru-baru ini dan setelah sedikit berpikir dia berkata bahwa tidak ada perbedaan. Namun setelah membaca ini sepertinya:

  • Jenis Keamanan adalah properti dari bahasa yang mengatakan bahwa penerapan fungsi (dan operator) ke data bermakna (yaitu 1 / "Halo" tidak masuk akal dan tidak diizinkan)
  • Jenis Soundness adalah properti dari sistem pemeriksaan tipe yang menjamin bahwa prediksi tipe statisnya akurat pada saat dijalankan.

Ini jelas hanya catatan satu orang dan saya bertanya-tanya apakah ada beberapa standar dalam komunitas PL. Saya telah melakukan pencarian dan saya belum menemukan jawaban yang memuaskan.

Ben Kushigian
sumber

Jawaban:

13

Jenis keamanan dan tipe kesehatan adalah sinonim dalam sebagian besar karya teoritis. Jenis kesehatan sering dirumuskan sehubungan dengan semantik operasional sebagai (jenis) pelestarian dan kemajuan. Preservation menyatakan bahwa jika suatu ekspresi memiliki beberapa tipe, maka setelah langkah evaluasi (melalui semantik operasional), ekspresi yang dihasilkan dapat diberikan jenis yang sama. Kemajuan menyatakan bahwa jika suatu ekspresi bukan nilai, yaitu tidak sepenuhnya dievaluasi, dan diketik dengan baik, maka dapat dievaluasi lebih lanjut.

"Jenis keamanan" dan "kesehatan", tetapi terutama "keamanan jenis", juga banyak digunakan oleh komunitas pemrograman (non-teoretis) sering dengan cara yang samar-samar, ambigu, atau langsung salah. Misalnya, API yang menggunakan tipe enumerasi alih-alih mengizinkan string arbitrer ketika hanya subset yang bermakna, katakanlah, dapat disebut sebagai "lebih banyak tipe aman", tetapi pernyataan ini tidak masuk akal menggunakan definisi teoritis "tipe" safe "yang merupakan properti biner dari bahasa secara keseluruhan.

Derek Elkins meninggalkan SE
sumber