-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWork.txt
More file actions
21 lines (11 loc) · 3.34 KB
/
Copy pathWork.txt
File metadata and controls
21 lines (11 loc) · 3.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ฉันอยากทำสื่อการเรียนรู้แบบมี animation และสามารถเข้าใจได้ง่าย หัวข้อก็คือ เปรียบเทียบการแปลงภาษา program ไปเป็นภาษา Computer ระหว่างภาษา python กับ ภาษา C โดย python Compiler จะแปลงโค้ด .py เป็น bytecode ให้เป็นbyyte สกุน.pyc เก็บอยู่ในคอมเรา __pycache__ไฟล์นี้เป็นภาษาระดับต่ำมนุษย์หอ่านไม่ออก
แล้วจะมีตัว Interpreter ที่เขียนด้วยภาษาฟรีมาอ่านใบโค้ดทีละบรรทัดและแปลงให้คอมพิวเตอร์ทำงาน
คุณเขียน: print("Hello") (.py)
Python Compiler: แปลงเป็น Bytecode (คำสั่งเลขฐานที่คอมเข้าใจง่ายขึ้น)
Python Interpreter: อ่าน Bytecode แล้วสั่ง CPU ทำงาน
CPU: แสดงผล "Hello" ออกมา
ถ้า python มันใช้คอมไพล์เลอร์แปลงมาเป็น 01 0101 แล้วทำไมต้องให้ interperter แปลอีกที เพราะว่าBytecode ไม่ใช่ภาษาเครื่อง (Machine Code) แต่มันคือ "ภาษาคนกลาง" ที่เรียกว่า Bytecodeภาษาเครื่อง (0101): เป็นคำสั่งที่ขึ้นอยู่กับยี่ห้อ CPU (เช่น ชิป M2 ใน Mac กับชิป Intel ใน PC คุยคนละภาษา 01 กัน)
Bytecode: เป็นคำสั่งสั้นๆ ที่เป็นกลาง (เช่น LOAD_NAME, BINARY_ADD) ซึ่ง CPU อ่านไม่ออก แต่ Interpreter อ่านออกทำไมไม่แปลเป็น 01 ตั้งแต่แรกเลยล่ะ? (เหมือนภาษา C)
ถ้า Python แปลเป็นเลข 01 (Native Code) ตั้งแต่แรก มันจะมีข้อเสียตามมาทันที:
ความยืดหยุ่น (Portability): ถ้าแปลเป็น 01 ใน Mac คุณจะเอาไฟล์นั้นไปรันใน Windows ไม่ได้ ต้องคอมไพล์ใหม่ทุกเครื่อง แต่ถ้าเป็น Bytecode คุณเอาไฟล์ .pyc ไปรันที่ไหนก็ได้ที่มี Python Interpreter ครับ
ความเป็น "Dynamic": ภาษา Python ยอมให้เราเปลี่ยนชนิดตัวแปรไปมาได้ตลอดเวลา (เช่น x = 10 แล้วบรรทัดถัดไปเป็น x = "Hello") การจะทำแบบนี้ได้ "หน้างาน" ต้องมี Interpreter คอยตรวจสอบความปลอดภัยและจัดการหน่วยความจำให้เราครับ