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

Luaの進化、続編 [pdf]

概要

  • 本リクエストは PDFファイルの生データ であり、直接テキスト抽出は不可。
  • 内容の要約や解説 は元データからは実施できない。
  • PDFファイル のテキスト化や内容確認には専用ツールが必要。
  • 必要な場合は PDFをテキスト化 して再度ご依頼ください。
  • 別ファイルや質問 があれば、テキスト形式でご提供ください。

PDFデータの取扱いと注意点

  • PDFファイル はバイナリデータや圧縮データで構成。
  • 直接的な内容確認や要約 は、テキストデータが抽出されていない限り不可能。
  • PDFリーダーや変換ツール (Adobe Acrobat、PDF to Textなど)の利用推奨。
  • 抽出したい内容がある場合は、 該当ページのテキスト を貼り付けて依頼。
  • セキュリティやプライバシー に配慮し、機密情報の取り扱いに注意。

効率的なPDF内容確認の方法

  • PDFからテキスト抽出 を行うことで、内容要約や翻訳が可能。
    • 無料・有料の PDF変換サービス を活用。
    • OCR機能 を用いて画像ベースのPDFもテキスト化可能。
  • 抽出したテキスト を再度チャットに貼り付けて依頼する流れが推奨。

今後の依頼方法について

  • 要約や翻訳 を希望する場合、 テキスト形式 でのご提供が最適。
  • PDFファイルのまま ではAIによる内容解析ができないため、 テキスト化後に再依頼 を推奨。
  • 特定の質問 がある場合は、PDFから該当箇所を抜粋し、テキストでお知らせください。

Hackerたちの意見

Luaはプログラミング言語のSQLiteみたいで、めっちゃ楽しい!

Luaは好きだけど、クリーンでエレガントで、すごく合理的。Tclは間違いなくプログラミング言語のSQLiteだと思う。 「Tclは、SQLiteのように、特異な形而上学的原則に基づいて動作する。すべては文字列であり、そうでないことが証明されるまで、たとえそうであっても、たぶんまだ文字列だ。」 D. Richard HappにはSQLiteに感謝しなきゃいけないけど、彼はTCLのボードにいたか、今もいるかもしれない(これについては間違ってるかもだけど、HappはTCLコミュニティで重要な存在)。私の中では、Tclは静かにサポートしてくれるルームメイトみたいで、コーヒーを淹れたりLISPっぽい機能を提供したりして、世界がその天才に気づくのを待ってる感じ。Luaはテーブルの向こう側でエスプレッソを飲みながら、みんなが設定ファイルにそんなに感情的に絡まってるのを不思議そうに見てる。

いいね、笑

Luaはsh/bashが足りないときの接着剤だね。Luaはシンプルでエレガントで、Tclよりもずっと好き。LuaはゲームやLuaTeXに使われていて、LISP、FORTH、Luaのどれかを大きなアプリケーションに埋め込む選択肢があるとき、しばしば最もメンテナンスしやすく、ランタイム効率が良く、メモリフットプリントが小さい選択肢になる。

SQLiteで1からインデックスを始める場合の同等のものって何だろう?ぱっと思いつくものはないな、そんなに反するようなことは。

DuckDBは全ての母だね。SQLiteよりも遥かに能力が高くて、100%の互換性が必要なワークロードのためにSQLiteを埋め込んでるよ。

新しいLuaの機能を活かせる新しいLuaJITがあればいいなと思うけど、でもその新機能って実際にはそんなに重要じゃないのかもね。

LuaJITの存在のおかげで、標準のLuaが遅いように見えた気がするけど、実際は全然そんなことないよね。

LuaJITはすごい。JITを持つ小さくて埋め込み可能なスクリプト言語として、これに匹敵するSchemeがないのが信じられない。GNU Guileはそれに比べると絶対に巨大なモンスターだね。

LuaJITは今年に入ってから40回のコミットがあって、まあまあ活発に開発されてるけど、ほとんどがバグ修正(LLVMによって導入されたバグの修正も含む)。もし新機能と言えるなら、「Appleのハードンランタイムのサポート」かな。

