- Từng học 5 năm tại một trường máy tính ở Pháp và làm lập trình viên freelance trong 20 năm
- Chủ yếu thực hiện các dự án cho khách hàng bằng Ruby on Rails
- Khi bắt đầu học Common Lisp, đã viết một giao thức quản lý máy chủ tạo parser ASN.1
- Phát triển máy chủ SNMP bằng cách sinh mã C từ Common Lisp
- Sau đó viết nhiều dự án dựa trên Common Lisp:
- cl-unix-cybernetics – dự án nhận được nhiều sao nhất trên GitHub
- Phát triển cl-streams và cffi-posix
- cl-facts – một triple store, đóng vai trò như cơ sở dữ liệu đồ thị Common Lisp
- Nhanh, có giao dịch nguyên tử, hỗ trợ giao dịch có thể lồng nhau
- Tương thích với
unwind-protect
- Chỉ cần học 3 macro là có thể sử dụng
- Đã trình bày tại European Lisp Symposium (ELS)
- Trong khi tập trung vào phát triển Common Lisp, tác giả đã mất khách hàng nhưng vẫn có niềm tin rất lớn vào tiềm năng của Lisp
Giới hạn của máy ảo (VM) và container
- Các chuyên gia đã chỉ ra những vấn đề của VM và container:
- VM làm lãng phí CPU và băng thông không cần thiết
- Container dựa trên cgroups của Linux tồn tại lỗ hổng thực thi lệnh từ xa (RCE) và leo thang đặc quyền
- Mỗi năm đều phát hiện các lỗ hổng bảo mật mới
- Tác giả ưa dùng OpenBSD và tránh được các vấn đề của công cụ DevOps như Terraform, Ansible
Giới hạn của Common Lisp và vấn đề hiệu năng
- Trong Clojure và các hệ thống tương tự, GC (garbage collector) gây ra vấn đề hiệu năng:
- Đã có trường hợp thất bại khi phát triển game chiến thuật xử lý hàng nghìn đơn vị
- GC của JVM kéo theo vấn đề về hiệu năng và chi phí
Quyết định chuyển sang C
- Nhận ra các giới hạn về hiệu năng và tính di động của Common Lisp:
- Linux, OpenBSD, GTK+, GNOME đều được viết bằng C
- Cuối cùng đã chuyển sang C để giải quyết vấn đề hiệu năng và tính di động
Phát triển ngôn ngữ mới KC3
- Phát triển thư viện tiện ích libc3 → ngôn ngữ C3 → đổi tên thành KC3
- Đặc điểm của KC3:
- Có trình thông dịch (ic3) và trình biên dịch (c3c)
- Tạo cấu trúc dữ liệu từ buffer UTF-8 và chuyển ngược lại
- Lập trình phòng thủ → giảm thiểu bug ngay từ đầu
- Không có vấn đề bảo mật
- Hệ kiểu dữ liệu dựa trên union gắn thẻ bằng enum
Thành quả dựa trên KC3
- Port cl-facts sang C89:
- Hoàn thành phát triển trong giai đoạn Covid-19
- Triển khai thêm triple, xóa, hệ thống truy vấn đệ quy, giao dịch, logging, persistence, v.v.
- Viết parser và generator cho các kiểu thuật toán:
- Bao gồm struct, linked list, map, hash table, số phức, tuple, code block, v.v.
- Nhận rất nhiều cảm hứng từ José Valim (người tạo ra Elixir)
- ikc3 – REPL in ra kết quả đánh giá của KC3
- kc3_httpd – phát triển máy chủ web dựa trên framework MVC
- Trang blog hiện tại cũng đang được phục vụ bằng kc3_httpd
- Xây dựng website tài liệu → sử dụng bộ chuyển đổi Markdown sang HTML của KC3
Kết luận
- Dựa trên những kinh nghiệm có được từ Common Lisp để chuyển sang C
- KC3 đạt được kết quả nổi bật về hiệu năng, bảo mật và tính di động
- Dự kiến sẽ tiếp tục cung cấp thêm macro và ví dụ liên quan đến KC3 trong tương lai
1 bình luận
Ý kiến trên Hacker News
Tôi có quan điểm ngược lại. Hồi nhỏ tôi dùng VB rất nhiều, sau đó học Java, C, C++ ở đại học và chủ yếu dùng C.
NULL, tranh chấp dữ liệuTôi hoàn toàn đồng cảm với cảm giác đó. Trong vài năm qua tôi luôn có một thôi thúc mạnh mẽ muốn phát triển thứ gì đó bằng C thuần
Tôi bắt đầu lập trình bằng C từ rất lâu trước đây, và đến giờ đôi khi vẫn muốn quay lại thời đó
Sau khi đọc bài blog, tôi thấy bối rối về điều tác giả muốn truyền đạt
Có đưa ra ví dụ mã kc3
C là ngôn ngữ đầu tiên của tôi, và tôi đã tạo các ứng dụng console đơn giản cùng những trò chơi nhỏ bằng nó
Thỉnh thoảng tôi viết code C như một sở thích. Nhưng có quá nhiều công việc lặp đi lặp lại nên rất chán
C thành công vì nó thực dụng
Tôi không hiểu gì cả
Bài viết này giống như một câu chuyện cảnh báo không có kết thúc có hậu