6 คะแนน โดย GN⁺ 2024-06-13 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • Swift รองรับทั้ง Linux และ Windows นอกเหนือจากแพลตฟอร์มของ Apple
  • เมื่อใช้ Swift Static Linux SDK จะสามารถสร้างไฟล์ปฏิบัติการที่ลิงก์แบบสแตติกทั้งหมดได้อย่างสมบูรณ์โดยไม่ต้องพึ่งพา dependency ภายนอก
    • ซึ่งหมายความว่าสามารถรันได้บนทุก Linux distribution
    • สามารถพัฒนาและทดสอบบน macOS แล้วนำไป deploy บนเซิร์ฟเวอร์ที่ใช้ Linux ได้
  • การลิงก์คือกระบวนการนำส่วนต่าง ๆ ของโปรแกรมคอมพิวเตอร์มาเชื่อมการอ้างอิงเข้าด้วยกัน
    • การลิงก์แบบสแตติกเกิดขึ้นตอน build ส่วนการลิงก์แบบไดนามิกเกิดขึ้นตอน runtime
    • static library คือชุดของไฟล์ออบเจ็กต์แต่ละไฟล์ ส่วน dynamic library มีลักษณะเป็น monolithic
  • ข้อดีและข้อเสียของการลิงก์แบบสแตติก:
    • ข้อดี: ไม่มี runtime overhead, รวมเฉพาะโค้ดไลบรารีที่จำเป็น, ไม่ต้องมี dynamic library ที่ติดตั้งแยก, ไม่มีปัญหาเรื่องเวอร์ชันตอน runtime
    • ข้อเสีย: ไม่สามารถแชร์โค้ดได้ (ทำให้ใช้หน่วยความจำเพิ่มขึ้น), อัปเดต dependency ไม่ได้หากไม่ rebuild โปรแกรม, ขนาดไฟล์ปฏิบัติการใหญ่ขึ้น
  • การใช้การลิงก์แบบสแตติกบน Linux ช่วยตัด dependency ต่อ system library ที่ต่างกันตาม distribution ออกได้ทั้งหมด
  • ต้องติดตั้ง Open Source toolchain จาก swift.org (ไม่สามารถใช้ toolchain ที่มากับ Xcode ได้)
  • สามารถติดตั้ง Static Linux SDK ได้ด้วยคำสั่ง swift sdk install
  • สามารถ build ไบนารี Linux แบบ x86-64 ได้ด้วยคำสั่ง swift build --swift-sdk x86_64-swift-linux-musl และ build ไบนารี Linux แบบ ARM64 ได้ด้วยคำสั่ง swift build --swift-sdk aarch64-swift-linux-musl
  • Swift package ที่ใช้ Foundation หรือ Swift NIO ยังคงทำงานได้ตามปกติ
  • package ที่ใช้ C library ต้องแก้ไขให้ import Musl แทน Glibc
    • Musl รองรับการลิงก์แบบสแตติกได้ดี และมีไลเซนส์แบบ permissive ที่ช่วยให้แจกจ่ายไฟล์ปฏิบัติการได้ง่าย
  • สามารถแก้ไข package dependency ได้ด้วยคำสั่ง swift package edit

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

 
cichol 2024-06-14