同意だね。LuaJITを使ってるプロジェクトにとって、必要に応じてバージョンを入れ替えられるといいよね。

90年代初頭から中頃にかけて、多くの大きな言語が数年の間に開発されたのが面白い。Python、JavaScript、Java、Lua、R。これらは91年から95年にかけて開発されて、今の開発の大部分を占めてる。

あの時期に開発された言語は、ちょうど良いバイナリパッケージマネージャーが登場し始めた頃に成熟した、ってのが私の持論。あの頃は、新しい言語の開発環境を整えるのが本当に大変で、みんなはすでにインストールされてたPerlに頼ったりしてた。

1995年のRubyを忘れないで!

ほんとそれ

それは幻想だと思う。Rの言語はSで、01976年にベル研究所で生まれた。Pythonの開発は01989年に始まったけど、Guidoがリリースしたのは01991年。で、https://www.tiobe.com/tiobe-index/のトップ20は、Python、C(01972年?)、C++(01982年?)、Java、C#(01999年? でも、Javaの方言とも言える)、JS、Visual Basic(01991年に初リリース、君の範囲内)、Golang(02007年)、Delphi(01995年にこの名前で、でも01986年からのObject Pascalの方言)、SQL(01973年)、Fortran(01957年)、Perl(01987年)、R、PHP(01995年、君の範囲内!)、アセンブリ(01947年)、Rust(02006年)、MATLAB/Octave(01984年)、Scratch(!02003年)、Ada(01978年?)、Kotlin(02011年)。年代別に見ると、40年代から1つ、50年代から1つ、60年代からはなし、70年代から5つ、80年代から5つ、90年代から4つ、0200xから3つ、02010年代から1つ、02020年代からはなし。LuaはTIOBEのリストで33位だけど、Roblox(Luauとして)、WoW、他のゲームでの普及を考えると、もっと上位に行くべきだと思う。なぜかCUDA(C++の方言)やGLSLのようなシェーダー言語は全くリストに載ってないね。— ⁂ — ここで起こっていることのほとんどは、新しい言語が良くなるまでに時間がかかるってことだと思う。そして、新しい良い言語が人気になるまでにも時間がかかる。Perl、Python、Java、PHP、JSはWebのおかげで人気になった。https://philip.greenspun.com/panda/server-programmingが、なぜPerl、Python、PHPが人気になったのかを説明してるし、もちろんJavaとJSはインタラクティブなウェブページを作るための唯一の言語だったから人気になったんだね。> ウェブサイト開発言語を選ぶのは簡単だと思うだろう。明らかに、最高の言語は安全で強力なオブジェクトシステムを取り入れている。だから、すべてをCommon LispかJavaでやろう。Common Lispはインタプリタとしてもコンパイルとしても動かせるから、開発者にとっては効率的な言語なんだ。だからCommon Lispがウェブサーバー言語戦争の明らかな勝者になるはずなのに、誰もサーバーサイドスクリプトにCommon Lispを使ってない。これはJavaというハイプの王がそれを潰したからなのか?いや、実際には、最初の近似では、誰もサーバーサイドスクリプトにJavaを使っていない。ほとんどの人は、Visual Basic、PHP、Perl、Tclのようなシンプルなインタプリタ言語を使っている。> どうしてダメな文字列指向のスクリプト言語がシステムプログラミング言語と力で競えるのか?まあ、実はね、ウェブブラウザに書き込める唯一のデータ型は文字列なんだ。そして、君が頼っているリレーショナルデータベース管理システムからの情報は、すべてウェブサーバープログラムに文字列として戻ってくる。だから、スクリプト言語の型システムが弱体化しているかどうかは、あまり関係ないかもしれないね。

