1 điểm bởi GN⁺ 2026-01-19 | 1 bình luận | Chia sẻ qua WhatsApp
  • Kip là một ngôn ngữ lập trình thử nghiệm tích hợp cách ngữ pháp và thức (mood) của tiếng Thổ Nhĩ Kỳ vào hệ thống kiểu, nhằm khám phá sự kết hợp giữa hình thái học ngôn ngữ tự nhiên và lý thuyết kiểu
  • Ngôn ngữ này phản ánh biến cách danh từ và hòa âm nguyên âm của tiếng Thổ Nhĩ Kỳ vào cấu trúc mã, phân biệt quan hệ giữa các đối số hàm bằng hậu tố cách và hỗ trợ thứ tự đối số linh hoạt
  • Các tính năng chủ chốt của ngôn ngữ hàm hiện đại như pattern matching, kiểu đa hình, kiểu dữ liệu quy nạp, hiệu ứng nhập/xuất được biểu đạt dưới hình thức ngữ pháp tiếng Thổ Nhĩ Kỳ
  • Dự án được build bằng bộ phân tích hình vị FomaHaskell Stack, đồng thời cung cấp môi trường chạy trên trình duyệt dựa trên WASM và tính năng bộ nhớ đệm bytecode (.iz)
  • Đây là một dự án nghiên cứu và giáo dục cho thấy điểm giao thoa giữa ngôn ngữ học và thiết kế ngôn ngữ lập trình, như một thử nghiệm về khả năng thiết kế ngôn ngữ dựa trên ngôn ngữ tự nhiên

Tổng quan về Kip

  • Kip là một ngôn ngữ lấy tên từ từ tiếng Thổ Nhĩ Kỳ ‘kip’ (thức), là một ngôn ngữ thử nghiệm đưa cách ngữ pháp tiếng Thổ Nhĩ Kỳ vào hệ thống kiểu
    • Tích hợp biến cách danh từ (ismin halleri)hòa âm nguyên âm (vowel harmony) của tiếng Thổ Nhĩ Kỳ vào thiết kế ngôn ngữ lập trình
    • Đây là dự án phục vụ mục đích nghiên cứu và giáo dục, không phải ngôn ngữ để triển khai thực tế
  • Có cung cấp hướng dẫn bằng tiếng Thổ Nhĩ Kỳ và tiếng Anh để học cách viết chương trình Kip
  • Cú pháp và hành vi hiện vẫn ở giai đoạn thử nghiệm, nên có thể thay đổi trong tương lai

Đặc điểm ngôn ngữ

  • Dùng cách ngữ pháp tiếng Thổ Nhĩ Kỳ làm kiểu
    • Hỗ trợ 8 cách: chủ cách, đối cách, dữ cách, định vị cách, ly cách, sở hữu cách, công cụ cách và sở hữu ngôi
    • Mỗi cách được biểu thị bằng hậu tố, giúp phân biệt rõ ràng quan hệ giữa các đối số hàm
  • Thứ tự đối số linh hoạt
    • Vì hậu tố cách làm rõ quan hệ đối số, nên đảo thứ tự đối số vẫn giữ nguyên ý nghĩa
    • Ví dụ: (5'le 3'ün farkını) yaz.(3'ün 5'le farkını) yaz. cho ra cùng một kết quả
  • Định nghĩa kiểu dữ liệu quy nạp
    • Định nghĩa kiểu dữ liệu đại số bằng cú pháp tiếng Thổ Nhĩ Kỳ
    • Ví dụ:
      Bir doğal-sayı
      ya sıfır
      ya da bir doğal-sayının ardılı
      olabilir.
      
  • Hỗ trợ kiểu đa hình
    • Có thể định nghĩa cấu trúc dữ liệu generic
    • Ví dụ: định nghĩa kiểu danh sách ở dạng (öğe listesi)
  • Pattern matching
    • Dùng hậu tố điều kiện -sa/-se để thực hiện pattern matching
    • Hỗ trợ pattern lồng nhau, binder và wildcard (değilse)
  • Định nghĩa hằng số
    • Khai báo hằng số có tên bằng từ khóa diyelim
    • Ví dụ: sıfırın ardılına bir diyelim.
  • Xử lý nhập/xuất và hiệu ứng
    • Dùng hậu tố -ip/-ıp/-up/-üp cho thực thi tuần tự, và olarak để binding
    • Ví dụ:
      selamlamak,
        isim olarak okuyup,
        ("Merhaba "yla ismin birleşimini) yazmaktır.
      
  • Kiểu cơ bản
    • Số nguyên (tam-sayı): hỗ trợ các phép toán như toplamı, farkı, çarpımı
    • Chuỗi (dizge): cung cấp uzunluğu, birleşimi, tam-sayı-hali
    • Nhập/xuất: hỗ trợ các lệnh yazmak, okumak
  • Chú thích và literal
    • Chú thích: (* ... *)
    • Literal: có kèm hậu tố cách như trong dạng "merhaba"'yı yaz.

