Ứng Dụng iOS Viết Bằng Assembly Làm Dấy Lên Tranh Luận Về Sự Trừu Tượng Trong Phát Triển Di Động

Nhóm Cộng đồng BigGo
Ứng Dụng iOS Viết Bằng Assembly Làm Dấy Lên Tranh Luận Về Sự Trừu Tượng Trong Phát Triển Di Động

Trong một kỷ nguyên bị thống trị bởi các framework cấp cao như React Native và Flutter, một nhà phát triển đã tạo ra một ứng dụng iOS hoạt động hoàn toàn bằng ngôn ngữ assembly ARM. Dự án yellow.asm minh họa cách xây dựng một ứng dụng iOS cơ bản hiển thị màn hình màu vàng bằng cách giao tiếp trực tiếp với UIKit thông qua mã cấp thấp, bỏ qua stack phát triển thông thường bằng Swift hoặc Objective-C.

Phản ứng từ cộng đồng tiết lộ một sự chia rẽ thú vị giữa những người thấy được giá trị giáo dục trong việc hiểu các nguyên tắc cơ bản của máy tính và những người đặt câu hỏi về tính thực tiễn của các phương pháp tiếp cận cấp thấp như vậy trong phát triển di động hiện đại.

Giá Trị Giáo Dục Của Lập Trình Assembly

Nhiều nhà phát triển lập luận rằng việc hiểu ngôn ngữ assembly cung cấp những hiểu biết quan trọng về những gì xảy ra bên dưới các lớp trừu tượng của các framework lập trình hiện đại. Việc triển khai bằng assembly tiết lộ cách các lệnh gọi phương thức Objective-C thực sự hoạt động ở cấp độ vi xử lý, cho thấy cơ chế của việc truyền tham số, lệnh gọi hàm và quản lý bộ nhớ vốn thường bị ẩn khỏi các nhà phát triển làm việc với các ngôn ngữ cấp cao hơn.

Loại dự án như thế này chính là cách bạn thực sự học được những gì diễn ra bên dưới mui xe. Mọi người đều đang xây dựng với React Native và Flutter, điều đó cũng tốt cho đến khi có thứ gì đó bị hỏng. Lúc đó bạn sẽ mắc kẹt với việc Google mấy thứ ma thuật hắc ám. Bắt đầu từ assembly dạy bạn cái giá thực sự của sự trừu tượng.

Lập luận phản bác lại cho rằng mặc dù mang tính giáo dục, nhưng có một khoảng cách lớn giữa kiến thức về assembly và ứng dụng thực tế trong việc gỡ lỗi các framework đa nền tảng hiện đại. Một số bình luận viên lưu ý rằng các cơ hội tối ưu hóa thực sự nằm ở nơi khác, chẳng hạn như vượt ra ngoài UIKit để tương tác trực tiếp hơn với GPU thông qua Metal hoặc Core Animation.

Quan điểm Cộng đồng về Giá trị của Assembly:

  • Giáo dục: Hiểu được các hoạt động hệ thống ở mức thấp
  • Gỡ lỗi: Hiểu rõ hơn về các lỗi ở tầng trừu tượng hóa
  • Tối ưu hóa: Tiềm năng cho các phần quan trọng về hiệu suất
  • Thực tế: Hạn chế cho việc phát triển ứng dụng hoàn chỉnh
  • Lịch sử: Khác biệt so với lập trình assembly 8/16-bit đơn giản hơn

Tính Khả Thi Về Mặt Kỹ Thuật Và Các Ràng Buộc Nền Tảng

Một cuộc thảo luận kỹ thuật quan trọng đã nổ ra về việc liệu có thực sự có thể tạo ra một ứng dụng iOS mà không phụ thuộc vào bất kỳ UIKit nào. Mặc dù ví dụ bằng assembly vẫn phải dựa vào UIKit để quản lý cửa sổ và hiển thị, các nhà phát triển đã tranh luận về mức độ sâu mà một người có thể đi để bỏ qua các framework của Apple. Một số gợi ý sử dụng trực tiếp các layer Core Animation hoặc thậm chí ghi trực tiếp vào framebuffer, mặc dù những người khác chỉ ra rằng các mô hình bảo mật của iOS và các ràng buộc API công khai khiến việc tránh hoàn toàn UIKit là bất khả thi trên các thiết bị chưa được jailbreak.

