https://www.lua.org/docs.html

Interpreter

とりあえず luajit-2.1.0-beta3 推し。

+---+    +---+    +---+    +---+
|5.1| -> |5.2| -> |5.3| -> |5.4|
+---+    +---+    +---+    +---+
  |        |        |
  |        |        +- ravi
  |        |
  |        +- moonsharp
  |
  +- luajit(5.1 base)
  |   +- moonjit
  +- luau(5.1 base)

lua-5.1 をベースに分岐したものが多い?

https://www.lua.org/versions.html

urlmemo
Lua5.12012。これより古いものを使う理由は無さそう。
Lu15.2since Lua5.12015。finalizer. 関数の _ENV 仕様変更
Lua5.3since Lua5.22020。integers
Lua5.4since Lua5.32021。const, to-be-closed
LuaJIThttps://luajit.org/Lua5.1base。最終版は 2.1.0-beta3。neovimもこれ。FFI も強力。
Luauhttps://luau-lang.org/Lua5.1 の superset。Roblox専用。オープンソースではない。
Ravihttp://ravilang.github.io/Lua5.3base?。limited optional static typing and MIR based JIT compiler

変わり種

headeronly. include するだけで使える。

LUA に更に埋め込む

Translator

MoonScript

TypescriptToLua

  • 後で出てくる、local-lua-debugger はこれで実装されているぽい。

LuneScript/

Teal

Language server

EmmyLua

  • Java製

  • EmmyLua Annotation に対応。これにより、組み込み型のインテリセンスを動作させることができて使い勝手が向上する

lua-language-server

  • EmmyLua Annotation に対応。これにより、組み込み型のインテリセンスを動作させることができて使い勝手が向上する

設定例

    "Lua.runtime.version": "LuaJIT",
    "Lua.workspace.preloadFileSize": 10000,
    "Lua.runtime.path": [
        "?.lua",
        "?/init.lua",
        "?/?.lua",
    ],

lua-lsp

Debug adapter

local-lua-debugger-vscode

  • Debugされるスクリプト側に仕込み不要

  • ⭐ luajit 対応

  • __tostring でエラーが発生すると固まるので、__tostring の実装で例外が起きないように注意

  • 起動時の引数に \\ が含まれているとエラーになる => 0.2.2 で修正

lua-debug

  • Debugされるスクリプト側に仕込み不要

  • hook が拡張してある。途中で止めたりとかできるぽい

  • 残念ながら luajit では動作しない

Formatter

stylua

  • ⭐ rust 製でインストールしやすい

stylua.toml

column_width = 120
line_endings = "Unix"
indent_type = "Spaces"
indent_width = 4
quote_style = "AutoPreferDouble"
no_call_parentheses = true

ソース読み

https://ousttrue.github.io/lua/