web-dev-qa-db-ja.com

Luaの代替スクリプト言語?

アプリケーションにスクリプトサポートを追加したいと思います。使用可能なスクリプト言語がたくさんあるので、少し困惑しています。

最初はPython=について考えましたが、Pythonは私の好みとアプリケーションには少し大きすぎると思います(私はそれがとても好きですが、構文はクリーンでシンプルですが、特に重いOOPを実行していない場合は、多くのことが正しいと思います。

私もLispが大好きです。私はスキームが好きで、それは完璧な拡張言語です-少なくともいくつかの点で、構文的にはもっと保守的になりたいです。

Luaについて多くの肯定的なことを聞​​いたのを覚えています。確かにLuaは良い可能性のようです。残念ながら、これは本当に「私をオフにする」ものがあります。それは、ローカルバインディングのlocalキーワードです。これは私の好みには本当に醜いです、そして私が率直に言って、なぜ言語がまだこのように設計されているのか、そして本質的にlocalについて知っていることを率直に言っていません。これはJavaScriptの主な欠点でもあると私は考えていますが、結局のところ、それは悪い言語設計に帰着しているように感じます。私の主な懸念は、ユーザーがlocalを省略するだけで、自分の関数内から関数をオーバーライドする可能性があることです。

しかし、それからLuaは多くのこと、サイズ、スピードを正しく取得し、驚くほどスキームに富んでいます。しかし、私はそれが範囲の感覚を持たない非プログラマーには適していないことを本当に恐れています。

  • 地平線上の代替案はありますか?
  • Luacoreをハッキングして、ローカルをデフォルトにすることもできますか?

    Luaのソースはかなりまともでモジュール化されているように見えるため、これは興味深いプロジェクトになります;)

5
wirrbel

local完全な語彙スコープの必須属性です:

local x = 0
function f(inc)
    x = x + inc -- if you auto-localize it, this is broken
end

一方、言語からlocalを削除することもできますが、補足としてouterを追加できます(boundupvalue、名前を付けます):

x, y = 0, 0
function f(inc)
    outer x
    x = x + inc -- uses outer slot: "0 + inc"
    y = y + inc -- creates local (and raises "nil + number" error)
end

どちらもない場合(通常のグローバルを含む)、スコープは役に立たないだけです。

Luaパーサーは上手く書かれていますが、簡単な修正になるとは思いません。

8
user79302

TCLは、プログラマーではない人のためにDSLを定義できる組み込みスクリプト言語として設計されたものです。

TCL、スキーム、またはここでのソリューションの重要な点は、ユーザーが理解できるDSLを設計することです。DSLが十分にあれば、ユーザーは一般的なプログラミング構造を必要とすることはほとんどありません(理解するのが難しい場合があります)。

WRTあなたのコメントTCLには実際には文法がないので、あなたはそれについて何か誤解しているのではないかと思いますか?むしろ、その文法はスキームと同じくらい複雑です。

2
jk.