ตอนนี้รู้สึกว่าพอใช้สิ่งนี้แล้ว น่าจะมีอะไรสักอย่างออกมาที่ช่วยให้รองรับการพัฒนา Android และ iOS พร้อมกันด้วย Swift ได้อย่าง seamless มากขึ้น..

 
GN⁺ 2024-06-13
ความเห็นจาก Hacker News
  • การรองรับแพลตฟอร์มแบบกำหนดเองใหม่ของ Swift: การที่ Swift รองรับระบบฝังตัวและ WASM รวมถึงการย้ายไปยังองค์กร GitHub ที่ไม่ใช่ของ Apple ถือเป็นความก้าวหน้าครั้งใหญ่ในการขยาย Swift ไปยังแพลตฟอร์มอื่น ๆ ความเป็นไปได้ที่จะนำไปใช้กับการตรวจสอบความปลอดภัยของ AI OS ก็น่าสนใจเช่นกัน

  • สามารถรันไบนารี Swift บนคอนเทนเนอร์ Alpine ได้: ดีใจที่ตอนนี้สามารถรันไบนารี Swift บนคอนเทนเนอร์ Alpine ได้ งานรองรับ musl คืบหน้าเร็วกว่าที่คาดไว้ การคอมไพล์ข้ามแพลตฟอร์มก็มีประโยชน์มากเช่นกัน

  • ความคาดหวังต่อการรองรับ Debian: ดีใจที่ได้เห็นการเพิ่มแพ็กเกจ Swift ใน Debian คิดว่าน่าจะได้ใช้ Debian เป็น VM สำหรับพัฒนามากขึ้น

  • คาดหวังการใช้ Swift บนระบบฝังตัว: เคยทำงานกับระบบฝังตัวด้วย C มาเยอะ แต่อยากลองใช้ Swift บนบอร์ดพัฒนา STM ดู

  • ข้อเสียของการลิงก์แบบสแตติก: ASLR อาจทำงานได้ไม่สมบูรณ์หรือมีการสุ่มเพียงอ็อบเจ็กต์เดียว อย่างไรก็ตาม ในภาษาที่ปลอดภัยด้านหน่วยความจำ นี่อาจไม่ใช่ข้อเสียใหญ่ การแชร์อ็อบเจ็กต์ร่วมกันยังช่วยลด I/O ได้ด้วย

  • ปัญหาความเข้ากันได้ระหว่างดิสทริบิวชัน: โปรแกรมที่บิลด์บนดิสทริบิวชันหรือเวอร์ชันหนึ่งอาจไม่ทำงานบนอีกดิสทริบิวชันหนึ่ง การที่ Swift รองรับการลิงก์แบบสแตติกเป็นเรื่องดี แต่ทางที่ดีที่สุดคือให้แต่ละดิสทริบิวชันเลือกวิธีแจกจ่ายแพ็กเกจเองได้

  • ความเป็นไปได้ในการแข่งขันกับ Golang: Swift น่าจะสามารถแข่งขันกับ Golang ในแง่ความง่ายของการดีพลอยได้ โดยผลักความซับซ้อนให้ห่างจากผู้ใช้ปลายทาง

  • แอป GUI ข้ามแพลตฟอร์ม: สงสัยว่าถ้าสร้างแอป GUI ข้ามแพลตฟอร์มด้วย Swift จะเป็นอย่างไร แม้ SwiftUI น่าจะใช้ไม่ได้ แต่ก็ตั้งใจจะใช้ Swift สำหรับเขียนสคริปต์ง่าย ๆ

  • คำเตือนเรื่องการใช้ image ของ CentOS 7: การยังคงแจก image ของ CentOS 7 อยู่ดูเหมือนเป็นเรื่องบ้าคลั่ง พร้อมคำเตือนว่าไม่ควรใช้งาน

  • ความซับซ้อนของ Swift ที่เพิ่มขึ้น: เดิมที Swift อาจแทนที่ Python ได้อย่างง่ายดาย แต่ภาษากลับซับซ้อนขึ้นจนตอนนี้กลายเป็นเหมือน C++ เวอร์ชันเลียนแบบ

  • เหตุผลที่ใช้ Swift แทน Rust: มีคำถามว่าทำไมควรใช้ Swift แทน Rust

  • เหตุผลที่ใช้ Swift โดยไม่มี iOS/SwiftUI: มีคำถามว่ามีเหตุผลอะไรบ้างที่จะใช้ Swift โดยไม่มี iOS/SwiftUI นอกจากกรณีที่นักพัฒนา Swift อยากใช้ภาษาที่คุ้นเคยกับโปรเจกต์เล็ก ๆ