Trong kỷ nguyên của các mô hình ngôn ngữ lớn (LLM), Markdown đã trở thành ngôn ngữ giao tiếp chuẩn giữa người và máy. Tuy nhiên, việc trích xuất và biến đổi dữ liệu từ các file Markdown phức tạp thường yêu cầu các script Regex rườm rà và dễ lỗi. mq ra đời như một cuộc cách mạng trong xử lý văn bản, cung cấp một ngôn ngữ truy vấn mạnh mẽ (tương tự jq nhưng dành cho Markdown) cho phép người dùng lọc, biến đổi và định dạng lại tài liệu thông qua các đường ống (pipes) dữ liệu tinh vi.
Dưới góc độ kỹ thuật, mq là một minh chứng xuất sắc về việc ứng dụng Kiến trúc trình biên dịch (Compiler Architecture) bằng Rust, kỹ thuật Suy diễn kiểu Hindley-Milner và khả năng triển khai đa nền tảng thông qua WebAssembly.
Github: https://github.com/v8u7/mq
🛠️ 1. Nền tảng công nghệ: Hiệu năng thực thi cực đại với Rust
mq được xây dựng để xử lý các kho tài liệu khổng lồ với tốc độ tính bằng mili giây:
- Logic Core (Rust 1.93+): Toàn bộ engine xử lý được viết bằng Rust, đảm bảo an toàn bộ nhớ tuyệt đối và hiệu suất thô vượt trội so với các công cụ viết bằng Python hoặc Node.js.
- Parsing Engine (Nom): Sử dụng thư viện
nomđể xây dựng bộ phân tích cú pháp (Parser) tổ hợp. Kỹ thuật này giúp mq có khả năng phân tích các biểu thức truy vấn phức tạp với độ chính xác cao và thông báo lỗi rõ ràng. - Universal Platform (Wasm & FFI): Thông qua
wasm-bindgen, mq có thể chạy trực tiếp trên trình duyệt hoặc tích hợp vào hệ sinh thái JavaScript. Ngoài ra, nó hỗ trợ C-FFI để làm nhân xử lý cho các ngôn ngữ như Elixir, Python hay Go. - Rich Diagnostics (Miette): Tích hợp
mietteđể cung cấp trải nghiệm chẩn đoán lỗi tương đương với trình biên dịch Rust, giúp người dùng dễ dàng sửa các lỗi cú pháp trong câu lệnh truy vấn.
🏗️ 2. Trụ cột kiến trúc: Compiler-like Pipeline
Kiến trúc của mq không phải là một bộ lọc văn bản đơn thuần mà được thiết kế như một trình biên dịch hoàn chỉnh:
- Multi-crate Monorepo: Hệ thống được chia nhỏ thành các crate chuyên biệt:
mq-lang: Bộ thông dịch (Interpreter) và các hàm built-in.mq-hir: Biểu diễn nội bộ mức cao phục vụ phân tích ngữ nghĩa.mq-check: Hệ thống kiểm tra kiểu dữ liệu tĩnh độc lập.- Typed Structured Text: mq coi Markdown là một cây thực thể (Abstract Syntax Tree) gồm các Node (
Heading,TableCell,CodeBlock). Điều này cho phép thực hiện các phép toán logic trên cấu trúc thay vì văn bản thô. - LSP Service: Cung cấp Language Server chuẩn công nghiệp, mang lại tính năng Autocomplete và Kiểm tra lỗi thời gian thực ngay trong VS Code hoặc Vim.
🔄 3. Workflow: Luồng xử lý từ Truy vấn đến Văn bản kết quả (Sequence Diagram)
Sơ đồ mô tả quy trình mq chuyển đổi một câu lệnh truy vấn thành hành động trên tài liệu Markdown:
⚡ 4. Các kỹ thuật "Pro-level" trong mã nguồn
- Hindley-Milner Type Inference: mq-check thực hiện suy diễn kiểu tự động cho các truy vấn. Nó có thể xác định rằng kết quả của một phép toán là
Union typehoặcRecord type, ngăn chặn các lỗi runtime khi thực hiện biến đổi dữ liệu phức tạp. - Type Narrowing (Thu hẹp kiểu): Một kỹ thuật cao cấp trong trình biên dịch (
narrowing.rs). Khi người dùng viếtif (is_string(x)), hệ thống sẽ tự động hiểuxlà kiểu string trong khối đó, cho phép gọi các hàm xử lý chuỗi mà không cần ép kiểu thủ công. - Row Polymorphism: Hỗ trợ xử lý các bản ghi (Records) có cấu trúc không cố định (thường gặp trong các bảng Markdown), cho phép truy vấn linh hoạt trên các cột dữ liệu mà vẫn đảm bảo tính an toàn.
- Incremental Parsing for LSP: Bộ máy phân tích cú pháp được tối ưu để chỉ xử lý các phần mã thay đổi khi người dùng đang gõ, đảm bảo phản hồi của IDE luôn ở mức dưới 10ms.
⚖️ 5. So sánh chiến lược
| Tiêu chí | mq (mqlang) | jq | Regex / Sed |
|---|---|---|---|
| Đối tượng xử lý | Markdown (Strucutred) | JSON | Văn bản thô |
| Hệ thống kiểu | Tĩnh (Type Inference) | Động | Không có |
| Tính an toàn | Rất cao | Trung bình | Thấp |
| Giao tiếp AI | Cực tốt (Tương thích AST) | Tốt | Kém |
| Mở rộng | Plugin nhị phân (mq-) |
Không | Không |
✅ Kết luận: Tại sao mq là tương lai của xử lý văn bản số?
mq chứng minh rằng ngay cả những tệp văn bản "tự do" như Markdown cũng cần được quản trị một cách có cấu trúc và an toàn. Bằng cách áp dụng các nguyên lý của Ngôn ngữ lập trình hiện đại vào bài toán xử lý văn bản, dự án đã tạo ra một công cụ vô giá cho các kỹ sư dữ liệu, người viết tài liệu và đặc biệt là các hệ thống AI Agents cần tương tác sâu với tri thức Markdown.
Đối với các kỹ sư Backend và Compiler, nghiên cứu mq mang lại giá trị về:
- Kỹ thuật xây dựng DSL hiệu năng cao bằng Rust.
- Cách triển khai Type System cho các kiểu dữ liệu phi cấu trúc.
- Tư duy thiết kế công cụ CLI đa mục tiêu (Wasm/FFI/Binary).
