นั่นเป็นคำถามที่ดี! มันถามสิ่งที่เราคาดหวังจากประเภทในภาษาที่พิมพ์
โน้ตตัวแรกที่เราสามารถพิมพ์ภาษาโปรแกรมใด ๆ กับunitype : เพียงแค่รับจดหมายกล่าวและบอกว่าทุกโปรแกรมมีประเภทU
U
มันไม่ได้มีประโยชน์มากนัก แต่มันก็เป็นประเด็น
eAeAAint
ไม่มีที่สิ้นสุดว่าประเภทของคุณสามารถแสดงออกได้ ในหลักการพวกเขาอาจเป็นประเภทของงบตรรกะพวกเขาสามารถใช้ทฤษฎีหมวดหมู่และ whatnot ฯลฯ ตัวอย่างเช่นประเภทที่พึ่งพาจะช่วยให้คุณแสดงสิ่งต่าง ๆ เช่น คุณสามารถไปต่อได้ในขณะที่ฉันกำลังฟังการพูดคุยเกี่ยวกับ "การแยก log พร้อมกัน" ซึ่งช่วยให้คุณสามารถพูดเกี่ยวกับวิธีการทำงานของโปรแกรมที่เกิดขึ้นพร้อมกันกับสถานะที่ใช้ร่วมกัน สิ่งแฟนซี
ศิลปะประเภทในการออกแบบภาษาโปรแกรมเป็นหนึ่งในการแสดงความสมดุลและความเรียบง่าย :
- ประเภทที่แสดงออกมากขึ้นทำให้เราสามารถอธิบายรายละเอียดได้มากขึ้น (สำหรับตัวเราเองและต่อผู้แปล) สิ่งที่ควรจะเกิดขึ้น
- ประเภทที่เรียบง่ายนั้นง่ายต่อการเข้าใจและสามารถอัตโนมัติได้ง่ายขึ้นในคอมไพเลอร์ (ผู้ใช้งานมีประเภทที่จำเป็นต้องมีผู้ช่วยที่พิสูจน์แล้วและอินพุตของผู้ใช้เพื่อทำการตรวจสอบประเภท)
ความเรียบง่ายไม่ควรถูกประเมินต่ำกว่าเนื่องจากโปรแกรมเมอร์ทุกคนไม่มีปริญญาเอกด้านทฤษฎีการเขียนโปรแกรมภาษา
เพื่อให้เรากลับมาที่คำถามของคุณ: คุณจะรู้ว่าระบบการพิมพ์ของคุณเป็นสิ่งที่ดี ? พิสูจน์ทฤษฎีบทที่แสดงประเภทของคุณให้สมดุล จะมีทฤษฎีบทสองประเภท:
ทฤษฎีที่บอกว่าประเภทของคุณประโยชน์ การรู้ว่าโปรแกรมมีประเภทควรมีการรับรองบางอย่างตัวอย่างเช่นโปรแกรมจะไม่ติดขัด (นั่นคือทฤษฎีความปลอดภัย ) ทฤษฎีบทครอบครัวอีกกลุ่มหนึ่งจะเชื่อมโยงชนิดกับแบบจำลองความหมายเพื่อให้เราสามารถเริ่มใช้คณิตศาสตร์จริงเพื่อพิสูจน์สิ่งต่าง ๆ เกี่ยวกับโปรแกรมของเรา ( นั่นคือทฤษฎีบทที่เพียงพอ Unitype ด้านบนไม่ดีเนื่องจากไม่มีทฤษฎีบทที่มีประโยชน์เช่นนั้น
ทฤษฎีที่บอกว่าประเภทของคุณมีความเรียบง่าย พื้นฐานจะเป็นว่ามันเป็น decidable ว่าการแสดงออกที่กำหนดมีประเภทที่กำหนด คุณสมบัติที่เรียบง่ายอีกประการหนึ่งคือการให้อัลกอริทึมสำหรับอนุมานประเภท ทฤษฎีบทอื่น ๆ เกี่ยวกับความเรียบง่ายจะเป็น: การแสดงออกมีอย่างน้อยหนึ่งประเภทหรือว่าการแสดงออกมีประเภทหลัก (กล่าวคือ "ดีที่สุด" หนึ่งในทุกประเภทที่มี)
เป็นการยากที่จะเจาะจงมากขึ้นเพราะประเภทเป็นกลไกทั่วไปมาก แต่ฉันหวังว่าคุณจะเห็นสิ่งที่คุณควรยิงเพื่อ เช่นเดียวกับลักษณะส่วนใหญ่ของการออกแบบภาษาการเขียนโปรแกรมไม่มีความสำเร็จแน่นอน แต่มีพื้นที่ของความเป็นไปได้ในการออกแบบและสิ่งสำคัญคือการเข้าใจว่าคุณอยู่ในพื้นที่หรือต้องการอยู่ที่ไหน