สำหรับความหลากหลายเท่าที่มีอยู่มีแนวคิดทั่วไปจำนวนหนึ่งที่ภาษาการเขียนโปรแกรมที่ทันสมัยและจริงจังทั้งหมดใช้ร่วมกัน พวกเขาสองคนเป็นแกนกลางของคำตอบสำหรับคำถามของคุณด้านบน
เกิดอะไรขึ้นระหว่างฉันกดปุ่ม Enter และรหัสเครื่องที่สร้างจากรหัสไพ ธ อนของฉันที่ถูกเรียกใช้งานบน CPU ของฉัน
รหัสจะถูกวิเคราะห์วิเคราะห์และป้อนเข้าสู่ล่าม นี่คือทั้งหมดที่เกี่ยวกับพื้นที่ที่สำคัญมากของวิทยาการคอมพิวเตอร์ที่รู้จักกันเป็นทฤษฎีคอมไพเลอร์ คอมไพเลอร์เป็นโปรแกรมที่แปลรหัสจากภาษาหนึ่ง (ซอร์สโค้ดของคุณ) เป็นภาษาอื่น (โดยทั่วไปคือรหัสเครื่องแม้ว่า "transpilers" ที่แปลจากภาษาระดับสูงไปเป็นอีกภาษาหนึ่งอยู่) นี่เป็นหัวข้อที่ใหญ่มากที่คุณสามารถใช้เวลาค้นคว้าหลายปี แต่นี่เป็นเวอร์ชั่นพื้นฐาน:
คอมไพเลอร์เริ่มต้นด้วยparserซึ่งเป็นรูทีนที่อ่านซอร์สโค้ดของคุณและใช้กฎไวยากรณ์ของภาษาเพื่อคำนวณว่ามันเหมาะสมหรือไม่ที่เป็นรหัส Python (ในกรณีของคุณ) ถ้าไม่เช่นนั้น parser จะโยนข้อผิดพลาดและคอมไพเลอร์ bails ออก แต่ถ้าเป็นเช่นนั้น parser ส่งออกสิ่งที่เรียกว่าบทคัดย่อต้นไม้ไวยากรณ์หรือ AST สั้น AST เป็นโครงสร้างข้อมูลแบบต้นไม้ซึ่งแต่ละโหนดมีองค์ประกอบของไวยากรณ์ ตัวอย่างเช่นถ้าคุณบอกว่าx = 5
คุณอาจจะจบลงด้วยBinaryExpression
โหนดที่มีoperator
คุณค่าของการ=
เป็นLeft
ค่าของReferenceExpression(x)
และค่าของRight
IntegerLiteralExpression(5)
โปรแกรมทั้งหมดของคุณสามารถแสดงต้นไม้ใหญ่แบบนี้
เมื่อตัวแยกวิเคราะห์ที่ผลิต AST เฟสที่สองคือการวิเคราะห์ความหมาย ในภาษาอังกฤษธรรมดานี่หมายถึง "เข้าใจว่า AST นี้หมายถึงอะไร" โดยจะตรวจสอบ AST เพื่อตรวจสอบว่าคุณทำสิ่งใดผิดกฎหมายหรือไม่แม้ว่าจะเป็นการแยกวิเคราะห์ที่ถูกต้อง (ตัวอย่างเช่นพยายามเรียกฟังก์ชัน 1 อาร์กิวเมนต์ที่มี 3 อาร์กิวเมนต์) และทำให้เกิดข้อผิดพลาดหากคุณทำ มิฉะนั้นจะวิเคราะห์ AST และทำการแก้ไขเพื่อให้ง่ายขึ้นสำหรับเครื่องที่จะเข้าใจ
ขั้นตอนที่สามคือการสร้างรหัส เมื่อคุณวิเคราะห์ AST ที่ถูกต้องและเข้าใจง่ายแล้วคุณจะป้อนเข้าสู่เครื่องกำเนิดซึ่งเดินตาม AST และสร้างรหัสในภาษาเอาท์พุท นี่คือผลิตภัณฑ์สำเร็จรูปของคุณ
ด้วย Python มันใช้ล่ามมากกว่าคอมไพเลอร์ ล่ามทำงานในลักษณะเดียวกับคอมไพเลอร์โดยมีข้อแตกต่าง: แทนที่จะสร้างโค้ดมันจะโหลดเอาต์พุตในหน่วยความจำและประมวลผลโดยตรงบนระบบของคุณ (รายละเอียดที่แน่นอนว่าเกิดอะไรขึ้นอาจแตกต่างกันอย่างมากระหว่างภาษาต่างๆและล่ามที่ต่างกัน)
และสิ่งนี้เกี่ยวข้องกับระบบ Python runtime และ / หรือไลบรารี่อย่างไร?
ทั้งหมด แต่ภาษาที่ง่ายที่สุดมาพร้อมกับชุดฟังก์ชั่นที่กำหนดไว้ล่วงหน้าซึ่งมีความสำคัญต่อผู้ใช้จำนวนมากและอาจเป็นเรื่องยากสำหรับผู้ใช้ในการใช้งานด้วยตนเองด้วยเหตุผลใดก็ตาม รหัสของพวกเขาสามารถเรียกใช้ฟังก์ชั่นเหล่านี้ได้โดยไม่ต้องใช้ห้องสมุดบุคคลที่สาม (ตัวอย่างเช่นใน Python คุณมีprint
ซึ่งส่งออกไปstdout
โชคดีที่นำไปใช้ด้วยตัวคุณเอง!) ชุดฟังก์ชั่นนี้โดยทั่วไปจะถูกรวบรวมในไลบรารีที่ใช้ร่วมกันซึ่งโค้ดสามารถเรียกใช้ในเวลาทำงานซึ่งเป็นสาเหตุที่รู้จักกันดี เป็นไลบรารีรันไทม์ภาษาหรือเพียงแค่ "รันไทม์" สั้น ๆ