Watlings - Học WebAssembly Text Format bằng cách sửa các chương trình nhỏ
(github.com/EmNudge)- Watlings là một dự án thực hành để học WebAssembly Text Format bằng cách sửa nhiều chương trình nhỏ
- Mỗi bài tập được hoàn thành theo hướng dẫn trong thư mục
exercises, và đáp án được kiểm tra bằng cách chạynpm start 001_hello - Để xem lời giải, dùng lệnh
npm run show 001_hello; để áp dụng trực tiếp lời giải vào bài tập, dùngnpm run solve 001_hello - Việc biên dịch và kiểm thử sử dụng Node 23+ cùng wasm-tools, và bên trong script sẽ gọi
wasm-tools parse - Các bài tập từ số 015 trở đi sử dụng những tính năng WebAssembly mới hơn như exception handling và GC types, đồng thời cần cờ
--experimental-wasm-exnrefchỉ có trên Node.js 23 trở lên - Dự án cung cấp phiên bản web có thể chạy trong trình duyệt, và khuyến nghị dùng VSCode cùng tiện ích mở rộng wat-lsp làm trình soạn thảo
- Cách học này theo hướng tự tay viết là chính, trong đó công việc và bối cảnh được trình bày qua chú thích trong từng file, giảm phần giải thích xuống mức tối thiểu và giúp người học lặp lại tiếp xúc với cú pháp trong các ngữ cảnh khác nhau
- Dự án cũng nêu rustlings và Ziglings như các ví dụ tham khảo về cấu trúc dự án
1 bình luận
Ý kiến trên Hacker News
Tôi thường thấy điều này ở nhiều nơi: thứ còn thiếu trong WASM trên trình duyệt không chỉ là truy cập DOM, mà là gần như toàn bộ API web, bao gồm cả
fetchhayXMLHttpRequestDanh sách các API web được trình duyệt hỗ trợ nhưng WASM chưa hỗ trợ nằm ở đây, và DOM chỉ là một trong số đó: https://developer.mozilla.org/en-US/docs/Web/API
Dù vậy, nếu GC được chốt và được trình duyệt hỗ trợ thì có khả năng các giao diện như vậy sẽ dùng được. Tài liệu nói rằng khi GC được hỗ trợ, mã WebAssembly có thể tham chiếu và truy cập JavaScript, DOM, cũng như các đối tượng được định nghĩa bằng WebIDL thông thường
Xem đoạn cuối: https://webassembly.org/docs/web/
Xét đến những khả năng mà nó có thể mở ra, tiến độ có vẻ quá lâu
Trông rất giống mô hình của Exercism. Exercism cũng có một khóa WASM miễn phí gồm các bài tập nhỏ: https://exercism.org/tracks/wasm
Tôi tự hỏi tác giả có cân nhắc đóng góp cho khóa đó hoặc hợp tác với họ không. Như vậy có thể tiếp cận độc giả rộng hơn và tận dụng được các công cụ sẵn có của Exercism
Trong một số ngữ cảnh thì đó là mô hình tốt, nhưng định dạng của kho này gần với
rustlingshayziglingshơn, nơi học cú pháp và tính năng thông qua ví dụ mãMô-đun Wasm của Exercism không hẳn là “bị hỏng”, nên tôi không chắc đóng góp của mình có được hoan nghênh không
Nói cách khác, nó gần giống một bộ bài kiểu LeetCode được sắp theo độ khó
Một khóa học đúng nghĩa nên sắp xếp bài tập theo từng tính năng của ngôn ngữ. Exercism đã xây dựng một giao diện tuyệt vời cho việc này, nhưng phần lớn ngôn ngữ lại không tận dụng: https://exercism.org/tracks/csharp/concepts
Một trong những cách tôi thích để học ngôn ngữ hoặc framework mới là koans, và cái này làm tôi nhớ đến chúng: https://github.com/ahmdrefat/awesome-koans/blob/master/koans...
Việc tăng dần mượt mà từ tính năng cơ bản đến nâng cao, nhìn thấy test thất bại, hiểu lý do rồi sửa theo kiểu TDD rất hợp cho việc học. Nó còn đem lại chút dopamine của khoảnh khắc “à ha!” nữa
Nếu muốn thử nghiệm các tính năng như GC của WASM thì nên dùng
wasm-optcủa Binaryen thay vì WABT.wasm-opthỗ trợ nhiều phần mở rộng WASM hơn hẳnKhá tuyệt
Tôi chưa trực tiếp đào sâu vào WASM, nhưng hướng dẫn này thì tôi định thử, và tôi nghĩ đến nay, sau vài năm, nó đã mang lại lợi ích lớn cho phát triển web
Nó không phải “sát thủ JavaScript” như một số người từng kỳ vọng, nhưng ngay từ đầu mục tiêu cũng không phải vậy. Thay vào đó, nó tích hợp khá tốt với hệ sinh thái hiện có để tối ưu các trường hợp sử dụng hiện tại, và khi cần tính toán nặng thì cũng mở ra các trường hợp sử dụng mới
Đây là lợi ích ròng cho mọi nhà phát triển web. Ta có thư viện nhanh hơn, công cụ phát triển ấn tượng hơn, và các binary Node có tính di động tốt hơn
Không biết còn lý do nào khác mà tôi bỏ sót không
Rất vui khi thấy việc ứng dụng WebAssembly tiếp tục tiến triển. Ở đây Microsoft thường chỉ được nhắc đến thoáng qua, nhưng nếu quan tâm đến WASM thì rất nên thử nghiệm Blazor WebAssembly
Đây là một framework rất mạnh, cho phép dùng C#, phần lớn thư viện .NET, thậm chí cả gói NuGet, dưới dạng WASM đã biên dịch trong trình duyệt
Nếu một gói cần đọc tệp trên đĩa thì nó sẽ lỗi ngay, hay giao diện đọc tệp sẽ chuyển thao tác đó sang một cơ chế như render phía máy chủ?
Dự án hay đấy
Tôi đang duy trì một kho có liên quan phần nào ở đây: https://github.com/eliben/wasm-wat-samples/
Tôi đã thử WASM, nhưng gặp vấn đề khi phơi bày kết nối cơ sở dữ liệu SQLite mà tôi muốn kết nối cục bộ
Không biết có ai từng làm thứ tương tự hoặc có tài liệu hay nào để gợi ý không
Thật thú vị khi WebAssembly trông giống một ngôn ngữ thực sự có thể viết tay ở mức nào đó
Tôi nghĩ điều đó sẽ hạ thấp đáng kể rào cản gia nhập khi chọn nó làm mục tiêu
Khi WebAssembly đang trở thành ngôn ngữ chung của nhiều hệ sinh thái, việc đầu tư thời gian để hiểu vững cách nó hoạt động ngày càng đáng giá