1 điểm bởi GN⁺ 5 giờ trước | 2 bình luận | Chia sẻ qua WhatsApp
  • Elm 0.19.2 là bước đầu tiên trong hướng đưa các cải tiến trình biên dịch vào Elm qua nhiều bản phát hành nhỏ trước khi tiến tới Elm 1.0
  • Với các codebase Elm quy mô lớn, biên dịch từ đầu được đo ở mức 5,7 giây, còn các bản build tăng dần sau đó ở mức dưới 350ms, giảm khả năng làm gián đoạn mạch tập trung khi phát triển
  • Cải tiến lần này tập trung vào việc giảm cấp phát trong quá trình parsing; trong thử nghiệm 850.000 dòng, lượng sao chép của GC giảm 20%, mức dùng bộ nhớ tối đa giảm 10%, và tốc độ tổng thể tăng 7%
  • Trong các thử nghiệm trên dự án thực tế, mức cải thiện khác nhau; một trường hợp biên dịch 351 module từ đầu giảm từ 4,981 giây xuống 2,595 giây, nhanh hơn 1,9 lần
  • Các ý tưởng về hiệu năng và ngôn ngữ từ công việc trên Acadia sẽ được lần lượt đưa vào dưới dạng các bản phát hành không phá vỡ tương thích, sau các bước hoàn thiện cuối cùng rồi tiến tới Elm 1.0

Biên dịch nhanh hơn trong Elm 0.19.2

  • Elm 0.19.2 là bản phát hành đầu tiên đưa các cải tiến trình biên dịch đã tích lũy vào Elm theo từng phần nhỏ
  • Trình biên dịch nhanh giúp giảm tình huống lập trình viên chuyển sang tab trình duyệt và mất tập trung
    • Nếu biên dịch tăng dần ở mức dưới 400ms, gần như không còn khoảng trống để chuyển sang việc khác
  • Hiệu năng trên cơ sở mã Elm 850.000 dòng như sau
    • Biên dịch từ đầu: 5,7 giây
    • Build tăng dần: dưới 350ms
  • Thay đổi thực tế tập trung vào giảm cấp phát trong quá trình parsing
    • Lượng sao chép của GC giảm 20%
    • Mức dùng bộ nhớ tối đa giảm 10%
    • Tốc độ tổng thể tăng 7%
  • Với các chương trình trên 500.000 dòng, có thể kỳ vọng mức cải thiện vừa phải; với các chương trình nhỏ hơn, trình biên dịch Elm nhìn chung vẫn rất nhanh
  • Trong thử nghiệm ở môi trường thực tế, mức cải thiện khác nhau tùy dự án
    • Một số dự án chỉ cải thiện nhẹ
    • Trường hợp biên dịch 351 module từ đầu giảm từ 4,981 giây xuống 2,595 giây, cải thiện 1,9 lần
  • Có thể tải phiên bản mới tại bản phát hành Elm compiler 0.19.2

Các bản phát hành tiếp theo hướng tới Elm 1.0

  • Những ý tưởng thu được từ công việc trên trình biên dịch liên quan đến cơ sở dữ liệu có tên Acadia dự kiến cũng sẽ được sử dụng trong Elm
    • Acadia hiện đang ở trạng thái alpha riêng tư
    • Việc chia sẻ công khai dự kiến diễn ra vào cuối năm nay
  • Các ý tưởng sẽ đưa vào Elm bao gồm cả cải tiến hiệu năng lẫn tính năng ngôn ngữ
    • Ví dụ: parser nhanh hơn
    • Ví dụ: kiểu equatable, hashable
  • Những thay đổi này dự kiến sẽ được đưa vào qua một loạt bản phát hành nhỏ không phá vỡ tương thích để tích hợp tự nhiên vào Elm
  • Ở giai đoạn hoàn thiện cuối cùng, kế hoạch là chuyển sang Elm 1.0
  • Người dùng mới làm quen với Elm có thể bắt đầu bằng ví dụ trực tuyếnhướng dẫn
  • Elm 0.19.2 là bản phát hành vá lỗi nên các dự án hiện có có thể tải phiên bản mới về và dùng ngay

