กลุ่มของ .NET

กลุ่มของ .NET
Framework ของไมโครซอฟท์ที่ใช้ชื่อทางการค้าว่า .NET มีหลายแบบหลายเวอร์ชั่น รวมแล้วไม่ต่ำกว่า 30 แบบ
อย่างที่ได้เรียนให้ทราบไปแล้วในบทความ .NET Core คืออะไร แม้จะมีจำนวนมาก แต่ทั้งหมดก็อาจถูกจัดประเภทออกเป็นกลุ่มใหญ่ ๆ ได้ 4 กลุ่มคือ
อย่างที่ได้เรียนให้ทราบไปแล้วในบทความ .NET Core คืออะไร แม้จะมีจำนวนมาก แต่ทั้งหมดก็อาจถูกจัดประเภทออกเป็นกลุ่มใหญ่ ๆ ได้ 4 กลุ่มคือ
- .NET Framework
- .NET Core
- .NET Native
- .NET Standard
.NET Framework
.NET Framework คือ Framework ตัวเก่าแก่ดั้งเดิมที่สุด เกิดขึ้นมาตั้งแต่ปี 2002
เป็นชุดเครื่องมือหลากหลายพร้อม library สำหรับพัฒนาApplication แบบ managed application เป็น Application ที่ run ภายใต้การดูแลจัดการของตัว Runtime)
โปรแกรมที่ทำหน้าที่ manage คือ Common Language Runtime (CLR) ที่ใช้งานได้กับภาษา .NET ทั้งหมด (เช่น C# , F# ,VB.NET)
ไมโครซอฟท์เน้นพัฒนาให้ .NET Framework ทำงานในระบบปฏิบัติการ windows เป็นหลัก เนื่องจากมันเป็นซอฟต์แวร์
ดังนั้น ท่านจะต้องดาวน์โหลดมันมาติดตั้งก่อนจึงจะใช้งานได้
เป็นชุดเครื่องมือหลากหลายพร้อม library สำหรับพัฒนาApplication แบบ managed application เป็น Application ที่ run ภายใต้การดูแลจัดการของตัว Runtime)
โปรแกรมที่ทำหน้าที่ manage คือ Common Language Runtime (CLR) ที่ใช้งานได้กับภาษา .NET ทั้งหมด (เช่น C# , F# ,VB.NET)
ไมโครซอฟท์เน้นพัฒนาให้ .NET Framework ทำงานในระบบปฏิบัติการ windows เป็นหลัก เนื่องจากมันเป็นซอฟต์แวร์
ดังนั้น ท่านจะต้องดาวน์โหลดมันมาติดตั้งก่อนจึงจะใช้งานได้
.NET Core
.NET Core เป็น Framework ที่ไมโครซอฟท์สร้างมาเพื่อให้ทำงานข้ามแพลตฟอร์มได้
คือ มีอยู่ในหลาย ๆ ระบบปฏิบัติการ อาทิ windows , Linux และ MAC OS
ดังนั้น เราอาจเรียกมันว่า Framework หลากเพลตฟอร์ม (multi-planform framework) ก็ได้
.NET Core เริ่มมีครั้งแรกเมื่อปี 2016 สาเหตุที่ไมโครซอฟท์ตั้งชื่อว่า “.NET Core”
เพราะ Framework นี้มีแต่ส่วน core ล้วน ๆ ไม่เหมือน .NET Framework
ซึ่งมีสิ่งที่ไม่ใช่ core ปนเข้ามาเยอะ คำว่า core ในที่นี้หมายถึงส่วนหัวใจหรือแกนหลักของ Framework
ในระยะสิบหกปีที่ผ่านมานี้ไมโครซอฟท์พัฒนา .NET Framework อย่างต่อเนื่อง แต่ละเวอร์ชั่นจะมีคุณสมบัติใหม่ ๆ เพิ่มเข้าไปทุกครั้ง
โดยที่คุณสมบัติบางอย่างแม้จะมีประโยชน์และอำนวยความสะดวกให้แก่นักพัฒนา ฯ แต่มันก็ไม่ใช่หัวใจหรือแกนหลักของ Framework
ดังนั้น เมื่อไมโครซอฟท์พัฒนา .NET Core ไมโครซอฟท์จึงถือโอกาสนี้ตัดสิ่งที่ไม่ใช่ core ออกไป โดยเฉพาะอย่างยิ่งคุณสมบัติที่ผูกติดกับระบบปฏิบัติการ windows
คำว่า core ถูกนำมาปะหน้าชื่อองคาพยพทั้งหมด อาทิ CoreCLR (Runtime) และ CoreFX (Library)
ผู้อำนวยการโครงการ .NET Core สก็อต ฮันเตอร์ กล่าวว่า “ลูกค้าของ .NET Core ร้อยละ 40 เป็นลูกค้าใหม่ คือ ไม่ใช่นักพัฒนา ฯ กลุ่มที่เคยใช้ .NET Framework มาแต่เดิม ซึ่งเป็นสิ่งที่เราต้องการ เพราะเราอยากดึงคนกลุ่มใหม่เข้ามา”
ความที่ไมโครซอฟท์ตัดสิ่งที่ไม่ใช่ core ออกไป ทำให้.NET Core มีขนาดเล็กกว่า .NET Framework มาก
สิ่งมีขนาดใหญ่ที่ไมโครซอฟท์ตัดออกมีหลายอย่าง
ยกตัวอย่างเช่น ส่วนเชื่อมต่อกับผู้ใช้ในรูปแบบกราฟฟิก คือ Win Forms และ WPF (Windows Presentation Foundation) ได้ถูกตัดออกไปทั้งกระบิ
เพราะมันยึดโยงกับระบบปฏิบัติการ windows อย่างแนบแน่น
สิ่งที่มาทดแทนคุณสมบัติส่วนเชื่อมต่อกับผู้ใช้ในรูปแบบกราฟฟิก คือ Win Form และ WPF ใน .NET Core คือเทคโนโลยีใหม่เรียกว่า UWP (Universal Windows Platform) อันเป็นเทคโนโลยีที่มีหัวใจเป็นภาษา XAML และ Fluent design ที่ทำให้สามารถพัฒนา Application ที่ทำงานในเพลตฟอร์มใด และ device ใดก็ได้ เช่น run ในระบบปฏิบัติการ Linux ที่ทำงานในอุปกรณ์แบบพกพาอย่างแทปเล็ต หรือ run ในแผงควบคุมเครื่องจักรบนอุปกรณ์ฝังตัวที่ใช้ในโรงงานอุตสาหกรรม
สำหรับการพัฒนา web application , ASP.NET Web Forms และ WCF (Windows Communication Foundation) ซึ่งนักพัฒนาไม่นิยมใช้ก็ถูกตัดออกทั้งหมด ส่วน ASP.NET Web API และ .NET MVC ที่ได้รับความนิยม ถูกแทนที่ด้วย ASP.NET Core และ ASP.NET Core MVC ที่ไมโครซอฟท์ปรับให้กะทัดรัดกว่าใน .NET Framework
แม้การทำให้ .NET Core มีขนาดเล็กกว่า .NET Framework จะไม่ใช่เป้าหมายเริ่มต้นของไมโครซอฟท์ แต่ต่อมาก็ถือเป็นการกระทำที่มีประโยชน์เมื่อต้อง run application ในฮาร์ดแวร์ที่อัตคัตสรรพยากร
ดังนั้นนอกจากจะตัดส่วนที่ไม่ใช่ core ออกแล้ว ไมโครซอฟท์ยังหั่นบางส่วนใน .NET Core ออกเป็น NuGet packages เพื่อให้ deploy แยกออกไปต่างหากได้ การทำเช่นนี้ยิ่งทำให้ส่วนหลักของ .NET Core มีขนาดเล็กลงไปอีก
คือ มีอยู่ในหลาย ๆ ระบบปฏิบัติการ อาทิ windows , Linux และ MAC OS
ดังนั้น เราอาจเรียกมันว่า Framework หลากเพลตฟอร์ม (multi-planform framework) ก็ได้
.NET Core เริ่มมีครั้งแรกเมื่อปี 2016 สาเหตุที่ไมโครซอฟท์ตั้งชื่อว่า “.NET Core”
เพราะ Framework นี้มีแต่ส่วน core ล้วน ๆ ไม่เหมือน .NET Framework
ซึ่งมีสิ่งที่ไม่ใช่ core ปนเข้ามาเยอะ คำว่า core ในที่นี้หมายถึงส่วนหัวใจหรือแกนหลักของ Framework
ในระยะสิบหกปีที่ผ่านมานี้ไมโครซอฟท์พัฒนา .NET Framework อย่างต่อเนื่อง แต่ละเวอร์ชั่นจะมีคุณสมบัติใหม่ ๆ เพิ่มเข้าไปทุกครั้ง
โดยที่คุณสมบัติบางอย่างแม้จะมีประโยชน์และอำนวยความสะดวกให้แก่นักพัฒนา ฯ แต่มันก็ไม่ใช่หัวใจหรือแกนหลักของ Framework
ดังนั้น เมื่อไมโครซอฟท์พัฒนา .NET Core ไมโครซอฟท์จึงถือโอกาสนี้ตัดสิ่งที่ไม่ใช่ core ออกไป โดยเฉพาะอย่างยิ่งคุณสมบัติที่ผูกติดกับระบบปฏิบัติการ windows
คำว่า core ถูกนำมาปะหน้าชื่อองคาพยพทั้งหมด อาทิ CoreCLR (Runtime) และ CoreFX (Library)
ผู้อำนวยการโครงการ .NET Core สก็อต ฮันเตอร์ กล่าวว่า “ลูกค้าของ .NET Core ร้อยละ 40 เป็นลูกค้าใหม่ คือ ไม่ใช่นักพัฒนา ฯ กลุ่มที่เคยใช้ .NET Framework มาแต่เดิม ซึ่งเป็นสิ่งที่เราต้องการ เพราะเราอยากดึงคนกลุ่มใหม่เข้ามา”
ความที่ไมโครซอฟท์ตัดสิ่งที่ไม่ใช่ core ออกไป ทำให้.NET Core มีขนาดเล็กกว่า .NET Framework มาก
สิ่งมีขนาดใหญ่ที่ไมโครซอฟท์ตัดออกมีหลายอย่าง
ยกตัวอย่างเช่น ส่วนเชื่อมต่อกับผู้ใช้ในรูปแบบกราฟฟิก คือ Win Forms และ WPF (Windows Presentation Foundation) ได้ถูกตัดออกไปทั้งกระบิ
เพราะมันยึดโยงกับระบบปฏิบัติการ windows อย่างแนบแน่น
สิ่งที่มาทดแทนคุณสมบัติส่วนเชื่อมต่อกับผู้ใช้ในรูปแบบกราฟฟิก คือ Win Form และ WPF ใน .NET Core คือเทคโนโลยีใหม่เรียกว่า UWP (Universal Windows Platform) อันเป็นเทคโนโลยีที่มีหัวใจเป็นภาษา XAML และ Fluent design ที่ทำให้สามารถพัฒนา Application ที่ทำงานในเพลตฟอร์มใด และ device ใดก็ได้ เช่น run ในระบบปฏิบัติการ Linux ที่ทำงานในอุปกรณ์แบบพกพาอย่างแทปเล็ต หรือ run ในแผงควบคุมเครื่องจักรบนอุปกรณ์ฝังตัวที่ใช้ในโรงงานอุตสาหกรรม
สำหรับการพัฒนา web application , ASP.NET Web Forms และ WCF (Windows Communication Foundation) ซึ่งนักพัฒนาไม่นิยมใช้ก็ถูกตัดออกทั้งหมด ส่วน ASP.NET Web API และ .NET MVC ที่ได้รับความนิยม ถูกแทนที่ด้วย ASP.NET Core และ ASP.NET Core MVC ที่ไมโครซอฟท์ปรับให้กะทัดรัดกว่าใน .NET Framework
แม้การทำให้ .NET Core มีขนาดเล็กกว่า .NET Framework จะไม่ใช่เป้าหมายเริ่มต้นของไมโครซอฟท์ แต่ต่อมาก็ถือเป็นการกระทำที่มีประโยชน์เมื่อต้อง run application ในฮาร์ดแวร์ที่อัตคัตสรรพยากร
ดังนั้นนอกจากจะตัดส่วนที่ไม่ใช่ core ออกแล้ว ไมโครซอฟท์ยังหั่นบางส่วนใน .NET Core ออกเป็น NuGet packages เพื่อให้ deploy แยกออกไปต่างหากได้ การทำเช่นนี้ยิ่งทำให้ส่วนหลักของ .NET Core มีขนาดเล็กลงไปอีก
.NET Native
.NET Native คือ เทคโนโลยีการแปลภาษา C# (และภาษา .NET อื่น ๆ) ให้กลายเป็น binary ภาษาเครื่องของ CPU โดยตรง (เรียกว่า Native) เหมือนการ compile ภาษา C++ ต่างจากเทคโนโลยีปรกติที่ภาษา .NET จะต้องถูกแปลเป็นภาษา CIL (Common Intermediate Language) ก่อน เมื่อตอน run ภาษา CIL จะถูกแปลให้เป็น Native อีกครั้ง
เทคโนโลยี .NET Native ถูกสร้างขึ้นเพื่อให้นักพัฒนา ฯ ทำแอพสำหรับอุปกรณ์เคลื่อนที่ซึ่งมีทรัพยากรจำกัดและใช้พลังงานจากแบตเตอร๊่ได้โดยไม่ต้องเขียนโค้ดในภาษา C++
โปรแกรมที่อยู่ในสภาพ Native กินทรัพยากรและแบตเตอรี่น้อยกว่าภาษา CIL ที่ว่ากินทรัพยากรน้อยกว่า
เพราะ binary ไฟล์มีขนาดเล็กกว่าไฟล์ภาษา CIL จึงใช้พื้นที่ในหน่วยความจำแรมน้อยกว่า และ binary ไฟล์ไม่ต้องถูก compile ซ้ำอีกครั้ง
จึงใช้พลังงานของ CPU น้อยกว่าไฟล์ภาษา CIL ที่บอกว่า Native กินพลังงานแบตเตอรี่น้อยกว่า เพราะขณะที่ไม่ได้ทำอะไรโปรแกรมแบบ Native จะไม่ใช้พลังงานไฟฟ้าเลย ต่างจาก CIL ที่มีตัว run time แบบ JIT (Just In Time) ซึ่งทำงานอยู่ที่พื้นหลังตลอดเวลา ไม่เว้นแม้แต่ตอนที่ Applicationอยู่ในภาวะนิ่งเฉย
เทคโนลีที่ใช้ใน .NET Native เรียกว่า NGen (Native Image Generator) เป็น service หนึ่งของ .NET Native ทำหน้าที่คอยแปลภาษา .NET ให้กลายเป็นภาษา native
โดยเป็นการแปลแบบ “compile ล่วงหน้า” หรือ “เอโอที” (AOT : Ahead Of Time compilation) ซึ่งใช้เครื่องมือชุดเดียวกันกับภาษา C++
ภาษา C# ที่ถูกแปลเป็น native แล้วตอน run จะไม่ต้องอาศัยการทำงานของ CLR (Common Language Runtime) เช่นเดียวกันกับ C++
เทคโนโลยี .NET Native ถูกสร้างขึ้นเพื่อให้นักพัฒนา ฯ ทำแอพสำหรับอุปกรณ์เคลื่อนที่ซึ่งมีทรัพยากรจำกัดและใช้พลังงานจากแบตเตอร๊่ได้โดยไม่ต้องเขียนโค้ดในภาษา C++
โปรแกรมที่อยู่ในสภาพ Native กินทรัพยากรและแบตเตอรี่น้อยกว่าภาษา CIL ที่ว่ากินทรัพยากรน้อยกว่า
เพราะ binary ไฟล์มีขนาดเล็กกว่าไฟล์ภาษา CIL จึงใช้พื้นที่ในหน่วยความจำแรมน้อยกว่า และ binary ไฟล์ไม่ต้องถูก compile ซ้ำอีกครั้ง
จึงใช้พลังงานของ CPU น้อยกว่าไฟล์ภาษา CIL ที่บอกว่า Native กินพลังงานแบตเตอรี่น้อยกว่า เพราะขณะที่ไม่ได้ทำอะไรโปรแกรมแบบ Native จะไม่ใช้พลังงานไฟฟ้าเลย ต่างจาก CIL ที่มีตัว run time แบบ JIT (Just In Time) ซึ่งทำงานอยู่ที่พื้นหลังตลอดเวลา ไม่เว้นแม้แต่ตอนที่ Applicationอยู่ในภาวะนิ่งเฉย
เทคโนลีที่ใช้ใน .NET Native เรียกว่า NGen (Native Image Generator) เป็น service หนึ่งของ .NET Native ทำหน้าที่คอยแปลภาษา .NET ให้กลายเป็นภาษา native
โดยเป็นการแปลแบบ “compile ล่วงหน้า” หรือ “เอโอที” (AOT : Ahead Of Time compilation) ซึ่งใช้เครื่องมือชุดเดียวกันกับภาษา C++
ภาษา C# ที่ถูกแปลเป็น native แล้วตอน run จะไม่ต้องอาศัยการทำงานของ CLR (Common Language Runtime) เช่นเดียวกันกับ C++
ในโปรแกรม Visual Studio หัวข้อ Project/Properties/Build มีตัวเลือก Compile with .NET Native tool chain
เพื่อให้นักพัฒนา ฯ เลือกว่าต้องการคอมไพล์โปรแกรมเป็นแบบ CIL หรือเป็น Native
เพื่อให้นักพัฒนา ฯ เลือกว่าต้องการคอมไพล์โปรแกรมเป็นแบบ CIL หรือเป็น Native
การคอมไพล์เป็น Native มีกระบวนการที่ซับซ้อนหลายกระบวนการกว่า CIL จึงใช้เวลานานกว่า
ดังนั้นในขณะกำลังพัฒนาจึงไม่ควรเลือกหัวข้อนี้ ควรจะเลือกเมื่อพัฒนาเสร็จสมบูรณ์แล้วและเข้าสู่ขั้นตอนการผลิต
ดังนั้นในขณะกำลังพัฒนาจึงไม่ควรเลือกหัวข้อนี้ ควรจะเลือกเมื่อพัฒนาเสร็จสมบูรณ์แล้วและเข้าสู่ขั้นตอนการผลิต
สรุปคุณลักษณะของ .NET Native คือ
- Application ทำงานได้เร็วกว่า App ที่ต้องอาศัย CLR
- Application เริ่มทำงานได้เร็วกว่า เพราะสามารถเริ่มงานได้ทันทีโดยไม่ต้องให้ JIT แปลอีกครั้ง
- นักพัฒนา ฯ สามารถพัฒนา App ด้วยภาษา C# และVisual Basicได้
- นักพัฒนา ฯ ใช้ประโยชน์จาก library ของ .NET ได้
- มีตัวจัดการหน่วยความจำ จัดการขยะ และตัวจัดการ Error
- ใช้ทรัพยากรของระบบได้ประหยัดกว่า
- ใช้พลังงานไฟฟ้าน้อยกว่า
- Complie เป็นภาษาเครื่องของ CPU ได้หลายตระกูล
.NET Standard
.NET Standard ต่างจาก .NET 3 กลุ่มที่กล่าวมา เพราะเป็นเพียงข้อกำหนด ไม่ใช่ซอฟต์แวร์ ไม่ใช่ library หรือ Tool ใด ๆ
เราจึงไม่สามารถดาวน์โหลด .NET Standard มาติดตั้งใช้งานได้เหมือน .NET ชนิดอื่น ๆ
อุปมาได้กับที่เราไม่สามารถดาวน์โหลด HTML5 มาติดตั้งใช้งานได้ ถ้าเราต้องการใช้ HTML5
เราจะต้องดาวน์โหลดติดตั้งโปรแกรม web browser ที่สนับสนุน HTML5 ในกรณี .NET Standard
ถ้าเราต้องการใช้งานมันเราจะต้องดาวน์โหลดติดตั้ง .NET ที่สนับสนุน.NET Standard
Framework ที่สนับสนุน .NET Standard ได้แก่.NET Core , .NET Framework , Mono , Xamarin , Universal Windows Platform , Windows 8 และ Windows Phone
เราจึงไม่สามารถดาวน์โหลด .NET Standard มาติดตั้งใช้งานได้เหมือน .NET ชนิดอื่น ๆ
อุปมาได้กับที่เราไม่สามารถดาวน์โหลด HTML5 มาติดตั้งใช้งานได้ ถ้าเราต้องการใช้ HTML5
เราจะต้องดาวน์โหลดติดตั้งโปรแกรม web browser ที่สนับสนุน HTML5 ในกรณี .NET Standard
ถ้าเราต้องการใช้งานมันเราจะต้องดาวน์โหลดติดตั้ง .NET ที่สนับสนุน.NET Standard
Framework ที่สนับสนุน .NET Standard ได้แก่.NET Core , .NET Framework , Mono , Xamarin , Universal Windows Platform , Windows 8 และ Windows Phone