กำเนิด JIT - Just In Time Compiler

ก่อนที่เราจะเข้าไปเจาะลึกถึงโครงสร้างของ C# และ core ของ .net framework เรามาดูจุดกำเนิดของ คำว่า JIT - Just In Time Compiler กันครับว่ามีที่มาที่ไปยังไง 

ในสมัยยุค 80-90 ภาษา computer ที่เป็นที่นิยมมีอยู่หลายภาษาเช่น C, C++, Visual Basic, Pascal ... โดยภาษา computer เหล่านี้หลังจากถูก compile source code ก็จะได้ binary file หรือ executable file ที่มีนามสกุล .exe ภายในเนื้อหาของ file แบบ exe จะเป็นข้อมูลที่คนอ่านไม่ออกแต่ CPU สามารถอ่านและเข้าใจคำสั่งใน exe file นั้นได้ และสามารถ execute file นั้นๆ ผ่าน OS หรือระบบปฏิบัติการได้เลย ... เมื่อ OS ทำการ execute binary file ตัวข้อมูลใน file ก็จะถูก load เข้าสู่หน่วยความจำ และ CPU ก็จะทำงานตาม  command ที่อยู่ใน binary file นั้นๆ ... ลักษณะของ executable file แบบนี้ ภายหลังได้ถูกนิยามว่า unmanaged code หรือบางคนเรียกว่า Native code

ในช่วงเวลานั้นผู้คนส่วนใหญ่นิยมใช้ระบบปฏิบัติการ Windows แต่ในขณะเดียวกัน ระบบปฏิบัติการ linux ก็ได้เริ่มเป็นที่นิยมมากขึ้นเช่นกัน ... ผู้คนส่วนใหญ่นิยมใช้ linux มา setup เป็น server เพื่อลดค่าใช้จ่ายโดยเฉพาะค่า server license เพราะ application ที่รันบน linux ส่วนใหญ่เป็น free license 

ปัญหาก็เลยเริ่มเกิดจากตรงนี้ ... เพราะ programmer หรือคนที่พัฒนาโปรแกรมที่ต้องการเขียนโปรแกรมให้สามารถรันได้ทั้งระบบปฏิบัติการ Windows และระบบปฏิบัติการ linux จะต้องแบ่งทีมเป็น 2 ทีมสำหรับ 2 ระบบปฏิบัติการ ... และเป็นสิ่งที่ปวดหัวมากเพราะ feature ที่ต้อง common กันจะถูกพัฒนาสองครั้งทำหรับทั้ง Windows และ linux 

จนกระทั่ง Jame Gosling ของ Sun Micro system ได้พัฒนาภาษาขึ้นมาใหม่ที่เรียกว่า Java ในปี 1995 ... ลักษณะของภาษา Java คือหลังจากที่ compile java source code ตัว execute file ที่ได้จาก compiler กลับไม่ใช่ภาษาที่ computer อ่านออก กลับเป็นภาษาอีกรูปแบบหนึ่งที่ยังอยู่ในรูปแบบที่มนุษย์ยังสามารถอ่านออกได้ โดยมีนามสกุลของ file คือ class ซึ่งข้อมูลใน file จะอยู่ในรูปแบบของ byte code ... และเมื่อต้องการ execute file นามสกุล class ตัวเครื่อง computer จำเป็นจะต้องมี JVM - java virtual machine ติดตั้งไว้ก่อนไม่ว่า OS นั้นจะเป็น Windows หรือ linux  .... ตอนที่ file นามสกุล class ถูก execute ... ตัว JVM จะทำการ load class file เข้าสู่หน่วยความจำและทำการ compile file นามสกุล class นั้นกลางอากาศ .... โดยหลังจากที่ compile จะได้ binary data หรือ Native code ที่ computer สามารถอ่านออกและ CPU ก็จะสามารถทำงานตามคำสั่งได้ ...

การ load class file เข้าสู่หน่วยความจำแล้ว compile class file นั้นเป็น Native code เราเรียกว่า Just In Time Compiler (https://www.geeksforgeeks.org/just-in-time-compiler/) 



ภาพจาก https://www.theserverside.com/definition/just-in-time-compiler-JIT

ตัว bytecode ที่ถูก compile ในครั้งแรกถูกเรียก managed code ในเวลาต่อมา .... 

ดังนั้น programmer จึงเขียน code แค่ครั้งเดียวแล้ว compile ตัว java source code  ออกมาเป็น class file เมื่อต้องการ execute file ไม่ว่าจะอยู่ภายใต้ระบบปฏิบัติการใดๆ ก็ตาม ก็แค่ให้  JVM compile class file กลางอากาศ เพื่อแปลง class file เป็น Native code แล้ว load เข้าสู่หน่วยความจำเพื่อให้ CPU สามารถทำงานตามคำสั่งได้ 

แล้วด้วยความสำเร็จของ Java ทำให้ programmer เขียนโปรแกรมแค่ครั้งเดียวแต่สามารถรันได้ทุกๆ ระบบปฏิบัติการ .... จนกลายเป็นสโลแกนที่ว่า WORA - Write One Run Anywhere (https://en.wikipedia.org/wiki/Write_once,_run_anywhere) คือสามารถเขียน code ครั้งเดียวก็สามารถทำงานข้าม platform ได้ ... เพราะสามารถขยายไปถึง OS ตัวอื่นๆ เช่น Mac

และด้วยความสำเร็จของ Java ... จึงเป็นจุดเริ่มต้นของ C# และ .net framework ในเวลาต่อมา ... 


ความคิดเห็น