0

[Open Source] #245 - mq (mqlang): Ngôn ngữ truy vấn Markdown chuyên sâu với kiến trúc Rust, cơ chế suy diễn kiểu (Type Inference) và hệ sinh thái LSP/Wasm tích hợp

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:

image.png

⚡ 4. Các kỹ thuật "Pro-level" trong mã nguồn

  1. 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 type hoặc Record 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.
  2. 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ết if (is_string(x)), hệ thống sẽ tự động hiểu x là 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.
  3. 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.
  4. 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).


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí