30 Ngày học Rust - Day 24: Siêu Năng Lực Procedural Macros (Macro Thủ Tục)
Day 24: Cách những Framework lớn như Serde hay Axum dệt nên ma thuật. Cắm rễ vào trình biên dịch, xẻ thịt AST Code của bạn thành Node Cây và thao túng toàn bộ chúng.

Lấy Chìa Khóa Quản Trị Hệ Thống Trình Biên Dịch
Kiểu Macro Khớp Hình (Declarative macro_rules!) đã quá bá đạo ở Ngày 23. Nhưng Gã khổng lồ Framework Serde (Chuyên Biến Struct thành chuỗi JSON) Không Thể Gõ So Rạch chữ Để Mò ra tên Từng Cái Biến Nằm rải rác. Chúng Cần Một Loại Phép Thuật Thao Túng Não Bộ Compiler. Lấy Lược Gỡ Luôn Cây Rễ Ký Tự Từ Khóa (Abstract Syntax Tree - AST) Của Bộ Não Biên Dịch.
Rust Cho Phép Làm Điền Rồ Đó Bằng Procedural Macros (Macro Thủ tục Cấp Chức Năng). Cấu Trúc của nó Không Phải Bảng Khớp Regex. Nó Là MỘT HÀM RUST THỰC THỤ nhận vào Mảng Code Thô (TokenStream) và Phụt Lại Chùm Code Thô Cải Tạo Mới!

