1 ポイント 投稿者 GN⁺ 2026-01-19 | 1件のコメント | WhatsAppで共有
  • Kipは、トルコ語の文法格と法(mood)を型システムに統合した実験的プログラミング言語であり、自然言語の形態論と型理論の結合を探究している
  • トルコ語の名詞の格変化と母音調和をコード構造に反映し、関数引数の関係を格接尾辞で区別して引数順序の柔軟性をサポートする
  • パターンマッチ, 多相型, 帰納的データ型, 入出力エフェクトなど、現代的な関数型言語の主要機能をトルコ語の文法形式で表現する
  • Foma形態素解析器とHaskell Stackを用いてビルドし、WASMベースのブラウザ実行環境と**バイトコードキャッシュ(.iz)**機能を提供する
  • 言語学とプログラミング言語設計の交点を示す研究・教育用プロジェクトであり、自然言語ベースの言語設計の可能性を実験する事例である

Kip 概要

  • Kipはトルコ語の単語**kip(法)**に由来する名前の言語で、トルコ語の文法格を型システムに含めた実験的言語
    • トルコ語の**名詞の格変化(ismin halleri)母音調和(vowel harmony)**をプログラミング言語設計に統合
    • 研究および教育目的のプロジェクトであり、実運用向けの言語ではない
  • トルコ語および英語のチュートリアルが提供されており、Kipプログラムの書き方を学べる
  • 文法と挙動は実験段階にあり、今後変更される可能性がある

言語の特徴

  • トルコ語の文法格を型として使用
    • 主格、目的格、与格、処格、奪格、属格、具格、所有格の8種類の格をサポート
    • 各格は接尾辞で表され、関数引数間の関係を明示的に区別する
  • 柔軟な引数順序
    • 格接尾辞が引数関係を明確にするため、引数の順序を変えても同じ意味を保つ
    • 例: (5'le 3'ün farkını) yaz.(3'ün 5'le farkını) yaz. は同じ結果
  • 帰納的データ型の定義
    • トルコ語の構文で代数的データ型を定義
    • 例:
      Bir doğal-sayı
      ya sıfır
      ya da bir doğal-sayının ardılı
      olabilir.
      
  • 多相型をサポート
    • ジェネリックなデータ構造を定義可能
    • 例: (öğe listesi) の形でリストデータ型を定義
  • パターンマッチ
    • 条件接尾辞 -sa/-se を使ってパターンマッチを実行
    • ネストしたパターン、バインダー、ワイルドカード(değilse)をサポート
  • 定数定義
    • diyelim キーワードで名前付き定数を宣言
    • 例: sıfırın ardılına bir diyelim.
  • 入出力とエフェクト処理
    • -ip/-ıp/-up/-üp 接尾辞で逐次実行し、olarak でバインド
    • 例:
      selamlamak,
        isim olarak okuyup,
        ("Merhaba "yla ismin birleşimini) yazmaktır.
      
  • 基本型
    • 整数(tam-sayı): toplamı, farkı, çarpımı などの演算をサポート
    • 文字列(dizge): uzunluğu, birleşimi, tam-sayı-hali を提供
    • 入出力: yazmak, okumak コマンドをサポート
  • コメントとリテラル
    • コメント: (* ... *)
    • リテラル: "merhaba"'yı yaz. の形で格接尾辞を含む

インストールと実行

  • 必須ツール
    • Foma: 有限状態形態素解析ツールキット
    • Stack: Haskellビルドツール
  • ビルド方法
    • install.sh スクリプトを実行するか、stack build コマンドで手動ビルド
    • vendor/trmorph.fstTRmorph変換器を含む
  • 実行
    • REPL: stack exec kip
    • ファイル実行: stack exec kip -- --exec path/to/file.kip
    • PATHへのインストール: stack install

WASM Playground

  • playground/ ディレクトリにブラウザ実行用ビルドを含む
    • kip-playgroundwasm32-wasi にコンパイル
    • HTML/JSハーネスによりブラウザ内でKipを実行可能
    • 詳細なビルド手順は playground/README.md を参照

バイトコードキャッシュ(.iz)

  • .kip ファイルの型検査結果をキャッシュして .iz ファイルとして保存
    • ソースや依存関係が変更されていなければキャッシュを再利用
    • .iz ファイルを削除すると再度パースと型検査を実行
    • コンパイラハッシュを含むため、バージョン変更時は自動的に無効化される

サンプルプログラム

  • 自然数の定義、定数宣言、加算関数、結果出力の例を含む
    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.
    

プロジェクト構成

  • app/ : CLIエントリポイント (Main.hs)
  • src/Kip/ : AST、キャッシュ、インタプリタ、パーサ、レンダラ、型検査器を含む
  • lib/ : 基本モジュール(giriş.kip, temel.kip, temel-liste.kip など)
  • tests/ : 成功(succeed/)および失敗(fail/)テストケース
  • vendor/ : trmorph.fst 形態素変換器

