ไมโครซอฟท์ประกาศแนวทางพัฒนาส่วนขยาย C# ของ Visual Studio Code ซึ่งบางส่วนจะใช้ไลเซนส์แบบปิด แตกต่างของตัวที่ใช้ในปัจจุบัน ซึ่งเป็นโอเพนซอร์สทั้งหมด
ส่วนขยาย C# ของ VS Code ในปัจจุบันเริ่มมาจากโครงการ OmniSharp ที่พัฒนาโดยชุมชนโปรแกรมเมอร์ และเริ่มพัฒนาในยุคแรกๆ ของ VS Code ที่มาตรฐานด้าน API และโปรโตคอลยังไม่นิ่ง
ในระยะถัดมา VS Code เพิ่มฟีเจอร์ Language Server Protocol (LSP) สำหรับเชื่อมต่อกับภาษาโปรแกรมมิ่งอื่นๆ (ซึ่งกลายเป็นมาตรฐานของวงการในเวลาต่อมา) แต่ตัวส่วนขยาย C# ของเดิมยังไม่ได้เชื่อมต่อผ่าน LSP
ผู้ที่เขียนเกมด้วยเอนจิน Unity คงทราบกันดีว่าต้องใช้ภาษา C# เนื่องจากรากเหง้าของ Unity เริ่มมาจาก .NET (จะให้เจาะจงคือ Mono ที่เป็น .NET เวอร์ชันโอเพนซอร์ส) อย่างไรก็ตาม แนวทางของ Unity คือการปรับแต่งคอมไพเลอร์ รันไทม์ และภาษา C# ในแบบของตัวเอง ที่แตกต่างจาก C#/.NET ของไมโครซอฟท์
ปัญหาของเรื่องนี้คือ ชุดเครื่องมือ แพ็กเกจ และไลบรารีต่างๆ ของโลก .NET จึงไม่สามารถทำงานร่วมกับ Unity ได้ดีเท่าที่ควร บวกกับภาษา C# เวอร์ชันใหม่ๆ ก็ต้องรอให้ Unity ตามซัพพอร์ต ซึ่งต้องใช้เวลานาน
ล่าสุด Unity ประกาศทิศทางว่าจะมุ่งหน้าเข้าสู่โลก .NET กระแสหลัก แทนการเลือกคัสตอมเทคโนโลยีเอง โดยประกาศชัดว่าอยากเลิกใช้รันไทม์ Mono .NET เปลี่ยนมาเป็น CoreCLR ของ .NET เวอร์ชันหลักในปัจจุบัน (.NET Core)
เมื่อคืนนี้ไมโครซอฟท์ปล่อย .NET 6 ตัวจริง โดยส่วนสำคัญส่วนหนึ่งคือตัวภาษา C# ที่ปรับเป็นเวอร์ชั่น 10 ที่มีการปรับปรุงภาษาหลายส่วน ฟีเจอร์สำคัญๆ ที่ปรับเปลี่ยนมาได้แก่
IEEE ประกาศอันดับภาษาโปรแกรมยอดนิยม พบว่า 5 อันดับแรก ได้แก่ Python, Java, C, C++, JavaScript นั้นไม่มีความเปลี่ยนแปลง แต่ปีที่ผ่านมา C# กลับสามารถไต่อันดับจากอันดับ 25 มาเป็นอันดับ 6
ไมโครซอฟท์มีแนวทางหลอมรวม Win32 และ UWP เข้าด้วยกันภายใต้ Project Reunion ซึ่งประกอบด้วยโครงการย่อยหลายอย่าง เป้าหมายข้อหนึ่งของ Reunion คือเปิดให้ใช้ภาษาโปรแกรมรุ่นใหม่ๆ เขียนแอพบนวินโดวส์ได้หลากหลายขึ้น
ข้อจำกัดสำคัญของ Win32 API แบบดั้งเดิมคือมันถูกสร้างขึ้นในยุคภาษา C/C++ จึงรองรับเฉพาะภาษานี้ หากต้องการเขียนโปรแกรม Win32 ด้วยภาษาโปรแกรมอื่น จำเป็นต้องมี binding หรือ wrapper มาทำหน้าที่เชื่อมต่อ API ให้
ไมโครซอฟท์ประกาศฟีเจอร์ภาษา C# 9.0 ที่เพิ่มความสะดวกในการพัฒนาหลายอย่าง ฟีเจอร์ที่เพิ่มมามีข้อเล็กน้อยจำนวนมาก แต่ที่ผมเห็นว่าเด่นๆ เช่น top-level programming, positional records, และการปรับปรุง pattern
top-level programming คือการเขียนโปรแกรมโดยไม่ต้องมี class
และ function
ครอบ Main อีกต่อไป แต่สามารถเขียนโค้ดโดยตรงหลัง using
ได้เลย พร้อมกับสามารถเรียกใช้อาร์กิวเมนต์ผ่านตัวแปร args
ได้
Blazor เป็นเฟรมเวิร์คตัวหนึ่งในตระกูล ASP.NET เอาไว้เขียนเว็บแอพแบบหน้าเดียว (single-page) ด้วย HTML ผสมกับ C# แทนที่จะเป็น JavaScript
จุดเด่นของ Blazor คือใช้ภาษา C# ที่นักพัฒนาสาย .NET คุ้นเคย, ใช้โค้ด C# ทั้งฝั่งไคลเอนต์และเซิร์ฟเวอร์, ใช้ไลบรารีของ .NET ได้, มีระบบ UI component ให้พร้อมสรรพ
ก่อนหน้านี้ การทำงานของ Blazor คือต้องรันเซิร์ฟเวอร์ Blazor ที่เป็น .NET ด้วย แต่ล่าสุดในงาน Build 2020 ไมโครซอฟท์เพิ่มวิธีรัน Blazor แบบที่สองคือ Blazor WebAssembly แปลงโค้ดของรันไทม์ .NET เป็น WebAssembly ที่รันในเว็บเบราว์เซอร์รุ่นใหม่ๆ ได้ทั้งตัว
เมื่อเดือนมีนาคม ไมโครซอฟท์ประกาศโอเพนซอร์ส Windows Calculator เปิดให้คนนอกเข้ามาช่วยพัฒนา และได้ฟีเจอร์ใหม่ๆ อย่างการวาดกราฟ
การเปิดซอร์สครั้งนี้ทำให้นักพัฒนารายอื่นสามารถนำ Windows Calculator ไปต่อยอดได้ทันที และมีบริษัท Uno Platform ซึ่งทำธุรกิจเกี่ยวกับเครื่องมือพัฒนาสาย .NET (แนวเดียวกับ Xamarin) สามารถพอร์ตโค้ดของ Calculator (ในชื่อใหม่คือ Uno Calculator) ไปรันบน Android, iOS รวมถึงเวอร์ชันเว็บด้วย
Apache Spark กลายเป็นซอฟต์แวร์มาตรฐานในการวิเคราะห์ข้อมูลขนาดใหญ่แบบเรียลไทม์ แต่ภาษาโปรแกรมที่เชื่อมต่อกับ Spark ได้ยังจำกัดอยู่แค่ภาษา Java, Python, Scala, R, SQL เท่านั้น
ไมโครซอฟท์จึงเอาใจชาว .NET ด้วยการเปิดตัว .NET for Apache Spark เพื่อให้สามารถใช้ภาษาตระกูล .NET (C#, F#) เชื่อมต่อกับ Spark ได้ด้วย
.NET for Apache Spark เป็นซอฟต์แวร์โอเพนซอร์ส เปิดโค้ดบน GitHub ทำงานข้ามแพลตฟอร์มได้ทั้งบนวินโดวส์ ลินุกซ์ แมค โดยตอนนี้ยังอยู่ในสถานะพรีวิว ต้องใช้ร่วมกับ .NET Core 2.1 ขึ้นไป
ต่อเนื่องจาก .NET Core 3 Preview 1 เมื่อปลายปี ไมโครซอฟท์ออกรุ่น Preview 2 ตามมา
การเปลี่ยนแปลงสำคัญของ .NET Core 3 คือการรองรับแอพเดสก์ท็อป (ทั้ง WPF และ Windows Form) โดยไมโครซอฟท์เปิดซอร์สโค้ดมาอยู่ใต้ .NET Foundation ด้วย (ก่อนหน้านี้ต้องเขียนบน .NET Framework เท่านั้น ไม่รองรับบน .NET Core สองเวอร์ชันแรก)
ของใหม่ใน Preview 2 คือการรองรับภาษา C# เวอร์ชัน 8.0 ที่เพิ่มฟีเจอร์ using declarations และ switch expressions เข้ามาในตัวภาษา, เพิ่ม Utf8JsonWriter สำหรับแปลงข้อความเป็น JSON แบบ UTF-8, ออกแพ็กเกจแบบ Snap บนลินุกซ์
ทีมพัฒนาภาษา C# จาก Microsoft ปล่อยภาษารุ่นต้นแบบ (prototype) มาทดลองความสามารถสำหรับลดปริมาณปัญหาที่เกี่ยวกับ null โดยเฉพาะ ด้วยการเพิ่มชนิดข้อมูลใหม่ (type) ที่คล้ายกันภายใต้ชื่อว่า nullable มาให้เลือกใช้งาน
ผู้สนใจสามารถดาวน์โหลดความสามารถนี้มาทดลองเล่นได้ผ่าน GitHub
ส่วนใครสงสัยว่า nullable คืออะไร มีบทบาทอย่างไรในการแก้บั๊ก เชิญอ่านต่อข้างในได้เลย
ไมโครซอฟท์อธิบายยุทธศาสตร์การพัฒนาภาษาโปรแกรม .NET ทั้งสามตัว ได้แก่ C#, Visual Basic และ F#
ที่ผ่านมา ไมโครซอฟท์ใช้นโยบายให้ความสำคัญกับ C# และ Visual Basic เท่ากัน มีฟีเจอร์ใหม่ทัดเทียมกัน แต่รอบนี้ ไมโครซอฟท์บอกว่า C# ถือเป็นภาษาโปรแกรมกระแสหลัก จับตลาดกว้างกว่า ในขณะที่ Visual Basic เน้นการใช้งานสำหรับภาคธุรกิจ การสร้างแอพพลิเคชันบนวินโดวส์ และเป็นภาษาฝึกหัดสำหรับคนเริ่มเขียนโปรแกรม ส่งผลให้ต่อจากนี้ไป C# จะถูกให้ความสำคัญมากเป็นอันดับหนึ่ง ในขณะที่ VB 15 จะได้ฟีเจอร์ใหม่บางอย่าง แต่ไม่ใช่ทั้งหมดเท่ากับ C# 7.0 ได้
ส่วน F# เป็นภาษาใหม่ที่ยังมีความสามารถหรือประสบการณ์ใช้งานไม่ทัดเทียม C# กับ VB แต่ก็มีจุดเด่นที่ชุมชนเข้มแข็ง ใช้งานได้หลากหลาย เป้าหมายของไมโครซอฟท์ใน F# 4.1 จะพัฒนาเครื่องมือสำหรับ F# ให้ดีขึ้น ทำงานร่วมกับ Visual Studio และ .NET Core/Standard ได้ดีขึ้น
กลุ่มทำงาน (Working Group) การพัฒนาภาษาโปรแกรมบนมาตรฐาน ISO กลุ่ม WG11 (ภาษา C) และ WG16 (C++) ตกลงกันว่าจะรวมตัวภาษากลับมาเป็นภาษาเดียวกันอีกครั้งในปี 2016
เมื่อข่าวนี้ไปถึงกลุ่มทำงานของภาษาอื่นๆ กลุ่มทำงานที่แสดงความสนใจเข้าร่วมทันทีคือ Objective-C และเมื่อส่งอีเมลภายในออกไปไม่กี่ชั่วโมง ภาษา C# ก็แสดงความสนใจเข้าร่วมกันด้วยเช่นกัน ที่น่าแปลกใจคือ WG4 (COBOL) ระบุว่าสนใจพัฒนาภาษาใหม่นี้ด้วย เพื่อเผยแพร่การตั้งชื่อเป็นตัวอักษรใหญ่ในภาษาใหม่นี้ต่อไป
มีภาษาอื่นๆ ที่สนใจเข้าร่วมแต่ถูกปฎิเสธ ได้แก่ JavaScript, Rust, และ Snobol เนื่องจากไม่มีตัวซีใหญ่ในชื่อภาษา
หลังจากที่กูเกิลออกเครื่องมือแปลงโค้ด Java เป็น Objective-C ในชื่อ J2ObjC ผ่านมาเกือบ 3 ปีก็ได้เวลาของไมโครซอฟท์กันบ้าง
ไมโครซอฟท์ออกเครื่องมือแปลงโค้ด จาก Java เป็น C#, C++ และ Objective C++ (โดยในส่วนของ C++ และ Objective C++ จะมีการรองรับในเร็วๆ นี้) ในชื่อ JUniversal มาพร้อมกับไลบรารี JSimple และสามารถใช้ร่วมกันกับ J2ObjC ในการแปลงเป็น Objective-C ได้
Xamarin ทีมงานเดิมของโครงการ Mono ที่หันไปเน้นการเขียนแอพมือถือด้วย C# เผยผ่านบล็อกของบริษัทว่า เปิดให้นักศึกษาสมัครสมาชิกประเภท Indie เพื่อดาวน์โหลด IDE ของบริษัท Xamarin Studio ไปพัฒนาแอพ Android/iOS ด้วยภาษา C# ฟรี เป็นเวลา 1 ปี
อนึ่ง สมาชิกประเภท Indie จะดีกว่า Starter ที่บริษัทแจกให้ใครก็ได้สมัครฟรีตรงที่จะไม่จำกัดขนาดของแอพ รองรับ P/Invoke รองรับการเรียกไลบรารี่อื่น และใช้ Xamarin.Forms ทำส่วนติดต่อผู้ใช้ iOS, Android และ Windows Phone โดยใช้โค้ด C# เดียวกันได้
Joe Duffy วิศวกรอาวุโสของไมโครซอฟท์ที่รับผิดชอบงาน "วิจัย" ด้านระบบปฏิบัติการ เขียนบล็อกอธิบายผลงานที่ทีมของเขาใช้เวลากว่า 4 ปีซุ่มพัฒนาขึ้นมา มันคือภาษาโปรแกรมภาษาใหม่ที่พัฒนาต่อจาก C# แต่ชูจุดเด่นเรื่องประสิทธิภาพที่ใกล้เคียงกับ C++ ("C# for Systems Programming")
Duffy อธิบายว่าภาษาโปรแกรมในปัจจุบันแบ่งออกเป็น 2 กลุ่มใหญ่ๆ คือ
Xamarin ทีมงานเดิมของโครงการ Mono ที่หันไปเน้นการเขียนแอพมือถือด้วย C# ประกาศข่าวใหม่ 4 เรื่อง ดังนี้
การที่ Android ใช้ภาษา Java ทำให้กูเกิลมีปัญหาคดีความกับซันและออราเคิล ทางออกที่เป็นไปได้ในทางทฤษฎีคือเปลี่ยนไปใช้ภาษา-แพลตฟอร์มอื่นแทน ซึ่งก็ไม่ง่ายนักในทางปฏิบัติ
ดัชนีวัดความนิยมภาษาโปรแกรมนั้น คงมีดัชนี TIOBE ที่ได้รับความนิยมค่อนข้างมาก ล่าสุดทาง TIOBE ก็แถลงดัชนีประจำเดือนธันวาคมออกมาแล้ว
ช่วงนี้โซนี่เดินหน้าแผนยุทธศาสตร์ PlayStation Suite อย่างคึกคัก หลังจากประกาศว่าจะขยายไปลง Android ยี่ห้ออื่น และ
ขอมาเก็บตกงาน BUILD อีกสักข่าวครับ
ที่งาน BUILD ที่ซึ่งไมโครซอฟท์ได้เผย Windows 8 (หรือที่มีชื่ออย่างเป็นทางการในขณะนี้ว่า Windows Developer Preview) คุณ Anders Hejlsberg หัวหน้าทีมพัฒนาภาษา C# ได้นำเสนอโปรเจกต์ที่มีโค้ดเนมว่า "Roslyn" ซึ่งเป็นส่วนหนึ่งของการกรุยทางของบริษัทที่จะนำแพลตฟอร์ม .NET ขึ้นไปให้บริการบนกลุ่มเมฆ
แพลตฟอร์มการพัฒนาทางเลือกอย่าง Mono เคยพอร์ตไปลง iOS มาก่อนแล้วในชื่อ MonoTouch (ข่าวเก่า) วันนี้ถึงคิวของ Android แล้ว
Mono เคยประกาศไปเมื่อปลายปีว่ากำลังทำ Monodroid แต่โครงการนี้ถูกเปลี่ยนชื่อเป็น Mono for Android และออกรุ่น 1.0 เรียบร้อยแล้ว
Mono for Android เป็นแพลตฟอร์มที่ช่วยให้เราเขียน C#, .NET บน Android ด้วยเครื่องมือพัฒนาอย่าง Visual Studio ได้ (ไม่รองรับ Visual Studio Express)
ข่าวสาร Mono หายไปจากบล็อกนอนซักพักแล้ว พอผมกลับไปดูก็พบว่ามันมีอะไรเพิ่มมาไม่น้อย เลยอยากจะรวบรวมหัวข้อที่ผมว่าน่าสนใจมาลิสท์ไว้ให้ดูครับ
สำหรับคนที่ไม่รู้จัก
Mono คือ Application Framework ตัวหนึ่ง ซึ่ง Clone .Net Framework ของ Microsoft ให้ไปใช้บน Platform อื่นๆได้ โดยมีเป้าหมายหลักคือให้ใช้ ภาษา C# และ Managed Application บน Linux และ MacOS รวมถึงการเชื่อมต่อ Library ที่ทำให้นำเอาโปรแกรมที่ทำงานอยู่บน .NET มาเปิดใช้งานในระบบที่ Install Mono ไว้ ได้โดยตรง
(เสริม : Application Framework คือโปรแกรมที่ทำงานคล้ายกับ Java Runtime แต่ Run อยู่บนระบบของ OS ครับ)
เงื่อนไขที่สำคัญอันหนึ่งของแอปเปิลต่อนักพัฒนาโปรแกรมบน iPhone ก็คือห้ามรันโค้ดของโปรแกรมอื่นๆ ต่ออีกชั้น เงื่อนไขนี้ส่งผลให้โปรแกรมที่เขียนด้วย Java หรือ .NET ไม่สามารถทำงานบน iPhone ได้ และเครื่องมือที่ใช้พัฒนาโปรแกรมบน iPhone "อย่างถูกต้อง" มีแค่ภาษา Objective-C และ Cocoa Touch ของแอปเปิลเท่านั้น
ตอนนี้มีคนหาช่องว่างจากเงื่อนไขนี้ และเสนอทางเลือกอื่นในการพัฒนาโปรแกรมบน iPhone ได้แล้ว ไม่ใช่บริษัทหน้าใหม่ที่ไหน แต่เป็น Novell และทีมงานผู้สร้าง Mono นั่นเอง
ปัญหาสำคัญมากอันหนึ่งของโครงการ Mono (.NET เวอร์ชันโอเพนซอร์ส) คือไมโครซอฟท์ถือครองสิทธิบัตรที่เกี่ยวข้องกับเทคโนโลยีใน .NET Framework อยู่หลายชิ้น และไม่มีอะไรรับประกันว่าในอนาคตไมโครซอฟท์จะไม่ใช้ประโยชน์จากทรัพย์สินทางปัญญาเหล่านี้ (เช่น ฟ้องบริษัทที่นำ Mono ไปใช้งานว่าละเมิดสิทธิบัตรของ .NET)
ไมโครซอฟท์เคยสัญญาว่าจะไม่ดำเนินการในเรื่องนี้ แต่นั่นก็เป็นแค่สัญญาลมปาก (ยกเว้นสัญญาที่เคยตกลงกับ Novell แต่นั่นก็คุ้มครองแค่ Novell) ล่าสุดไม่เป็นแค่ลมปากแล้ว