- Unison là một ngôn ngữ lập trình hàm được xây dựng trên cấu trúc nhận diện định nghĩa mã bằng nội dung (Hash) thay vì bằng tên, từ đó tái cấu trúc toàn bộ cách lưu trữ mã, quản lý phiên bản và triển khai
- Toàn bộ mã được lưu trong codebase (DB) thay vì tệp văn bản, và tên chỉ được xem như nhãn đơn thuần, nên các vấn đề như xung đột cùng tên/tệp và xung đột khi refactor được loại bỏ ở cấp cấu trúc
- Thông qua UCM (Unison Codebase Manager), có thể thêm, xóa, di chuyển, đổi tên định nghĩa, kiểm thử và chạy, đồng thời cung cấp hệ sinh thái công cụ cộng tác kết nối với LSP, UCM Desktop và Unison Share
- Bên cạnh các tính năng ngôn ngữ như hệ thống hiệu ứng dựa trên Abilities, tính toán trì hoãn và đối sánh mẫu theo cấu trúc, mô hình này còn mở rộng thành một cách tiếp cận tích hợp, nơi logic ứng dụng và triển khai đám mây (Cloud/BYOC) được định nghĩa cùng nhau trong một chương trình
- Nhờ cấu trúc dựa trên hash, các đặc tính như loại bỏ biên dịch trùng lặp, giảm xung đột phiên bản và truy vết tham chiếu tĩnh trở thành mặc định, đồng thời mang lại trải nghiệm phát triển phân tán nhất quán bao gồm Share, Cloud, Projects và hệ thống Branch
Tổng quan về ngôn ngữ Unison
- Quản lý định nghĩa theo cấu trúc content-addressable code, nên ngay cả khi cùng tên, nếu nội dung khác nhau thì chúng được xem là các định nghĩa hoàn toàn riêng biệt
- Không cần biên dịch lại, giảm thiểu xung đột khi API tiến hóa, bảo đảm ổn định tham chiếu hoàn toàn
- Codebase được duy trì dưới dạng DB dựa trên SQLite, nơi mã, tên và tài liệu đều được lưu dưới dạng dữ liệu
- Có thể khám phá cấu trúc bằng các lệnh UCM như
ls, view
- Tệp văn bản chỉ là giao diện để chỉnh sửa; nguồn chân lý duy nhất thực sự là DB
- Xung đột tên, xung đột khi merge tệp, quản lý cấu trúc repo đều bị thu hẹp thành các khái niệm đã lỗi thời
Tính năng ngôn ngữ
- Abilities: tính năng kiểm soát các hiệu ứng như IO, Exception bằng hệ thống kiểu
- Đối sánh mẫu theo cấu trúc: phân rã kiểu theo cấu trúc để xây dựng luồng điều khiển
- Tính toán trì hoãn (Delayed computations): biểu đạt tường minh việc đánh giá không nghiêm ngặt
- Cung cấp kiểu tĩnh mạnh + suy luận kiểu phong phú + kind-checking
Môi trường phát triển và toolchain
- UCM (Unison Codebase Manager)
- Tạo, xóa, đổi tên định nghĩa, kiểm thử và chạy
- Tích hợp quản lý phiên bản kiểu Git như project, branch, clone, merge ngay trong ngôn ngữ
- UCM Desktop
- Khám phá cấu trúc codebase, di chuyển giữa các định nghĩa bằng thao tác nhấp, dựng tài liệu
- Hỗ trợ LSP
- Có thể dùng các tính năng IDE trong hầu hết các trình soạn thảo phổ biến
- Unison Share
- Hub mã trung tâm: hosting project, tìm kiếm, review, đóng góp (=Pull Request), tìm kiếm theo kiểu
- Vì mọi định nghĩa đều dựa trên hash nên tham chiếu luôn có thể điều hướng như hyperlink
Mô hình triển khai: Unison Cloud & BYOC
- Viết logic ứng dụng + định nghĩa hạ tầng bằng cùng một ngôn ngữ rồi triển khai trực tiếp
- Cấu hình hệ thống phân tán chỉ bằng “mã”, không cần YAML, Helm hay các quy ước RPC phức tạp
- Với BYOC (Bring Your Own Cloud), có thể chạy stack Cloud ngay trên hạ tầng container riêng
- Bao gồm kho lưu trữ an toàn kiểu như OrderedTable, hỗ trợ Daemon và điều phối tự động
Ví dụ: Guessing Game
- Ví dụ CLI đơn giản sử dụng Abilities (IO, Exception)
- Các yếu tố ngôn ngữ như Random, console IO, đối sánh mẫu và tính toán trì hoãn được kết hợp một cách tự nhiên
Hệ sinh thái và cộng đồng
- Hỗ trợ đóng góp, review và tài khoản tổ chức thông qua Share
- Cung cấp tìm kiếm toàn bộ hệ sinh thái dựa trên kiểu và máy chủ MCP cho AI agent
- Đang dần triển khai C FFI
- Mở rộng các tính năng tăng năng suất cộng tác như trình xem diff kiểu Git và ghi chú branch
Lịch sử chính (tóm tắt)
- 2018: Thành lập Unison Computing
- 2019: Phát hành alpha đầu tiên
- 2021: Chuyển codebase sang SQLite (giảm kích thước 100x)
- 2021: Công bố Unison Share
- 2022~2024: LSP, Projects, Kind-checking, Pull Request, Cloud GA
- 2025: Ứng dụng Desktop, tối ưu runtime quy mô lớn, máy chủ MCP, hỗ trợ BYOC
- Tháng 11/2025: Phát hành chính thức Unison 1.0
FAQ
- Tại sao phải tạo ngôn ngữ mới?
- Mô hình mã dựa trên hash gần như không thể mang sang các ngôn ngữ hiện có dưới dạng tiện ích bổ sung
- Vì cách lưu trữ mã, quản lý phiên bản, triển khai và cộng tác đều được suy ra tự nhiên từ ý tưởng này, nên cần phải thiết kế thành một ngôn ngữ mới ngay từ đầu
- Trường hợp sử dụng thực tế?
- Toàn bộ Unison Cloud đang được viết và vận hành bằng chính Unison
- Đã hình thành workflow cấp độ thương mại cho cộng tác theo tổ chức/nhóm và phát triển ứng dụng phân tán
- Lo ngại về phụ thuộc nhà cung cấp: đây là ngôn ngữ mã nguồn mở, có thể tự do triển khai bằng Docker và hỗ trợ BYOC
- Cách cộng tác: hỗ trợ tổ chức, ticket, code review, PR..., và chỉ phát sinh xung đột ở cấp định nghĩa
- Quản lý phiên bản: không cần Git, cung cấp sẵn project, branch, push, pull, merge
- Không bị ràng buộc IDE: cung cấp máy chủ LSP nên có thể dùng nhiều trình soạn thảo khác nhau
- Tích hợp với ngôn ngữ khác: đang phát triển C FFI
- Truy cập codebase không có tệp: có thể khám phá cấu trúc bằng lệnh CLI (UCM) hoặc ứng dụng Desktop
1 bình luận
Ý kiến trên Hacker News
Tôi đã theo dõi Unison từ rất lâu rồi. Từ thời blog cá nhân của Paul cơ, nên cũng đã hơn 10 năm. Bản phát hành 1.0 này thực sự là một cột mốc lớn, nhưng thành thật mà nói tôi hơi thất vọng
Tôi rất thích ngôn ngữ lập trình nên cũng đã chứng kiến sự phát triển của những ngôn ngữ như Rust, Go, Zig, nhưng tôi cảm thấy Unison có sức lan tỏa hệ sinh thái chưa tương xứng với mức độ hoàn thiện này
Tôi nghĩ lý do chủ yếu là vì phần lớn tính năng được thiết kế theo một mô hình kinh doanh phụ thuộc vào cloud. Có tùy chọn BYOC nhưng vẫn chưa đủ. Cảm giác tổng thể vẫn có gì đó không ổn
Dự án Share là mã nguồn mở, và GitHub cũng có sự phụ thuộc thực tế, nhưng vẫn rất phổ biến.
Tôi không định phủ nhận những điểm này, chỉ là mong mọi người tự dùng thử và cảm nhận xem phần nào có thể giúp ích cho thiết kế ngôn ngữ khác
Nhưng phần lớn tài liệu học lại mặc định dùng hạ tầng cloud, nên trong môi trường offline thì gần như không biết đi tiếp thế nào.
Có lẽ vẫn có cách tiếp cận kiểu Unison cho việc này, nhưng lớp marketing đang che khuất con đường đó
Khi có người dùng trả tiền, sẽ có động lực để công nghệ giữ được tính thực tế và hữu dụng.
Nếu không có yếu tố thương mại thì có lẽ nó chỉ giống thêm một esolang nữa thôi. Giờ thì tôi định thử dùng nó cho dự án phụ
Trong tài liệu có nhắc đến Unison Share, nhưng cái này cũng được host trên unison-lang.org.
Có tùy chọn BYOC nhưng vẫn cần tài khoản unison.cloud và đăng ký trả phí. Những chỗ này đáng ra nên được nói rõ hơn trong marketing và tài liệu
Xin chào, tôi là một trong những đồng tác giả của ngôn ngữ Unison. Nếu có gì thắc mắc thì cứ hỏi gì cũng được
Unison là một trong những ngôn ngữ đầu tiên lấy algebraic effects (Abilities) làm tính năng chủ đạo.
Tôi nhớ hồi đầu mọi người chưa chắc tính năng này có được đón nhận tốt hay không, nên giờ tôi khá tò mò không biết bạn có hài lòng với kết quả hiện tại không.
Hệ thống effect có hòa hợp tốt với các phần khác của ngôn ngữ không, cú pháp có như ý không, và tôi cũng muốn nghe thêm những câu chuyện thú vị về triển khai nội bộ
Tài liệu liên quan: Unison Abilities
Chỉ lưu hash của biểu thức và giá trị “passed”, hay cũng có thể tính được hash của mọi giá trị.
Nếu là trường hợp sau thì có vẻ có thể mở rộng reproducible builds kiểu Nix hay Trustix.
Có lẽ hiện tại cơ chế cache chỉ xử lý các biểu thức đã bind, nhưng tôi nghĩ nó cũng có thể đóng vai trò như một cây cầu nối runtime với thế giới bên ngoài
Tuy vậy hiện giờ nó vẫn cho cảm giác như một lời giải đang đi tìm vấn đề.
Tôi muốn biết ngôn ngữ này hướng đến đối tượng nào, và ngoài Unison Cloud thì đã có nơi nào dùng trong production thực tế chưa
Lúc đầu tôi tưởng đây là ngôn ngữ dựa trên BEAM, nhưng thực ra nó chạy trên VM riêng.
So với các ngôn ngữ BEAM thì về mặt fault tolerance có những khác biệt gì, và những use case nào là nơi Unison phù hợp hơn?
Chúng có gọi tới cơ sở dữ liệu bên ngoài không, hay được triển khai bằng chính Unison.
Khi đặt cạnh abstraction Database thì đây là một tổ hợp rất thú vị, nhưng để hiểu trọn vẹn khái niệm này thì không hề dễ
Tôi xem Unison là một trong những ngôn ngữ thú vị nhất.
Tôi tin algebraic effects sẽ trở thành một khái niệm cốt lõi của thế hệ tiếp theo.
Ngoài ra Unison còn có rất nhiều ý tưởng hay.
Cá nhân tôi thấy nó cũng có thể rất hợp cho phát triển mod game.
Khi cần chạy mã không đáng tin cậy trên phía client, hệ thống ability của Unison có vẻ giúp tạo môi trường sandbox khá dễ.
Nó cũng có thể hữu ích cho việc triển khai ECS(Entity Component System).
Nếu có thể suy luận các ability mà một hàm cần, thì có lẽ còn có thể tự động đảm bảo an toàn khi chạy song song
Trên Cloud không thể dùng trực tiếp IO ability, mà chỉ cho phép những thứ như Http ability đã được kiểm soát an toàn.
Nhờ vậy người dùng không thể truy cập hệ thống tệp.
Tôi cũng đang hình dung cách tận dụng tính năng này cho phát triển game.
Người khác thậm chí có thể hiện thực ability dưới dạng native service để đóng góp cho game.
Link tham khảo: Unison Cloud, mã validateSandboxed, ví dụ ECS
Lần đầu tôi thấy dự án này, tôi đã nghĩ “không biết 5 năm nữa nó sẽ ra sao”, vậy mà thật sự từng ấy thời gian đã trôi qua.
Giờ được thấy bản phát hành 1.0 thì tôi rất vui
Việc biến một ngôn ngữ cấp tiến như thế này thành thứ có thể dùng được cả trong môi trường công nghiệp thực tế là một thành tựu lớn. Chúc mừng
Tôi nghĩ những hệ thống như Unison là tương lai của điện toán.
Nhưng tôi không biết tương lai đó sẽ đến khi nào.
Vẻ đẹp của kiểu hệ thống này là hạ tầng, dữ liệu và tầng dịch vụ đều nằm trong một hệ thống tích hợp thống nhất.
Có khi nó còn là nền tảng tốt hơn cho AI coding agent.
Tuy vậy, tôi nghĩ nó hợp với kiểu phát triển độc lập bền vững hơn là mô hình VC.
Một đội ngũ có thể tiếp tục theo đuổi dự án dài hạn như thế này thật đáng nể
Tôi còn nhớ ngày Rúnar nói rằng anh ấy sẽ bắt đầu Unison.
Tôi đã nghĩ đây là một dự án mở ra một mô hình hoàn toàn mới, và giờ nhìn thấy bản phát hành 1.0 thì thực sự rất tự hào.
Tôi hy vọng một ngày nào đó Unison sẽ trở thành ngôn ngữ chính của tôi
Tôi muốn trang web Unison có benchmark.
Cần biết đặc tính hiệu năng thì mới hình dung được nó phù hợp với việc gì.
Chỉ cần vài con số đơn giản như so sánh tốc độ xử lý request với Django, Express.js, ASP.NET cũng được.
Ý tưởng thì rất thú vị, nhưng tôi cũng mong sẽ có thêm các runtime target ngoài web.
Cá nhân tôi thấy thử một ngôn ngữ mới trong những thứ như công cụ CLI dễ hơn nhiều so với dự án web lớn
Tôi đã tham khảo bài viết review Unison đăng năm 2023, và thấy khá hữu ích
Ý tưởng thì thú vị, nhưng Unison là một cấu trúc all-in-one buộc phải tiếp nhận cùng lúc ngôn ngữ + quản lý mã nguồn + hosting.
Chỉ cần không thích một phần nào đó trong stack là rất khó dùng toàn bộ.
Vì vậy tôi nghĩ các ý tưởng kiểu này sẽ khó phổ biến rộng theo cách trực tiếp
Chất lượng tooling của bản thân ngôn ngữ rất cao, và cũng có thể tích hợp với các hệ thống hiện có.
Ví dụ Unison Cloud phần lớn được viết bằng Unison nhưng một phần vẫn dùng Haskell.
Thảo luận liên quan: HN thread1, HN thread2
Tôi nghĩ có giá trị rất lớn trong việc thiết kế nhiều công nghệ một cách hữu cơ để chúng phối hợp tốt với nhau