世界を動かす技術を、日本語で。

ティール - Luaの静的型付けダイアレクト

概要

  • Teal はLuaの静的型付き方言で、TypeScriptのような役割を担う。
  • 型アノテーションやジェネリクスなど、 拡張機能 をLuaに提供することが特徴。
  • tlコンパイラ で.tlファイルを.luaに変換することが可能。
  • インストールや開発支援ツール も充実している。
  • MITライセンス でオープンソースとして公開されている。

Tealとは何か

  • TealLua の静的型付き方言であることを明示すること
  • 型アノテーション による配列、マップ、レコード、インターフェース、ユニオン型、ジェネリクスの指定が可能であることを強調すること
  • TypeScript がJavaScriptに与える役割と同様のニッチをLuaで担うことを目指すこと
  • Luaのミニマリズム・移植性・組み込みやすさ を維持することを重視すること
  • tlコンパイラ により.tlソースコードから.luaファイルへの変換を実現すること

Tealのコード例

  • Tealコード は型アノテーションが明示的に記述できることを示すこと
  • 例:
    • local function add(a: number, b: number): number 形式で関数の引数と戻り値の型を指定すること
    • return a + b end で型安全な計算を実行すること
    • local s = add(1, 2) で型推論が働くこと
    • print(s) で結果を出力すること

Tealの体験・プレイグラウンド

  • Teal Playground を利用し、ブラウザ上でTealコンパイラを試すことが可能であること
  • このページのソースコードを参考にすることもできること
  • オンラインで Tealコード を編集・実行できることを確認すること

Tealのインストール方法

  • LuaRocks を使用してluarocks install tlコマンドでインストールすること
  • Linux・Windows用のバイナリ も提供されていること
  • 大規模プロジェクトでは Cyan ビルドツールの利用を推奨すること
  • Visual Studio Code 統合用のvscode-tealNeoVim 用のteal-language-serverなどの拡張機能が存在すること
  • 他にも各種エディタ・ツール連携が進んでいること

ドキュメント・学習資料

  • Teal公式ドキュメント をオンラインで参照できること
  • Luaと型システムの歴史やTealの動機・進捗に関する 講演動画 が複数公開されていること
    • Minimalism versus types (2019)
    • Minimalistic typed Lua is here (2020)
    • What's next for Teal (2021)
    • Five years of Teal: minimalism versus growth in language design (2024)
    • What should Teal be? - musings on FOSS project directions (2025)

コミュニティ・開発体制

  • GitHub 上で開発や議論が活発に行われていること
  • GitHubフォーラムMatrixチャット (#teal-language_community:gitter.im)でコミュニティ交流が可能であること
  • Hisham Muhammad がプロジェクトを開始し、貢献者が増加中であること
  • Teal自身の実装もTealで書かれている という特徴があること

ライセンス

  • MITライセンス で公開されており、Luaと同じ自由度を持つこと
  • オープンソースプロジェクト として自由に利用・改変・配布できること

Hackerたちの意見

別のTEAL(大文字)のプログラミング言語があるよ: https://developer.algorand.org/docs/get-details/dapps/avm/te...>

luaの方にその名前をあげようって投票するよ!

それがどれくらい古いか知ってる?Lua Tealはもう少なくとも5年は存在してるよ。

2020年にAlgorandブロックチェーンのためにトランザクション実行承認言語を設計して名付けたんだ。元のものには愛着があるけど、成長するにつれて「Algorandバーチャルマシン」にリブランドされたんだ。まだTEALとして覚えてくれてる人がいて嬉しいよ!

いい言語に新しい型が追加されるのを見ると、すごくホッとする。TealはLuaに対して、TypeScriptはJavaScriptに対するみたいなもんだね。つまり、Lua環境と自動的にうまく連携するってこと。luauやneluaは静的型付けだけど、それぞれ独自のランタイムがあるから違うんだ。Luaのどのバージョンを使ってるの?Luaは数年ごとに新しいバージョンが出るから、なんでそんなに多くの実装が最新バージョンにアップグレードしないのか分からない。

コアコンパイラには依存関係がなく、プロジェクトに読み込める単一のtl.luaファイルとして実装されてる。tl.loader()を実行すると、パッケージローダーにTealサポートが追加されて、require()で.tlファイルが実行できるようになる。天才的な設計だね。

Luaはいい言語だよ。Cがスクリプト言語だったらこんな感じ。素晴らしいC APIがあるし、速くて軽量で埋め込み可能。Pythonよりもパフォーマンスがいいし、ゲームスクリプトでは定番だね。

新しいLuaのバージョンには、アップグレードを続ける価値が疑わしい破壊的変更があるんだよね。Python2から3に移行するみたいな感じ。LuaJITは5.1に固執していて、全然動く気配がないし。

TealはLuaのテキストファイルにコンパイルされるよ。Lua 5.1と5.4の両方に対応してると思う。

Tealは現在、Lua 5.1以降のコード生成をサポートしていて、LuaJITも含まれてるよ。コード生成のさまざまな詳細を制御するコンパイラフラグ --gen-target と --gen-compat があるよ。

お、賢い名前だね。Typed Lua → TL → "Tee Ell" → Teal そして拡張子は.tl

トピックとは関係ないコメントだけど、ESLの話者として、今週偶然にtealという色がアナス・クレッカというカモの種類にちなんで名付けられたことを知ったよ(編集: 英語では普通のまたはユーラシアのtealと呼ばれる)。

Hacker Newsで議論の続きを見る