4 คะแนน โดย dimohy 2023-01-08 | 5 ความคิดเห็น | แชร์ทาง WhatsApp
  • .NET AOT คืออะไร?
  • การดีพลอย Native AOT

ตอนนี้ .NET 7 สามารถสร้างเนทีฟโค้ดขนาดเล็กระดับ 2MB สำหรับแอปพลิเคชันคอนโซลบน Windows, Linux และ macOS ได้โดยไม่ต้องมี .NET runtime และสามารถรันได้โดยไม่มีการพึ่งพาเพิ่มเติม

5 ความคิดเห็น

 
dimohy 2023-10-12

macOS ที่ .NET 7 ยังไม่รองรับ จะได้รับการรองรับอย่างเป็นทางการใน .NET 8
https://learn.microsoft.com/en-us/dotnet/…

 
kunggom 2023-01-08

เมื่อดูจากเอกสารทางการของ Microsoft ฟีเจอร์นี้มีข้อจำกัดเพิ่มเติมอยู่พอสมควร นอกเหนือจากข้อจำกัดพื้นฐานที่มาจากการคอมไพล์เป็นเนทีฟล่วงหน้า เนื่องจากยังอยู่ในช่วงเริ่มต้นของการพัฒนา ตอนนี้ยังใช้กับแอป ASP.NET Core ไม่ได้ ต้องอาศัยการรองรับในระดับไลบรารี และยังมีข้อจำกัดด้านการดีบักกับการทำโปรไฟล์อยู่ด้วย อีกทั้งสถาปัตยกรรม CPU ที่รองรับมีแค่ x64 และ ARM64 เท่านั้น จึงยังไม่สามารถสร้างแอปสำหรับ Windows แบบ 32 บิตได้ และอีกจุดที่น่าสนใจก็คือ ฟีเจอร์นี้สามารถใช้สร้าง static library ที่นำไปใช้จากแอปที่ไม่ใช่ .NET ได้ด้วย

ตอนที่ MS เปิดตัว .NET 7 ก็พูดถึงมันว่าเป็น“แพลตฟอร์มสำหรับแอป cloud-native” และยังเพิ่มความสามารถในการดีพลอยแอปเป็น Docker containerเข้ามาด้วย จึงคาดได้ว่าการรองรับ AOT ก็น่าจะถูกเพิ่มมาเป็นเครื่องมือสำหรับปรับแต่งขนาดอิมเมจและเวลาเริ่มต้นของแอปแบบคอนเทนเนอร์เหล่านี้ให้เหมาะสมขึ้น แต่ในเมื่อการรองรับ ASP.NET Core เองยังอยู่ระหว่างการพัฒนา กว่าฟีเจอร์นี้จะฉายแสงได้อย่างแท้จริงในแอป cloud-native ก็คงต้องรอไปอีกสักพัก

อ้างอิง:

 
dimohy 2023-01-08

ขอบคุณสำหรับคำตอบที่เป็นกันเองครับ

แอปพลิเคชันคอนโซลได้ก้าวพ้นช่วงพรีวิวไปสู่สถานะรีลีสอย่างเป็นทางการแล้ว และสามารถใช้พัฒนาแอปพลิเคชันจริงได้

อย่างที่คุณบอกไว้ เนื่องจากยังอยู่ในระยะเริ่มต้น จึงยังไม่รองรับ ASP.NET Core, WPF, Windows Form หรือ WinUI

อีกทั้งก็ยังไม่ตอบโจทย์ความต้องการในการดีพลอยผ่าน Docker container ด้วย เพราะยังไม่รองรับ ASP.NET Core

เช่นเดียวกับที่คุณกล่าวไว้ เนื่องจากมันถูกคอมไพล์เป็น native code จึงไม่สามารถใช้ความสามารถส่วนใหญ่ของ Reflector ได้ ดูเหมือนว่าส่วนนี้จะไม่ใช่ข้อจำกัดที่เกิดจากความเป็นระยะเริ่มต้น แต่เป็นเพราะคุณลักษณะที่แตกต่างกันระหว่างโค้ด IL กับ native code

ความหมายของ NativeAOT ในปัจจุบันน่าจะเป็นการที่สามารถดีพลอย native code ล้วนแบบไม่มี dependency ได้อย่างยอดเยี่ยมบน Windows, Linux และ macOS อย่างน้อยในระดับของแอปพลิเคชันคอนโซล

 
kunggom 2023-01-09

ไม่ใช่ macOS ครับ อย่างที่เห็นได้จากเอกสาร Microsoft Learn ที่ผมลิงก์ไว้ ตอนนี้แพลตฟอร์มที่รองรับฟีเจอร์นี้มีเพียง Windows และ Linux เท่านั้น ส่วน macOS ก็คงจะถูกเพิ่มเข้ามาทีหลัง
แม้เวลาจะช่วยแก้ปัญหานี้ได้ แต่ผมคิดว่าฟีเจอร์นี้น่าจะยังมีหลายกรณีที่นำไปใช้ในงานจริงได้ยากอยู่

 
dimohy 2023-01-09

ถูกต้องแล้ว ตอนนี้ยังไม่รองรับ macOS