テスト

  • stack test コマンドで実行
    • tests/succeed/: 通過すべきテスト
    • tests/fail/: 失敗すべきテスト

形態素解析

  • KipはTRmorphを使ってトルコ語の形態素解析を実行
    • 多義語(例: “takası”)は、可能なすべての解釈を保持したままパース
    • 型検査段階で意味を決定
    • 特定の解釈を強制したい場合はアポストロフィ(')を使用 (taka'sı, takas'ı)

ライセンス

  • LICENSEファイルを参照

1件のコメント

 
GN⁺ 2026-01-19
Hacker Newsのコメント
  • みなさんこんにちは、私はKipの開発者です
    本当は playground とランディングページを完成させてから公開するつもりでしたが、今のところ作ったブラウザベースの playground を共有します
    https://alpaylan.github.io/kip/
    JavaScript への transpilation は始めたばかりでまだ動きませんが、言語自体はほとんど実行可能です
    バグがあれば repo の issue で知らせてもらえると嬉しいです

    • 数年間トルコ語を勉強してきたのですが、その文法的・膠着的な特徴のおかげで、プログラミング言語にしたら面白いだろうと思っていました
      私はそれを「Ç」と呼ぼうとしていましたが、実際に作ることはありませんでした。誰かが試しているのを見ると嬉しいです
    • 「Kip」がトルコ語で文法的な 法(mood) を意味すると聞いて調べてみたのですが、翻訳サービスごとに「mode」「modal」「tense」「module」などさまざまに出てきます
      個人的には「tense(時制)」がいちばん近い気がします
      関連する参考資料として BBC Bitesize の説明 を見ました
    • 文法は興味深いですが、数値演算の構文がどう動くのか気になります
      たとえば
      (5'le 3'ün farkını) yaz.  
      (3'ün 5'le farkını) yaz.  
      
      こういう文で 「farkını」(差) の意味と助詞の位置によって 5-3 なのか 3-5 なのかを区別するのか気になります
      自然言語ベースの構文なので、数学的定義を記述する言語のようにも感じられます
    • 更新された Webページと playground が新たに公開されました
      https://kip-dili.github.io/
    • 本当に素晴らしい仕事です。以前からこういう領域を探求してみたかったです
  • 言語の構造が依然として アングロサクソン的な文法順序 に従っているように見えます
    トルコ語の文法により合う形として、次のような形を見てみたいです

    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.  
    

    こうした試み自体が素晴らしい出発点なので、おめでとうございます

  • このプロジェクトは本当にすごいです
    私も Logicaffeine Studio で似たアイデアを実験中です
    Logos lang も参考にするといいかもしれません。Haskell を選んだのも気に入りました

  • 昔の世代なら Lingua::Romana::Perligata を覚えているかもしれません
    https://metacpan.org/dist/Lingua-Romana-Perligata/view/lib/Lingua/Romana/Perligata.pm

  • 私も数年前に似たアイデアを実験していました
    https://github.com/celaleddin/sembolik-fikir
    これから数日かけてさらに見てみるつもりです

    • 興味深いアプローチです。接尾辞ベースの 形態素推定 をしているようですね
      Kip では TRmorph を使って形態素解析を完全に行い、型検査の段階で曖昧さを解消しています
      そのため アポストロフィ はほとんど必要ありません。実装は大変でしたが、面白い問題でした
  • 少しだけトルコ語が読めるのですが、このプロジェクトのおかげで一日が楽しくなりました
    トルコ語の 格体系 が強く標準化されているからこそ、こうした言語設計が可能なのだという点が興味深いです

    • こうした 柔軟な語順 はトルコ語だけでなく、屈折の強い言語――スラブ語、サンスクリット語、フィンランド語、ハンガリー語など――でも可能です
    • 実は英語でも語順の柔軟性はかなりあります
      たとえば “Colonel Mustard killed him in the study at 5:00 with his own knife.” のような文は、順序を変えても意味が保たれます
      ラテン語やロシア語の詩でも、こうした複雑な語順はよく登場します
  • 最初は偏見を持ってリンクをクリックしたのですが、定義が すっきりしていて分かりやすい です
    ドイツ語版もあれば面白そうです

    • 私も同じ考えです。単に Rust のような言語のキーワードをトルコ語に置き換えただけのものだろうと思っていましたが、実際にはずっと精巧です
  • 言語そのものというより、文法関連の参考として Language Log の記事 を共有します

  • 恋人がトルコ人でトルコ語を学んでいたのですが、これで プログラミング感覚 を使って学習速度を上げられそうです
    本当に驚きました

    • 私もトルコ人と結婚していますが、こういう 技術+言語の組み合わせ は想像もしていませんでした
      中級段階で止まっていた学習を再開する良いモチベーションになります
  • AI時代 には、各国が自国の言語的伝統を反映したプログラミング言語を作れるようになります
    これは開発文化の 自律性と多様性 を大きく拡張することです