2 điểm bởi GN⁺ 27 ngày trước | 1 bình luận | Chia sẻ qua WhatsApp
  • 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ấthỗ 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 concurrencyxử 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 JavaSwift 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++

    • Hồi đại học tôi từng làm freelance và xây web backend bằng Swift. Tôi triển khai bằng Heroku buildpack, đó là một giai đoạn khá thú vị
      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
    • Ngay cả với Swift 6.3 mới nhất, phát triển ngoài các nền tảng Apple vẫn rất khổ sở
      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
    • Google cũng từng thử chuyển TensorFlow từ Python sang Swift
      Dự án TensorFlow Swift
    • Ngay cả Python 3 cũng mất rất lâu mới thay thế được Python
    • Python mạnh về phát triển lặp và Jupyter Notebook nhờ trình thông dịch tương tác
      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

    • Thực ra tôi đúng là đang dùng Swift cho toàn bộ stack
      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

    • Đã lâu rồi tôi mới lại nghe thấy cái tên Nim, tò mò không biết vì sao bạn chọn nó
    • Có phải bạn đang nói tới McCarthy LISP không?
  • 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

    • Tôi cũng mới làm một dự án Swift gần đây, và thật bất ngờ khi càng nhiều dependency thì biên dịch càng chậm khủng khiếp
      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

    • Không biết có cho Windows và Linux không
      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ó lẽ nó còn ít được dùng hơn cả Swift phía server
  • 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 @c trong Swift 6.3 giờ cho phép export hàm Swift sang mã C
    Như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ạ

    • Thực ra trước đây nó đã tồn tại dưới dạng một thuộc tính có gạch dưới
    • Tương tác C++ quan trọng với Apple để hấp thụ các codebase cấp thấp sẵn có
      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
    • Vì đã có sẵn tính năng export sang ObjC nên mức ưu tiên của nó thấp hơn
    • Tôi đã thử dùng nó từ lâu ở dạng thử nghiệm, giờ chỉ là được chính thức hóa thôi
  • 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ức

  • Các thay đổi thực tế ngoài phần marketing có thể xem ở CHANGELOG
    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

    • Trong Swift 6.4, swift-build sẽ trở thành mặc định
      Theo 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

    • Giờ thì cả hai công cụ đều được tích hợp mặc định. Có thể dùng ngay swift formatswift format lint mà không cần dependency bên ngoài