ใช่มันเป็นทั้งภาษาที่รวบรวมและตีความ ถ้าอย่างนั้นทำไมเราถึงเรียกมันว่าเป็นภาษาที่ตีความ?
ดูว่ามันถูกรวบรวมและตีความอย่างไร?
ก่อนอื่นฉันอยากจะบอกว่าคุณจะชอบคำตอบของฉันมากขึ้นถ้าคุณมาจากโลก Java
ใน Java ซอร์สโค้ดแรกจะถูกแปลงเป็นโค้ดไบต์ผ่านคอมไพเลอร์javacจากนั้นนำไปยังJVM (รับผิดชอบในการสร้างโค้ดเนทีฟเพื่อการทำงาน) ตอนนี้ฉันต้องการแสดงให้คุณเห็นว่าเราเรียก Java เป็นภาษาที่คอมไพล์เพราะเราเห็นได้ว่ามันคอมไพล์ซอร์สโค้ดจริง ๆ และให้ไฟล์. class (ไม่มีอะไรนอกจาก bytecode) ผ่าน:
javac Hello.java -------> สร้างไฟล์Hello.class
java สวัสดี --------> นำ bytecode ไปยังJVMเพื่อวัตถุประสงค์ในการดำเนินการ
สิ่งเดียวกันนี้เกิดขึ้นกับไพ ธ อนเช่นแรกคือซอร์สโค้ดที่ได้รับการแปลงเป็น bytecode ผ่านคอมไพเลอร์แล้วนำไปยังPVM (รับผิดชอบในการสร้างโค้ดเนทีฟเพื่อการทำงาน) ตอนนี้ฉันต้องการแสดงให้คุณเห็นว่าเรามักจะเรียก Python เป็นภาษาที่ตีความเพราะการรวบรวมเกิดขึ้นหลังฉาก
และเมื่อเราเรียกใช้ไพ ธ อนผ่าน:
หลาม Hello.py -------> แก้ปัญหารหัสโดยตรงและเราสามารถเห็นผลลัพธ์ที่พิสูจน์ว่ารหัสนั้นถูกต้องตามหลักไวยากรณ์
@ python Hello.pyดูเหมือนว่าจะดำเนินการโดยตรง แต่จริงๆแล้วมันจะสร้าง bytecode ที่ล่ามแปลความหมายเพื่อสร้างรหัสเนทีฟเพื่อวัตถุประสงค์ในการดำเนินการ
CPython - รับผิดชอบทั้งการรวบรวมและการตีความ
ดูบรรทัดด้านล่างหากคุณต้องการรายละเอียดเพิ่มเติม :
ดังที่ฉันได้กล่าวว่าCPythonรวบรวมซอร์สโค้ด แต่การคอมไพล์จริงเกิดขึ้นด้วยความช่วยเหลือของcythonจากนั้นการตีความเกิดขึ้นกับความช่วยเหลือของCPython
ตอนนี้เราจะมาพูดถึงบทบาทของคอมไพเลอร์ Just-In-Time ใน Java และ Python
ใน JVM Java Interpreter มีอยู่ซึ่งตีความ bytesode ทีละบรรทัดเพื่อให้ได้รหัสเครื่องดั้งเดิมสำหรับการดำเนินการ แต่เมื่อ Java bytecode ถูกดำเนินการโดยล่ามการดำเนินการจะช้าลงเสมอ แล้วทางออกคืออะไร? วิธีแก้ไขคือJust-In-Time คอมไพเลอร์ซึ่งสร้างโค้ดเนทีฟซึ่งสามารถประมวลผลได้เร็วกว่าที่ตีความได้ บางผู้ผลิต JVM ใช้Java ล่ามและบางส่วนใช้Just-In-Time คอมไพเลอร์ อ้างอิง: คลิกที่นี่
ในหลามจะได้รับรอบล่ามเพื่อให้เกิดการดำเนินการอย่างรวดเร็วใช้การดำเนินการหลามอื่น ( PyPy ) แทนCPython
คลิกที่นี่สำหรับการดำเนินงานอื่น ๆ ของงูหลามรวมทั้งPyPy