6 điểm bởi GN⁺ 2024-06-13 | 2 bình luận | Chia sẻ qua WhatsApp
  • Swift hỗ trợ cả Linux, Windows và các nền tảng khác ngoài nền tảng Apple
  • Với Swift Static Linux SDK, có thể build các tệp thực thi được liên kết tĩnh hoàn toàn mà không cần phụ thuộc bên ngoài
    • Điều này cho phép chạy trên mọi bản phân phối Linux
    • Có thể phát triển và kiểm thử trên macOS rồi triển khai lên máy chủ Linux
  • Liên kết là quá trình lấy các phần khác nhau của chương trình máy tính và nối các tham chiếu lại với nhau
    • Liên kết tĩnh diễn ra tại thời điểm build, còn liên kết động diễn ra khi runtime
    • Thư viện tĩnh là tập hợp các tệp object riêng lẻ, còn thư viện động có tính monolithic
  • Ưu và nhược điểm của liên kết tĩnh:
    • Ưu điểm: không có overhead khi runtime, chỉ bao gồm phần mã thư viện cần thiết, không cần thư viện động được cài riêng, không có vấn đề về phiên bản lúc runtime
    • Nhược điểm: không thể chia sẻ mã (làm tăng sử dụng bộ nhớ), không thể cập nhật phụ thuộc nếu không rebuild chương trình, kích thước tệp thực thi tăng
  • Khi dùng liên kết tĩnh trên Linux, có thể loại bỏ hoàn toàn phụ thuộc vào thư viện hệ thống theo từng bản phân phối
  • Cần cài bộ toolchain Open Source từ swift.org (không thể dùng toolchain do Xcode cung cấp)
  • Có thể cài Static Linux SDK bằng lệnh swift sdk install
  • Có thể build binary Linux x86-64 bằng lệnh swift build --swift-sdk x86_64-swift-linux-musl, và build binary Linux ARM64 bằng lệnh swift build --swift-sdk aarch64-swift-linux-musl
  • Các gói Swift dùng Foundation hoặc Swift NIO vẫn hoạt động bình thường
  • Các gói dùng thư viện C cần được sửa để import Musl thay vì Glibc
    • Musl hỗ trợ tốt cho liên kết tĩnh và có giấy phép permissive giúp việc phân phối tệp thực thi dễ dàng hơn
  • Có thể sửa các phụ thuộc của gói bằng lệnh swift package edit

2 bình luận

 
cichol 2024-06-14

Giờ dùng cái này có cảm giác sẽ sớm xuất hiện thứ gì đó hỗ trợ phát triển đồng thời Android và iOS bằng Swift một cách liền mạch hơn ..

 
GN⁺ 2024-06-13
Ý kiến trên Hacker News
  • Hỗ trợ nền tảng tùy chỉnh mới của Swift: Việc Swift hỗ trợ hệ thống nhúng và WASM, đồng thời chuyển sang một tổ chức GitHub không thuộc Apple, là một bước tiến lớn để mở rộng Swift sang các nền tảng khác. Khả năng nó được dùng cho việc xác minh bảo mật của AI OS cũng rất đáng chú ý.

  • Có thể chạy binary Swift trong container Alpine: Rất vui vì giờ đã có thể chạy binary Swift trong container Alpine. Việc hỗ trợ musl đang tiến triển nhanh hơn dự kiến. Cross-compilation cũng rất hữu ích.

  • Kỳ vọng về hỗ trợ Debian: Rất vui khi thấy các gói Swift được bổ sung trên Debian. Có lẽ sẽ dùng Debian nhiều hơn làm VM phát triển.

  • Kỳ vọng dùng Swift trong hệ thống nhúng: Đã làm nhiều với hệ thống nhúng bằng C, nhưng muốn thử Swift trên bo mạch phát triển STM.

  • Nhược điểm của liên kết tĩnh: ASLR có thể không hoạt động đúng hoặc chỉ một đối tượng được ngẫu nhiên hóa. Với ngôn ngữ an toàn bộ nhớ thì đây có thể không phải nhược điểm lớn. Việc chia sẻ các đối tượng dùng chung cũng giúp giảm I/O.

  • Vấn đề tương thích giữa các distro: Chương trình được build trên một distro hoặc phiên bản cụ thể có thể không chạy trên distro khác. Việc Swift cung cấp liên kết tĩnh là tốt, nhưng tốt nhất là để các distro tự chọn cách phân phối gói.

  • Khả năng cạnh tranh với Golang: Có vẻ Swift có thể cạnh tranh với Golang về độ dễ triển khai. Nó đẩy phần phức tạp ra xa khỏi người dùng cuối.

  • Ứng dụng GUI đa nền tảng: Tò mò không biết sẽ thế nào nếu tạo ứng dụng GUI đa nền tảng bằng Swift. Có lẽ không dùng được SwiftUI, nhưng vẫn định dùng Swift cho các script đơn giản.

  • Cảnh báo về việc dùng image CentOS 7: Việc vẫn còn cung cấp image CentOS 7 có vẻ thật điên rồ. Cảnh báo là đừng dùng nó.

  • Độ phức tạp ngày càng tăng của Swift: Swift từng có thể dễ dàng thay thế Python, nhưng ngôn ngữ này đã trở nên phức tạp và giờ thành một bản sao của C++.

  • Lý do dùng Swift thay vì Rust: Câu hỏi về việc vì sao nên dùng Swift thay vì Rust.

  • Lý do dùng Swift khi không có iOS/SwiftUI: Câu hỏi liệu có lý do nào để dùng Swift nếu không có iOS/SwiftUI hay không. Có vẻ ngoài trường hợp lập trình viên Swift muốn dùng ngôn ngữ quen thuộc cho các dự án nhỏ thì không có nhiều lý do.