6 điểm bởi GN⁺ 2024-03-28 | 3 bình luận | Chia sẻ qua WhatsApp
  • Swift phù hợp để xây dựng giao diện người dùng nhờ cú pháp gọn gàng, kiểu tĩnh và các tính năng đặc biệt giúp việc viết mã trở nên dễ dàng hơn
  • Adwaita for Swift tận dụng các tính năng này của Swift để cung cấp một giao diện trực quan cho việc phát triển ứng dụng trên nền tảng GNOME
  • GNOME là một môi trường desktop mã nguồn mở phổ biến cho Linux, tập trung vào sự đơn giản và khả năng tiếp cận

Ví dụ mã

  • Trong ví dụ mã dùng Adwaita for Swift, một view tên là Counter được định nghĩa để hiển thị phần giao diện người dùng bên trong cửa sổ
  • View có thể được lồng trong các view khác hoặc được thêm làm phần tử con của cửa sổ, và nội dung của nó có thể được chỉnh sửa từ bên ngoài tùy theo vị trí trong hệ phân cấp view
  • Nhờ đó, việc kết hợp các view để tạo ra nhiều kết quả khác nhau trở nên dễ dàng hơn

Động lực

  • Mục tiêu là giúp có thể viết ứng dụng GNOME bằng Swift
  • Các binding libadwaita và GTK hiện có theo phong cách lập trình mệnh lệnh, xây dựng giao diện người dùng bằng một chuỗi lệnh
  • Adwaita for Swift được xây dựng theo hướng dữ liệu, ví dụ khi nhấn nút làm thay đổi biến count thì giao diện người dùng sẽ tự động được cập nhật

Tính dễ sử dụng

  • Với các binding truyền thống, mỗi khi giá trị thay đổi bạn phải gọi hàm trên đối tượng để widget cập nhật nội dung của nó
  • Adwaita for Swift chỉ cần thêm một định danh duy nhất vào biến cần lưu, còn lại sẽ tự xử lý

Khả năng đọc hiểu

  • Cách tiếp cận hướng dữ liệu có tác động tích cực đến khả năng đọc hiểu mã
  • Nhờ định nghĩa khai báo của chính giao diện người dùng, bạn có thể tập trung vào diện mạo và hành vi của ứng dụng thay vì cách tạo ra kết quả

Phát triển ứng dụng đa nền tảng

  • Adwaita for Swift cho phép viết ứng dụng chạy trên Linux, macOS và Windows với một codebase duy nhất
  • Có thể chia sẻ mã Swift backend giữa ứng dụng SwiftUI và ứng dụng GNOME
  • Có thể dùng Swift để tạo ứng dụng GNOME mới, đồng thời đạt được khả năng đọc mã tốt và an toàn bộ nhớ cao

Phát hành ứng dụng

  • Adwaita for Swift hoạt động tốt với Flathub, giúp đơn giản hóa việc cài đặt và phát hành ứng dụng cho desktop Linux
  • Có extension Freedesktop SDK cho Swift 5 và một công cụ chuyển đổi dependency của Swift Package Manager thành nguồn Flatpak

Ý kiến của GN⁺

  • Sự kết hợp giữa Swift và GNOME mang đến cho các nhà phát triển cơ hội phát triển ứng dụng trên một nền tảng mới; đặc biệt, các tính năng ngôn ngữ mạnh mẽ của Swift kết hợp với môi trường thân thiện với người dùng của GNOME giúp đem lại trải nghiệm phát triển hiệu quả.
  • Bài viết này đưa ra một cách tiếp cận mới cho môi trường desktop Linux, đồng thời nhấn mạnh sự tiện lợi và khả năng đọc hiểu của phong cách phát triển khai báo so với các phương pháp phát triển hiện có.
  • Bài viết cũng nhấn mạnh lợi thế của phát triển đa nền tảng và làm nổi bật tầm quan trọng của việc cung cấp cùng một trải nghiệm người dùng trên nhiều hệ điều hành khác nhau
  • Về nền tảng kỹ thuật, kiểu tĩnh và an toàn bộ nhớ của Swift có thể góp phần nâng cao hiệu năng và độ ổn định của ứng dụng
  • Ở góc nhìn phản biện, cần cân nhắc khả năng phát sinh vấn đề tương thích hoặc hiệu năng trên các môi trường desktop khác ngoài GNOME

3 bình luận

 
bbulbum 2024-03-30

