Ổn định Swift 5 và ABI - thời điểm tốt nhất để di chuyển

Swift là một ngôn ngữ nhanh, an toàn và thú vị để mã hóa với tiềm năng ngăn xếp đầy đủ và hỗ trợ cộng đồng tuyệt vời. Nó nhanh hơn khoảng 2,6 lần so với Objective-C theo Apple, tuy nhiên, một số nghiên cứu chỉ ra rằng sự khác biệt không quá lớn. Mã Swift dễ bảo trì hơn vì không có tệp thực thi và giao diện riêng biệt, cú pháp ngắn hơn và ngôn ngữ hỗ trợ các khung động.

Ngôn ngữ đã phát triển đáng kể và đã được chấp nhận bởi một số lượng lớn các nhà phát triển. Đây là ngôn ngữ được yêu thích thứ 6 theo Khảo sát nhà phát triển StackOverflow 2018. Đối với một ngôn ngữ được phát hành vào năm 2014, tỷ lệ chấp nhận là phi thường.

Đó là một số lợi ích của Swift, bây giờ chúng ta hãy xem xét những nhược điểm từ quan điểm của nhà phát triển. Swift vẫn chưa trưởng thành và giống như một mục tiêu di động với những thay đổi lớn được giới thiệu với mỗi bản phát hành mới. Một trong những vấn đề quan trọng được nhiều nhà phát triển đưa ra là thiếu khả năng tương thích ngược với các phiên bản ngôn ngữ cũ và khóa phiên bản, điều đó có nghĩa là chỉ có một phiên bản Swift duy nhất trong toàn bộ dự án và các phụ thuộc bên ngoài của nó. Do đó, các nhà phát triển buộc phải viết lại hoàn toàn các dự án của họ nếu họ muốn chuyển sang phiên bản Swift mới nhất và cập nhật các phụ thuộc bên ngoài của họ. Đối với các nhà phát triển tạo khung, họ phải cập nhật khung của họ cho mọi phiên bản Swift mới và họ không thể phân phối nó dưới dạng khung được biên dịch trước nhị phân.

May mắn thay, nhóm Swift và cộng đồng Nguồn mở đang giải quyết vấn đề này và dự kiến ​​sẽ giải quyết vấn đề này trong phiên bản chính tiếp theo của Swift, tức là Swift 5.0, đã được đẩy mạnh kể từ Swift 3.0. Tuyên ngôn Ổn định ABI tuyên bố họ có mục tiêu hoàn thành:

  1. Khả năng tương thích nguồn, có nghĩa là trình biên dịch mới hơn có thể biên dịch mã được viết bằng phiên bản cũ hơn của Swift. Điều này loại bỏ khóa phiên bản hiện tại trong Swift.
  2. Khả năng tương thích khung thời gian nhị phân & thời gian chạy, cho phép phân phối các khung ở dạng nhị phân hoạt động trên nhiều phiên bản Swift. Khả năng tương thích khung nhị phân sẽ đạt được nhờ tính ổn định định dạng mô-đun giúp ổn định tệp mô-đun, là biểu diễn của trình biên dịch mô tả các giao diện chung của khung và độ ổn định ABI cho phép tương thích nhị phân giữa các ứng dụng và thư viện được biên dịch với các phiên bản Swift khác nhau.

ABI là gì?

Trong thời gian chạy chương trình Swift nhị phân tương tác với các thư viện và thành phần khác. Giao diện nhị phân ứng dụng là đặc tả mà các thực thể nhị phân được biên dịch độc lập phải tuân theo để được liên kết với nhau và được thực thi. Các thực thể nhị phân này phải đồng ý về nhiều chi tiết cấp thấp như cách gọi hàm, biểu diễn dữ liệu trong bộ nhớ và ngay cả nơi siêu dữ liệu của chúng và cách truy cập nó.

Ổn định ABI là gì?

Ổn định ABI có nghĩa là khóa ABI đến mức các phiên bản trình biên dịch trong tương lai có thể tạo ra các nhị phân phù hợp với ABI ổn định. Khi ABI ổn định, nó có xu hướng tồn tại trong suốt quãng đời còn lại của nền tảng.

Sự ổn định của ABI chỉ ảnh hưởng đến các bất biến của các giao diện và biểu tượng công cộng có thể nhìn thấy bên ngoài. Ví dụ, các trình biên dịch trong tương lai có thể tự do thay đổi các quy ước gọi cho các cuộc gọi chức năng nội bộ miễn là các giao diện công cộng được bảo tồn.

