1 điểm bởi GN⁺ 2024-06-13 | 1 bình luận | Chia sẻ qua WhatsApp

Elixir v1.17 ra mắt: kiểu tập hợp lý thuyết, Duration lịch, hỗ trợ Erlang/OTP 27

Cảnh báo kiểu tập hợp lý thuyết dần dần

  • Elixir v1.17 giới thiệu kiểu tập hợp lý thuyết có thể suy luận kiểu từ pattern và dùng chúng để kiểm tra kiểu của chương trình.
  • Hệ thống kiểu này giúp tìm ra lỗi và bug trong codebase mà không cần thay đổi phần mềm hiện có.
  • Hiện tại, các nhà phát triển chỉ có thể tương tác với hệ thống kiểu này thông qua cảnh báo.
  • Các cảnh báo chính:
    • Pattern matching với khóa không tồn tại
    • Truy cập vào khóa không tồn tại
    • Gọi hàm ở nơi không phải module
    • Khi gọi hàm ẩn danh, lại gọi một giá trị không phải hàm
    • So sánh giữa các struct
    • So sánh giữa các kiểu không giao nhau
    • Pattern matching nhị phân không hợp lệ
    • Cố gắng rescue một struct exception chưa được định nghĩa
    • Truy cập vào trường chưa được định nghĩa trong exception đã được rescue

Hỗ trợ Erlang/OTP

  • Elixir v1.17 hỗ trợ Erlang/OTP 27 và ngừng hỗ trợ Erlang/OTP 24.
  • Các nhà phát triển Elixir được khuyến nghị chuyển sang Erlang/OTP 26 trở lên.
  • Các tính năng chính của Erlang/OTP 27:
    • Thêm module json
    • Thêm nhãn tiến trình (proc_lib:set_label/1)

Kiểu dữ liệu Duration mới và hàm dịch chuyển ngày tháng

  • Elixir v1.17 giới thiệu kiểu dữ liệu Duration cùng API để dịch chuyển ngày, giờ và ngày giờ theo một khoảng thời gian cho trước.
  • Ví dụ:
    iex> Date.shift(~D[2016-01-31], month: 2)
    ~D[2016-03-31]
    
  • Duration là thành phần thiết yếu để mô hình hóa khoảng thời gian, sự kiện lặp lại và lịch trình.
  • Với DateTime, Elixir xử lý đúng các thay đổi múi giờ.

Các thay đổi đáng chú ý khác

  • Thêm các hàm mới Keyword.intersect/2,3.
  • Thêm profiler Mix mới mix profile.tprof.
  • Thêm guard Kernel.is_non_struct_map/1.
  • Logger của Elixir định dạng báo cáo gen_statem và bao gồm nhãn tiến trình của Erlang/OTP 27.

Ý kiến của GN⁺

  • Kiểu tập hợp lý thuyết: Hệ thống kiểu này có thể giúp ích rất nhiều trong việc nâng cao độ ổn định và độ tin cậy của mã nguồn. Đặc biệt hữu ích trong các dự án quy mô lớn.
  • Hỗ trợ Erlang/OTP 27: Việc hỗ trợ phiên bản Erlang/OTP mới nhất mang lại nhiều lợi ích về hiệu năng và tính năng.
  • Kiểu dữ liệu Duration: Tính năng dịch chuyển ngày tháng có xét đến múi giờ và lịch rất hữu ích cho các ứng dụng như quản lý lịch trình.
  • Giới hạn của hệ thống kiểu: Hiện tại vẫn chưa thể phân tích kiểu vượt qua ranh giới hàm, nên điểm này cần được cải thiện trong các bản cập nhật tương lai.
  • Sản phẩm cạnh tranh: Khi so sánh với các ngôn ngữ khác có hệ thống kiểu tĩnh như TypeScript, cách tiếp cận của Elixir mang lại tính an toàn kiểu trong khi vẫn giữ được sự linh hoạt của ngôn ngữ động.

1 bình luận

 
GN⁺ 2024-06-13
Ý kiến Hacker News
  • Đội ngũ Elixir và Erlang đã đạt được những thành quả xuất sắc trong vài năm gần đây. Đóng góp từ các tác giả thư viện và sách cũng rất lớn. Theo dõi các commit của Elixir và OTP luôn khiến tôi thấy hứng thú. Xin cảm ơn tất cả những người liên quan.

  • Tôi đã có trải nghiệm vừa hiệu quả vừa thú vị với một dự án phụ dùng Elixir cho backend. Tôi đánh giá rất cao năng suất mà LiveView mang lại, nhưng nó không phù hợp khi kết nối mạng không ổn định. Elixir vẫn đủ thú vị để sử dụng ngay cả khi tách khỏi LiveView.

  • Tôi đang phát triển full-stack cho startup của mình bằng Elixir, và đây là công nghệ tuyệt vời nhất tôi từng dùng. Tôi đang lan truyền những điểm mạnh của Elixir tới bạn bè. Mong rằng RabbitMQ và client sẽ hoạt động trên OTP 27.

  • Xin cảm ơn công việc tuyệt vời của các nhà phát triển Elixir và Erlang. Tôi hy vọng cái cớ "không có type" sẽ biến mất để Elixir được chấp nhận rộng rãi hơn. Chúc họ tiếp tục đạt nhiều thành quả tốt đẹp.

  • Tôi đã đọc về Elixir suốt 10 năm và rất yêu ngôn ngữ này. Nhưng tôi đã từ bỏ việc tìm công việc liên quan đến Elixir vì mức lương thấp hơn so với các ngôn ngữ phổ biến. Lương và một sản phẩm thú vị quan trọng hơn tech stack. Dù vậy, theo dõi Elixir từ xa vẫn rất vui.

  • Tính năng hay nhất của bản phát hành này là việc bổ sung get_in/1. Ví dụ, trong get_in(struct.foo.bar), nếu foo trả về nil thì việc truy cập bar cũng sẽ không gây lỗi.

  • Bản phát hành này là mảnh ghép cuối cùng mà tôi mong muốn. Tôi rất mong chờ những bước tiếp theo. Tôi nghĩ ngôn ngữ này giờ đã hoàn thiện chức năng 100%.

  • Tôi rất kỳ vọng vào hệ thống type. Tôi nhớ José từng mô tả đây là một "hệ thống type dần dần". Điều đó có nghĩa là nó sẽ được bổ sung theo từng giai đoạn. Tôi tự hỏi ở bước tiếp theo sẽ có thêm tính năng nào liên quan đến hệ thống type. Tôi đặc biệt mong chờ các tối ưu hóa compiler mới.

  • Tôi cực kỳ phấn khích với bản phát hành này. Mong sẽ có thêm nguồn lực được đầu tư cho plugin Elixir trên IntelliJ. Tôi không thích dùng VSCode.

  • Tôi muốn biết có ai hiểu "set-theoretic types" nghĩa là gì không. Tôi rất quan tâm đến ngôn ngữ lập trình, nhưng đây là lần đầu tiên tôi nghe thuật ngữ này.