https://stuff.mit.edu/afs/athena/…

Cách phát âm chính thức của Gnome không phải là "nôm" mà là "gờ-nôm".

 
neoroman 2024-03-29

Thật tuyệt.

 
GN⁺ 2024-03-28
Ý kiến Hacker News
  • Thảo luận về wrapper tương tự SwiftUI

    • Có đề cập đến cách tiếp cận cung cấp một wrapper khai báo tương tự SwiftUI. Tiền đề cốt lõi là muốn cung cấp một wrapper kiểu SwiftUI cho các tính năng của GNOME.
    • Bản thân SwiftUI vẫn đang trải qua những khó khăn tăng trưởng liên quan đến việc xử lý/cập nhật trên đúng luồng và thiết lập data binding một cách chính xác.
    • Các bài viết trên swift.org hoặc blog của Apple nhìn chung chỉ là những bản demo nhỏ cho thấy con đường hoạt động tương đối tốt. Khi nói về một framework hoặc nền tảng mới, người bình luận muốn thấy nhiều bằng chứng hơn rằng các tác giả hiểu, giải quyết các vấn đề chính và sẽ tiếp tục phát triển nó.
    • Các framework UI đa nền tảng nhanh chóng trở nên phức tạp và có những vấn đề dài hạn có thể trở thành rào cản đối với người dùng hoặc khách hàng, như Flutter hay Java/Eclipse.
    • Với Swift, tình hình còn không được cải thiện vì có nhiều mô hình đồng thời khác nhau và hành vi khác nhau giữa nền tảng Apple với Linux (UI chính thức chưa được kiểm thử).
  • Đề cập đến các dự án và công cụ khác

    • Cung cấp liên kết đến wrapper tương tự SwiftUI, Tokamak và FlutterSwift cho các trường hợp sử dụng nhúng.
  • Chia sẻ trải nghiệm dự án cá nhân

    • Chia sẻ kinh nghiệm viết một dự án phụ nhỏ bằng Vala và gtk4.
    • Thích định dạng của Blueprint, nhưng gặp khó khăn do thiếu tài liệu về cách thực hiện các tính năng nâng cao hơn.
    • Rất thích ngôn ngữ Vala, nhưng cho rằng sẽ tốt nếu viết toàn bộ logic và model bằng Vala, rồi dùng thư viện Swift này cho phần UI.
  • So sánh với trải nghiệm trong quá khứ

    • Cảm thấy điều này giống với trải nghiệm khoảng 20 năm trước khi viết ứng dụng GNOME bằng C# với Mono.
  • Vấn đề chạy trên Mac

    • Đã thử chạy trên Mac nhưng gặp vấn đề thiếu adwaita.h.
  • Ý kiến về “framework trong mơ” cá nhân

    • Một framework mã nguồn mở giống SwiftUI nhưng nhắm đến GTK4 là thứ gần nhất với framework UI desktop đa nền tảng trong mơ.
    • Cú pháp Swift cần thời gian để làm quen, nhưng khi đã quen với mọi khái niệm thì đây là một ngôn ngữ rất dễ dùng.
    • Lý do duy nhất không dùng Swift là vì mức hỗ trợ trên Linux không tốt bằng trên các nền tảng của Apple.
  • Câu hỏi về hỗ trợ 3D trong gtk4

    • Đặt câu hỏi liệu khi dùng 3D trong gtk4 thì có còn bị giới hạn trong ngữ cảnh OpenGL hay không.
  • Ý kiến về việc dùng key trong tham số hàm

    • Cho rằng việc đưa key vào tham số hàm là một sai lầm.
  • Thảo luận về kiểm thử codebase Swift

    • Thảo luận về cách kiểm thử một codebase Swift. Tài liệu về kiểm thử còn thiếu và không đưa ra chiến lược cho mock object, stub, báo cáo, code coverage, v.v.
    • Với các ứng dụng dùng network extension, việc kiểm thử phải thực hiện trên thiết bị vật lý do các hạn chế về ký.
    • Hỏi liệu có ai biết dịch vụ CI trên thiết bị vật lý tốt nào hỗ trợ cả thiết bị iOS và macOS không.
  • Nhận thấy Swift đang trở thành một lựa chọn thú vị cho phát triển desktop

    • Gần đây nhận ra rằng Swift đang trở thành một lựa chọn thú vị cho phát triển desktop. Ngoài ví dụ này, còn bổ sung Arc cho macOS và Windows.