2 điểm bởi GN⁺ 2023-12-07 | 1 bình luận | Chia sẻ qua WhatsApp

Vì sao Jepsen được viết bằng Clojure?

  • Jepsen được xây dựng để kiểm thử các hệ thống đồng thời, chủ yếu là cơ sở dữ liệu.
  • Cấu trúc dữ liệu bất biến của Clojure và khả năng hỗ trợ đồng thời xuất sắc giúp việc viết chương trình đồng thời đúng đắn trở nên dễ dàng hơn.
  • Cần hỗ trợ nhiều client cơ sở dữ liệu khác nhau, và Clojure có khả năng tương tác rất tốt với Java.

Lựa chọn ngôn ngữ cho việc kiểm thử

  • Cần một ngôn ngữ ngắn gọn và linh hoạt, phù hợp với công việc kiểm thử mang tính thử nghiệm.
  • Clojure ngắn gọn và cung cấp tính linh hoạt về cú pháp thông qua hệ thống macro.
  • Với các bài kiểm thử xử lý cấu trúc dữ liệu phức tạp, cấu trúc dữ liệu của Clojure và các hàm trong thư viện chuẩn là cực kỳ phù hợp.

Hiệu năng và độ ổn định

  • Cần một ngôn ngữ có hiệu năng "đủ tốt"; Clojure tương đối chậm hơn Java nhưng chênh lệch hiệu năng có thể được giải quyết.
  • Các công cụ profiling xuất sắc của JVM tương thích rất tốt với Clojure.
  • Clojure cho thấy độ ổn định cao cả ở nền tảng JVM lẫn trong chính ngôn ngữ, với mức độ xuống cấp nhanh của thư viện thấp.

Nhược điểm và quyết định

  • Clojure có nhược điểm là cộng đồng kỹ sư nhỏ và không có một hệ thống kiểu tĩnh được chấp nhận rộng rãi.
  • Vì Jepsen được duy trì và sử dụng bởi một nhóm nhỏ, những nhược điểm này không phải là vấn đề lớn.
  • Sau khi tạo nguyên mẫu Jepsen bằng Clojure, tác giả cho rằng đây là một sự đánh đổi khá tốt.

Ý kiến của GN⁺

  • Lý do quan trọng nhất khiến Jepsen được viết bằng Clojure là nhờ cấu trúc dữ liệu bất biến và khả năng hỗ trợ đồng thời mạnh mẽ của Clojure, khiến nó phù hợp để kiểm thử các hệ thống cơ sở dữ liệu đồng thời phức tạp.
  • Bài viết này có thể thú vị với những ai quan tâm đến kỹ thuật phần mềm, đặc biệt là lập trình đồng thời và hệ thống cơ sở dữ liệu, đồng thời cung cấp một ví dụ thực tế về việc lựa chọn ngôn ngữ lập trình cụ thể có thể ảnh hưởng thế nào đến một dự án thực tế.

1 bình luận

 
GN⁺ 2023-12-07
Ý kiến Hacker News
  • Một người dùng đã sử dụng Clojure và ClojureScript suốt 10 năm nhấn mạnh các ưu điểm của Clojure như khả năng viết mã miền nghiệp vụ trong tệp .cljc để biên dịch cho cả phía máy chủ lẫn máy khách, hiệu năng và khả năng tái sử dụng của transducer, cũng như tính ổn định và khả năng tương thích ngược lâu dài của Clojure.
  • Về các vấn đề của hệ sinh thái Clojure, có ý kiến cho rằng mức độ dễ tiếp cận và khả năng sử dụng của công cụ bị phân hóa cực đoan, và nếu có thêm các công cụ hoặc framework dễ dùng hơn thì Clojure sẽ được chấp nhận rộng rãi hơn.
  • Một lập trình viên chỉ dùng Clojure trong 7 năm cho biết điều khiến họ không hài lòng nhất là thiếu một hệ thống kiểu mạnh, và cho rằng Clojure mang lại nhiều sức mạnh hơn cho những nhà phát triển yêu thích Ruby hoặc Python.
  • Một nhóm phát triển bằng Clojure và ClojureScript nhắc đến tính dễ tiếp cận của Clojure và ưu điểm của quy trình làm việc với REPL, đồng thời cho biết việc dùng Babashka/nbb cho các dự án hay tác vụ nhỏ là rất hữu ích.
  • Người mới học Clojure cảm thấy các trạng thái lỗi của công cụ khá khó hiểu, đồng thời đánh giá cao những ý tưởng đổi mới trong hệ sinh thái Clojure nhưng cho rằng vẫn cần cải thiện cách dùng dấu ngoặc và xử lý nil.
  • Có ý kiến chỉ ra rằng mong muốn gần như mang tính giáo điều trong cộng đồng Clojure về việc phối hợp các thư viện có thể làm chậm tốc độ làm việc của các nhóm phát triển web thực tế, và nhắc đến nhu cầu về một framework web dễ sử dụng hơn.
  • Một số ý kiến xem cộng đồng kỹ sư nhỏ của Clojure và việc thiếu hệ thống kiểu tĩnh là nhược điểm, trong khi lại coi khả năng tương tác với Java là thế mạnh.
  • Một người dùng Clojure chỉ ra rằng thông báo lỗi của Clojure và sự thiếu hụt type hint là vấn đề, đồng thời than phiền về sự khó khăn khi refactor mã nguồn quy mô lớn.
  • Có bình luận giới thiệu một trang hướng dẫn tương tác dành cho người mới học Clojure.
  • Một người dùng nói rằng dù họ thích Clojure, cuối cùng họ vẫn rút ra bài học rằng với các ứng dụng hiện đại phức tạp, hệ sinh thái mới là yếu tố quan trọng.