- ขยายความสามารถครอบคลุมทั้ง ภาษา, standard library, ระบบบิลด์ และการรองรับแพลตฟอร์ม พร้อมปรับปรุงประสบการณ์นักพัฒนา
- การเปลี่ยนแปลงสำคัญคือ การทำงานร่วมกับ C ที่ดีขึ้น, เพิ่ม Android SDK อย่างเป็นทางการ, ปรับปรุงสภาพแวดล้อมแบบ embedded, และ ขยายเครื่องมือเอกสาร DocC
- Swift Package Manager เพิ่มความสม่ำเสมอของการบิลด์ข้ามแพลตฟอร์มผ่าน integrated build engine และ การรองรับ Swift Syntax แบบ prebuilt
- Swift Testing เพิ่มความสามารถใหม่ เช่น การบันทึก issue ระดับคำเตือน, การยกเลิกการทดสอบ, และการแนบรูปภาพ เพื่อเพิ่มความยืดหยุ่นในการทดสอบ
- การเปิดตัว Android SDK อย่างเป็นทางการ ช่วยขยายขอบเขตการพัฒนาข้ามแพลตฟอร์มของ Swift และทำให้สามารถผสานกับแอป Kotlin/Java ได้
อัปเดตสำคัญของ Swift 6.3
- Swift 6.3 มอบความสามารถที่ขยายขึ้นครอบคลุมทั้ง ภาษา, standard library, ระบบบิลด์ และการรองรับแพลตฟอร์ม
- การเปลี่ยนแปลงหลักคือ การทำงานร่วมกับ C ที่ดีขึ้น, เพิ่ม Android SDK อย่างเป็นทางการ, ปรับปรุง embedded environment, และ ขยายเครื่องมือเอกสาร DocC
- มีเป้าหมายเพื่อยกระดับประสบการณ์นักพัฒนาและ รวมการพัฒนาข้ามแพลตฟอร์ม ให้ดียิ่งขึ้น
ภาษาและ standard library
-
การทำงานร่วมกับ C
- แอททริบิวต์ใหม่
@c ช่วยให้สามารถเปิดเผยฟังก์ชันหรือ enum ของ Swift ให้กับโค้ด C ได้
- สามารถกำหนด ชื่อประกาศ C แบบกำหนดเอง ได้ในรูปแบบ
@c(MyLibrary_callFromC)
- เมื่อใช้
@c ร่วมกับ @implementation จะสามารถ implement ฟังก์ชันที่ประกาศไว้ใน C header จากฝั่ง Swift ได้
- เมื่อใช้ร่วมกันในลักษณะนี้ Swift จะตรวจสอบว่าตรงกับประกาศ C เดิมหรือไม่
-
Module Name Selectors
- เมื่อนำเข้า API ชื่อเดียวกันจากหลายโมดูล สามารถ เรียกโดยระบุโมดูล ได้ในรูปแบบ
ModuleA::getValue()
- สามารถเข้าถึง concurrency และ API สำหรับจัดการสตริง ได้ผ่านไวยากรณ์
Swift::Task
-
การควบคุมประสิทธิภาพของ library API
- @specialize: จัดเตรียม implementation ที่ specialize ล่วงหน้าสำหรับชนิดเฉพาะของ generic API
- @inline(always): บังคับ inlining เพื่อขยายเนื้อหาของฟังก์ชัน ณ จุดที่เรียกใช้
- @export(implementation): เปิดเผย implementation ของฟังก์ชันในไลบรารีที่มี ABI เสถียร เพื่อให้ทำ optimization เพิ่มเติมได้
- ดูข้อเสนอที่เกี่ยวข้องได้จาก Swift Evolution dashboard
การปรับปรุงแพ็กเกจและระบบบิลด์
- Swift Package Manager มี ตัวอย่างการรวม Swift Build แบบ preview เพื่อมอบประสบการณ์การบิลด์ที่สม่ำเสมอในทุกแพลตฟอร์ม
- เสริม ความสม่ำเสมอของการพัฒนาข้ามแพลตฟอร์ม ผ่าน integrated build engine
- ผู้ใช้สามารถทดสอบกับแพ็กเกจของตนโดยตรงและรายงานปัญหาได้
- การปรับปรุงหลักของ SwiftPM 6.3
- รองรับ Prebuilt Swift Syntax: ไลบรารีสำหรับแมโครโดยเฉพาะสามารถใช้ไบนารี swift-syntax แบบ prebuilt ได้
- ควบคุมการสืบทอดเอกสารได้ยืดหยุ่นขึ้น: ปลั๊กอินแบบ imperative ที่สร้าง symbol graph สามารถควบคุมว่าจะรวมเอกสารที่สืบทอดมาหรือไม่
- ฟีเจอร์สำรวจ traits ของแพ็กเกจ: ใช้คำสั่ง
swift package show-traits เพื่อตรวจสอบ traits ที่แพ็กเกจรองรับ
- รายละเอียดเพิ่มเติมรวมอยู่ใน release notes ของ SwiftPM 6.3
อัปเดต core library
-
Swift Testing
- บันทึก issue ระดับคำเตือน: ใช้
Issue.record(..., severity: .warning) เพื่อแสดงเฉพาะคำเตือนโดยไม่ทำให้การทดสอบล้มเหลว
- ฟีเจอร์ยกเลิกการทดสอบ: ใช้
try Test.cancel() เพื่อหยุดการทดสอบที่กำลังรันและ subtasks ของมัน
- รองรับการแนบรูปภาพ: สามารถแนบรูปภาพระหว่างการทดสอบได้บนแพลตฟอร์ม Apple และ Windows
- ข้อเสนอที่เกี่ยวข้อง: ST-0012, ST-0013, ST-0014, ST-0015, ST-0016, ST-0017, ST-0020
-
DocC
- รองรับการส่งออก Markdown: สร้างเอกสาร Markdown ได้ด้วยออปชัน
--enable-experimental-markdown-output
- เนื้อหา static HTML รายหน้า: แทรก summary HTML ภายใน `` เพื่อปรับปรุง search engine และ accessibility
- ขยายคำอธิบายประกอบใน code block: เพิ่มออปชันฟอร์แมตใหม่ เช่น
nocopy, highlight, showLineNumbers, wrap
- เปิดใช้งานได้ด้วยออปชัน
--enable-experimental-code-block-annotations
แพลตฟอร์มและสภาพแวดล้อม
-
Embedded Swift
- มีการปรับปรุงหลายด้าน เช่น การทำงานร่วมกับ C ที่ดีขึ้น, การดีบักที่ดีขึ้น, และ ความคืบหน้าในขั้นตอนการทำโมเดล linkage ให้สมบูรณ์
- ดูรายละเอียดได้จากบล็อก “Embedded Swift Improvements coming in Swift 6.3”
-
Android
- เปิดตัว Swift SDK for Android อย่างเป็นทางการ เป็นครั้งแรก
- รองรับการพัฒนา แอป Android แบบ native ด้วย Swift และรองรับการบิลด์แพ็กเกจ Swift บน Android
- สามารถผสานกับแอป Kotlin/Java ได้ผ่าน Swift Java และ Swift Java JNI Core
- ถือเป็นหมุดหมายสำคัญในการขยาย การพัฒนาข้ามแพลตฟอร์ม ของ Swift
- เอกสารเริ่มต้นใช้งานมีใน “Getting Started with the Swift SDK for Android”
ขั้นตอนถัดไป
- สามารถติดตั้ง toolchain ของ Swift 6.3 ได้จากหน้า Install Swift
- นักพัฒนาสามารถทดลองใช้ความสามารถใหม่ได้ทันทีและส่งฟีดแบ็กกลับไป
1 ความคิดเห็น
ความเห็นจาก Hacker News
ดีใจที่ได้เห็น Swift ออกรุ่นใหม่ที่ ยอดเยี่ยม แบบนี้
แม้จะไม่ได้ใช้มาตั้งแต่หลัง v3 แต่ราวปี 2015~17 Swift เคยมีโอกาสแทนที่ Python ได้
เพราะมันเรียบง่าย เร็ว และเข้ากับ ecosystem ของ C/C++ ได้ดี ตอนที่ IBM กำลังผลักดันฝั่งเซิร์ฟเวอร์ มันดูมีความเป็นไปได้จริง ๆ
แต่ Apple ดึงชุมชนเข้ามาได้ไม่มากพอ สุดท้าย Swift เลยยังคงเป็น ภาษาเฉพาะของ Apple และตอนนี้ความซับซ้อนก็เพิ่มขึ้นไปถึงระดับ C++ แล้ว
ผมชอบ Swift นะ แต่ข้างนอก ecosystem ของ Apple มันยังให้ความรู้สึกว่ายังไม่ข้าม จุดวิกฤต ไปได้ สุดท้ายเมื่อปีก่อนก็ย้ายไปใช้ Typescript
ที่สำคัญ ดูแล้วคงแทบไม่มีใครอยากยอมเอา Apple ในฐานะผู้เฝ้าประตู เข้ามาอยู่ในสแตกของตัวเองโดยสมัครใจ
โปรเจ็กต์ TensorFlow Swift
CircuitPython ก็มีประโยชน์กับการทำ embedded prototyping ด้วย Swift จับพื้นที่เหล่านี้ได้ไม่สำเร็จนัก
แถม Swift เพิ่งมาลง Linux ในปี 2016, Windows ในปี 2020 และ FreeBSD ก็เพิ่งทำได้ในปี 2025
ช่วงกลางทศวรรษ 2010 ก็มีภาษาใหม่ออกมาพร้อมกันมากมาย ทั้ง Go, Julia, Rust, TypeScript, Solidity ฯลฯ จนแต่ละคนมีแรงพอจะเรียนได้แค่ทีละหนึ่งสองภาษา
ผมเคยหวังว่า Swift จะกลายเป็นภาษาที่ครอบคลุมทั้งสแตก แต่ความจริงไม่เป็นแบบนั้น
ให้ความรู้สึกว่า Apple ปล่อยโอกาสหลุดมือ ไป
อย่างเช่น ClearSurgery ก็เขียนทุกอย่างด้วย Swift ตั้งแต่ Linux ไปจนถึงคอมโพเนนต์แบบเรียลไทม์
สัปดาห์ก่อนผมพอร์ตระบบปฏิบัติการ xv6-riscv ไปเป็น Zig, Nim, LISP และ Swift
ด้วยพัฒนาการของ embedded Swift มันเลยให้ความรู้สึกว่าเป็น ภาษาที่มีประสิทธิภาพในการทำงาน และ abstraction ที่หุ้มการเข้าถึงหน่วยความจำก็ดูสะอาดดี
แต่ความเร็วคอมไพล์ช้ามากเกินไป สุดท้ายเลยไปโฟกัสกับ Nim แทน
เสียดายที่ไม่มีการพูดถึง การปรับปรุงความเร็วคอมไพล์ ของ Swift
คอมไพล์ช้ากว่า Rust ทำให้ประสบการณ์พัฒนาแย่ลงมาก
ถ้าคุ้นกับการ build เร็ว ๆ แบบ Go, Swift จะทำให้ การพัฒนาแบบวนซ้ำทรมานมาก ภาษาเองยอดเยี่ยม แต่ feedback loop ช้าเกินไป
ใน Swift 6.3 มี SDK อย่างเป็นทางการสำหรับ Android รวมมาด้วยเป็นครั้งแรก
Windows มี โพสต์ในบล็อกเมื่อ 5 ปีก่อน,
ส่วน Linux มี คู่มือสำหรับ GNOME
ถ้าทำแบบ OpenSTEP สมัยก่อน คือพัฒนาครั้งเดียวแล้วปล่อยได้หลายแพลตฟอร์มก็คงดี
การปรับปรุง noncopyable type คือส่วนที่ถูกประเมินต่ำที่สุดของรีลีสนี้
ตอนนี้การทำโมเดล ownership แบบเฉพาะเจาะจงใน Swift เป็นเรื่องที่สมจริงขึ้นมาก
ใน Swift 6.3 มี
@cattribute ทำให้สามารถเปิดฟังก์ชัน Swift ให้โค้ด C เรียกใช้ได้แล้วแต่ก็สงสัยว่าทำไมถึงเพิ่งเพิ่มเข้ามาช้าขนาดนี้ การใส่ C++ interoperability มาก่อนดูเป็น ลำดับความสำคัญที่แปลก
แต่การ export Swift ไป C จะทำให้เกิด FFI spaghetti และมักมี ABI bug เรื่อง enum, ownership, การจัดการ null ฯลฯ
โดยเฉพาะถ้ามี closure ปนอยู่ด้วย calling convention อาจเพี้ยนจนเสียเวลาทั้งวันไปกับการดีบัก
เมื่อก่อนเวลาสร้าง dylib ด้วย Swift สำหรับโปรแกรม C ต้องใช้
@cdeclตอนนี้มีการรองรับอย่างเป็นทางการแล้วก็น่ายินดีการเปลี่ยนแปลงจริงนอกเหนือจากการตลาด ดูได้ใน CHANGELOG และ
รายการข้อเสนอ Swift Evolution
6.3 เป็นรีลีสที่เน้น งานรวมระบบ เป็นหลัก — ทั้ง stdlib, การทำงานร่วมกับ C/C++, swift-java, ระบบ build ฯลฯ
SPM กำลังค่อย ๆ ดูดซับฟีเจอร์ของ Xcode และก็มีการทดลองทั้ง swift-build engine ใหม่กับ prebuilt module
แต่ปฏิสัมพันธ์ระหว่าง SPM กับ Xcode ก็ยังไม่เสถียร และความซับซ้อนภายในก็กำลังเพิ่มขึ้น
ความก้าวหน้าของตัวภาษาเองอาจดูเงียบ ๆ แต่มี งานโครงสร้างลึก อย่างการควบคุมอายุการใช้งานและ concurrency coloring กำลังเดินหน้าอยู่
เมื่อมีทั้ง OS, อุปกรณ์ และสภาพแวดล้อม CI หลายแบบพันกันอยู่ นักพัฒนา Swift จึงต้องอยู่ในภาวะ หาสมดุลท่ามกลางความเปลี่ยนแปลง ตลอดเวลา
swift-buildจะกลายเป็นค่าเริ่มต้นตาม โพสต์ในฟอรัมอย่างเป็นทางการ,
ตอนนี้ Xcode ก็ใช้อยู่ภายในแล้ว แต่ ปัญหาด้านประสิทธิภาพรุนแรง มาก
มี การพูดคุยที่เกี่ยวข้อง ด้วย
ถ้า SPM กับ Xcode ใช้เอนจินเดียวกันได้ก็คงอาจดีขึ้น แต่ผมก็ไม่ได้คาดหวังมาก
อยากรู้ว่าใน Swift เวอร์ชันล่าสุด toolchain เป็นอย่างไรบ้าง รองรับ Swift Lint กับ Swift Format หรือยัง
ถ้าเป็นภาษาสมัยใหม่ก็ควรมี formatter ในตัวและกฎ lint ที่แนะนำมาให้ ไม่ใช่แค่ตัวภาษา แต่ ทั้ง ecosystem สำคัญด้วย
swift formatและswift format lintโดยไม่ต้องพึ่ง dependency ภายนอก