【Lua】組み込み系言語総合 その7【Squirrel】 [無断転載禁止]©2ch.net
>>146
最新は3.4でPHP7ターゲット対応らしい wikipediaの情報が古いだけだったか
wikipediaって芸能とかは反映一瞬だけど技術系はクソ遅いよな
それにしてもHaxe凄い >>143
finallyはgotoで十分やん的なスタンスみたいよ Luaで扱いたい領域だと、例外処理なんかの複雑なことをさせたくはないな
・「ファイルを開く」「読む」「閉じる」 / 失敗で例外発生
・「ファイルを全部読んだ文字列を返す」 / 失敗ならnilを返す
後者のような、緩い頭で使えるAPIが揃っていたほうが嬉しい sublimeの70ドルが700円になる技は知らないが
買う気もないしスレ違いだからまあいいか Squirrelの拡張子はnut
リスだからか orz windowsでファイルを開きたいんだけど、
ファイル名の文字コードはS-JIS以外受け付けないんですか?
もしそうなら海外のソフトはファイルを開くのにutf8以外受け付けないんで、
海外のソフトでファイルを開くとsjis文字はutf8に勝手に変換されて
そのファイル名を使ってファイルを開くにはutf8をsjisに
変換するしかないですね。 wide版のapiならUTF16だよ>Windows >>155
まず何の話をしてるのかから説明すること。
あなたの質問がどうすれたの話題に関係するのか解らないよ >>155
「Luaの話」かつ「Lua側の文字コードはUTF-8」として進めるけど
・Luaはfopenにstringの生バイト列を渡すだけ
https://github.com/lua/lua/blob/master/liolib.c#L257
・日本語版Windowsのfoepnはファイル名にSJISを要求する
ことを踏まえて対処するしかない
スクリプト層で対処するなら、ファイル名をSJIS変換した文字列を作って渡す
ホスト側 (C言語) で対処するなら、UTF-16変換して _wfopen を使うよう liolib.c を改造する
もちろん、ファイルの中身については別対応する必要がある 変換しようとしてlua-iconvっていうのをmsys2でコンパイルしてmp
vと同じフォルダーに置いたけどクラッシュしました。 下の層で文字コードの問題が起きてもLuaは下から上に受け流すだけ
まるで例外処理だな mruby/cってmrubyと違うのか?
なんかmbedの日本語フォーラムに動かしたっぽいのが出てるわww
マイコンでmrubyはIoT的には理想なんだろうけど、キツイんじゃないか。 141 名前:デフォルトの名無しさん[sage] 投稿日:2017/02/02(木) 09:20:30.60 ID:OnfcMI/e
プログラミング言語は偏差値40の人にも理解できるものじゃなきゃダメ。
世間には大量のバカがいる。と先輩から教わった とあるゲームのluaなんですが、関数の後ろで初期化した変数が定義されてないって言われるんですが
local AAA = "AAA"
local function FUNC() print(AAA,BBB) end
local BBB = "BBB"
FUNC()
この辺りって実装に依存するんですか?言語仕様に寄るところなんですか? >>163
言語仕様に寄るものだね。Luaを名乗る実装であれば同じ挙動だと思うよ。
Luaはソースの後ろ(下方)で定義された変数を探してくれない。
FUNC() 定義時にまだ local BBB が無いから、グローバルな BBB を見に行く。 ありがとうございます。
仕様なら頭に入れておこうと思います。 JavaScript やると Lua の良さがつくづく分かるな TypeScriptやるとLuaのクソさがつくづく分かるけどな jsでもES6ならLuaより使いやすい
ES7・ES8なら圧倒的JS JSは何だかんだでメジャーなだけあって、
色んな団体がしのぎを削り合ったり一部の仕様を淘汰したりで、
良くはなってきたからなぁ >>168
それはLuaに限らず動的型付け言語全てに当てはまる部分だと思うけどね。 >>171
何故Pythonとかいうゴミが流行ってるのか理解出来ない
機械学習のライブラリ充実しているから嫌でも使うしかないのが最高にクソ しかしES7とか8を使うための環境整備がクソなのは解消の可能性はあるんでしょうか >>172
個人的には同感、PHPかRubyでいいじゃんって思わなくもない
けど、あちこちで使われてる以上、技術的な理由か、政治的な理由かはともかく、
流されるしかないんだよな >>174
まだPHP/Rubyよりはマシだと思うけど、機械学習は静的言語がいいよね
実行時エラー多すぎて辛い ・何故Pythonか理解できない (Pythonは偶然成功しただけと理解している)
・(偶然だったら) PHPかRubyでいいじゃん
・(偶然が苦手な人には) 実行時エラーが辛い PHP: web以外だと使いづらい
Ruby: RoR以外殆どつかわれていない
だからじゃないの? PHPなんて何だかんだでApacheで使われてるのに、そこまで嫌われてたんだw
知らなかったわ、すまなんだ
個人的には静的型付けならC#とかC++でいいじゃんって気がするけど
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/101compileinvoke/compileinvoke.html
組み込みならAngelScript?ソースじゃなくてコンパイル済みのバイナリぶっこめるし >>181
確かに文字列じゃなくてバイナリとか使い出すと、別のノウハウ必要になるからねぇ 昔はテキストとバイナリを区別しなかったが
型を区別できないと辛いから二つに分裂した >>169
ES6 の import, export をサポートしたブラウザが実在しないという時点で糞だよ そもそも、es6のexportとimportpは仕様が遅れに遅れてるから、当然。
エンジンで実装してるのも、所詮ベータらドラフト的位置付け。 んで、nodejsやらトランスパイラやらでrequirer使うハメになるわけだけど
グローバル変数領域を汚しまくりで、「何このクソ言語?」って感じ あと typescript 。
あれはあれで確かにウチラ玄人プログラマからすれば悪くないんだけど
そもそもプログラム素人がターゲットのスクリプト言語なんて程度のものには
型なんて面倒なもののないお気楽さが求められてんじゃねーのかという気がしないでもない。 やりたきゃお気楽にもできるでしょ。
Typescriptは特にそのへん、動的型付けと型ヒント・型推論の混ぜ具合が絶妙と思う。 JSエンジンでES6対応で簡単にC++に組み込めるのってないですか。
V8は、まともにコンパイルできない。 >>191
typescriptでtargetをes5指定して簡単にコンパイル出来るes5対応のエンジンを使うのはどうよ? ES6対応状況がどんなもんか忘れたがChakraCoreはビルドで楽ちんぽじゃろ >>193
ES6からクラス定義が使えるから、組み込み用途が広がるかなと思ったのです。
ES5なら、V7とかは簡単に組み込めるんだけど。
>>194
ChakraCoreはビルドできるけど、DLL、動的リンク?今のところWindows限定なのが。
V8のgnビルドの途中とか、pythonのエラーと格闘してると本質を忘れてしまいそうになります。
後、MoziraのSpiderMonkeyとか。
どれもこれもビルドするのに必要な情報がなさすぎる。 >>195
え?Windows限定?
https://github.com/Microsoft/ChakraCore
あとtypescriptを組み込み用途として使えば良いんじゃねえのという話なんだけど。事前にjsにコンパイルしたくないというならtypescriptコンパイラも一緒に組み込んだら? >>191
electron についてる node.dll が使えそうな気がするんだけど
情報が殆どないよね >>191
もしかしてV8をCLIでコンパイルしようとしてない?俺もすげーハマったってーか無理
ビルドだけならオプションしっかりしとけばネイティブC++で静的ライブラリ化して使える
違ったらごめん
Win10のUWP限定で良ければ、.NETの名前空間とクラスとかの指定で
あっさりバインドできるんだけど、C++なんだよね・・・
IEの旧JSRTの理解は文献がなさすぎて難しい Luaはソースコード自体を文献といってもいい
V8とかもう文献じゃない V8はなぁ、旧JSRTとほぼ同じ構造って言っていいんだけど、
効率求めすぎてスコープの定義がわかりづらすぎて、
ちょっとバインドして使うにしても敷居が高過ぎる すまん、構造って言ってもスコープの生成/離脱と変数定数類の生成の話 あと duktape がある程度は ES2015 対応してきてるけど >>198
V8のgnでsinファイル作って、それをVS2015で開いてコンパイルするところまで行くんですが、コンパイル中にエラー出まくりで。
ビルドしようとすると、環境を壊してしまいそうです。
gnとか、ninjaとか使わずにsinファイルを添付してほしいですね。 >>202
duktapeのほうが良さそうですね。
ライセンス的にもV7は商用利用はライセンス購入しないとですし。 >>200
V8は確かに効率重視というか、もはや病的。SpiderMonkyとか、Chakraとデッドヒートし過ぎて、この3つは色々と置いてきぼり感が。 >>197
あのnode.dll は、node.js をソースからコンパイルするときに configure --sharedすればつくれるよ
win なら
$ vcbuild.bat dll
でいけるはず
組み込み方法はnode.h とelectronのソースとかC#だけどedge.js のソースとかみて考えるべし 厳格な関数型プログラミングをすれば
共有メモリ(変数)の変更とかないわけだから
マルチスレッドプログラミングに向いてる気がするんだけど、幻想? scalaやHaskellはまさにその目的で使われてるよ >>207
厳格かどうかってより、理論的にきっちり変数類の排他が可能な設計かどうかだけじゃない?
「.NETで〇〇クラスへのアクセス全てについて排他制御する」って決めてCSで排他すれば動くけど
その実態は背後でGCまで動いてたり、そのメモリ管理の機構は他のスレッドからも
目まぐるしく利用されまくってて、アセンブラレベルで見たら
「排他領域をこんなとこにこんな方法で確保してて大丈夫なのかよ!?」って不安になる
・・・けど、ちゃんと動くんだなこれが 厳格な関数型って式を簡約するだけが目的だろ
簡約するためにマルチスレッドプログラミングするのは可能
だがマルチスレッドプログラミングのために簡約するのは無理
厳格じゃなければ可能 厳格な関数型には状態がないから
完全独立型マルチスレッドは可能だが
ある程度同期が求められるようなマルチスレッドは無理ってこと? 独立型っていうかメモリ非共有型?
関数型は共有とコピーの見分けがつかない
ってことは共有するかコピーするかを自分でプログラムする権利もない cプログラムへの組み込みが楽で静的型サポートしてるやつ探してるんだけど、もしかしてtypescript+duktape > angelscriptな感じ? あと、yield/resume みたいな機能ってjavascriptというかduktapeでサポートされてるの?前は無理だった気がするけど というかもしかしてもしかしてtypescriptってUnity版のjavascriptみたいなもん? 静的型が欲しいならTypeScriptがベストだろうね
JSエンジンはChakraCoreが相性もいいし実績もあるのでは
Luaでいうyield/resumeは、Promiseを使うのが流儀かな >>214
ES6にあるよ
Luaより個人的には好き >>215
全然違う
unityのあれはjavascriptぽいだけの別言語で赤の他人
typescriptはjavascriptを機能拡張したもので、拡張した部分は全部事前にjavascriptに変換してから実行する仕組み >>214
javascriptの仕様的にはES6からあるけどduktapeは未サポート
代わりにluaとよく似たcoroutine機能はある Cへの組み込みならJSよりLuaの方がよいよ。
JSが悪いLuaが良いていいたいわけでなく、
同じスクリプトでも前者はWeb出身、後者は最初から組込前提だから
相性がぜんぜん違う。
まずLuaで作ってみてJSで作り直してみるとよく分かる。 論点を絞るべきだね。「相性」では曖昧すぎる
構文? 標準ライブラリ? 同期/非同期? 相性という言葉が曖昧であるという意見はエアプの戯言なので無視してOK 論点を絞るべきだね。「エアプの戯言」では曖昧すぎる >>220
Luaでもいいのかもだけど、JSは使い慣れてるから。
Luaは構文がCとは全然違うから。 LuaはCの組み込み用として作られたはずなのに中括弧じゃなくてendなのは本当謎 Luaって、導入のお手軽さと、Cも知らない様な素人でも使えそうな言語体系だけが
ウリだと思ってたけど、どうなのかね?
実行速度だけを考えたら、AngelScriptみたいなコンパイル済みバイナリ突っ込める奴が無難だし luaはキーワードの直後にカンマが来たりするのにすごく違和感があるけどそれはcに慣れてるからであって例えばpascalの人なら全然抵抗ない。
むしろluaはカッコの代わりにend 使うから敷居が低そうに見える
デザイナーにちょっとだけスクリプト覚えてよっていう時に、jsよりもluaの方が頼む方としても抵抗がない
初心者にとっては記号満載なcよりも英単語のpascalでしょ。ソースはオレ JSはネームスペースに関する機能が貧弱すぎて
所詮web用言語だな〜という感じ。
好きだってだけですすむというならとめはしないが。 組み込む手間の簡単さならJavaだってそうとう楽だぞ
まあフットプリントの大きさを我慢できればの話だが 別プロセスでjvm立ち上げるんじゃなくて組み込みって簡単にできたっけ? ttp://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/invocation.html
これじゃろ V8のコンパイルがやっとできました。
VS2015Update3とWindows10SDKを正しく選択すれば、普通にコンパイル出来た。
最新のVS2017ではダメだし、Windows10SDKもVS2015Update3に付属の一番古いの(バージョン忘れた)でないとダメでした。
Chromeのビルド方法の所に環境についての情報がありました。
甘えかもしれないけど、V8のところにも、書いておいてほしかった。 不思議なんだけど、どんなコードをかけばそこまで開発環境とライブラリとバージョンにそこまで依存したものになるの?? コンパイルはほぼ自動化されてて、環境さえ整えばなんの苦労もなくって感じです。
v8gen.pyは使い物になりませんでしたが。 あ、今更だけど思い出した、cmakeとか使うんだっけ
めんどくさがらずに環境に合わせてきっちりmakeオプション設定しないとダメだよ
それに使わない機能は全部切れば小さく軽くなるよ http://d.hatena.ne.jp/saitodevel01/20101004/1286140929
こちらのvlc拡張機能のluaスクリプトを改造して、リモートのサーバーにあるチューナーから
テレビを視聴したいのですが「このスクリプトはクライアントマシンにチューナーが刺さっているのが前提です)
https://stackoverflow.com/questions/5965062/how-to-establish-an-ssh-connection-in-a-lua-script-to-execute-a-command-on-a-rem
How to establish an ssh connection in a Lua script to execute a command on a remote server? - Stack Overflow
こちらのサイトを参考に
os.execute ('ssh user@192.168.1.4 &'..recdvb --b25 --strip --udp --addr 192.168.1.3 --port 1234 %d - /dev/null &, channel)
などとやってもうまくいきません。luaに関しては素人(ほかにCをかじった程度ですが)何もわからないのですが、
(sshは公開鍵認証にしてパスワード入力無しにしました)どなたかお知恵をくださると嬉しいです。 'ssh user@192.168.1.4 &'..
の..が悪いようでした。
なくしたらうまくいきました。スレ汚してすみません。 LuaはDSLが非常に作りやすい。
玩具としては最高の言語。 LuaFileSystemのWindows用バイナリって公式では配布されていないのかな?
自分でビルドするよう? じゃあ語ろうぜ。俺的にはChakraCoreが熱い。
・バイナリ配布されている。dll入れるだけの手軽さ
・APIがC++じゃなくてC。しかもシンプル
・グローバルなコンテキストに依存しない。マルチスレッドでの利用が考慮されている
・ほぼES6
・速い
LuaとV8のいいとこどりみたいな感じ。 >>245
JSはグローバル変数汚染とかmodule関係とかが弱点の気がするんけどそのへんはどうっすか? グローバルはコンテキストごとに分離しているからその辺は問題ない。
モジュールはES6 import実装済みってことだけど試せてない。
GitHubのチケットに書いてあったAPIがリリース版じゃ見当たらないんだよなぁ。ドキュメントも見つからないし。