komagataのブログ

インデントベースのコンパイル言語 Tya を作りました。

Tya — A language without hesitation

Image from Gyazo

Pythonっぽいインデントベースの見た目で、goみたいに1バイナリにコンパイルできる感じの言語です。

# hello.tya
user = { name: "komagata", age: 20 }

greet = user -> "Hello, {user["name"]}!"

if user["age"] >= 20
  print(greet(user))
$ tya build hello.tya -o hello
./hello
Hello, komagata

変わった特徴

ちょっと変わってるところは、動的型付け言語なのにコンパイル言語というところと、ソースコードとASTが情報の欠落なく相互に変換可能(Lossless AST)で、コメントも含めてソースコード表現が一意に決まるところです。(Canonical syntax

要するにgoで言えばgo fmtした結果だけが唯一の正解で、それ以外はSyntax Errorみたいな感じです。

迷わない言語をうたっていて、Syntaxだけじゃなくて、選択肢をなるべく1つだけ用意してそれ以外はできないようにしています。(迷わない言語 = 極端に自由度の少ない言語)

開発のモチベーション

なぜ作ったかというと、僕は以前、coffeescriptの書き味が好きだったんですが、周りでは評判が悪く、「もしかして誰も好きじゃない?」と悲しい思いでいました。僕だけrailsプロジェクトでcoffeescriptを書き続けてたら周囲の迷惑になっちゃうので書かなくなりました。

coffeescriptみたいな書き味でgoみたいに1バイナリにコンパイルできる言語があったらいいなぁと思ってたのでAIの力を借りて作ってみた次第です。

一応、自分でも小さいツールやwebアプリ、小さめのGUIアプリなんかを書くのに使えているので興味がある方がいらっしゃったら使ってみていただけるとありがたいです。感想などをいただけるとさらにありがたいです。

Comments


Option