2 bình luận

 
Các ý kiến trên Hacker News
  • Dạo này tôi xem Elm gần với một ngôn ngữ nghiên cứu có ảnh hưởng lớn hơn
    Nó có trọng tâm rõ ràng, không có roadmap công khai hay hỗ trợ chính thức, và ban lãnh đạo dường như hầu như không quan tâm đến việc xây dựng cộng đồng hay core team
    Dù vậy, trải nghiệm làm việc với nó thật sự rất tốt, và kết quả là đã có nhiều fork cùng dự án phái sinh xuất hiện. Tại hội nghị Gleam gần đây, Louis Pilfold đùa rằng “người dùng Elm mỗi người tự duy trì compiler của mình”, nhưng thực tế là có ít nhất 6 cái, và tháng trước còn có thêm 2 cái được công bố
    Thật mừng khi Evan đang tiến tới 1.0, và hy vọng sau khi gọi Elm là “đã hoàn thiện”, một trong các dự án kế thừa có thể đảm nhận việc khó là hợp nhất các fork và phát triển cộng đồng
    Cá nhân tôi nếu lần tới tìm thứ gì đó giống Elm thì sẽ xem Gleam + Lustre. Sự kết hợp giữa cộng đồng và maintainer quan tâm đến thiết kế trông khá tốt, và nó chạy được cả ở frontend lẫn backend

    • Quỹ đạo của Elm khá kỳ lạ, nhưng gọi nó là ngôn ngữ nghiên cứu thì có vẻ đúng
      Đã có một thời nó được truyền bá rất nhiệt tình, có nhiều bài blog và bài thuyết trình, cùng mức độ hào hứng và áp dụng khá đáng kể
      Rồi tác giả gần như biến mất và dự án đứng lại
      Dĩ nhiên đó là dự án của họ nên họ có quyền làm vậy, nhưng tôi nghĩ lẽ ra ngay từ đầu cần đặt kỳ vọng tốt hơn. Việc truyền bá tích cực đã giúp lan tỏa ý tưởng, nhưng cũng khiến các developer cảm thấy như đột nhiên bị bỏ rơi
    • Điểm hay nhất của Elm là nó mang đậm cảm giác giống Haskell. Vài năm trước tôi đã làm vài thứ thú vị bằng Elm
      Điểm hay thứ hai là triết lý “nếu compile được thì sẽ chạy”. Thành thật mà nói, trong phần lớn Rust cũng có cảm giác tương tự. Cảm giác Haskell thì ít hơn, nhưng vẫn có chút bóng dáng ấm áp của các tổ tiên functional
    • Gren trông như một người kế thừa đủ năng lực, cộng đồng cũng sôi nổi và rất sẵn lòng giúp đỡ
    • Tôi cũng là một trong số đó. Tôi đã mở rộng ngôn ngữ để thêm nhiều tính năng tiện lợi, và về bản chất đã hỗ trợ dependency injection thông qua một kênh lỗi phù hợp cùng union type có thể bị xóa
      Elm là một ngôn ngữ tốt, nhưng Evan thật sự có vẻ không quan tâm đến việc tạo ra thứ thực sự hữu ích, và toàn bộ cách vận hành ngôn ngữ thì lộn xộn
    • Có lẽ vì Elm quá tốt nên mọi người thất vọng với sự đình trệ của nó. Nhưng chính sự đình trệ đó cũng là lý do khiến Elm tốt
  • Năm 2023 tôi đã viết một bài về vì sao vẫn dùng Elm
    https://taylor.town/elm-2023
    Bây giờ là năm 2026, tôi vẫn tiếp tục dùng Elm vì những lý do đó :)
    Thêm nữa, Claude có vẻ rất hợp với Elm
    https://taylor.town/diggit-000

  • Khoảng 2 năm trước, tôi đã thử vibe coding bằng ChatGPT để làm một game Snake chạy trên trình duyệt bằng Elm, ngôn ngữ tôi thích
    Khi đó nó còn khá thô, và tôi kết luận rằng các mô hình ngôn ngữ lớn có thể giết chết Elm
    Giờ tôi đang dùng Elm trong production, và các mô hình ngôn ngữ lớn đã tốt hơn nhiều. Ngược lại, tôi nghĩ Elm hiện là ngôn ngữ lý tưởng cho các mô hình ngôn ngữ lớn, nên thậm chí có thể làm tăng mức độ adoption. Vì nó đơn giản hơn hầu hết các ngôn ngữ, ổn định, và trong ngôn ngữ đã có sẵn một kiến trúc rất có quan điểm, nên các codebase trở nên rất giống nhau

    • Nhờ AI, tôi cũng mê âm nhạc hơn, đã mua bàn phím MIDI và thiết lập hẳn một phần mềm DAW đúng nghĩa
      Tôi cũng làm nhiều thứ hơn bằng Rust và đọc tài liệu Rust nhiều hơn. Các mô hình ngôn ngữ lớn không nên trở thành cái cớ để không học chính thứ mình đang dùng; nếu vậy thì là kỹ sư tệ
      Các mô hình ngôn ngữ lớn giúp ta có thêm thời gian để nghiên cứu và học nhằm có thể bảo trì kết quả nhận được. Khi hiểu vấn đề, bạn cũng viết prompt tốt hơn
    • Nói rằng các mô hình ngôn ngữ lớn có thể làm tăng adoption của Elm vừa đúng vừa không đúng
      Cuối cùng còn tùy Elm xuất hiện nhiều đến đâu trong dữ liệu huấn luyện và RLHF. Tôi đồng ý rằng các framework hay ngôn ngữ có cấu trúc khiến các codebase giống nhau hơn, nên dễ sinh mã hơn
      Nhưng chỉ vậy là chưa đủ, và adoption của developer thường là một câu chuyện phức tạp hơn nhiều
    • Có thể đã cải thiện, nhưng tôi từng rất thất vọng khi thấy các agent như Claude Code liên tục vấp ở khoảng trắng có ý nghĩa của Elm
      Nó xử lý Python rất tốt nên điều đó thấy khá lạ, và Elm thuộc nhóm ổn định nhất trong các ngôn ngữ hiện đại. Ổn định đến mức người ta còn phàn nàn rằng nó không thay đổi. Tuy nhiên lần cuối tôi thử là khoảng 1 năm trước, nên tôi nghĩ bây giờ có thể đã khá hơn
    • Góc nhìn đó hợp lý. Tôi chưa từng nghĩ theo cách đó, nhưng nếu hệ sinh thái không tiến lên thì tôi nghĩ mình vẫn sẽ do dự
  • Các hạn chế liên quan đến JavaScript đã được giải quyết chưa? Theo tôi nhớ, để tích hợp với JavaScript thì phải dùng cơ chế Ports của Elm, và có vẻ họ không cho viết wrapper trực tiếp
    Tôi nhớ hình như cũng từng có tranh cãi khi ai đó fork để có thể tự viết wrapper JavaScript trực tiếp hoặc FFI

    • FFI phần lớn vẫn được xử lý bằng ports. Ở phía view thì đôi khi dùng web component
      Đây là lựa chọn có chủ đích, và nhiều khả năng sẽ được giữ đến 1.0, tất nhiên là cả sau đó nữa
  • Tôi không biết dự án này vẫn còn sống. Không có ý mỉa mai, nhưng tôi tưởng nó đã kết thúc rồi

    • Dự án đã từng chết. Bản phát hành trước đó là 7 năm trước, và sau khi người sáng lập ngừng bảo trì, cộng đồng không vượt qua được mô hình BDFL nên nó cứ dừng lại như vậy
      Vì thế nó đã chết, và giờ có thể xem là vừa mới hồi sinh. Tôi hiểu là trong thời gian đó cộng đồng đã teo tóp đi nhiều
    • Tôi không tham gia sâu vào cộng đồng, nhưng có biết những người tham gia lúc đó, và theo cách tôi hiểu thì việc loại bỏ toán tử trung tố tùy chỉnh đã khiến dự án mất rất nhiều sự ủng hộ của cộng đồng
      Đó là một tính năng rất được ưa chuộng, nhưng bị loại bỏ chỉ vì người sáng lập ngôn ngữ không thích, dù cộng đồng đã mạnh mẽ yêu cầu giữ lại
      Về mặt kỹ thuật có lẽ đó là quyết định đúng, nhưng về mặt xã hội thì rất không được lòng và tôi nghĩ có lẽ là quyết định sai
    • Rất vui khi thấy nó quay lại. Elm luôn có một sự thanh nhã đáng kinh ngạc khiến tôi muốn ủng hộ
    • Trong 2 năm qua tôi đã dùng Elm một cách chuyên nghiệp tại một công ty rất có lợi nhuận và rất gọn nhẹ
      Trước khi vào làm tôi không biết Elm, nhưng nhờ có kinh nghiệm với React, Redux, v.v. nên học khá nhanh
      Cộng đồng Elm có lẽ sẽ gọi đây là một tính năng. Trong số code React viết 6–8 năm trước, ngày nay có bao nhiêu phần vẫn chạy hoàn toàn y như cũ trong toolchain React hiện tại?
      Hệ giá trị hoàn toàn khác. Code React tốt của năm 2026 trông giống như code Elm vẫn biên dịch được từ sau năm 2016
    • Tôi cũng từng nghĩ cộng đồng quanh Elm về cơ bản đã biến mất. Dù vậy, có vẻ người bảo trì duy nhất kiêm người sáng lập vẫn còn đó
      Tôi chưa từng dùng Elm ngoài các tutorial, nhưng gần đây tôi đã xây dựng một ứng dụng full-stack bằng Gleam và chủ yếu tận dụng các coding agent. Ban đầu tôi kiểm soát cấu trúc code khá nghiêm, và quá trình đó khá hợp với tôi
  • Tôi tò mò về sau Elm 0.19 hơn là Elm 1.0. 0.19 là phiên bản chặn mọi native module không được tác giả Elm chính thức phê duyệt, và theo tôi điều đó trên thực tế đã đánh dấu hồi kết của Elm

  • Khó nghĩ ra một thông báo tệ hơn thế này cho con đường tới 1.0. Ai quan tâm chứ? Nếu không có localization hay hỗ trợ accessibility thì gọi một UI framework là 1.0 sẵn sàng cho production là vô lý
    Tôi cho rằng việc giới hạn phạm vi mà các contributor bên thứ ba có thể kết nối với API trình duyệt đã giết chết động lực của Elm, ngoại trừ các dự án đồ chơi
    Giờ nó trông giống một sandbox để Evan nghịch các ý tưởng về compiler hơn là thứ dùng cho production

    • Tôi nghĩ nói vậy không chính xác. Ứng dụng Elm mà tôi bảo trì được localize hoàn toàn, và tôi nghĩ accessibility cũng khá ổn
      Localization được xử lý bằng cách có một record lớn cho từng ngôn ngữ rồi truyền nó tới từng phần của ứng dụng dùng chuỗi. Với số nhiều hay các trường hợp đặc thù theo ngôn ngữ, có thể đặt các hàm đơn giản trong record, rất tiện
      Accessibility đạt được bằng cách kết hợp HTML tốt, ports, và web component cho các trường hợp phức tạp như autocomplete typeahead
    • Cứ để họ làm thôi. Những người thật sự hiểu sẽ nhận ra khi nó sẵn sàng, còn những người chạy theo trào lưu thì dù sao cũng không cứu được
    • Một mặt, tôi vui khi thấy Evan vẫn ổn. Anh ấy có khá nhiều ý tưởng hay về phát triển ngôn ngữ, và Elm đã truyền cảm hứng cho nhiều dự án rất thú vị
      Mặt khác, sau 7 năm không có gì, rồi tung ra một cải thiện hiệu năng compiler nhỏ và gọi đó là “con đường tới 1.0” thì hơi kỳ. Không có ác ý, nhưng để làm gì? Nó đã chết rồi, đã được thương tiếc xong rồi, và mọi người đã rời đi từ lâu
      Tôi không nghĩ nhiều người sẽ quan tâm cho đến khi có một bản phát hành thật sự đáng kinh ngạc
  • Evan đang chỉ vào một thứ, nhưng có vẻ mọi người chỉ nhìn vào ngón tay. Tôi nghĩ chuyện này thực ra không phải về chính Elm, mà là về việc chuẩn bị cho Acadia
    Trong bài nói Economics of Programming Languages của anh ấy https://www.youtube.com/watch?v=XZ3w_jec1v8, anh ấy hé lộ một chút về thứ đã làm trong 7 năm qua. Đó là một ngôn ngữ truy vấn áp dụng các ý tưởng hàm
    Anh ấy chỉ ra những ranh giới trong ứng dụng web nơi thông tin kiểu thường bị phá vỡ: giữa ngôn ngữ và kho lưu trữ, và giữa kho lưu trữ và truyền tải
    Nếu có thể bảo toàn thông tin kiểu qua các ranh giới đó thì ta được gì? Một trong những câu trả lời anh ấy đưa ra là migration dễ hơn. Thay vì viết SQL bằng tay, có thể xử lý bằng chênh lệch kiểu
    Vì vậy tôi nghĩ câu hỏi đúng là liệu ta có thể nhìn vào các thay đổi đưa vào Elm để suy ra Acadia sẽ trông như thế nào không. Biên dịch tăng dần sẽ mang lại gì cho một ngôn ngữ truy vấn?

    • Xét lịch sử của Elm, vì sao chúng ta phải tin rằng Arcadia sẽ không đi vào vết xe đổ?
      Ý tưởng dù hay đến đâu, nếu Arcadia không có một mô hình phát triển hướng cộng đồng và có tầm nhìn tương lai hơn, sẽ không ai chấp nhận dùng nó. Cùng lắm nó sẽ chỉ là “dự án đã truyền cảm hứng cho XYZ”
      Evan có thể nghĩ đây là điều lớn lao tiếp theo, và có thể anh ấy đúng, nhưng tôi không biết thế giới hậu-Elm có còn đủ lắng nghe hay không
  • Họ đã rút lại chuyện chỉ cho đội Elm dùng một số tính năng ngôn ngữ nhất định chưa? Quyết định đó trông như đủ sức giết chết một ngôn ngữ

  • Có đúng không khi cho rằng Elm đã mất rất nhiều đà? Giờ gần như không còn được thảo luận trên HN nữa, và tôi tự hỏi liệu đó có phải một trong những lý do khiến khoảng cách giữa các bản phát hành và tin tức lại dài như vậy không
    Nhìn vào khoảng cách phát hành, 0.19.2 “Faster builds, and the Road to Elm 1.0” là tháng 7 năm 2026, còn 0.19.1 “Friendly syntax hints, faster builds” là tháng 10 năm 2019

 
