- Kinh nghiệm 20 năm làm freelancer Ruby on Rails đã dẫn tới các dự án Common Lisp, nhưng khi các hạn chế về hiệu năng, tính khả chuyển và môi trường thực thi tích tụ, tác giả đã chọn quay lại với C
- cl-facts có kho lưu trữ triple nhanh và các transaction nguyên tử có thể lồng nhau, nhưng thời gian phát triển kéo dài cũng dẫn đến việc mất khách hàng
- Sự bất mãn với máy ảo, container dựa trên Linux cgroups và garbage collector dẫn tới nhận định rằng C vẫn là nền tảng thực tế cho phần mềm hệ thống
- Công việc khởi đầu từ libc3 đã mở rộng thành ý tưởng về ngôn ngữ C3, interpreter ic3 và compiler c3c; sau đó đổi tên thành KC3 do trùng tên
- Hiện KC3 bao gồm graph database được port sang C89, REPL ikc3, webserver MVC kc3_httpd, và cả trang tài liệu dựa trên một triển khai Markdown-to-HTML bằng C
Quá trình công việc Common Lisp dẫn đến việc viết lại bằng C
- Sau 5 năm học tại một trường máy tính ở Pháp và 20 năm làm lập trình viên freelance Ruby on Rails, Common Lisp, ban đầu tưởng chỉ cần học trong thời gian ngắn, dần trở thành một dự án lớn hơn nhiều
- Tác giả đã tạo mã C từ Common Lisp để xây dựng ASN.1 parser và hệ thống truy vấn, rồi công việc này mở rộng thành một SNMP server tùy biến chuyển từ Common Lisp sang C
- Sau đó, tác giả viết nhiều package Common Lisp
- cl-unix-cybernetics trở thành dự án nhận được nhiều sao nhất trong các repository GitHub của tác giả
- Cũng viết cl-streams và cffi-posix
- cl-facts là một triple store có thể dùng như graph database Common Lisp
- cl-facts là thành quả có hiệu năng nhanh, transaction nguyên tử, transaction có thể lồng nhau, tương thích với
unwind-protect, và dễ dùng vì chỉ cần học 3 macro - cl-facts được trình bày dưới dạng lightning talk tại European Lisp Symposium ở Bỉ, và slide thuyết trình nằm tại facts.pdf
- Việc phát triển các package Common Lisp mất nhiều thời gian và khiến tác giả mất khách hàng, nhưng tác giả đánh giá Common Lisp là công cụ dành cho các thế hệ tương lai
C, KC3 và cấu hình hiện tại
- Trải nghiệm rằng máy ảo lãng phí CPU và băng thông cho việc mô phỏng, còn trong container dựa trên Linux cgroups thì các vấn đề RCE và leo thang đặc quyền liên tục được phát hiện, đã dẫn tới lựa chọn tập trung vào OpenBSD
- Tác giả tránh các công cụ DevOps như Terraform, Ansible, và cũng thấy có những người bất mãn không chỉ với VM và container mà cả với chính ngôn ngữ lập trình
- Một trường hợp cố làm game chiến thuật bằng Clojure, nơi hàng nghìn đơn vị mỗi đơn vị có nhận thức riêng về thế giới, đã thất bại vì garbage collector
- Các dự án Common Lisp cũng bị giới hạn phạm vi áp dụng vì garbage collector, còn garbage collector của JVM được đánh giá là một thế mạnh thương mại đòi hỏi chi phí lớn để làm tốt
- Xét về hiệu năng và tính khả chuyển, tác giả cho rằng nếu không có công cụ riêng thì lựa chọn hợp lý là C
- Linux được viết bằng C
- OpenBSD được viết bằng C
- GTK+ được viết bằng C thuần hướng đối tượng
- GNOME được viết bằng C
- Nhiều ứng dụng desktop Linux cũng được viết bằng C cũ
- Từ thư viện tiện ích libc3, công việc phát triển thành ý tưởng về ngôn ngữ C3, interpreter ic3 và compiler c3c
- Tác giả làm cho buffer UTF-8 và cấu trúc dữ liệu trao đổi nhanh với nhau, đồng thời chấp nhận chi phí bộ nhớ để áp dụng bounds-check
- Tác giả đặt defensive programming lên hàng đầu, định hướng giảm bug xuống 0 ngay từ đầu, và cho biết mã KC3 chạy mà không có hàm ý bảo mật
- Interpreter ban đầu được xây dựng theo dạng xử lý trong REPL các tags, tức enum-tagged union chứa mọi kiểu dữ liệu của ngôn ngữ
- Sau 3 năm, tác giả hoàn tất refactor 5 tầng, toàn bộ test lại vượt qua, và webserver cũng trở lại trạng thái không còn bị hỏng
- Tên ngôn ngữ được đổi thành KC3 vì C3 đã được dùng
- Graph database Common Lisp hiện có, cl-facts, được port sang C89
- Phần lớn được viết trong thời gian phong tỏa Covid-19 năm 2020
- Bao gồm thêm/xóa triple, hệ thống truy vấn đệ quy, transaction, logging và persistence
- Triển khai gần như nguyên vẹn thiết kế gốc bằng Common Lisp sang C89
- KC3 cũng bao gồm parser và generator để xử lý ngữ nghĩa hình thức của nhiều kiểu dữ liệu thuật toán
- Bao gồm Structs, Linked lists, Maps, Hash tables, Time, Complex, Rationals, Tuples, Code blocks, Quotes, Unquotes, Copy on write, Skip lists, Sets, v.v.
- Có macro, và các ví dụ sẽ được đề cập trong bài viết tiếp theo
- Lấy nhiều cảm hứng từ José Valim và công việc với Elixir
- REPL ikc3 phân tích input từ bàn phím hoặc file và xuất kết quả đánh giá KC3 ra stdout; nó được dùng cho phần lớn giai đoạn 2 của unit test KC3
- kc3_httpd là một webserver có MVC framework và hiện đang tạo các trang web
- Bài viết về Common Lisp đạt 700 lượt xem, và website tài liệu được viết bằng kc3_httpd cùng một triển khai Markdown-to-HTML bằng C đã được mở rộng
Chưa có bình luận nào.