- Là một ngôn ngữ biên dịch kiểu tĩnh được viết bằng từ khóa tiếng Hàn, tạo ra binary native thông qua LLVM IR
- Cung cấp cả trình biên dịch và trình thông dịch được triển khai bằng Rust, đồng thời hỗ trợ build·chạy·REPL·LSP qua CLI
hgl
- Mọi từ khóa đều là tiếng Hàn như
함수, 만약, 반복, 변수, và tên biến cũng như tên hàm có thể được định nghĩa bằng tiếng Hàn
- Tích hợp các tính năng thực dụng như I/O tệp, JSON, HTTP, biểu thức chính quy, ngày/giờ, system call, và bao gồm 18 ví dụ
- Hiện thực hóa cấu trúc khoa học và sự lan tỏa văn hóa của Hangul trong một ngôn ngữ lập trình, được chú ý như một thử nghiệm mới kết hợp việc học tiếng Hàn với lập trình
Tổng quan về ngôn ngữ Han
- Han là một ngôn ngữ biên dịch kiểu tĩnh được viết bằng từ khóa tiếng Hàn, tạo ra binary native thông qua LLVM IR
- Bao gồm toolchain trình biên dịch và trình thông dịch tree-walking được viết bằng Rust
- Có thể chạy trình thông dịch, build, REPL và máy chủ LSP bằng lệnh
hgl
- Mọi từ khóa đều được cấu thành bằng Hangul, ví dụ:
함수, 만약, 반복, 변수, 출력
- Mục tiêu là hiện thực hóa hệ chữ cái khoa học của Hangul trong một ngôn ngữ lập trình, hướng tới sự kết hợp giữa vẻ đẹp ngôn ngữ và độ chính xác kỹ thuật
Tính năng chính
- Hỗ trợ từ khóa và định danh bằng Hangul: có thể viết tên biến, tên hàm, tên struct... bằng Hangul
- Hệ thống kiểu tĩnh: cung cấp 5 kiểu cơ bản là
정수, 실수, 문자열, 불, 없음
- Chế độ biên dịch và thông dịch: LLVM IR → clang → tạo binary hoặc chạy ngay lập tức
- REPL và máy chủ LSP: hỗ trợ chạy tương tác và hoàn thành mã bằng các lệnh
hgl repl, hgl lsp
- Tính năng tích hợp sẵn
- Mảng, struct, closure, pattern matching, xử lý ngoại lệ, generics
- I/O tệp, JSON, HTTP, biểu thức chính quy, ngày/giờ, system call
- Chuỗi định dạng, hash map, hàm toán học tích hợp
- Bao gồm 18 chương trình ví dụ: Hello World, gọi HTTP API, v.v.
Cài đặt và chạy
- Thành phần bắt buộc: Rust(1.70+), clang
- Quy trình cài đặt
- Cung cấp tiện ích mở rộng VS Code: hỗ trợ tô sáng cú pháp và LSP
- Lệnh CLI
hgl interpret <file.hgl> — chạy trình thông dịch
hgl build <file.hgl> — biên dịch thành binary native
hgl run <file.hgl> — biên dịch rồi chạy ngay
hgl repl — chế độ tương tác
hgl lsp — chạy máy chủ LSP
Trạng thái triển khai hiện tại
- Các tính năng hoạt động đầy đủ
- Kiểu dữ liệu, luồng điều khiển, hàm, chuỗi, mảng, hash map, struct, xử lý lỗi, kiểm tra kiểu
- JSON, HTTP, biểu thức chính quy, ngày/giờ, hệ thống, I/O tệp, hàm toán học, module, generics
- Các tính năng được triển khai một phần
- Khi dùng
hgl build, phần sinh mã cho closure·chuỗi·phương thức mảng vẫn chưa hoàn thiện
- Các tính năng chưa được triển khai
- Tính an toàn Null (không có kiểu
Option), xử lý bất đồng bộ/song song, garbage collection, tối ưu tail recursion
Hangul và lập trình
- Hangul là một hệ chữ cái khoa học biểu đạt trực quan cấu trúc âm vị, do Vua Sejong sáng tạo vào năm 1443
- Han phản ánh sự rõ ràng có tính cấu trúc của Hangul vào cú pháp mã nguồn
- Trên toàn thế giới hiện có hơn 16 triệu người đang học tiếng Hàn, và Han cung cấp một phương tiện học Hangul thông qua lập trình
- Ví dụ từ khóa
함수(function), 만약(if), 반복(for), 반환(return), 변수(variable), 출력(print), v.v.
Thiết kế và cấu trúc
- Pipeline trình biên dịch dựa trên Rust
- Lexer → Parser → AST → Interpreter / CodeGen → LLVM IR → clang → Binary
- Cấu trúc dự án
src/ — mã cốt lõi của trình biên dịch và trình thông dịch
editors/vscode/ — tiện ích mở rộng VS Code
- Bao gồm
examples/, spec/, tests/
- Lý do cho các lựa chọn thiết kế
- Đơn giản hóa việc build bằng tạo IR dạng văn bản thay vì LLVM C API
- Trình thông dịch ưu tiên thực thi nhanh, trình biên dịch ưu tiên hiệu năng
- Pattern matching và an toàn bộ nhớ của Rust rất phù hợp để hiện thực ngôn ngữ
Kiểm thử và giấy phép
- Chạy 46 bài kiểm thử bằng
cargo test (41 unit, 5 integration)
- Được phát hành theo giấy phép MIT
Ý nghĩa văn hóa
- Han là một ngôn ngữ thử nghiệm kết hợp vẻ đẹp của Hangul và độ chính xác của lập trình
- Nó đưa ra một cách tiếp cận mới phá bỏ ranh giới giữa ngôn ngữ và mã nguồn cho cả người học tiếng Hàn lẫn lập trình viên
11 bình luận
Nhờ vậy tôi đã có thêm được những thông tin hữu ích. GeekNews chọn lọc các tin tức cốt lõi nên mỗi ngày ghé thăm đều là một niềm vui. Bản thân tôi cũng đang phát triển một ngôn ngữ lập trình tiếng Hàn, nên tôi nhìn nhận rất tích cực việc những thử nghiệm như thế này tiếp tục được duy trì.
Từ góc nhìn của một người đã sống lâu năm ở nước ngoài và theo dõi những thay đổi của Hàn Quốc, tôi luôn thấy đáng tiếc khi tiếng Anh xâm nhập quá mức vào đời sống thường nhật và toàn bộ lĩnh vực công nghiệp. “Phương ngữ Pangyo”, những tên chung cư khó hiểu, các menu dị dạng kiểu MSGR, hay những biển hiệu đầy đặc tiếng Anh đều trông như đang làm suy yếu sức sống tự thân của ngôn ngữ chúng ta. Dù rào cản tiếng Anh đã thấp hơn nhờ giáo dục sớm, tính trực quan mà tiếng mẹ đẻ mang lại vẫn là điều không thể thay thế. Cũng giống như khi ở nước ngoài, một biển hiệu viết bằng Hangul đập ngay vào mắt, bộ não của chúng ta tiêu tốn ít năng lượng nhất khi xử lý tiếng mẹ đẻ.
print("Hello, world!");
xuất ra "Xin chào!"
Cái nào đập vào mắt và dễ thấm hơn?
AI đang phá bỏ rào cản ngôn ngữ, nhưng việc nghiên cứu ngôn ngữ lập trình tiếng Hàn là quá trình loại bỏ "lớp dịch" không cần thiết trong hệ thống tư duy của chúng ta để tối đa hóa hiệu suất não bộ. Việc
xuất ratạo cảm giác trực quan hơnprintlà điều hoàn toàn tự nhiên. Dù rất khó để ngay lập tức trở thành dòng chính vì tính phổ dụng hay logic của thị trường việc làm, tôi vẫn hy vọng trong tương lai sẽ xuất hiện nhiều ngôn ngữ tiếng Hàn đa dạng và hoàn thiện hơn nữa để làm phong phú hệ sinh thái.Bằng tiếng Hàn à... đúng là không thể ngừng được cái cảm giác rợn người khó tả này.
Nhớ lại dự án Seed nhỉ
Có vẻ như là một người đã làm công việc kế toán lâu năm chứ không phải phát triển phần mềm, vậy mà lại tạo ra được một compiler và còn nhận hơn 100 sao trên GitHub nữa..
Đúng là thời đại của AI đã đến rồi
Nghĩ đến việc viết code bằng
bất đồng bộ-chờthay vìasync-awaitthì đúng là thấy cũng tiện.Ngôn ngữ lập trình thì tính đa dụng mới là quan trọng..
Ồ, tuyệt quá.
Xin chào, một buổi sáng mạnh mẽ và tràn đầy năng lượng!
Wow
Ồ, thấy thứ như thế này trên Hacker News cũng thật tuyệt. Cảm ơn Đức Vua Sejong.
Ý kiến trên Hacker News
Nếu bạn quan tâm đến ngôn ngữ lập trình bằng tiếng Hàn, tôi đề xuất ngôn ngữ hàm
NuriLiên kết GitHub của Nuri
Nó không chỉ dừng ở mức dịch từ khóa, mà còn có thể phản ánh cấu trúc ngữ pháp tiếng Hàn thực sự vào mã
Ví dụ, nếu viết “chia 10 cho 5 rồi in ra” thì kết quả sẽ in ra “2”
Ngoài ra còn có một ngôn ngữ khác tên là
Yaksok. Mã ví dụ trò chơi 2048 được viết hoàn toàn bằng tiếng HànNurilẫnYaksokđều là những ngôn ngữ hợp lý và được thiết kế tốt, nhưng trước mắt tôi đang tập trung để người dùng tiếng Anh có thể tiếp cận phiên bản được chuyển sang Rust. Có vẻ như như vậy sẽ tạo ra một tập người dùng lớn hơnYaksokcó cùng từ nguyên với từ tiếng Nhật 約束(やくそく) hay khôngTôi nghĩ đây là một ý tưởng thực sự tuyệt vời. Hangul là một hệ chữ viết được thiết kế rất logic, nên có thể học trong nửa ngày buổi chiều
Câu trả lời trên StackExchange để học Hangul
Hangul có số lượng chữ cái tương tự tiếng Anh nên có thể học khá nhanh, nhưng việc ghi nhớ từ vựng thì khó hơn một chút. Vì vậy tôi đang dùng Anki cùng với ứng dụng học dạng trò chơi do chính tôi làm
Với tư cách là người bản ngữ tiếng Hàn, tôi muốn chia sẻ ngắn gọn một ý kiến
Danh từ được dịch khá tự nhiên, nhưng động từ mệnh lệnh trong tiếng Anh cần đặc biệt cẩn thận khi chuyển sang tiếng Hàn. Ví dụ, “find” có thể đổi thành
찾다,찾기,찾음..., nhưng tùy ngữ cảnh mà có thể trở nên gượng gạoSố nhiều cũng là một vấn đề. Tiếng Anh phân biệt số ít và số nhiều rất rõ, còn tiếng Hàn thì không. Nếu cố chỉ rõ số nhiều như “các từ” thì nhiều lúc lại trở nên thiếu tự nhiên
Nếu không chỉ thay từ khóa đơn giản mà còn tính đến khác biệt cấu trúc giữa tiếng Anh và tiếng Hàn, tôi nghĩ đây có thể trở thành một dự án mạnh hơn nhiều
Khi học khoa học máy tính ở đại học, tôi cảm thấy việc các ngôn ngữ lập trình dựa trên tiếng Anh là một lợi thế lớn cho người dùng tiếng Anh
Những người bạn du học sinh của tôi gặp khó khăn hơn khi học vì không quen với tiếng Anh. Vì thế câu đùa rằng lập trình nên được tính là tín chỉ ngoại ngữ nghe khá buồn cười
intlà viết tắt của integer thì cũng chẳng có vấn đề gìCái thực sự khó là học chính việc lập trình. Tuy vậy, việc các chủ đề nâng cao hay tài liệu chỉ có bằng tiếng Anh đúng là một rào cản lớn với người học ESL
Tôi không biết tiếng Hàn, nhưng nhờ chuỗi thảo luận này mà tôi học được khá nhiều góc nhìn ngôn ngữ học
Thiết kế âm vị học của Hangul (liên kết),
đặc điểm số nhiều trong tiếng Hàn (liên kết),
vấn đề nén token giữa tokenizer của LLM và tiếng Hàn (liên kết),
và nhịp điệu của bàn phím Hangul nơi phụ âm và nguyên âm được chia theo vị trí tay (liên kết) đều đặc biệt thú vị
Tôi nghĩ những thử nghiệm như thế này có thể dẫn đến sự phân mảnh ngôn ngữ (fragmentation).
Nếu ai cũng tạo ngôn ngữ lập trình bằng ngôn ngữ của riêng mình, thì việc cộng tác hay tuyển dụng sẽ trở nên khó khăn hơn, và việc chia sẻ công nghệ cũng sẽ vất vả hơn
Cá nhân tôi nghĩ nếu cả thế giới dùng một ngôn ngữ thì chiến tranh và hiểu lầm sẽ giảm đi. Dĩ nhiên sự đa dạng văn hóa sẽ giảm, nhưng hiệu quả giao tiếp sẽ tăng lên
Cách tiếp cận chỉ đơn giản là dịch từ khóa khá thú vị
Giống như trong ví dụ mã
nếu viết theo kiểu này thì mã có thể trở nên ngắn gọn hơn. Tuy vậy, ưu điểm của việc phân biệt chữ hoa chữ thường sẽ biến mất
Tôi từng nghe rằng, bất kể mật độ ngôn ngữ thế nào thì tốc độ xử lý thông tin cũng tương đương nhau
Bài blog liên quan
Nhưng nó không thành công. Vì hầu hết môi trường máy tính đã đòi hỏi nhập ký tự Latin, và việc nhớ vài từ khóa không khó
Handùng các từ tiếng Hàn thực sự (함수,만약...), nhưng nếu dùng các từ phiên âm như ví dụ펀크,아래이thì sẽ tạo cảm giác không tự nhiên với người dùng tiếng HànNgay cả trong thời đại LLM, phần lớn dữ liệu huấn luyện vẫn là mã tiếng Anh, nên mã tiếng Anh có lẽ vẫn hiệu quả hơn
Dự án rất tuyệt. Khoảng 190 năm trước(!) tôi từng học ở một trường đại học tại Hàn Quốc, và giờ chỉ còn biết tiếng Hàn ở mức cơ bản, nhưng khi nhìn mã ví dụ tôi có cảm giác như đang học thêm từ mới
Tôi thực sự thích dự án này. Nhìn các đoạn mã mẫu mà chẳng hiểu gì cả khiến tôi phần nào đồng cảm được cảm giác của các lập trình viên không dùng tiếng Anh khi lần đầu thấy một ngôn ngữ dựa trên tiếng Anh
Lisp thì vẫn là thiên đường dấu ngoặc như mọi khi :-)
Nó làm tôi nhớ đến Easy Programming Language của Trung Quốc
Liên kết wiki EPL
Khoảng 15 năm trước, rất nhiều trẻ em ở Trung Quốc đã học lập trình lần đầu bằng ngôn ngữ này