Điều kiện tiên quyết của sự ổn định ABI

  1. Các loại, chẳng hạn như cấu trúc và lớp, phải có bố cục trong bộ nhớ được xác định cho các thể hiện của loại đó và chia sẻ cùng một quy ước bố cục.
  2. Loại siêu dữ liệu được sử dụng rộng rãi bởi các chương trình Swift. Siêu dữ liệu này phải có bố cục bộ nhớ được xác định hoặc có một bộ API được xác định để truy vấn siêu dữ liệu của một loại.
  3. Mỗi biểu tượng xuất hoặc bên ngoài trong thư viện cần một tên duy nhất mà theo đó các thực thể nhị phân có thể đồng ý. Swift cung cấp quá tải chức năng và không gian tên theo ngữ cảnh (như mô-đun và loại), có nghĩa là bất kỳ tên nào trong mã nguồn có thể không phải là duy nhất trên toàn cầu. Một tên duy nhất được sản xuất thông qua một kỹ thuật gọi là xáo trộn tên.
  4. Các chức năng phải tuân thủ các quy ước gọi, trong đó đòi hỏi những thứ như bố cục của ngăn xếp cuộc gọi, những gì các thanh ghi được bảo tồn và các quy ước sở hữu.
  5. Swift vận chuyển với một thư viện thời gian chạy xử lý những thứ như truyền động, đếm tham chiếu, phản xạ, v.v ... Các chương trình Swift được biên dịch thực hiện các cuộc gọi bên ngoài đến thời gian chạy này. Do đó, API thời gian chạy Swift là Swift ABI.
  6. Swift tàu với một thư viện tiêu chuẩn xác định nhiều loại, cấu trúc và hoạt động phổ biến trên đó. Để thư viện chuẩn được vận chuyển hoạt động với các ứng dụng được viết bằng các phiên bản khác nhau của Swift, nó phải hiển thị API ổn định. Do đó, API thư viện tiêu chuẩn Swift là Swift ABI, cũng như bố cục của nhiều loại mà nó xác định.
Tất cả các nhiệm vụ này đã được nhóm nòng cốt Swift hoàn thành nhưng chúng chưa được phát hành trên GitHub. Nhìn vào trạng thái của các nhiệm vụ, chúng ta có thể hy vọng phiên bản chính tiếp theo của Swift sẽ ổn định.

Ưu điểm của tính ổn định ABI

  1. Vì vậy, một khi Swift được tuyên bố là ổn định ABI, mã được viết từ thời điểm này trở đi sẽ tương thích với các phiên bản mới hơn của ngôn ngữ và nhà phát triển sẽ không phải cập nhật tất cả các phụ thuộc bên ngoài của dự án trong khi chuyển sang phiên bản mới của Nhanh.
  2. Tác giả thư viện có thể cung cấp khung của mình dưới dạng khung nhị phân một khi đạt được sự ổn định định dạng mô-đun.
  3. Kích thước gói ứng dụng sẽ giảm do thời gian chạy Swift ổn định có thể được kết hợp trong HĐH.
  4. Ngôn ngữ sẽ tiếp tục phát triển nhưng những thay đổi đối với ABI kể từ thời điểm đó sẽ là phụ gia. Các thay đổi phụ gia ABI có thể được tận dụng khi phiên bản Swift được nhắm mục tiêu tối thiểu hỗ trợ chúng, vì tính ổn định của ABI chỉ khóa các giao diện và biểu tượng công khai có thể nhìn thấy bên ngoài. Các trình biên dịch mới hơn có thể thực hiện các thay đổi nội bộ có thể cải thiện hiệu quả.

Phần kết luận

Swift rõ ràng là tương lai để phát triển trong hệ sinh thái Apple và một khi ABI ổn định và định dạng mô-đun ổn định, ngôn ngữ sẽ không có nhược điểm lớn nhất. Vui lòng đọc qua bài viết này để so sánh chi tiết giữa Swift và Objective-C vào năm 2019.

Nếu bạn muốn chuyển đổi cơ sở mã Objective-C của mình sang Swift, bây giờ là thời điểm tốt nhất để bắt đầu. Tôi đã viết một bài viết về việc chuyển đổi SVProTHERHUD sang IHProTHERHUD được viết hoàn toàn bằng Swift và là chủ đề an toàn với thiết kế API giống như SVProTHERHUD sử dụng Swiftify cho Xcode.

Người giới thiệu

  1. https://github.com/apple/swift/blob/master/docs/ABIStabilityManifesto.md
  2. https://swift.org/abi-stability/
  3. https://www.altexsoft.com/blog/engineering/the-good-and-the-bad-of-swift-programming-lingu/
  4. https://www.altexsoft.com/blog/engineering/swift-vs-objective-c-out-with-the-old-in-with-the-new/
  5. https://medium.com/swift-india/swift-5-abi-stability-769ccb986d79
  6. https://www.ca.com/en/blog-developers/dynamic-versus-static-framework-in-ios.html
  7. https://www.youtube.com/watch?v=GzP2oaZRi7Q

Bạn có thể liên hệ với chúng tôi trên Twitter, Linkedin, Facebook và Github.