Cuộc trò chuyện nổi bật lên rằng ngay cả bản triển khai assembly này cuối cùng cũng phải gọi các API UIKit để hiển thị nội dung, vì iOS không cung cấp các giao diện syscall công khai để truy cập framebuffer trực tiếp như các nền tảng máy tính cũ hơn đã từng làm. Điều này phản ánh cách các hệ điều hành hiện đại thực thi các lớp trừu tượng vì lý do bảo mật và ổn định.

Triển Khai Thực Tế Và Cân Nhắc Về App Store

Một số nhà phát triển đã thành công trong việc xây dựng và chạy mã assembly bằng các công cụ dòng lệnh của Xcode, mặc dù một số gặp phải vấn đề liên kết yêu cầu các framework bổ sung như CoreFoundation. Quá trình build liên quan đến việc biên dịch trực tiếp file assembly và đóng gói nó thành file IPA, chứng minh rằng giao diện đồ họa của Xcode không thực sự cần thiết cho việc phát triển iOS.

Liên quan đến việc phê duyệt trên App Store, các bình luận đã làm rõ rằng bản thân ngôn ngữ assembly sẽ không nhất thiết kích hoạt việc từ chối, vì Apple xem xét binary cuối cùng bất kể ngôn ngữ nguồn là gì. Rủi ro chính liên quan đến các lỗi sập ứng dụng tiềm ẩn do các lệnh gọi phương thức không chính xác mà các ngôn ngữ cấp cao hơn sẽ bắt được tại thời điểm biên dịch. Một số nhà phát triển bày tỏ hy vọng rằng các quy định trong tương lai của EU có thể làm giảm sự phụ thuộc vào các kênh phân phối chính thức của Apple.

Yêu cầu Build:

  • Công cụ dòng lệnh Xcode hoặc cài đặt Xcode đầy đủ
  • iOS SDK
  • Liên kết với các framework UIKit và Foundation
  • Không yêu cầu storyboard hoặc các file interface builder

Bối Cảnh Đang Thay Đổi Của Lập Trình Cấp Thấp

Cuộc thảo luận tiết lộ cách mà assembly ARM đại diện cho một môi trường phức tạp hơn nhiều so với các hệ thống 8-bit và 16-bit mà nhiều nhà phát triển kỳ cựu đã học cách đây nhiều thập kỷ. Mặc dù giá trị giáo dục vẫn còn, con đường thực tế từ kiến thức assembly đến việc giải quyết các vấn đề phát triển di động trong thế giới thực đã kéo dài đáng kể khi các lớp trừu tượng đã được nhân lên.

Một số bình luận viên chia sẻ các ví dụ về các cách tiếp cận thay thế, bao gồm các ứng dụng iOS được viết bằng C thuần túy hoặc sử dụng SDL, với một người lưu ý về một ứng dụng tracker đạt được kích thước dưới 1MB thông qua các phụ thuộc tối thiểu. Những người khác đề cập rằng các ứng dụng SwiftUI hiện đại cũng có thể đạt được kích thước nhỏ khi được tối ưu hóa cẩn thận.

Các thành phần kỹ thuật chính trong yellow.asm:

  • Sử dụng ngôn ngữ assembly ARM64
  • Gọi trực tiếp các hàm runtime của Objective-C
  • Giao tiếp với framework UIKit
  • Triển khai vòng đời cơ bản của ứng dụng (autorelease pools, application delegate)
  • Tạo các thành phần giao diện người dùng theo cách lập trình

Kết Luận

Ứng dụng iOS bằng assembly đóng vai trò vừa là một sự tò mò kỹ thuật, vừa là một tuyên bố triết lý về giáo dục phát triển phần mềm. Mặc dù ít người khuyên nên viết các ứng dụng di động cho sản xuất bằng assembly, dự án đã thành công trong việc chứng minh các khái niệm máy tính cơ bản và thúc đẩy các cuộc trò chuyện quan trọng về sự trừu tượng, các ràng buộc nền tảng và giá trị của việc hiểu điều gì xảy ra bên dưới bề mặt của các framework phát triển hiện đại. Khi các nền tảng di động tiếp tục phát triển, những lĩnh vực kiến thức nền tảng này vẫn còn phù hợp ngay cả khi việc triển khai thực tế chuyển sang các cấp độ trừu tượng cao hơn.

Tham khảo: yellow.asm