Interpreted vs Compiled Programming Languages: อะไรคือความแตกต่าง?

ทุกโปรแกรมคือชุดคำสั่งไม่ว่าจะเป็นการเพิ่มตัวเลขสองตัวหรือส่งคำขอทางอินเทอร์เน็ต คอมไพเลอร์และล่ามใช้รหัสที่มนุษย์อ่านได้และแปลงเป็นรหัสเครื่องที่คอมพิวเตอร์อ่านได้

ในภาษาคอมไพล์เครื่องเป้าหมายจะแปลโปรแกรมโดยตรง ในภาษาที่ตีความซอร์สโค้ดไม่ได้ถูกแปลโดยตรงโดยเครื่องเป้าหมาย แทนที่แตกต่างกันโปรแกรมอาคาล่ามอ่านและรันโค้ด

เอาล่ะ ... แต่สิ่งที่ไม่จริงหมายถึงอะไร?

ลองนึกภาพคุณมีสูตรครีมที่อยากทำ แต่เขียนเป็นภาษากรีกโบราณ มีสองวิธีที่คุณซึ่งเป็นผู้พูดที่ไม่ใช่ภาษากรีกโบราณสามารถทำตามคำแนะนำของมันได้

อย่างแรกคือถ้ามีคนแปลเป็นภาษาอังกฤษให้คุณแล้ว คุณ (และคนอื่น ๆ ที่สามารถพูดภาษาอังกฤษได้) สามารถอ่านสูตรภาษาอังกฤษและทำครีมได้ คิดว่าสูตรที่แปลนี้เป็นเวอร์ชันที่รวบรวม

วิธีที่สองคือถ้าคุณมีเพื่อนที่รู้ภาษากรีกโบราณ เมื่อคุณพร้อมที่จะทำครีมเพื่อนของคุณก็จะนั่งข้างๆคุณและแปลสูตรอาหารเป็นภาษาอังกฤษไปทีละบรรทัด ในกรณีนี้เพื่อนของคุณเป็นล่ามสำหรับสูตรอาหารในเวอร์ชันที่ตีความ

ภาษาที่รวบรวม

ภาษาที่คอมไพล์จะถูกแปลงเป็นรหัสเครื่องที่โปรเซสเซอร์สามารถดำเนินการได้โดยตรง ด้วยเหตุนี้จึงมีแนวโน้มที่จะดำเนินการได้เร็วและมีประสิทธิภาพมากกว่าภาษาที่ตีความ นอกจากนี้ยังช่วยให้นักพัฒนาสามารถควบคุมด้านฮาร์ดแวร์ได้มากขึ้นเช่นการจัดการหน่วยความจำและการใช้งาน CPU

ภาษาที่คอมไพล์จำเป็นต้องมีขั้นตอน "build" - ต้องคอมไพล์ด้วยตนเองก่อน คุณต้อง "สร้าง" โปรแกรมใหม่ทุกครั้งที่ต้องทำการเปลี่ยนแปลง ในตัวอย่างครีมของเราคำแปลทั้งหมดจะถูกเขียนขึ้นก่อนที่จะส่งถึงคุณ หากผู้เขียนต้นฉบับตัดสินใจว่าต้องการใช้น้ำมันมะกอกชนิดอื่นสูตรทั้งหมดจะต้องได้รับการแปลอีกครั้งและไม่พอใจกับคุณ

ตัวอย่างของภาษาที่คอมไพล์ล้วนๆ ได้แก่ C, C ++, Erlang, Haskell, Rust และ Go

ภาษาที่ตีความ

ล่ามจะเรียกใช้โปรแกรมทีละบรรทัดและดำเนินการแต่ละคำสั่ง หากผู้เขียนตัดสินใจว่าต้องการใช้น้ำมันมะกอกชนิดอื่นเขาสามารถขูดน้ำมันเก่าออกแล้วเติมน้ำมันใหม่ได้ จากนั้นเพื่อนนักแปลของคุณสามารถถ่ายทอดการเปลี่ยนแปลงนั้นกับคุณได้ทันทีที่มันเกิดขึ้น

ภาษาที่ตีความได้ช้ากว่าภาษาคอมไพล์อย่างมาก แต่ด้วยการพัฒนาการรวบรวมแบบทันเวลาช่องว่างดังกล่าวก็หดหายไป

ตัวอย่างของภาษาที่ตีความได้ทั่วไป ได้แก่ PHP, Ruby, Python และ JavaScript

ข้อแม้เล็ก ๆ

ภาษาโปรแกรมส่วนใหญ่สามารถมีทั้งการคอมไพล์และการตีความ - ภาษานั้นไม่จำเป็นต้องรวบรวมหรือตีความ อย่างไรก็ตามเพื่อความเรียบง่ายมักเรียกกันว่าเช่นนี้

ตัวอย่างเช่น Python สามารถเรียกใช้เป็นโปรแกรมที่คอมไพล์แล้วหรือเป็นภาษาที่ตีความในโหมดโต้ตอบ ในทางกลับกันเครื่องมือบรรทัดคำสั่ง CLI และเชลล์ส่วนใหญ่สามารถจำแนกเป็นภาษาที่ตีความได้ในทางทฤษฎี

ข้อดีและข้อเสีย

ข้อดีของภาษาคอมไพล์

โปรแกรมที่รวบรวมเป็นรหัสเครื่องดั้งเดิมมักจะเร็วกว่ารหัสที่ตีความ นี่เป็นเพราะกระบวนการแปลโค้ดในขณะรันเพิ่มค่าใช้จ่ายและอาจทำให้โปรแกรมทำงานช้าลงโดยรวม

ข้อเสียของภาษาที่คอมไพล์

ข้อเสียที่น่าสังเกตที่สุด ได้แก่

  • ต้องใช้เวลาเพิ่มเติมเพื่อทำขั้นตอนการรวบรวมทั้งหมดก่อนการทดสอบ
  • การพึ่งพาแพลตฟอร์มของรหัสไบนารีที่สร้างขึ้น

ข้อดีของภาษาที่ตีความ

ภาษาที่ตีความมีแนวโน้มที่จะยืดหยุ่นกว่าและมักมีคุณสมบัติเช่นการพิมพ์แบบไดนามิกและขนาดโปรแกรมที่เล็กลง นอกจากนี้เนื่องจากล่ามดำเนินการซอร์สโค้ดโปรแกรมด้วยตัวเองโค้ดจึงไม่ขึ้นกับแพลตฟอร์ม

ข้อเสียของภาษาที่ตีความ

ข้อเสียที่เด่นชัดที่สุดคือความเร็วในการดำเนินการโดยทั่วไปเมื่อเทียบกับภาษาที่คอมไพล์