DEV Community

Weerasak Chongnguluam
Weerasak Chongnguluam

Posted on

โปรแกรมที่เราเขียนจะรันบน Runtime Environment แบบใดแบบหนึ่งเสมอ

โปรแกรมคอมพิวเตอร์ประกอบด้วย Hardware และ Software ซึ่ง Hardware เนี่ยแหละเป็น Runtime Environment ให้ Software

เพื่อให้ง่ายในการสร้างโปรแกรมจึงเกิด Programming Language ขึ้นมาให้เขียนโค้ดอ่านง่ายๆแล้วค่อยแปลงเป็นโค้ดที่ Hardware เข้าใจ

จริงๆแล้ว Hardware เป็นแค่ Runtime Environment แบบนึง สุดท้ายแล้ว ตัว Runtime Environment สามารถสร้างขึ้นมาใหม่ด้วย Sofware อีกตัวก็ได้ จึงเกิดเป็น Virtual Machine ขึ้นมา

แน่นอนมันก็ยังไม่ง่ายพอสำหรับคนพัฒนาโปรแกรมที่ต้องคิดในระบบของ Runtime ที่มี Architecture แบบ Hardware

ดังนั้นจึงเกิดกาสร้าง Runtime Environment ซ้อนขึ้นมาเพื่อวาง Architecture ที่ง่ายต่อการพัฒนาโปรแกรม อะไรที่ซับซ้อนหรือที่ต้องใช้ซ้ำๆ ก็ให้ runtime เตรียมเป็น function เอาไว้ให้ นี่จึงเกิดเปิด Operating System ขึ้นมา

แน่นอน ถ้าสิ่งที่ OS เตรียมเอาไว้ให้ยังไม่ง่ายพอสำหรับการสร้างโปรแกรมในรูปแบบที่ต้องการ หรือทำให้ต้องออกแบบ Programming Language ที่ซับซ้อนไป ก็ทำให้เกิด Runtime ที่เจาะจงของแต่ละภาษาขึ้นมาเช่น Java Runtime, Erlang Runtime, Go Runtime ขึ้นมา

สุดท้ายแล้วมันก็สามารถเกิด Runtime Environment ซ้อนๆกัน หรือเกิดใหม่ได้เรื่อยๆ เพื่อให้ง่ายต่อการใช้งานและพัฒนาโปรแกรม

เราอาจจะมองว่าแล้วจะไม่เกิดปัญหาเรื่อง Performance เหรอ จริงๆก็เกิดถ้าเรานับเรื่อง Performance แค่ความเร็วในการรันแต่ละคำสั่ง แต่เราก็ต้อง tradeoff กับเวลาที่ใช้ในการพัฒนาหรือแก้ไขเปลี่นนแปลงตามความต้องการเอาไว้ด้วย

ยังไงก็ตาม เราสามารถเลือกได้เสมอว่าเราจะเขียนโปรแกรมให้ทำงานใน Runtime Environment แบบไหนถึงเหมาะกับงานที่ทำอยู่

นี่คือรูปแบบการแก้ปัญหาที่เรามักจะเห็นอยู่เป็นประจำในโลกของการพัฒนาซอฟแวร์คอมพิวเตอร์ เมื่อจุดใดจุดนึงยากและต้องใช้ซ้ำกันบ่อยๆ เราจะ abstract มันออกไป
แล้วใช้ซ้ำ รูปแบบการ abstract อาจจะมาในรูปของสร้าง function ให้ใช้ซ้ำ อาจจะมาในรูปของ Runtime Environment ที่ซ้ำกัน
ที่ต้องซ้อนกันเพราะในแต่ละชั้นก็ดูแลคนละหน้าที่ จาก Hardware ขึ้นมาเป็น OS ที่ช่วยดูแลการติดต่อ Hardware ขึ้นมาเป็น
Runtime ของแต่ละภาษาเพื่อให้คนเขียนไม่ต้องกังวลในการเขียนติดต่อ OS ที่ต่างกัน เป็นต้น

Top comments (0)