- Mở rộng trên toàn diện ngôn ngữ, thư viện chuẩn, hệ thống build và hỗ trợ nền tảng, đồng thời cải thiện trải nghiệm nhà phát triển
- Các thay đổi chính gồm tăng cường khả năng tương tác với C, bổ sung SDK Android chính thức, cải thiện môi trường nhúng, và mở rộng công cụ tài liệu hóa DocC
- Swift Package Manager nâng cao tính nhất quán khi build đa nền tảng thông qua trình biên dịch build hợp nhất và hỗ trợ Swift Syntax dựng sẵn
- Swift Testing bổ sung các tính năng mới như ghi nhận vấn đề ở mức cảnh báo, hủy test, đính kèm hình ảnh, giúp tăng độ linh hoạt khi kiểm thử
- Việc ra mắt chính thức Android SDK mở rộng phạm vi phát triển đa nền tảng của Swift, đồng thời cho phép tích hợp với ứng dụng Kotlin/Java
Các cập nhật chính của Swift 6.3
- Swift 6.3 mang đến các tính năng được mở rộng trên toàn bộ ngôn ngữ, thư viện chuẩn, hệ thống build và hỗ trợ nền tảng
- Tăng cường khả năng tương tác với C, bổ sung SDK Android chính thức, cải thiện môi trường nhúng, và mở rộng công cụ tài liệu hóa DocC là những thay đổi cốt lõi
- Mục tiêu là nâng cao trải nghiệm nhà phát triển và hợp nhất phát triển đa nền tảng
Ngôn ngữ và thư viện chuẩn
-
Khả năng tương tác với C
- Thuộc tính
@c mới cho phép đưa hàm Swift hoặc enum ra để mã C có thể sử dụng
- Có thể chỉ định tên khai báo C tùy chỉnh dưới dạng
@c(MyLibrary_callFromC)
- Khi dùng
@c cùng với @implementation, có thể triển khai trong Swift các hàm được khai báo trong header C
- Khi kết hợp như vậy, Swift sẽ kiểm tra xem có khớp với khai báo C hiện có hay không
-
Bộ chọn tên mô-đun (Module Name Selectors)
- Khi import API trùng tên từ nhiều mô-đun, có thể gọi kèm mô-đun chỉ rõ dưới dạng
ModuleA::getValue()
- Cú pháp
Swift::Task cho phép truy cập vào API concurrency và xử lý chuỗi
-
Kiểm soát hiệu năng API thư viện
- @specialize: cung cấp triển khai chuyên biệt hóa trước cho các kiểu cụ thể của API generic
- @inline(always): ép inline để mở rộng phần thân hàm tại vị trí gọi
- @export(implementation): công khai phần triển khai hàm trong thư viện ổn định ABI để cho phép tối ưu hóa bổ sung
- Có thể xem các đề xuất liên quan trên bảng điều khiển Swift Evolution
Cải tiến package và build
- Swift Package Manager bao gồm bản xem trước tích hợp Swift Build, mang lại trải nghiệm build nhất quán trên mọi nền tảng
- Tăng cường tính nhất quán cho phát triển đa nền tảng thông qua trình biên dịch build hợp nhất
- Người dùng có thể trực tiếp kiểm thử trên package của mình và báo cáo vấn đề
- Các cải tiến chính trong SwiftPM 6.3
- Hỗ trợ Prebuilt Swift Syntax: các thư viện chỉ dành cho macro có thể dùng binary swift-syntax dựng sẵn
- Điều khiển kế thừa tài liệu linh hoạt: plugin mệnh lệnh tạo symbol graph có thể kiểm soát việc có bao gồm tài liệu kế thừa hay không
- Khám phá đặc tính của package: có thể dùng lệnh
swift package show-traits để kiểm tra các đặc tính được package hỗ trợ
- Thông tin chi tiết có trong ghi chú phát hành SwiftPM 6.3
Cập nhật thư viện lõi
-
Swift Testing
- Ghi nhận vấn đề ở mức cảnh báo: dùng
Issue.record(..., severity: .warning) để chỉ hiển thị cảnh báo mà không làm test thất bại
- Tính năng hủy test: dùng
try Test.cancel() để dừng test đang chạy và các tác vụ con của nó
- Hỗ trợ đính kèm hình ảnh: có thể đính kèm hình ảnh trong lúc test trên nền tảng Apple và Windows
- Các đề xuất liên quan: ST-0012, ST-0013, ST-0014, ST-0015, ST-0016, ST-0017, ST-0020
-
DocC
- Hỗ trợ xuất Markdown: tạo tài liệu Markdown bằng tùy chọn
--enable-experimental-markdown-output
- Nội dung HTML tĩnh theo từng trang: chèn HTML tóm tắt vào `` để cải thiện công cụ tìm kiếm và khả năng truy cập
- Mở rộng chú thích khối mã: bổ sung các tùy chọn định dạng mới như
nocopy, highlight, showLineNumbers, wrap
- Có thể kích hoạt bằng tùy chọn
--enable-experimental-code-block-annotations
Nền tảng và môi trường
-
Embedded Swift
- Bao gồm nhiều cải tiến như tăng cường khả năng tương tác với C, cải thiện debug, tiến triển trong việc hoàn thiện mô hình liên kết
- Có thể xem chi tiết trong blog “Embedded Swift Improvements coming in Swift 6.3”
-
Android
- Ra mắt lần đầu Swift SDK for Android chính thức
- Có thể phát triển ứng dụng Android native bằng Swift, đồng thời hỗ trợ build package Swift trên Android
- Có thể tích hợp với ứng dụng Kotlin/Java thông qua Swift Java và Swift Java JNI Core
- Đây được xem là cột mốc quan trọng để mở rộng phát triển đa nền tảng của Swift
- Hướng dẫn bắt đầu có trong tài liệu “Getting Started with the Swift SDK for Android”
Bước tiếp theo
- Có thể cài đặt toolchain Swift 6.3 tại trang Install Swift
- Nhà phát triển có thể thử nghiệm ngay các tính năng mới và gửi phản hồi
1 bình luận
Ý kiến trên Hacker News
Thật vui khi thấy Swift có một bản phát hành tuyệt vời như thế này
Tôi chưa dùng lại từ sau v3, nhưng vào khoảng 2015~17 thì Swift từng có thể thay thế Python
Vì nó đơn giản, nhanh và cũng rất hợp với hệ sinh thái C/C++. Thời IBM còn đẩy mạnh phía server thì chuyện đó thực sự có tiềm năng
Nhưng Apple đã không lôi kéo được cộng đồng đủ tốt, và cuối cùng Swift vẫn là một ngôn ngữ dành riêng cho Apple. Giờ thì độ phức tạp của nó cũng đã lên tới mức C++
Tôi thích Swift, nhưng ngoài hệ sinh thái Apple thì nó vẫn có cảm giác chưa vượt qua được điểm tới hạn. Cuối cùng năm ngoái tôi đã chuyển sang Typescript
Trên hết, có lẽ hầu như không ai muốn tự nguyện đưa Apple như một gatekeeper vào trong stack của mình
Dự án TensorFlow Swift
CircuitPython cũng hữu ích cho việc tạo prototype nhúng. Swift đã không thực sự chiếm được những mảng này
Hơn nữa Swift chỉ lên Linux vào năm 2016, Windows năm 2020, và tận 2025 mới tới FreeBSD
Giữa thập niên 2010 đã có hàng loạt ngôn ngữ mới như Go, Julia, Rust, TypeScript, Solidity xuất hiện, nên ai cũng chỉ đủ thời gian học một hai thứ
Tôi từng hy vọng Swift sẽ trở thành ngôn ngữ bao phủ toàn bộ stack, nhưng thực tế không phải vậy
Có cảm giác Apple đã lãng phí cơ hội
Ví dụ ClearSurgery được viết hoàn toàn bằng Swift, từ Linux cho tới các thành phần thời gian thực
Tuần trước tôi đã port hệ điều hành xv6-riscv sang Zig, Nim, LISP và Swift
Nhờ sự phát triển của Swift nhúng, nó cho cảm giác là một ngôn ngữ có năng suất cao. Các lớp trừu tượng bao quanh truy cập bộ nhớ cũng khá gọn gàng
Nhưng tốc độ biên dịch quá chậm nên cuối cùng tôi tập trung vào Nim
Khá tiếc vì không thấy nhắc tới cải thiện tốc độ biên dịch của Swift
Việc biên dịch còn chậm hơn Rust làm giảm trải nghiệm phát triển đi rất nhiều
Nếu đã quen với tốc độ build nhanh của Go thì Swift thực sự khiến phát triển lặp trở nên đau khổ. Bản thân ngôn ngữ thì tuyệt vời, nhưng vòng phản hồi quá chậm
Swift 6.3 lần đầu tiên kèm theo SDK chính thức cho Android
Windows có bài blog từ 5 năm trước,
Linux có hướng dẫn cho GNOME
Sẽ rất hay nếu giống OpenSTEP ngày xưa, chỉ cần phát triển một lần là có thể phát hành lên nhiều nền tảng
Các cải tiến cho kiểu noncopyable là phần bị đánh giá thấp nhất trong bản phát hành này
Giờ đây việc mô hình hóa ownership duy nhất trong Swift đã khả thi hơn nhiều
Thuộc tính
@ctrong Swift 6.3 giờ cho phép export hàm Swift sang mã CNhưng tôi thắc mắc vì sao tính năng này lại được thêm vào muộn như vậy. Việc đưa tương tác C++ vào trước nghe như một thứ tự ưu tiên kỳ lạ
Trong khi đó, export Swift sang C dễ tạo ra mớ spaghetti FFI và dễ phát sinh lỗi ABI ở enum, ownership, xử lý null...
Đặc biệt nếu có closure xen vào thì calling convention có thể lệch nhau, và bạn có thể mất cả ngày chỉ để debug
Trước đây khi tạo dylib bằng Swift cho chương trình C, tôi phải dùng
@cdecl, nên thật vui khi giờ đã có hỗ trợ chính thứcCác thay đổi thực tế ngoài phần marketing có thể xem ở CHANGELOG và
danh sách đề xuất Swift Evolution
6.3 chủ yếu là một bản phát hành tập trung vào công việc tích hợp — stdlib, tương tác C/C++, swift-java, hệ thống build, v.v.
SPM đang dần hấp thụ các tính năng của Xcode, và engine swift-build mới cùng module dựng sẵn cũng đang được thử nghiệm
Nhưng tương tác giữa SPM và Xcode vẫn chưa ổn định, và độ phức tạp nội bộ đang tăng lên
Tiến bộ của bản thân ngôn ngữ thì âm thầm hơn, nhưng các công việc cấu trúc sâu như kiểm soát vòng đời và tô màu đồng thời vẫn đang diễn ra
Với nhiều OS, thiết bị và môi trường CI đan xen, các nhà phát triển Swift luôn ở trong tình huống phải giữ thăng bằng giữa những thay đổi
swift-buildsẽ trở thành mặc địnhTheo bài viết trên diễn đàn chính thức,
Xcode đã dùng nó nội bộ rồi nhưng vấn đề hiệu năng rất nghiêm trọng
Cũng có thảo luận liên quan.
Nếu SPM và Xcode dùng cùng một engine thì có thể sẽ cải thiện, nhưng tôi không kỳ vọng nhiều
Tôi tò mò không biết toolchain trong các bản Swift mới nhất hiện ra sao. Muốn biết Swift Lint và Swift Format có được hỗ trợ không
Với một ngôn ngữ hiện đại thì nên có formatter tích hợp và bộ quy tắc lint được khuyến nghị. Không chỉ ngôn ngữ mà toàn bộ hệ sinh thái mới quan trọng
swift formatvàswift format lintmà không cần dependency bên ngoài