Các Thể Khí Công Procedural
Vì Có Phép Thay Code Như Vị Thần Cầm Khuôn: 100% Macro Proc Không Thể Viết Chung File lib.rs Do Gã Crate App Bị Ràng Buộc Luật So Rối Kép Build Căng Dây. Bạn BUỘC PHẢI tạo Ra 1 Cái Crate (Gói Tool) Cắm Nhãn Riêng Gọi Là Khúc proc-macro = true Và Tách Trái Thẩm Gieo Vô App Root. Cực Nghệ Chuyên Môn, Gồm Ba Lực Lượng:
1. Custom #[derive] (Ma Quỷ Ký Liễn Thuộc Tích)
Đây Là Cách Bạn Phê Chuẩn Nhất!
#[derive(TuiTinhXuatJSON)]
struct NguoiDung {
tuoi: u8,
}Khi Thấy Khúc derive, Con Bot Hàm Của Crate Proc Macro Sẽ Hút Dữ struct đó Vô Miệng. Chẻ rã nó Thấy Chữ NguoiDung… Hắn Lặng Im Trả Lại Cài Struct Gốc Mẹ, KÈM THEO VIẾT NỐI BỘ ĐUÔI Ở Khúc Dưới Gầm 1 Lỗ impl TuiTinhXuatJson Kèm Quất Nguyên Toàn Bộ Đoạn Code Ép Chuyển Chữ. Bạn Bấm Nhẹ Viết Chữ “derive” Nhỏ Xíu Đã Nhận Một Quán Tính Code Chục Ngàn Dòng Auto Sinh Thêm Chạy Ngầm Bọc Ruột!!!
2. Attribute-like Macros (Đóng Trần Chuyên Tượng Hàm)
Nâng Cấp Áp Chế. Cấu Lệnh Khép Trên Đỉnh Đầu Băng Giá Hàm. Nhổ Luôn Ruột Hàm Ẩn Định Đóng Lại Hoàn Toàn Tươi Màu Mới Khác!
#[tao_cuc_route(GET="/home")]
fn xem_nha() {}Bạn Nghĩ Axum Nắm Đầu Khảo Bếp Mạng Bằng Cách Nào? Nó Hút Hàm Này Đi Lọc Chèn Middleware Request Đầy Mật!
3. Function-like Macros
Xài In Y Hệt Macro Day 23 Gọi Ra Lệnh Búa ( VD: sql!("SELECT * FROM HACKER")). Nhưng Do Nó Được Khớp AST Proc Của Biên Dịch, Hàm Nó Cực Hiểm Xọc Vào Kiểm Mạch Data String Mà Búng Cánh Dò Regex DB Kiểm Soát Xem Mình Gõ Có Lủng Chén Lỗi Typos Chữ Hay Không Trục Xuất!
Câu hỏi thường gặp (FAQ)
Để Rạch Biển Data Token Mảng Syntax Có Khó Xơi Không Vị Thần Ơi?
Không. Cộng Đồng Đã Tạo Chỗ Đáp Cực Ướt Át Và Ngon Nghẻ Là Hai Đại Thư Viện syn và quote.
- Thằng
syn: Ăn Vào Cụm Mã Giun Chuỗi Cắt Cưa Ra Rổ Xoay Struct Danh Tánh Lệnh AST Thông Mạng Gốc Có Thể Kiểm Toán Dễ Bằng Mắt Đọc Thường i32 Object. - Thằng
quote: Ôm Tí Thép Chuỗi Format Nửa Kín Nửa Mở In Kẽ Hơi Rối Ra Đạn Thụt AST Sạch Mượt Áp Trả Phóng Ra! Chúng ta Toàn Lấy 2 Kẻ Này Bọc Build Crate.
Sẵn sàng cho Ngày 25? Nghía Tí Thế Đã Đủ. Hết Rồi!!! Toàn Bộ Kiến Thức Cao Đại Tối Cao Của Rust Chặn Ở Mốc Tuần Này. Tuần 5 Khởi Xướng Đỉnh Bật: Một Project Đỉnh Cao 6 Ngày. Ta Xây Web Server Lõi Cân Kép CPU Tận Tay: [Day 25: Đắp Foundation TCP Socket Áp Đất Bằng API Web]!.
Chuỗi bài viết
30 Ngày Trở Thành Rustacean Tinh Hoa
Phần 24 / 30
- Phần 130 Ngày học Rust - Day 1: Lời chào thế giới và Vũ khí Cargo
- Phần 230 Ngày học Rust - Day 2: Biến, Bất biến (Mutability) và Shadowing
- Phần 330 Ngày học Rust - Day 3: Luồng điều khiển (Control Flow) và sức mạnh của Match
- Phần 430 Ngày học Rust - Day 4: Ownership - Khái niệm định hình cỗ thần khí Rust
- Phần 530 Ngày học Rust - Day 5: Khóa học nhặt đồ chung với References & Borrowing
- Phần 630 Ngày học Rust - Day 6: Đắp nặn dự án với Structs và Methods
- Phần 730 Ngày học Rust - Day 7: Quyền năng vô song của Enums và Pattern Matching
- Phần 830 Ngày học Rust - Day 8: Quản lý dự án với Packages, Crates và Modules
- Phần 930 Ngày học Rust - Day 9: Các bộ sưu tập chung (Vectors, Strings, Hash Maps)
- Phần 1030 Ngày học Rust - Day 10: Trị dứt điểm Ác mộng Lỗi (Error Handling)
- Phần 1130 Ngày học Rust - Day 11: Generics - Ma thuật Đa hình kiểu dữ liệu
- Phần 1230 Ngày học Rust - Day 12: Traits - Kẻ ban phát quyền năng và Lập pháp Hành vi
- Phần 1330 Ngày học Rust - Day 13: Vượt qua Boss cuối 'Lifetimes' - Sinh Mệnh Biến
- Phần 1430 Ngày học Rust - Day 14: Tận diệt Bug từ trứng nước bằng Automated Tests
- Phần 1530 Ngày học Rust - Day 15: Thực chiến Build Command Line App (CLI) đầu đời
- Phần 1630 Ngày học Rust - Day 16: Functional Magic chốn trần gian (Closures & Iterators)
- Phần 1730 Ngày học Rust - Day 17: Quyền năng của Smart Pointers
- Phần 1830 Ngày học Rust - Day 18: Chinh phục Da luồng (Concurrency) - Cú đâm quyết định của Rust
- Phần 1930 Ngày học Rust - Day 19: Tranh cãi Lập trình hướng đối tượng (OOP) trong Rust
- Phần 2030 Ngày học Rust - Day 20: Mổ xẻ nghệ thuật Advanced Pattern Matching
- Phần 2130 Ngày học Rust - Day 21: Sức mạnh tối thượng của Advanced Traits
- Phần 2230 Ngày học Rust - Day 22: Về Phe Bóng Tối với Unsafe Rust
- Phần 2330 Ngày học Rust - Day 23: Quyền năng của Đấng Tạo Hóa (Declarative Macros)
- Phần 2430 Ngày học Rust - Day 24: Siêu Năng Lực Procedural Macros (Macro Thủ Tục)
- Phần 2530 Ngày học Rust - Day 25: Xây dựng TCP Web Server Đa Luồng (Phần 1: Lõi Socket)
- Phần 2630 Ngày học Rust - Day 26: Xây dựng TCP Web Server Đa Luồng (Phần 2: Bắn trả File HTML)
- Phần 2730 Ngày học Rust - Day 27: Xây dựng TCP Web Server Đa Luồng (Phần 3: The Thread Pool)
- Phần 2830 Ngày học Rust - Day 28: Xây dựng TCP Web Server Đa Luồng (Phần 4: Graceful Shutdown)
- Phần 2930 Ngày học Rust - Day 29: Lên đỉnh Web Server Thực Chiến với Axum và Tokio
- Phần 3030 Ngày học Rust - Day 30: Vượt Vọng Vàng - Đúc Kết Hành Trình Rustacean Tinh Hoa
