Archive

Posts Tagged ‘CLI’

Common Language Infrastructure ( CLI ) ภาคเกริ่นนำ

October 14, 2008 2 comments

อืม เห็นขึ้นต้นอย่างนี้ ไม่มีอะไรแปลกหรอก ครับ พอดีมีเรื่องอยาก เขียน คือเรื่องของ Mono-project หลายคนเห็นชื่อนี้คงนึกออก หลายห่านไม่รู้จักหลายท่านบอกว่าคุ้น ๆ หู  แต่ก่อนที่จะไปเรื่อง Mono-project ผมก็คงจะต้องกล่าวถึง Common Language Infrastructure กันเสียก่อน เป็นข้อมูลพื้นฐานและเข้าใจว่า Mono-project เป็นมาอย่างไร นะครับ 🙂

ก็อย่างที่ได้เกรินนำไปนั้นแหละครับ เรามาพูดกันถึงเรื่อง Common Language Infrastructure หรือ CLI กันว่ามันเป็นอย่าไร ทำไมต้องรู้จักมัน และมันเกี่ยวกับ .NET อย่างไร

CLI เป็นข้อกำหนดหรือ specification ที่ทาง Microsoft เขาได้พัฒาขึ้นมา ซึ่งก็เป็น ตัว .NET Technology ของเขาเองนั้นแหละครับ (ปัจจุบันเป็นมาตรฐาน ECMA-335) ที่จะทำให้ application ที่ถูกพัฒนาจาก high level programming language ต่าง ๆ สามารถทำงานได้ บนระบบที่มี environment ต่าง กันได้ หรือ กล่าว ง่าย ๆ ก็คือสามารถทำงานบน platform ต่าง ๆ กันได้โดยเป็น ลักษณะ Platform independent นั่นเองครับ

อันที่จริง  Java เขานำไปแล้วครับ แต่ว่า .NET กำลังมาตอนนี้ แต่ที่แรงกว่า Java คือ มันสามารถเขียนได้ด้วยภาษาต่าง ๆ ได้ ที่ compatible หรือ ภาษาที่ทำตาม specification ที่ CLI กำหนด หรือ เอาตามมาตรฐาน EMCA-335 นั่นเอง ซึ่งมันมีเยอะ นะครับ นอกจาก ของ Microsoft เองแล้วยังมีภาษาอื่น อีกหลายภาษา ผมเอง ก็จำไม่ได้ว่ามี ภาษาอะไรบ้างที่พอจำได้ก็อย่างเช่น COBOL เป็นต้น
CLI specification หรือ ข้อกำหนด CLI  มีหลัก ๆ อยู่ 4 เรื่อง [Wikipedia – Common languague Infrastructure]

คือ

  • Common Type System (CTS) เกี่ยวกับ type และ operations ที่ CTS-compliant(ภาษาต่าง ๆ) ใช้ร่วมกัน  CTS ถือว่าเป็นหัวใจสำคัญ ของ CLI เลยหล่ะครับ
  • Metadata ก็คือข้อมูลต่างๆ ของโปรแกรม ซึ่ง CLI ใช้ในการอธิบายและอ้างอิง types ต่าง ๆที่ กำหนดใน CTS  และ มันก็จะถูกผนวกเขาใน assemblies ในระหว่างที่ทำการ compilation
  • Common Language Specification (CLS) เป็นกฏพื้นฐาน ภาษาต่าง ๆ จะต้องทำตาม เพื่อที่ภาษาเหล่านี้จะสามารถทำงาน ด้วยกันได้ (ภาษาที่ว่านี้ ก็คือภาษาที่ทำตาม specification ของ CLI นะครับ หรืออาจจะเรียกว่า CLI language ก็ได้เนอะ ) เพราะฉะนั้น module ที่เขียนจากภาษาหนึ่ง ก็สามารถถูกอ้างอิงหรือ เรียกใช้จากอีกภาษาหนึ่งได้ ว่างั้น
  • Virtual Execution System (VES) เมื่อ ภาษาเหล่านั้น compile และได้ managed code ออกมา VES จะเป็นตัว execute ซึ่งก็ใช้ข้อมูลต่าง ๆ ที่ฝังมาด้วย ( meta data )


ภาษาต่าง ๆ ( CLI language ) หลังจาก compile code ของตัวเอง แล้วจะได้  intermediate language หรือ Common Intermediate Language ( CIL ) หรือ managed code นั้นและเนอะ ซึ่งมันยังไม่หยั่งลงไปถึง platform hardware คือมันยังมองผ่าน abstract อยู่นะครับ  ถัดมา  VES จะเป็นตัว compile CIL ต่อโดย ทำงานร่วมกับJIT  แปลง code เหล่านั้นให้สามารถทำงาน ได้ กับ hardware ที่มันทำงานอยู่ นะสิ ก้คือ ได้ machine language ที่ทำงานกับ hardware นั้น ๆ อืมก็ประมาณนี้แหละ อ่าว แล้วไงหล่ะครับพูดไปพูดมา Common Language Runtime ( CLR ) หายไปไหน หว่า อันที่จริงไม่ได้หายไปไหนหรอก เพราะมันก็คือ environment ที่ VES และ JIT ทำงาน อยู่ นั้นแหละ ครับ 🙂

คราวนี้ตามมาอีกสักนิดนะครับ หลังจากนี้มันก็จะก้าวไปสู่ Cross Platform นะสิครับ  ตราบใดก็ตามที่เรา ว่าไปตาม CLI specification ความสำเร็จที่ code ของเราจะทำงาน ได้ โดยไม่ยึดติด platform ก็มาถึง ปัจจุบัน นอกจาก นอกจาก Microsoft  ที่ดำเนินตาม CLI (Microsoft .NET) แล้ว  ก็มีอีกหลาย ๆ third party ที่พยายามจะ implement  CLI เจ้าหนึ่งที่กำลังมาแรง ผมคิดเองนะ ก็คือ Novell’s Open-source Mono Project นี่แหละครับคือประเด็นที่กล่าวมาทั้งหมด
ตอนนี้ Mono project ได้ทำการ implement CLI ให้กับหลาย plate form คือ Apple’s OS X  Linux และ ก็ Sun Solaris และอื่น ๆ อีก รวมถึง Microsoft Window ด้วย ทำแข่ง Micro Soft ซะ งั้นไม่รู้ว่าคิดอะไรอยู่ เอาว่าผมจะพูดถึงเรื่อง Mono project ในตอนต่อไป ก็แล้วกันนะครับ  ค่อยติดตามก็แล้วกัน