ไมโครซอฟท์ช่วยเปิด Win32 API ให้ภาษาอื่นนอกจาก C/C++ เริ่มต้นที่ C# และ Rust

หัวข้อกระทู้ ใน 'เทคโนโลยี' เริ่มโพสต์โดย iPokz, 23 มกราคม 2021.

  1. iPokz

    iPokz ~" iPokz "~ Staff Member

    ไมโครซอฟท์มีแนวทางหลอมรวม Win32 และ UWP เข้าด้วยกันภายใต้ Project Reunion ซึ่งประกอบด้วยโครงการย่อยหลายอย่าง เป้าหมายข้อหนึ่งของ Reunion คือเปิดให้ใช้ภาษาโปรแกรมรุ่นใหม่ๆ เขียนแอพบนวินโดวส์ได้หลากหลายขึ้น

    ข้อจำกัดสำคัญของ Win32 API แบบดั้งเดิมคือมันถูกสร้างขึ้นในยุคภาษา C/C++ จึงรองรับเฉพาะภาษานี้ หากต้องการเขียนโปรแกรม Win32 ด้วยภาษาโปรแกรมอื่น จำเป็นต้องมี binding หรือ wrapper มาทำหน้าที่เชื่อมต่อ API ให้

    ที่ผ่านมามีโครงการสร้าง binding/wrapper ของภาษาต่างๆ แต่เป็นโอเพนซอร์สที่สร้างโดยชุมชนนักพัฒนา และกระบวนการรองรับ API ต้องทำกันเองด้วยมือทั้งหมด จึงมีปัญหาเรื่องรองรับ API ไม่ครบถ้วน ส่งผลให้ binding ของแต่ละภาษามีคุณภาพต่างกัน ทำงานซ้ำซ้อนกันแต่ไม่สมบูรณ์สักอัน

    [​IMG]

    ล่าสุดไมโครซอฟท์เข้ามาแก้ปัญหานี้ด้วยโครงการ win32metadata ที่เป็นการสร้าง metadata ของ API ทั้งหมดออกมาเป็นภาษาต่างๆ ให้อัตโนมัติ

    เบื้องหลังของโครงการ win32metadata คือการไล่อ่านไฟล์ header ของ Windows SDK ทั้งหมด ดูว่าไฟล์ DLL อิมพอร์ตฟังก์ชันใดบ้าง (ด้วยคอมไพเลอร์ ClangSharp) แล้วเจนเป็นไฟล์ Windows Metadata (.winmd) เพื่อให้นักพัฒนา wrapper ในภาษาอื่นๆ สามารถนำไปใช้ต่อได้ง่าย

    [​IMG]

    ตัวอย่างหน้าตาของไฟล์ .winmd ที่สร้างด้วย win32metadata

    ไมโครซอฟท์ร่วมมือกับนักพัฒนาโครงการโอเพนซอร์ส 2 ตัว ได้แก่ PInvoke สำหรับภาษา C# และ winapi-rs สำหรับภาษา Rust นำเครื่องมือ metadata ตัวนี้มาใช้งานแล้ว โดยฝั่งของ C# ออกมาเป็นรูปเป็นร่างแล้วในชื่อโครงการ Cs/Win32 ส่วนโครงการ Rust ชื่อว่า windows-rs

    ไมโครซอฟท์บอกว่า C# และ Rust เป็นแค่จุดเริ่มต้นเท่านั้น ตอนนี้กำลังรองรับภาษาที่สามคือ Modern C++ (มาตรฐานใหม่คือ C++17 ขึ้นไป) และจะใช้แนวทางจับมือกับโครงการโอเพนซอร์สที่มีอยู่แล้ว เพื่อขยายไปยังภาษาอื่นๆ ต่อไป

    ที่มา - Microsoft

    Topics: MicrosoftWindowsAPIC#RustDevelopment
     

แบ่งปันหน้านี้