ทวีตเตอร์ดั้งเดิมที่นี่ :)
ก่อนอื่นฉันค่อนข้างขบขัน / ตกใจที่ทวีตของฉันจริงจังมาก! ถ้าฉันรู้ว่ามันกำลังจะถูกเผยแพร่อย่างกว้างขวางฉันจะใช้เวลามากกว่า 30 วินาทีในการเขียนมัน!
ติอาโก้ซิลวาถูกต้องชี้ให้เห็นว่า "คงที่" และ "พลัง" ขึ้นอย่างถูกต้องอธิบายประเภทการตรวจสอบมากกว่าประเภทระบบ ในความเป็นจริงมันไม่ถูกต้องที่จะบอกว่าภาษานั้นเป็นแบบคงที่หรือพิมพ์แบบไดนามิกเช่นกัน แต่ภาษามีระบบพิมพ์และการใช้ภาษานั้นอาจบังคับให้ระบบพิมพ์ใช้การตรวจสอบแบบสแตติกหรือตรวจสอบแบบไดนามิกหรือทั้งสองอย่างหรือทั้งสองอย่างหรือไม่ (แม้ว่าจะไม่ใช่การใช้ภาษาที่น่าดึงดูดมาก!)
เมื่อมันเกิดขึ้นมีระบบประเภทบางอย่าง (หรือคุณสมบัติของระบบประเภท) ซึ่งคล้อยตามการตรวจสอบแบบคงที่และมีระบบประเภทบางอย่าง (หรือคุณสมบัติของระบบพิมพ์) ซึ่งคล้อยตามการตรวจสอบแบบไดนามิกมากขึ้น ตัวอย่างเช่นหากภาษาของคุณอนุญาตให้คุณระบุในข้อความของโปรแกรมว่าค่าเฉพาะต้องเป็นอาร์เรย์ของจำนวนเต็มเสมอดังนั้นจึงเป็นเรื่องตรงไปตรงมาที่จะเขียนตัวตรวจสอบแบบสแตติกเพื่อตรวจสอบคุณสมบัตินั้น ในทางกลับกันหากภาษาของคุณมีประเภทย่อยและหากอนุญาตให้ดาวน์สตรีมคุณควรตรวจสอบความถูกต้องของดาวน์ไทม์ที่รันไทม์ แต่ไม่สามารถทำได้ในเวลารวบรวม
สิ่งที่ฉันหมายจริงๆโดยทวีตของฉันก็คือว่าส่วนใหญ่ของการใช้ภาษาที่ดำเนินการบางส่วนจำนวนเงินของการตรวจสอบชนิดของแบบไดนามิก หรือเทียบเท่าภาษาส่วนใหญ่มีคุณสมบัติบางอย่างที่ยาก (ถ้าไม่เป็นไปไม่ได้) ในการตรวจสอบแบบคงที่ Downcasting เป็นตัวอย่างหนึ่ง ตัวอย่างอื่น ๆ ได้แก่ การโอเวอร์โฟลว์ทางคณิตศาสตร์การตรวจสอบขอบเขตของอาเรย์และการตรวจสอบโมฆะ บางส่วนของสิ่งเหล่านี้สามารถตรวจสอบแบบคงที่ในบางสถานการณ์ แต่โดยขนาดใหญ่คุณจะกดยากเพื่อค้นหาการใช้ภาษาที่ไม่ได้ทำการตรวจสอบใด ๆ ที่รันไทม์
นี่ไม่ใช่สิ่งเลวร้าย เป็นเพียงข้อสังเกตว่ามีคุณสมบัติที่น่าสนใจมากมายที่เราต้องการให้ภาษาของเราบังคับใช้และเราไม่รู้วิธีการตรวจสอบแบบคงที่จริงๆ และมันเป็นเครื่องเตือนความจำว่าความแตกต่างเช่น "ประเภทคงที่" กับ "ประเภทไดนามิก" นั้นไม่ชัดเจนเหมือนคนบางคนที่คุณเชื่อ :)
หมายเหตุสุดท้ายประการหนึ่ง: คำว่า "แข็งแรง" และ "อ่อนแอ" ไม่ได้ใช้จริงในชุมชนการวิจัยภาษาการเขียนโปรแกรมและไม่มีความหมายที่สอดคล้องกันจริงๆ โดยทั่วไปแล้วฉันพบว่าเมื่อมีคนบอกว่าภาษามี "การพิมพ์ที่แข็งแกร่ง" และภาษาอื่น ๆ ที่มี "การพิมพ์ที่อ่อนแอ" พวกเขากำลังพูดว่าภาษาที่พวกเขาชื่นชอบ (คนที่มี "การพิมพ์ที่รัดกุม") ป้องกันไม่ให้พวกเขา ทำผิดพลาดที่ภาษาอื่น (ภาษาที่มี "การพิมพ์ที่อ่อนแอ") ไม่ได้ - หรือในทางกลับกันภาษาที่พวกเขาโปรดปราน (คนที่มี "การพิมพ์ที่อ่อนแอ") ช่วยให้พวกเขาทำสิ่งที่ยอดเยี่ยมที่ภาษาอื่น ๆ หนึ่งรายการที่มี "การพิมพ์ที่รัดกุม") ไม่ได้