公開技術情報

[English] [Japanese]

00. はじめに

皆さんは LuneScript をご存知ですか?

知りませんよね?

それが普通です。

LuneScript は超マイナー言語の一つです。

この記事は、そんなマイナー言語の導入ハードルを 少しでも下げることを目的としたドキュメントです。

後 3 分だけ我慢して記事の残りを読んでもらえば、 エンジニア間での話のネタくらいにはなると思います。

LuneScript とは

まず LuneScript ってなんじゃらほいっ、というと Lua 向けのトランスコンパイラです。

じゃぁ Lua って何よ?って方も多いと思います。

特に近年は、JavaScript や Python, Ruby などを母国語としている Web 系のエンジニアが多いと思うので、 Lua に触れる機会はあまり無いと思います。 もちろん Web 系でも Lua は使えはしますが、 Web 系で敢えて Lua を使う利点は少ないです。

また、 Lua 自体が話題になったのは 2010 年前後で、 最近は話題になることも少ないと思います。

ただこれは、Lua が廃れたということではなく、 Lua を必要とするようなユーザの中では既に常識となって、 敢えて話題にするようなことが無くなったことが大きな要因だと考えています。

ちなみに 2021/2 時点の TIOBE Index ランキングで、 Lua は 38 位です。

んで、 結局 Lua が何かと言いうと、 C 言語のプログラムをホストとし、 その機能を拡張することを想定して設計されたスクリプト言語です。

どこにも Web 系に関連しそうなワードが無いですね。 強いて上げればスクリプト言語ってところでしょうか。

実際、 Qiita の記事で Lua のタグが付いているのは、 今日現在で 400 弱しかありませんでした。 Qiita のタグ一覧ページでは、4ページ目になってようやく出てくる程度です。

ただでさえ存在感の薄い Lua の、 さらにトランスコンパイラなんて誰が使うんだよ、的な感じですが、 ここではそんなトランスコンパイラである LuneScript を扱っていきます。

数年前に AltJS が栄枯盛衰して Web 界隈がざわついていたように、 AltLua によって Lua 界隈がもう一度盛り上ってもイイじゃない。

ちなみに、 Lua だけでなく Go へのトランスコンパイルもサポートしています。

また、 LuneScript はセルフホストで開発していて、 lua と go にトランスコンパイルさせています。 lua 版は、lua 環境で動くという特徴がありますが、 go 版に比べてトランスコンパイル速度が遅いので、 現在は lua 版をあえて使うメリットはほとんどありません。

LuneScript の特徴

LuneScript は、Lua 向けトランスコンパイラであるため、 Lua には無い様々な機能をサポートしています。

その代表的なものとして次のものが挙げられます。

  • 静的型付け
  • 型推論
  • NULL 安全 (null safety)
  • generics
  • クラス定義
  • マクロ

イマドキのプログラム言語機能として必要なものは、かなり取り入れられていると思います。

これらの機能により、Lua コードを直接書くよりも、 LuneScript を利用した方が規模の大きいコードを高い生産性で開発することが出来ます。

ついでにセルフホスティングで開発していますが、それはあまり関係ないですね。

そんなわけで、この記事は、

  • Lua でコードを書いた経験がある人
  • あるいは書く予定のある人
  • そしてプログラム言語好きな人
  • オレオレ言語に興味がある人

そんな人に向けた記事です。

LuneScript は、さまざまなプログラミング言語から仕様をパく、、inspire されて 設計しています。 言語の設計ポリシーは、出来るだけ「楽に」「安全に」です。

以降の記事で実際に言語仕様を説明していきますが、 その中で エラー と記載した場合、 それは実行時エラーではなく、 コンパイルエラー を指します。

LuneScript は「安全に」開発できるように、 実行時エラーでなく、出来るだけコンパイル時にエラーするように設計しています。

なお、「安全に」開発できる代表的な言語に Rust があります。 LuneScript と Rust と比べた場合、 安全性は Rust に劣りますが、「楽」に開発はできるように設計しています。

LuneScript は、 安全性と気軽さのバランスをとった設計 になっています。

次回は LuneScript の導入方法について紹介します。

興味と時間のある方は、次回以降もお付き合いください。

ちょっ

なんとなく Google 翻訳で LuneScript を翻訳したら。。。

嘘だと言ってよバーニィ!!

https://ifritjp.github.io/doc/LuneScript/ingo.png

追記 2019/1/25

いつのまにか脚本に進化した!

https://ifritjp.github.io/doc/LuneScript/kyakuhon.png