Elm 0.19.2 cải thiện tốc độ build
(elm-lang.org)- 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ến và hướ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
Đã 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 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
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
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
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
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
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
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
Đâ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
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
Đó 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
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 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
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
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?
Ý 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
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
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àoRấ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ạ
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
equatablevàhashablenhư thế nàoMộ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
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