面白い観察だね!いくつかの無関係な要因が影響してると思うし、意図せずに選別してる部分もあるだろうけど、観察には意味があると思う。もし予想するなら、以下の組み合わせを指摘するかな:1. これはちょうどコンピュータがガベージコレクションのランタイムコストを賄えるくらい速くなった時期で、使えるアプリを提供できるようになった頃だね。90年代以前のGC言語(Lisp、Scheme、Smalltalk、Self)はひどいパフォーマンスで評判が悪くて、ほとんど(でも完全には)消えちゃった。2. これもインターネットとウェブのブームで、PCブームがクライアントサイドにシフトした後、サーバーサイドに多くの計算が移ったんだ。それによって、最初の利点がサーバーを効率的に使うよりも価値があったから、GCを持つ少し遅い言語も生き残れた。もっとハードウェアを投入すればよかったからね。3. そのブームは新しい開発者が大量に流入して、当時ホットだった言語を使い始めた。で、一度使い始めると、だいたいそのまま続ける傾向があったと思う。ソフトウェアエンジニアの数の推移を示す良いグラフは見つからないけど、ドットコムブームのあたりで目立った増加があったんじゃないかな。

Javaは1996年、C++は1998年に標準化されたし、Cは1990年だね(技術的には1989年の標準だけど、1990年にちょっと修正があった)。Delphiは1995年からだけど、今はあんまり目立たないよね。でも、その影響はC#やTypeScript、Kotlinにしっかり残ってる。プログラミング言語が大規模に普及するには、どれだけの投資が必要かがわかるよね。ただ、数年後にはコンピュータに仕事を頼むようになるから、実際のコンパイラのフロントエンドはAIのランタイムには関係なくなると思う。

Lua 5.5の作業が始まった。ベータ版が今利用可能: https://www.lua.org/work/ 5.4からの主な変更点は、グローバル変数がデフォルトでグローバルでなくなる(オプション?)ことのようで、グローバル変数の宣言が必要になるみたい。

https://redbean.dev

Luaを使うのはneovimの設定だけなんだけど、Luaだけで何かもっと進んだことを作るための良い本やチュートリアルを知ってる人いる?注目すべきことや読むべきもの、見るべきものはある?

恥ずかしげもなく宣伝タイム:Lua(Lua 5.1だけど、コードは新しいバージョンやLua 5.1/Luau/LuaJITでも動く)をテキスト解析エンジンとして使うことを考えたパブリックドメインの本を書いた。 この本は他の一般的な*UNIXスクリプト言語(AWK、Perl、Pythonなど)に慣れていることを前提にしていて、*UNIXスクリプト背景から来る人々の痛点を詳しく説明しているよ。: https://maradns.samiam.org/lunacy/SamDiscussesLunacy.pdf ソースファイル(.odtファイル、本で使われているフォント): https://github.com/samboy/lunacy/tree/master/doc 役に立つといいな!

https://github.com/kevinfiol/beancms

Robloxを見てみて。彼らの時価総額はほぼ100Bだし、Luauを開発して、そのゲームエンジンはそれで動いてるよ。

  • https://luau.org/
  • https://luau.org/why

以前はLuaを軽視してたんだ、1ベースのインデックスに笑ってたけど、Neovimのおかげで「強制的に」学ぶことになったんだ。なんて素敵な言語なんだろう。もう少し簡潔に書けるといいな(ラムダがあれば最高)けど、そう言ってしまうと自分で自分の首を絞めてる気もする。全機能が揃ってないからこそ、Luaはとっつきやすいんだよね。

Robertoの「Programming in Lua」って本は絶対にリストに入れておいた方がいいよ。特にCと一緒にLuaをスクリプトしたいならね。この本は後半でLua-C APIの良い入門があるから。

Luaが大好きで、他の人がLuaを発見して素晴らしい旅に出るのを見るのが特に好きなんだ。これ、必要になるよ: https://www.lua.org/gems/

ちょっと前に考えてたんだけど、ブラウザのスクリプト言語がJavaScriptじゃなくてLuaだったらどんなにいいかと思ったんだ。Luaをwasmにコンパイルしてブラウザで動かすプロジェクトもあるみたいだけど… https://pluto-lang.org/web/#env=lua%3A5.4.6&code=if%20_PVERS... でも、DOMとの相互運用性が欠けてるのがネックだね。それでも、もしLuaがJavaScriptの代わりに使われてたら、ブラウザ開発がどうなるのか気になるな…

