● Research09.11.2026 · 05:261 nguồn
parse_number() dưới dạng một SQLite extension: C so với Rust
Theo simonwillison.net
Nghiên cứu: parse_number() dưới dạng một SQLite extension: C so với Rust. Tác giả chia sẻ rằng khi đang đi dạo với chó, họ nảy sinh sự tò mò về việc viết một SQLite C extension để thêm hàm parse_number() sẽ dễ hay khó. Hàm này dùng để chuyển đổi các chuỗi như -$1,234,56 hoặc '12,5%' thành các giá trị số có thể cộng dồn và sắp xếp. Tác giả đã dùng Claude chat thông thường (Opus 5.5) và đưa ra prompt: Tôi đang nghĩ về một hàm tùy chỉnh SQLite 'parse_number(value)' có khả năng loại bỏ ',', '$', '£' và '%', xử lý dấu '-' ở đầu, và trả về 'NULL' cho bất kỳ thứ gì không thể phân tích được. Hãy Explore sự khác biệt giữa việc xây dựng tính năng này dưới dạng một SQLite extension bằng C so với Rust - tôi muốn so sánh hiệu suất, độ phức tạp của mã và kích thước của file .so (hoặc tương đương) kết quả. Điều này đã cung cấp một điểm khởi đầu vững chắc - extension bằng Rust có kích thước 321 KB (dùng Rusqlite) và 298 KB (dùng sqlite-loadable-rs), trong khi SQLite C extension chỉ nặng 14 KB. Tuy nhiên, extension bằng Rust lại nhanh hơn! Hóa ra nguyên nhân là do hàm tương đương với strtod của C trong Rust nhanh gấp đôi.