บทความอื่นๆ ในชุดของ Intro to Programming & Algorithm
- บทนำฉบับรวบรัด! ความรู้พื้นฐานก่อนเริ่มเขียนโปรแกรม
- รู้จักกับตัวแปลภาษา Compiler และ Interpreter
- Algorithm (1) – ขั้นตอนวิธี หัวใจสำคัญของการเขียนโปรแกรม
- Algorithm (2) – อัลกอริทึมในมุมมองของคอมพิวเตอร์
- Algorithm (3) – Decision การสร้างทางเลือกให้โปรแกรม
- Algorithm (4) – loop สั่งให้โปรแกรมทำงานซ้ำๆ
- ตัวอย่างการสร้าง Algorithm
ในบทที่แล้วเราพูดถึงภาษาโปรแกรมกันไปคร่าวๆ
เราคุยกันถึงการที่เราจะเขียนชุดคำสั่งเพื่อสั่งงานคอมพิวเตอร์ ซึ่งคอมพิวเตอร์รับคำสั่งได้แค่ในรูปแบบของ Machine Code ที่เป็น Binary Number หรือรหัสแบบเลขฐานสอง หน้าตาประมาณนี้
0011 1101 0000 1111 0101 1100 1100 0100 1111 0011 1011 1001 0110 1010 0010 0011
แน่นอนว่าการสั่งงานนั้นยากมาก เลยมีการสร้างสิ่งที่เรียกว่า
Programming Language
ภาษาโปรแกรม
ซึ่งก็มีหลายภาษา แต่ละภาษามีจุดเด่นของตัวเอง หรือบางภาษาอาจจะเป็นต้นแบบให้สร้างภาษาใหม่ๆ ขึ้นมาให้เขียนง่ายขึ้นเรื่อยๆ หน้าตาก็จะเป็นแบบนี้
x = 1 y = 2 ans = x + y print(ans)
แน่นอนว่าใครที่ยังเขียนโปรแกรมไม่เป็นอาจจะอ่านยังไม่ค่อยรู้เรื่องนัก แต่ก็แน่นอีกว่าการเขียนแบบนี้ รู้เรื่อง กว่าเขียนเป็นรหัส Machine Code แน่นอน
ปัญหาก็คือ เราๆ ที่เป็นมนุษย์อยากเขียนโปรแกรมด้วยภาษาง่ายๆ อยู่แล้ว แต่คอมพิวเตอร์ดันอ่านไม่ออก พอคอมพิวเตอร์อ่านไม่ออก ก็สั่งงานคอมพิวเตอร์ไม่ได้ ภาษาใหม่ ถึงจะเขียนง่ายก็เลยกลายเป็นไร้ค่า!
ดังนั้น แนวคิดเพื่อแก้ปัญหานี้ก็คือ สร้างโปแกรมตัวหนึ่งขึ้นมา หน้าที่ของโปรแกรมนี้คือเราจะให้มันมาอ่านโค้ดโปรแกรมในภาษาโปรแกรมระดับสูงของเราตัวนี้ แล้วแปลงมันเป็น Machine Code ให้
เจ้าโปรแกรมที่ทำหน้าที่แปลงภาษาระดับสูงให้กลายเป็น Machine Code ในรูปแบบ Binary เนี่ย เขาเรียกมันว่า...
Compiler
ตัวแปลภาษา
ทีนี้ ... เราก็จะเขียนโปรแกรมด้วยภาษาโปรแกรมระดับสูงที่สร้างขึ้นมา เขียนง่าย คนอ่านรู้เรื่องได้อย่างสบายใจ (เราจะเรียกไฟล์โค้ดโปรแกรมที่เขียนขึ้นมานี่ว่า Source Code) แล้วพอเราเขียนเสร็จแล้ว ต้องการโปรแกรมที่ส่งไปให้คอมพิวเตอร์รันได้จริงๆ เราก็จะเรียกโปรแกรม Compiler มาทำการ "Compile" หรือ "แปลงภาษา" ซะ
เราก็จะได้ไฟล์ Execution File ออกมา แล้วก็รันโปรแกรมด้วยไฟล์นี้นั่นเอง
สรุปกันอีกที!
- โปรแกรมเมอร์เขียนโปรแกรมด้วยภาษาโปรแกรมระดับสูง (เขียนอ่าน อ่านรู้เรื่อง) - เรียกว่า Source Code ที่คอมพิวเตอร์อ่านคำสั่งพวกนี้ไม่ได้
- ใช้ Compiler ทำการ Compile ไฟล์ Source Code ให้ออกมาเป็นไฟล์โปรแกรมที่คอมพิวเตอร์สามารถอ่านได้ - เป็นไฟล์คำสั่งไฟล์ใหม่ อยู่ในรูป Binary
- ตอนนี้เราก็จะมีไฟล์ทั้งหมด 2 ไฟล์คือ Source Code กับ Execution File
Compiler vs Interpreter
คอมไพเลอร์เอาไว้แปลงภาษา (ภาษาคอมพิวเตอร์เป็นภาษาคอมพิวเตอร์อีกภาษา) แต่ก็มีโปรแกรมอีกอย่างที่ทำหน้าที่แปลงภาษาเหมือนกัน เราเรียกว่า Interpreter (คำแปลเหมือนกับคอมไพเลอร์ แปลว่า "ล่าม") ซึ่งหน้าที่ของคอมไพเลอร์กับอินเทอพรีเตอร์นั้นเหมือนกันเลย แต่ลักษณะการแปลงไม่เหมือนกัน คือ
Compiler
การใช้คอมไพเลอร์ จะต้องเขียนโปรแกรมเป็นไฟล์ Source Code ให้เสร็จซะก่อน แล้วใช้คอมไพเลอร์ทำการคอมไพล์ไฟล์ ให้ออกมาเป็น Execution File แบบที่บอกไปข้างต้น
ภาษาโปรแกรมในกลุ่มนี้ เช่น C, C++, C#, Java, Go, Swift
ข้อดี: คอมไพเลอร์บางภาษาสามารถช่วยบอกข้อผิดพลาดเวลาเราเขียนโปรแกรมพร้อมวิธีแก้เบื้องต้นให้เราได้ ทำให้ภาษาสายคอมไพลเลอร์มักจะเจอปัญหาเวลาเอาไปรันน้อยกว่า
ข้อเสีย: ภาษาที่ใช้คอมไพเลอร์นั้นส่วนใหญ่จะมีข้อกำหนดด้านภาษามาก ทำให้เขียน/เรียนรู้ยากกว่าภาษาในกลุ่มอินเทอร์พรีเตอร์
Interpreter
สำหรับ Interpreter จะอ่านไฟล์แล้วแปลคำสั่งเหมือนคอมไพเลอร์ แต่จะไม่แปลพร้อมกันทั้งไฟล์ อินเทอร์พรีเตอร์จะอ่าน Source Code ทีละบรรทัด (หรือทีละคำสั่ง) แล้วแปลงเป็น Machine Code ตอนนั้นเลย แล้วก็ทำการ Execute คำสั่งนั้นตอนนั้นเลย
แล้วจึงขยับไปอ่าน Source Code บรรทัดต่อไป แล้ว Execute เลย ... ทำแบบนี้ไปเรื่อยๆ
นั่นคือถ้าเราใช้อินเทอร์พรีเตอร์เราจะไม่ได้ผลลัพธ์เป็น Execution File ออกมา (เพราะมันทำการรันเลยในตอนนั้นไงล่ะ)
ภาษาที่ใช้แนวคิดอินเทอร์พรีเตอร์บางครั้งเรียกว่า ภาษา Script ส่วนใหญ่จะเป็นภาษาใหม่ๆ ที่เกิดขึ้นมาตอนคอมพิวเตอร์ทำงานเร็วพอแล้ว ตัวอย่างภาษา เช่น Python, JavaScript, PHP, Java (ในส่วนของ Run-Time)
ข้อดี: ส่วนใหญ่จะมีรูปแบบการเขียนที่ง่าย เหมาะกับมือใหม่ รันข้ามระบบปฏิบัติการ (OS) ได้แบบไม่ค่อยมีปัญหา
ข้อเสีย: เนื่องจากอินเทอร์พรีเตอร์ส่วนใหญ่จะไม่สามารถตรวจเช็กโค้ดช่วยเราได้เยอะเท่าคอมไพเลอร์ โอกาสที่เวลาเอาไปรันแล้ว Error อาจจะมีมากกว่า
แล้วเราเลือกได้ไหม ว่าจะใช้ Compiler หรือ Interpreter ?
คำตอบคือไม่ได้นะ!
ตัวผู้ออกแบบภาษาโปรแกรมนั้นๆ จะเป็นคนกำหนดเองว่าภาษานี้จะใช้แบบไหน โปรแกรมเมอร์ไม่สามารถเลือกได้นะ