Cài đặt và chạy

  • Công cụ cần thiết
    • Foma: bộ công cụ phân tích hình vị trạng thái hữu hạn
    • Stack: công cụ build Haskell
  • Cách build
    • Chạy script install.sh hoặc build thủ công bằng lệnh stack build
    • Bao gồm bộ chuyển đổi TRmorph trong vendor/trmorph.fst
  • Thực thi
    • REPL: stack exec kip
    • Chạy tệp: stack exec kip -- --exec path/to/file.kip
    • Cài vào PATH: stack install

WASM Playground

  • Thư mục playground/ chứa bản build để chạy trên trình duyệt
    • kip-playground được biên dịch sang wasm32-wasi
    • Có thể chạy Kip trong trình duyệt bằng HTML/JS harness
    • Quy trình build chi tiết xem tại playground/README.md

Bộ nhớ đệm bytecode (.iz)

  • Kết quả kiểm tra kiểu của mỗi tệp .kip được cache và lưu thành tệp .iz
    • Nếu mã nguồn hoặc phụ thuộc không thay đổi thì sẽ tái sử dụng cache
    • Nếu xóa tệp .iz thì hệ thống sẽ phân tích lại và kiểm tra kiểu lại từ đầu
    • Có kèm hash của compiler nên sẽ tự động vô hiệu khi phiên bản thay đổi

Chương trình ví dụ

  • Bao gồm ví dụ về định nghĩa số tự nhiên, khai báo hằng số, hàm cộng và in kết quả
    Bir doğal-sayı
    ya sıfır
    ya da bir doğal-sayının ardılı
    olabilir.
    
    sıfırın ardılına bir diyelim.
    birin ardılına iki diyelim.
    ikinin ardılına üç diyelim.
    
    (bu doğal-sayıyla) (şu doğal-sayının) toplamı,
      bu sıfırsa,
        şu,
      öncülün ardılıysa,
        (öncülle) (şunun ardılının) toplamıdır.
    
    (ikiyle üçün toplamını) yaz.
    

Cấu trúc dự án

  • app/ : điểm vào CLI (Main.hs)
  • src/Kip/ : gồm AST, cache, interpreter, parser, renderer, type checker
  • lib/ : các module cơ bản (giriş.kip, temel.kip, temel-liste.kip v.v.)
  • tests/ : các ca kiểm thử thành công (succeed/) và thất bại (fail/)
  • vendor/ : bộ chuyển đổi hình vị trmorph.fst

Kiểm thử

  • Chạy bằng lệnh stack test
    • tests/succeed/: các kiểm thử phải thành công
    • tests/fail/: các kiểm thử phải thất bại