Các ý kiến trên Lobste.rs
  • Ồ! Elm 0.19.1 ra mắt ngày 21/10/2019, vậy là đã 7 năm trước rồi, và đó cũng là tin tức công khai cuối cùng về việc phát triển Elm
    Thật vui khi thấy dự án có tin mới

    • Thật sự rất mong chờ việc Evan đang lên kế hoạch cho bản phát hành v1
    • Tôi cũng vào đây để nói điều này
      Tôi đã rất thích khi dùng Elm cho một dự án phụ, nhưng nhìn từ bên ngoài thì cộng đồng có vẻ hơi im ắng. Đây là tin rất đáng mong đợi
  • Elm đã khiến việc phát triển web trở nên thú vị
    Rất mong xem 1.0 sẽ mang lại điều gì

  • Đây thật sự là một bất ngờ dễ chịu
    Tôi luôn thích tính ổn định của Elm, và có vẻ 1.0 cũng sẽ không tạo ra những thay đổi quá mạnh tay; cá nhân tôi thấy đó là hướng đi tốt

    • Thay đổi phá vỡ tương thích được mô tả có vẻ có thể gây ảnh hưởng khá lớn
      Nếu == và các toán tử tương tự không còn nhận mọi kiểu nữa, sẽ có khá nhiều mã Elm cần chỉnh sửa. Tôi tò mò quy trình nâng cấp sẽ như thế nào
  • Rất vui khi thấy có bản cập nhật Elm
    Một ngôn ngữ lập trình không có bản cập nhật nào trong nhiều năm là hơi khác thường. Tôi hiểu lý do, nhưng nhận thức của công chúng là một thứ khá kỳ lạ

    • Đúng vậy, đặc biệt là trong frontend, nơi mọi thứ chuyển động với tốc độ điên rồ
  • Tin này hay đấy
    Thỉnh thoảng tôi lại xem lại Elm như một khoảng nghỉ dễ chịu khỏi sự điên cuồng của phát triển frontend hiện đại

  • Tôi đã có dịp xem bài nói của Evan tại ZuriHac 2026, và thật sự bất ngờ khi anh ấy úp mở rằng sẽ có bản phát hành Elm mới
    Hy vọng video sẽ sớm được đăng, nhưng có vẻ anh ấy đã hiểu rằng cách tiếp cận nhắm tới sự ổn định không hợp lắm với nỗi ám ảnh về tiến bộ nhanh của ngành này. Theo cách tôi hiểu, Elm có thể sẽ đi những bước nhỏ hơn và nhanh hơn. Tôi rất háo hức, và bài nói đó khiến tôi nhớ Elm rất nhiều

  • Tôi tò mò Elm sẽ xử lý các tính năng nổi bật hơn như kiểu equatablehashable như thế nào
    Một trong những lựa chọn thiết kế gây tranh luận của ngôn ngữ này là tránh các tính năng hệ thống kiểu theo phong cách Haskell mạnh hơn như typeclass. Cá nhân tôi luôn thấy bất tiện khi ngay cả các kiểu tùy chỉnh có thứ tự tự nhiên và được định nghĩa rõ ràng cũng không thể dùng làm khóa dictionary. Dù vậy, nhìn chung đây vẫn là tin tốt khi công việc với Elm vẫn tiếp tục

    • Có lẽ không nên kỳ vọng quá nhiều vào các tính năng kiểu typeclass
      Dựa trên cách diễn đạt trong bài blog, tôi đoán có lẽ chỉ là thêm vài biến kiểu ràng buộc mới bên cạnh các biến kiểu ràng buộc hiện có, tức number, appendable, comparable, compappend