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

Chuyển sang Elixir

  • Ở công việc mới, Elixir được sử dụng làm ngôn ngữ backend chính.
  • Trước đó không có kinh nghiệm với Elixir hay Erlang, nhưng nhờ cú pháp tương tự Ruby nên học khá dễ.
  • Tránh được vấn đề quản lý trạng thái của ngôn ngữ hướng đối tượng, đồng thời tận hưởng lợi ích của tính bất biến và lập trình hàm.

Ưu điểm của Elixir

  • Mã có trạng thái có thể thay đổi thì khó bảo trì.
  • Elixir hỗ trợ DSL như Ruby, nhưng dùng macro ở thời gian biên dịch để sinh mã lúc chạy.
  • Ngay cả khi không viết test, vẫn có thể phát hiện lỗi dùng macro ở thời gian biên dịch.

Cú pháp và biểu thức

  • Cú pháp pipeline của Elixir rất hay, nhưng tác giả thích toán tử threading của Clojure hơn.
  • Thông qua biểu thức with, có thể tách các hàm phức tạp thành phần luồng thành công và phần xử lý lỗi.

Xử lý ngoại lệ

  • Trong Ruby, việc dùng ngoại lệ cho luồng điều khiển là khá phổ biến.
  • Trong Elixir, thay vì ngoại lệ, người ta dùng monad Result / Either để dùng okerror làm giá trị trả về.

Ý kiến của GN⁺

Điều quan trọng nhất trong bài viết này là niềm vui khi lập trình với Elixir và sự dễ dàng trong bảo trì. Việc giải quyết bài toán quản lý trạng thái phức tạp của ngôn ngữ hướng đối tượng, đồng thời nâng cao độ ổn định và khả năng đọc mã nhờ tính bất biến và lập trình hàm, là điểm rất đáng chú ý. Đặc biệt, hệ thống macro có thể phát hiện lỗi ngay ở thời gian biên dịch mang lại cho lập trình viên một môi trường viết mã ổn định hơn. Những đặc điểm này cũng sẽ khiến cả các kỹ sư phần mềm mới vào nghề cảm nhận được sức hấp dẫn của việc học Elixir.

1 bình luận

 
GN⁺ 2023-11-11
Ý kiến Hacker News
  • Mối quan tâm đến ngôn ngữ Elixir đã tăng lên trong vài tuần gần đây thông qua các video YouTube.

    • Elixir hấp dẫn với những ai thích các ý tưởng của Erlang, nhưng trải nghiệm sử dụng thực tế lại có phần khá lạ.
    • Có cái nhìn tích cực về các tiến trình cô lập và truyền thông điệp (Actors) như tương lai của lập trình phân tán.
    • Thích tính năng pattern matching, nhưng hoài nghi về những thứ "ma thuật" như LiveView và LiveBook của Elixir.
    • Cảm thấy xa lạ với các thuật ngữ và khái niệm đặc trưng của Elixir như GenServers.
    • Nhận thức được rủi ro của một cộng đồng nhỏ, nhưng vẫn khen ngợi những thành tựu mà cộng đồng đạt được.
    • Bày tỏ kỳ vọng vào việc triển khai hệ thống kiểu.
  • Nhấn mạnh sự dễ dàng của các tác vụ nền là một ưu điểm lớn của Elixir/Erlang.

    • Qua kinh nghiệm ở công ty cũ, nhận ra rằng dùng Task trong Elixir cho phép xử lý yêu cầu HTTP mà không làm máy chủ bị dừng.
  • Nhấn mạnh sức mạnh của ngôn ngữ thông qua bài nói chuyện "The Soul of Erlang and Elixir" của Sasa Juric.

  • Chia sẻ kinh nghiệm đã dùng Erlang từ năm 1991.

    • Dù đã thử nhiều ngôn ngữ khác, Erlang vẫn là ngôn ngữ mang lại nhiều niềm vui nhất.
    • Có kế hoạch tiếp tục dùng Erlang cho đến khi nghỉ hưu.
  • Việc học và sử dụng Elixir mang lại niềm vui, đồng thời bày tỏ sự hài lòng với sự gọn gàng và tính năng của BEAM/OTP.

  • Nhấn mạnh ưu điểm của Elixir là sự thú vị giống Ruby, đồng thời loại bỏ các nhược điểm của lập trình hướng đối tượng bằng tính bất biến và đặc tính hàm.

    • Hy vọng có thêm hệ thống kiểu để cải thiện khả năng hiểu các codebase lớn.
  • Chỉ ra sự hiểu lầm về việc dùng exception làm luồng điều khiển trong Ruby.

  • Với tư cách là người dùng F#, bày tỏ rằng Elixir gây cảm giác khó hiểu.

    • Chữ ký hàm không cung cấp thông tin kiểu nên khó dùng trong các thư viện lớn.
    • Đặt câu hỏi về những điểm hấp dẫn chính của Elixir.
  • Từ kinh nghiệm dùng Elixir, nhấn mạnh các ưu điểm như dễ học, pattern matching và dữ liệu bất biến.

    • Đã trải nghiệm việc nó đặc biệt phù hợp khi xây dựng hệ thống CQRS.
    • Khen ngợi độ ổn định của BEAM và cách GenServer xử lý lỗi.
  • Cảnh báo về cái nhìn quá lạc quan ở giai đoạn đầu đối với công nghệ mới.

    • Khuyến nghị nên chia sẻ trải nghiệm sau khi đã thực sự dùng trong thời gian dài.