Python มีผู้แปล! คุณไม่ได้สังเกตเพราะมันทำงานโดยอัตโนมัติ คุณสามารถบอกได้ว่ามันมีแม้ว่า: ดูที่.pyc
(หรือ.pyo
ถ้าคุณมีการเพิ่มประสิทธิภาพเปิด) import
ไฟล์ที่สร้างขึ้นสำหรับโมดูลที่คุณ
นอกจากนี้ยังไม่ได้รวบรวมรหัสของเครื่องดั้งเดิม แต่จะรวบรวมรหัสไบต์ที่ใช้โดยเครื่องเสมือนแทน เครื่องเสมือนเป็นโปรแกรมที่คอมไพล์แล้ว นี่คล้ายกับวิธีการทำงานของ Java; ที่คล้ายกันจริงๆแล้วมีตัวแปร Python ( Jython ) ที่รวบรวมรหัสไบต์ของ Java Virtual Machine แทน! นอกจากนี้ยังมีIronPythonซึ่งรวมเข้ากับ CLR ของ Microsoft (ใช้โดย. NET) (บางครั้งคอมไพเลอร์โค้ดไบต์ไพ ธ อนบางครั้งเรียกว่า CPython เพื่อแยกแยะจากทางเลือกเหล่านี้)
C ++ ต้องเปิดเผยกระบวนการรวบรวมเพราะภาษานั้นไม่สมบูรณ์; มันไม่ได้ระบุทุกสิ่งที่ตัวเชื่อมโยงจำเป็นต้องรู้ในการสร้างโปรแกรมของคุณและไม่สามารถระบุตัวเลือกการคอมไพล์แบบพกพาได้ (ตัวแปลบางตัวช่วยให้คุณสามารถใช้งาน#pragma
ได้ แต่นั่นไม่ใช่มาตรฐาน) ดังนั้นคุณต้องทำงานที่เหลือด้วย makefiles และ auto นรก (autoconf / automake / libtool) นี่เป็นเพียงส่วนที่หลงเหลือจากวิธีการที่ C ทำ และ C ทำอย่างนั้นเพราะมันทำให้คอมไพเลอร์เรียบง่ายซึ่งเป็นหนึ่งในเหตุผลหลักที่มันเป็นที่นิยม (ใคร ๆ ก็สามารถคอมไพล์คอมไพล์ C ในยุค 80 ได้)
บางสิ่งที่อาจส่งผลต่อการดำเนินการของตัวแปลหรือตัวเชื่อมโยง แต่ไม่ได้ระบุไว้ในไวยากรณ์ของ C หรือ C ++:
- การแก้ปัญหาการพึ่งพา
- ข้อกำหนดไลบรารีภายนอก (รวมถึงลำดับการขึ้นต่อกัน)
- ระดับเครื่องมือเพิ่มประสิทธิภาพ
- การตั้งค่าคำเตือน
- รุ่นข้อกำหนดภาษา
- การแมป linker (ส่วนใดไปที่ใดในโปรแกรมสุดท้าย)
- สถาปัตยกรรมเป้าหมาย
บางส่วนสามารถตรวจพบได้ แต่ไม่สามารถระบุได้ เช่นฉันสามารถตรวจสอบ C ++ ที่ใช้กับ__cplusplus
แต่ฉันไม่สามารถระบุได้ว่า C ++ 98 นั้นเป็นรหัสที่ใช้ในโค้ดของฉันเอง ฉันต้องผ่านมันเป็นแฟล็กไปยังคอมไพเลอร์ใน Makefile หรือทำการตั้งค่าในกล่องโต้ตอบ
ในขณะที่คุณอาจคิดว่ามีระบบ "การแก้ปัญหาการพึ่งพา" ในคอมไพเลอร์โดยสร้างเรกคอร์ดอ้างอิงโดยอัตโนมัติเร็กคอร์ดเหล่านี้จะบอกเฉพาะไฟล์ส่วนหัวที่ไฟล์ต้นฉบับที่ให้มาใช้ พวกเขาไม่สามารถระบุโมดูลซอร์สโค้ดเพิ่มเติมที่จำเป็นต่อการเชื่อมโยงไปยังโปรแกรมที่ปฏิบัติการได้เนื่องจากไม่มีวิธีมาตรฐานใน C หรือ C ++ เพื่อระบุว่าไฟล์ส่วนหัวที่กำหนดเป็นข้อกำหนดของอินเทอร์เฟซสำหรับโมดูลซอร์สโค้ดอื่น ๆ บรรทัดที่คุณต้องการให้ปรากฏในหลาย ๆ สถานที่เพื่อไม่ให้ซ้ำตัวเอง มีประเพณีในแบบแผนการตั้งชื่อไฟล์ แต่ไม่รู้จักหรือบังคับใช้โดยคอมไพเลอร์และตัวเชื่อมโยง
สิ่งเหล่านี้สามารถตั้งค่าได้#pragma
หลายอย่าง แต่นี่ไม่ใช่มาตรฐานและฉันพูดถึงมาตรฐาน ทุกสิ่งเหล่านี้ทำได้ระบุได้โดยมาตรฐาน แต่ไม่ได้อยู่ในความสนใจของความเข้ากันได้ย้อนหลัง ภูมิปัญญาที่แพร่หลายคือการที่ makefiles และ IDEs ไม่พังดังนั้นอย่าแก้ไขมัน
Python จัดการทั้งหมดนี้ในภาษา ตัวอย่างเช่นimport
ระบุการพึ่งพาโมดูลชัดแจ้งหมายถึงต้นไม้พึ่งพาและโมดูลจะไม่แยกออกเป็นไฟล์ส่วนหัวและแหล่งที่มา (เช่นอินเตอร์เฟซและการใช้งาน)