ฉันรักทุกสิ่งที่รวบรวมเวลาและฉันชอบความคิดที่ว่าเมื่อคุณรวบรวมโปรแกรมการรับประกันจำนวนมากเกี่ยวกับการดำเนินการของมัน โดยทั่วไปการพูดระบบประเภทคงที่ (Haskell, C ++, ... ) ดูเหมือนจะให้การรับประกันเวลาคอมไพล์ที่แข็งแกร่งกว่าระบบประเภทแบบไดนามิกใด ๆ
จากสิ่งที่ฉันเข้าใจ Ada ดำเนินการตรวจสอบเวลาให้ดียิ่งขึ้นไปอีกและสามารถตรวจจับช่วงของข้อผิดพลาดที่มากกว่าก่อนดำเนินการ มันยังถือว่าปลอดภัยพอสมควร ณ เวลาใดเวลาหนึ่งมันถูกเลือกสำหรับฟิลด์ที่ละเอียดอ่อน (เมื่อข้อผิดพลาดในการเขียนโปรแกรมอาจทำให้เสียชีวิต)
ตอนนี้ฉันสงสัยว่า: ถ้าการค้ำประกันแบบคงที่ที่ดีกว่านำไปสู่รหัสที่มีเอกสารและปลอดภัยกว่าแล้วทำไมเราไม่ค้นคว้าเพิ่มเติมในทิศทางนั้น
ตัวอย่างของสิ่งที่ดูเหมือนว่าจะหายไปจะเป็นภาษาที่แทนที่จะกำหนดint
ประเภททั่วไปที่มีช่วงที่กำหนดโดยจำนวนบิตของสถาปัตยกรรมพื้นฐานหนึ่งอาจมีช่วง (ในตัวอย่างต่อไปนี้Int [a..b]
อธิบายถึงชนิดจำนวนเต็มระหว่าง รวม a และ b):
a : Int [1..24]
b : Int [1..12]
a + b : Int [2..36]
a - b : Int [-11..23]
b - a : Int [-23..11]
หรือ (นำสิ่งนี้มาจาก Ada):
a : Int [mod 24]
b : Int [mod 24]
a + b : Int [mod 24]
ภาษานี้จะเลือกประเภทพื้นฐานที่ดีที่สุดสำหรับช่วงและทำการตรวจสอบเวลาคอมไพล์ในนิพจน์ ตัวอย่างเช่นที่กำหนด:
a : Int [-3..24]
b : Int [3..10]
แล้ว:
a / b
จะไม่ถูกนิยาม
นี่เป็นเพียงตัวอย่าง แต่ฉันรู้สึกว่ามีอีกมากที่เราสามารถบังคับใช้ในเวลารวบรวม ดังนั้นทำไมจึงมีการวิจัยน้อยมากเกี่ยวกับเรื่องนี้? ศัพท์เทคนิคใดที่อธิบายแนวคิดนี้ (เพื่อให้ฉันสามารถหาข้อมูลเพิ่มเติมในหัวข้อนี้) ขีด จำกัด คืออะไร?
dependent type
refinement type