Phân tích hình vị

  • Kip dùng TRmorph để phân tích hình vị tiếng Thổ Nhĩ Kỳ
    • Với các từ đa nghĩa (ví dụ: “takası”), trình phân tích giữ lại mọi cách hiểu có thể khi parse
    • Ý nghĩa được quyết định ở bước kiểm tra kiểu
    • Nếu muốn ép một cách hiểu cụ thể, có thể dùng dấu nháy đơn (') như taka'sı, takas'ı

Giấy phép

  • Xem tệp LICENSE

1 bình luận

 
GN⁺ 2026-01-19
Ý kiến trên Hacker News
  • Chào mọi người, tôi là nhà phát triển của Kip
    Ban đầu tôi định hoàn thiện playground và trang landing rồi mới công bố, nhưng hiện tôi chia sẻ playground chạy trên trình duyệt mà mình đã làm đến nay
    https://alpaylan.github.io/kip/
    Phần transpilation sang JavaScript mới chỉ bắt đầu nên vẫn chưa hoạt động, nhưng bản thân ngôn ngữ thì phần lớn đã có thể chạy được
    Nếu có lỗi, rất mong mọi người báo trong issue của repo

    • Tôi đã học tiếng Thổ Nhĩ Kỳ vài năm, và vì đặc điểm ngữ pháp cùng tính chắp dính của nó, tôi nghĩ sẽ rất thú vị nếu biến nó thành một ngôn ngữ lập trình
      Tôi từng định gọi nó là “Ç”, nhưng rốt cuộc không làm. Thật vui khi thấy có người đã thử
    • Tôi tra thử vì nghe nói “Kip” trong tiếng Thổ Nhĩ Kỳ có nghĩa là thức ngữ pháp (mood), nhưng mỗi dịch vụ dịch lại cho ra một kiểu như “mode”, “modal”, “tense”, “module” v.v.
      Cá nhân tôi thấy “tense” là gần nhất
      Tôi đã xem phần giải thích của BBC Bitesize để tham khảo
    • Ngữ pháp thì rất thú vị, nhưng tôi tò mò cú pháp phép toán số hoạt động như thế nào
      Ví dụ
      (5'le 3'ün farkını) yaz.  
      (3'ün 5'le farkını) yaz.  
      
      Trong những câu như vậy, tôi muốn biết liệu ý nghĩa của ‘farkını’ (độ chênh/lấy hiệu) và vị trí của tiểu từ có dùng để phân biệt 5-3 với 3-5 hay không
      Vì cú pháp dựa trên ngôn ngữ tự nhiên nên nó cho cảm giác như một ngôn ngữ dùng để mô tả định nghĩa toán học
    • Trang web và playground bản cập nhật mới đã được công bố
      https://kip-dili.github.io/
    • Đây thực sự là một công trình rất tuyệt. Tôi đã muốn khám phá lĩnh vực này từ lâu
  • Cấu trúc của ngôn ngữ dường như vẫn đang theo thứ tự ngữ pháp Anglo-Saxon
    Tôi muốn thấy một dạng như sau, phù hợp hơn với ngữ pháp tiếng Thổ Nhĩ Kỳ

    Fibonacci-Dizisi (n):  
      n 0'a eşitse: dur.  
      değilse:  
        bu-sayıyı yazdır.  
        şu-sayıyı, (bu-sayı + şu-sayı), (n - 1) ile Fibonacci-Dizisi'ne devam et.  
    

    Dù vậy, bản thân nỗ lực này đã là một khởi đầu rất tốt, xin chúc mừng

  • Dự án này thật sự rất hay
    Tôi cũng đang thử nghiệm một ý tưởng tương tự tại Logicaffeine Studio
    Có thể bạn cũng nên tham khảo Logos lang. Tôi cũng thích việc bạn chọn Haskell

  • Những người thuộc thế hệ trước có thể còn nhớ Lingua::Romana::Perligata
    https://metacpan.org/dist/Lingua-Romana-Perligata/view/lib/Lingua/Romana/Perligata.pm

  • Tôi cũng từng thử nghiệm một ý tưởng tương tự vài năm trước
    https://github.com/celaleddin/sembolik-fikir
    Tôi định sẽ xem kỹ hơn trong vài ngày tới

    • Cách tiếp cận này khá thú vị. Có vẻ như nó đang làm suy đoán hình vị dựa trên hậu tố
      Trong Kip, TRmorph được dùng để phân tích hình vị đầy đủ, rồi xử lý sự mơ hồ ở bước kiểm tra kiểu
      Vì vậy gần như không cần dùng dấu nháy đơn. Khâu triển khai khá vất vả nhưng là một bài toán rất thú vị
  • Tôi đọc được chút ít tiếng Thổ Nhĩ Kỳ, và nhờ dự án này mà ngày hôm nay của tôi vui hẳn lên
    Thật thú vị khi hệ thống cách ngữ pháp của tiếng Thổ Nhĩ Kỳ mạnh và được chuẩn hóa đến mức có thể tạo ra kiểu thiết kế ngôn ngữ như vậy

    • Kiểu trật tự từ linh hoạt này không chỉ có ở tiếng Thổ Nhĩ Kỳ mà còn thấy ở các ngôn ngữ biến hình mạnh — tiếng Slav, Sanskrit, Phần Lan, Hungary v.v.
    • Thực ra ngay cả tiếng Anh cũng có độ linh hoạt trật tự từ khá cao
      Ví dụ, một câu như “Colonel Mustard killed him in the study at 5:00 with his own knife.” vẫn giữ nguyên ý nghĩa dù đổi thứ tự
      Trong thơ La-tinh hay Nga cũng thường xuất hiện kiểu trật tự từ phức tạp như vậy
  • Lúc đầu tôi bấm vào liên kết với một chút định kiến, nhưng phần định nghĩa lại gọn gàng và dễ hiểu
    Sẽ thú vị nếu có cả phiên bản tiếng Đức

    • Tôi cũng nghĩ vậy. Ban đầu tôi tưởng nó chỉ là kiểu thay từ khóa của một ngôn ngữ như Rust sang tiếng Thổ Nhĩ Kỳ, nhưng thực tế lại tinh vi hơn nhiều
  • Tôi chia sẻ bài viết trên Language Log như một tài liệu tham khảo về ngữ pháp hơn là về bản thân ngôn ngữ này

  • Bạn gái tôi là người Thổ Nhĩ Kỳ nên tôi đang học tiếng Thổ Nhĩ Kỳ, mà giờ có lẽ tôi có thể tăng tốc độ học bằng cảm giác lập trình
    Thật sự rất bất ngờ

    • Tôi cũng kết hôn với một người Thổ Nhĩ Kỳ, và chưa từng tưởng tượng ra sự kết hợp công nghệ + ngôn ngữ như thế này
      Đây là động lực rất tốt để tôi tiếp tục việc học vốn đã dừng ở mức trung cấp
  • Trong thời đại AI, mỗi quốc gia đều có thể tạo ra ngôn ngữ lập trình phản ánh truyền thống ngôn ngữ riêng của mình
    Điều này sẽ mở rộng mạnh mẽ tính tự chủ và sự đa dạng của văn hóa phát triển