กล่าวโดยย่อ: ระบบการจำแนกประเภทเป็นอย่างไรในบริบททางวิชาการ โดยเฉพาะอย่างยิ่งฉันสามารถหาแหล่งที่มีชื่อเสียงที่สร้างความแตกต่างระหว่างระบบประเภทที่แตกต่างกันได้อย่างไร
ในความรู้สึกความยากลำบากของคำถามนี้ไม่ใช่ว่าฉันไม่สามารถหาคำตอบได้ แต่ฉันสามารถค้นหาได้มากเกินไปและไม่มีใครโดดเด่นเท่าที่ควร พื้นหลังฉันพยายามปรับปรุงบทความใน Haskell wiki เกี่ยวกับการพิมพ์ซึ่งในปัจจุบันอ้างว่ามีความแตกต่างดังต่อไปนี้:
- ไม่มีการพิมพ์: ภาษาไม่มีความคิดประเภทหรือจากมุมมองที่พิมพ์: มีประเภทเดียวในภาษา ภาษาแอสเซมบลีมีชนิด 'รูปแบบบิต' เท่านั้น Rexx และ Tk มีเฉพาะชนิด 'ข้อความ' แกน MatLab มีเฉพาะ 'เมทริกซ์ที่ซับซ้อนที่มีมูลค่า' ประเภท
- การพิมพ์ที่อ่อนแอ: มีประเภทที่แตกต่างเพียงไม่กี่ประเภทและอาจเป็นคำพ้องความหมายสำหรับหลายประเภท เช่น C ใช้ตัวเลขจำนวนเต็มสำหรับ booleans, จำนวนเต็ม, ตัวอักษร, ชุดบิตและการแจกแจง
- การพิมพ์ที่แข็งแกร่ง: ชุดเม็ดเล็กแบบละเอียดเช่นในภาษา Ada, ภาษา Wirthian (Pascal, Modula-2), Eiffel
ทั้งหมดนี้ขัดกับการรับรู้ส่วนบุคคลของฉันซึ่งเป็นไปตาม:
- การพิมพ์ที่อ่อนแอ: ออบเจ็กต์มีประเภท แต่จะถูกแปลงเป็นประเภทอื่นโดยปริยายเมื่อบริบทต้องการ ยกตัวอย่างเช่น Perl, PHP และ JavaScript เป็นภาษาทั้งหมดที่
"1"
สามารถใช้ในมากหรือน้อยบริบทใด ๆ ที่1
สามารถ - การพิมพ์ที่รัดกุม: วัตถุมีชนิดและไม่มีการแปลงโดยนัย (แม้ว่าอาจใช้การจำลองมากเกินไป) ดังนั้นการใช้วัตถุในบริบทที่ไม่ถูกต้องเป็นข้อผิดพลาด ใน Python การทำดัชนีอาร์เรย์ด้วยสตริงหรือ float จะส่งข้อยกเว้น TypeError ใน Haskell มันจะล้มเหลวในเวลารวบรวม
ฉันถามความคิดเห็นเกี่ยวกับเรื่องนี้จากคนอื่น ๆ ที่มีประสบการณ์ในสาขามากกว่าฉันและคนหนึ่งให้คุณลักษณะนี้:
- การพิมพ์ที่อ่อนแอ: การดำเนินการที่ไม่ถูกต้องกับข้อมูลจะไม่ได้รับการควบคุมหรือปฏิเสธ แต่จะสร้างผลลัพธ์ที่ไม่ถูกต้อง / ไม่เจาะจง
- การพิมพ์ที่รัดกุม: การดำเนินการกับข้อมูลจะได้รับอนุญาตเฉพาะในกรณีที่ข้อมูลนั้นเข้ากันได้กับการดำเนินการ
เมื่อฉันเข้าใจแล้วตัวอักษรตัวแรกและตัวสุดท้ายจะเรียกว่า C ที่พิมพ์อย่างอ่อนตัวที่สองจะเรียกมันว่าเป็นตัวพิมพ์ที่รุนแรง ตัวแรกและตัวที่สองจะเรียก Perl และ PHP ที่พิมพ์แบบอ่อน ๆ ส่วนที่สามจะเรียกพวกมันว่าอย่างมาก ทั้งสามคนจะอธิบาย Python ว่าพิมพ์อย่างรุนแรง
ฉันคิดว่าคนส่วนใหญ่จะบอกฉันว่า "ก็ดีไม่มีความเห็นเป็นเอกฉันท์ไม่มีความหมายที่ยอมรับได้ของคำศัพท์" หากคนเหล่านั้นผิดฉันยินดีที่จะได้ยินเกี่ยวกับเรื่องนี้ แต่ถ้าพวกเขาพูดถูกนักวิจัย CS จะอธิบายและเปรียบเทียบระบบการพิมพ์อย่างไร ฉันสามารถใช้คำศัพท์อะไรที่มีปัญหาน้อยกว่าได้บ้าง
ตามคำถามที่เกี่ยวข้องฉันรู้สึกว่าความแตกต่างแบบไดนามิก / แบบคงที่มักจะได้รับในแง่ของ "เวลารวบรวม" และ "เวลาทำงาน" ซึ่งฉันพบว่าไม่น่าพึงพอใจเนื่องจากภาษาที่รวบรวมนั้นไม่ได้เป็นสมบัติของภาษานั้นมากนัก เป็นการใช้งาน ฉันรู้สึกว่าควรมีคำอธิบายเกี่ยวกับการพิมพ์แบบไดนามิกและแบบคงที่ บางสิ่งตามแนวของ "ภาษาคงที่คือสิ่งที่ทุก ๆ subexpression สามารถพิมพ์ได้" ฉันขอขอบคุณความคิดใด ๆ โดยเฉพาะอย่างยิ่งการอ้างอิงที่นำความชัดเจนมาสู่ความคิดนี้