LuaのJavaScript実装もあって、ブラウザでLuaを動かせるんだよね: https://github.com/fengari-lua/fengari-web これがLuaでDOMにアクセスできるかはわからないけど、FengariがJavaScriptで作られてることを考えると、_DOMというグローバル変数を追加するのはそんなに難しくないはず(もしまだやってなければ)。

それと、nelua(https://nelua.io/)ってのもあって、WASMを使ってブラウザで使えるようにコンパイルできるんだよね: https://github.com/edubart/nelua-game2048/

具体的に何が良くなると思う?LuaはJSの quirks(変なところ)をたくさん共有してるし(配列と非配列オブジェクトの関係、存在しないオブジェクトプロパティに対するundefinedの挙動、メタテーブルはJSのプロトタイプに似てるとか)、さらにいろいろ追加されてる(continue文がない、1から始まるインデックス、テーブルにnil値が持てないとか)。好み次第でLuaとJSの両方を好きだったり嫌いだったりする人はいると思うけど、片方を好きで片方を嫌いってのはちょっと考えにくいな。

確か、ブレンダン・アイヒがこれについて話してたと思う。もし1995年にJavaScriptを作る代わりにLuaを採用していたら、Lua 5.xじゃなくてLua 2.xになってたはず。Luaはバージョンごとに互換性を壊すことで大幅に改善されてきたからね。ブラウザではそれができないから、今でも古いLua 2.xの(拡張版)を使わざるを得なかっただろうね。

FengariはDOMとの相互運用性があるよ。http://fengari.io/ これはJSでのLuaの再実装だね。

LuaがあるのにPythonがこんなに人気なのが理解できない。Luaの方がずっといいのに。Rebolには及ばないけど、Pythonよりは全然マシだよ。

Pythonはもっと大きくて成熟したエコシステムがあるよね。Luaはほとんど機能するパッケージマネージャーすらないし。

Luaは埋め込み言語が必要なときには素晴らしい。でもそれだけだと思う。自分の意見では、単体ではあまり良くない。大きなLuaコードベースを持つと本当に厄介になる。

Rebolは、今まで見た中で一番クリーンで素晴らしい言語だけど、VMは今まで書いた中で一番遅いVMだよ。最初の10個のEulerの演習しかやってないけど、これを超えるのは、各数学式でdc/bcにフォークするシェルスクリプトを書くことだけだね。

何年も言ってるけど、LuaにはRuby on Railsの瞬間が必要だよ。

絶対にダメ、今のまま小さく保って、大企業の影響も受けないでほしいし、変な方向に行くのもなし(Luaコミュニティに「DHH問題」を持ち込むのもね)。

うん、Lapisだよ。[1] https://leafo.net/lapis/

多くの人にとって、Luaは主にRobloxの言語として知られてるよね。月間380万人のアクティブプレイヤーがいるゲーム(ゲームセット)で使われてる言語だなんて、かなりすごいことだよ。今、世界で一番人気なんだから。

スピードを比較する時は、増加した行番号を印刷するループや、stdinから読み込んでstdoutに印刷するようなシンプルなテストを使ってるよ。これらのシンプルなテストは、パターンマッチングや正規表現と組み合わせると、実際に「メモリセーフ」な言語を使う理由になるから、俺には役立ってる。dinoはlua(luajitじゃない)より少し速いけど、spitbolは実際にはlua、dino、luajitより速いんだ。ngn kはspitbolより少し速いけど、組み込みのパターンマッチングやREがないんだ。ちなみに、俺はターミナルエミュレーターは使ってないよ。テキストモードだけ。グラフィックレイヤーもなし。デスクトップもなし。

これらのシンプルなテストは、パターンマッチングや正規表現と組み合わせると、実際に「メモリセーフ」な言語を使う理由になるから、俺には役立ってる。 ターミナルがボトルネックになってない?