ไมโครซอฟท์มีแนวทางหลอมรวม Win32 และ UWP เข้าด้วยกันภายใต้ Project Reunion ซึ่งประกอบด้วยโครงการย่อยหลายอย่าง เป้าหมายข้อหนึ่งของ Reunion คือเปิดให้ใช้ภาษาโปรแกรมรุ่นใหม่ๆ เขียนแอพบนวินโดวส์ได้หลากหลายขึ้น
ข้อจำกัดสำคัญของ Win32 API แบบดั้งเดิมคือมันถูกสร้างขึ้นในยุคภาษา C/C++ จึงรองรับเฉพาะภาษานี้ หากต้องการเขียนโปรแกรม Win32 ด้วยภาษาโปรแกรมอื่น จำเป็นต้องมี binding หรือ wrapper มาทำหน้าที่เชื่อมต่อ API ให้
ที่ผ่านมามีโครงการสร้าง binding/wrapper ของภาษาต่างๆ แต่เป็นโอเพนซอร์สที่สร้างโดยชุมชนนักพัฒนา และกระบวนการรองรับ API ต้องทำกันเองด้วยมือทั้งหมด จึงมีปัญหาเรื่องรองรับ API ไม่ครบถ้วน ส่งผลให้ binding ของแต่ละภาษามีคุณภาพต่างกัน ทำงานซ้ำซ้อนกันแต่ไม่สมบูรณ์สักอัน
ล่าสุดไมโครซอฟท์เข้ามาแก้ปัญหานี้ด้วยโครงการ win32metadata ที่เป็นการสร้าง metadata ของ API ทั้งหมดออกมาเป็นภาษาต่างๆ ให้อัตโนมัติ
เบื้องหลังของโครงการ win32metadata คือการไล่อ่านไฟล์ header ของ Windows SDK ทั้งหมด ดูว่าไฟล์ DLL อิมพอร์ตฟังก์ชันใดบ้าง (ด้วยคอมไพเลอร์ ClangSharp) แล้วเจนเป็นไฟล์ Windows Metadata (.winmd) เพื่อให้นักพัฒนา wrapper ในภาษาอื่นๆ สามารถนำไปใช้ต่อได้ง่าย
ตัวอย่างหน้าตาของไฟล์ .winmd ที่สร้างด้วย win32metadata
ไมโครซอฟท์ร่วมมือกับนักพัฒนาโครงการโอเพนซอร์ส 2 ตัว ได้แก่ PInvoke สำหรับภาษา C# และ winapi-rs สำหรับภาษา Rust นำเครื่องมือ metadata ตัวนี้มาใช้งานแล้ว โดยฝั่งของ C# ออกมาเป็นรูปเป็นร่างแล้วในชื่อโครงการ Cs/Win32 ส่วนโครงการ Rust ชื่อว่า windows-rs
ไมโครซอฟท์บอกว่า C# และ Rust เป็นแค่จุดเริ่มต้นเท่านั้น ตอนนี้กำลังรองรับภาษาที่สามคือ Modern C++ (มาตรฐานใหม่คือ C++17 ขึ้นไป) และจะใช้แนวทางจับมือกับโครงการโอเพนซอร์สที่มีอยู่แล้ว เพื่อขยายไปยังภาษาอื่นๆ ต่อไป
ที่มา - Microsoft
Comments
ต่อไป windows core อาจเบาหวิว แล้วเปิดให้ใช้ฟรี รายได้ก็ไปหาขายโปรแกรมเสริมเฉพาะทางสำหรับการทำงานในองค์กรที่มีความแตกต่างกัน ซึ่ง store อาจไปอยู่ใน Microsoft Team ส่วนบริการอื่นๆ สำหรับ consumer ก็ไปอยู่บน cloud ใครใช้อะไรก็เลือก subscribe เอา น่าจะทำการดูแลรักษาระบบภาพรวมดูแลรักษาได้ง่ายขึ้น แถมไม่ต้องกังวลเรื่อง license
ดีไม่ดี windows core อาจเหลือแต่ command line ส่วน ui mode อาจใช้ Microsoft Team Edition สำหรับงานองค์กร , Office 365 Edition สำหรับ consumer
ปัญหาคือพวก undocumented api ที่น่าจะเข้าถึงไม่ได้ (ฮา) แต่เอาจริง ๆ มันก็เป็นของที่ไม่ควรใช้อยู่แล้วมั้ง
ถ้าทำผ่าน P/Invoke นี่ สุดท้ายแล้วคงจะเขียน wrapper ครอบอีกทีอยู่ดี แต่ก็น่าจะทำให้งานเขียน wrapper ง่ายขึ้น เพราะไม่ต้องเขียน binding เองล่ะครับ
ไม่เกี่ยวกับข่าว
Font ในภาพแรกคือ Font อะไรครับใครรู้มั่ง