ส่วนใหญ่เป็นเรื่องบังเอิญ
ภาษาการเขียนโปรแกรมมีการพัฒนาอยู่ตลอดเวลาและเทคโนโลยีของคอมไพเลอร์และล่ามก็ดีขึ้น ประสิทธิภาพของการประมวลผลพื้นฐาน (เช่นเวลาในการรวบรวม, ค่าใช้จ่ายในการแปล, เวลาในการดำเนินการ ฯลฯ ) ก็มีความสำคัญน้อยลงเมื่อแพลตฟอร์มการประมวลผลหลักมีการใช้พลังงานเพิ่มขึ้น
ไวยากรณ์ภาษาจะมีผลกระทบ - ตัวอย่างเช่นปาสคาลได้รับการออกแบบอย่างระมัดระวังเพื่อที่จะสามารถใช้คอมไพเลอร์ผ่านเดียว - คือผ่านมากกว่าหนึ่งแหล่งที่มาและคุณมีรหัสเครื่อง excutable ในทางกลับกัน Ada ไม่สนใจเรื่องนี้และ Ada คอมไพเลอร์ก็ยากที่จะเขียน - ซึ่งส่วนใหญ่ต้องการมากกว่าหนึ่งรอบ (คอมไพเลอร์ Ada ที่ดีมากที่ฉันใช้เมื่อหลายปีก่อนคือคอมไพเลอร์ 8 รอบอย่างที่คุณอาจจินตนาการว่ามันช้ามาก)
หากคุณดูที่ภาษาเก่า ๆ เช่น Fortran (เรียบเรียง) และ BASIC (ตีความหรือเรียบเรียง) พวกเขามี / มีไวยากรณ์ที่เข้มงวดมากและกฎความหมาย [ในกรณีของ BASIC นั่นไม่ใช่ตั๋วเงินแบบเก่าคุณต้องย้อนกลับไปก่อนหน้านั้นกับต้นฉบับ]
ในอีกทางหนึ่งการดูสิ่งที่มีอายุมากกว่าอื่น ๆ เช่น APL (ความสนุกมากมาย) สิ่งนี้มีการพิมพ์แบบไดนามิกและแปลก ๆ มันถูกตีความโดยทั่วไปเช่นกัน แต่สามารถรวบรวมได้เช่นกัน
ไวยากรณ์แบบผ่อนปรนเป็นวิธีที่ยากหากหมายความว่าคุณมีสิ่งที่เป็นทางเลือกหรือสามารถอนุมานได้ก็หมายความว่าภาษานั้นมีความสมบูรณ์เพียงพอที่จะถูกเลือกสรร จากนั้นอีกครั้ง BASIC มีหลายปีที่ผ่านมาเมื่อคำสั่ง "LET" กลายเป็นทางเลือก!
หลายแนวคิดที่คุณเห็นในขณะนี้ (ตัวอย่างเช่นการพิมพ์แบบไม่พิมพ์หรือแบบไดนามิก) นั้นเก่ามาก - ปรากฏครั้งแรกในปี 1970 หรือต้นปี 1980 วิธีที่พวกเขาใช้และภาษาที่ความคิดเหล่านี้ถูกใช้มีการเปลี่ยนแปลงและเติบโตขึ้น แต่โดยพื้นฐานแล้วสิ่งใหม่ ๆ ส่วนใหญ่เป็นของเก่าที่สวมใส่ในเสื้อผ้าใหม่
นี่คือตัวอย่างจากส่วนบนของหัวของฉัน:
- APL: การพิมพ์แบบไดนามิก ตีความโดยทั่วไป มาจาก 1960's / 1970's
- พื้นฐาน: การพิมพ์ที่แข็งแกร่งหรือไดนามิก ตีความหรือเรียบเรียง 1970 และอีกมากมาย
- Fortran: การพิมพ์ที่แข็งแกร่ง รวบรวม ปี 1960 หรือก่อนหน้า
- Algol68: การพิมพ์ที่แข็งแกร่ง รวบรวม ปี 1960
- PL / 1: การพิมพ์ที่แข็งแกร่ง รวบรวม ปี 1960
- ปาสกาล: การพิมพ์ที่แข็งแกร่ง รวบรวม ปี 1970 (แต่ในปี 1980 มีคอมไพเลอร์ P-System คล้ายกับคอมไพเลอร์ JIT!)
- การใช้งานของ Fortran และอื่น ๆ โดย DEC ในวันแรกได้รวบรวมและตีความบางส่วน
- Smalltalk: การพิมพ์แบบไดนามิก แปลเป็น bytecode ซึ่งแปลความหมาย ปี 1980
- อารัมภบท: ความแปลกประหลาดมากขึ้น การทำงาน. เรียบเรียง (Turbo Prolog ทุกคน?) ปี 1980
- C: การพิมพ์ที่แข็งแกร่ง (ฮ่าฮ่า) รวบรวม 1960's..today
- Ada: การพิมพ์ที่แข็งแกร่ง uber รวบรวม ปี 1980
- Perl: การพิมพ์แบบไดนามิก (ไวยากรณ์ที่แข็งแกร่ง) ตีความ ปี 1990 (?)
ฉันสามารถไปต่อ
- มุม Nitpickers: ภาษาที่แปลหลายภาษาถูกโทเค็นหรือ "คอมไพล์ไบต์" ในเวลาที่พวกเขาโหลด / อ่าน สิ่งนี้ทำให้การดำเนินการในภายหลังของล่ามง่ายขึ้นมาก บางครั้งคุณสามารถบันทึกโค้ดที่คอมไพล์ด้วยไบต์ได้ บางครั้งคุณทำไม่ได้ มันยังคงตีความ
Update: เพราะฉันยังไม่ชัดเจนพอ
การพิมพ์อาจแตกต่างกันอย่างกว้างขวาง
การพิมพ์แบบคงที่เวลาคอมไพล์คงเป็นเรื่องปกติ (เช่น C, Ada, C ++, Fortan, ฯลฯ ) นี่คือที่ที่คุณประกาศสิ่งประเภทและเป็นวิธีที่ตลอดไป
นอกจากนี้ยังเป็นไปได้ที่จะมีการพิมพ์แบบไดนามิกซึ่งสิ่งที่รับประเภทที่ได้รับมอบหมาย ตัวอย่างเช่น PHP และพื้นฐานบางต้นและ APL ที่คุณจะกำหนดจำนวนเต็มให้กับตัวแปรและจากนั้นเป็นประเภทจำนวนเต็ม หากภายหลังคุณกำหนดสตริงให้กับมันแสดงว่าเป็นประเภทสตริง และอื่น ๆ
แล้วมีการพิมพ์หลวม ๆ เช่น PHP ที่คุณสามารถทำสิ่งที่แปลกประหลาดอย่างแท้จริงเช่นกำหนดจำนวนเต็ม (อ้างถึงดังนั้นสตริงของมัน) ให้กับตัวแปรแล้วเพิ่มตัวเลขลงไป (เช่น '5' + 5 จะส่งผลให้ 10) นี่คือดินแดนแห่งที่แปลกประหลาด แต่บางครั้งก็มีประโยชน์มาก
อย่างไรก็ตามคุณสมบัติเหล่านี้ได้รับการออกแบบเป็นภาษา การนำไปปฏิบัตินั้นทำให้เกิดขึ้น