รู้จักกับตัวแปลภาษา Compiler และ Interpreter

รับสอนการเขียนโปรแกรม และ วิชาวิทยาการคอมพิวเตอร์อื่นๆ ดูรายละเอียดได้ที่นี่

ในบทที่แล้วเราพูดถึงภาษาโปรแกรมกันไปคร่าวๆ

เราคุยกันถึงการที่เราจะเขียนชุดคำสั่งเพื่อสั่งงานคอมพิวเตอร์ ซึ่งคอมพิวเตอร์รับคำสั่งได้แค่ในรูปแบบของ 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 ?

คำตอบคือไม่ได้นะ!

ตัวผู้ออกแบบภาษาโปรแกรมนั้นๆ จะเป็นคนกำหนดเองว่าภาษานี้จะใช้แบบไหน โปรแกรมเมอร์ไม่สามารถเลือกได้นะ

 

13520 Total Views 3 Views Today
Ta

Ta

สิ่งมีชีวิตตัวอ้วนๆ กลมๆ เคลื่อนที่ไปไหนโดยการกลิ้ง .. ถนัดการดำรงชีวิตโดยไม่โดนแสงแดด
ปัจจุบันเป็น Senior Software Engineer อยู่ที่ Centrillion Technology
งานอดิเรกคือ เขียนโปรแกรม อ่านหนังสือ เขียนบทความ วาดรูป และ เล่นแบดมินตัน

You may also like...

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *