トップページtech
981コメント297KB

【Lua】組み込み系言語総合 その4【Squirrel】

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん2011/03/30(水) 01:00:58.93
LuaやSquirrelやAngelScriptなどアプリケーションへの組み込み用途で
使われるプログラミング言語についてのスレッドです
まとめwiki(なにか質問する前に必ずみること!)
http://wikiwiki.jp/lua/

その他の参考URLは>2から

■前スレ
【Lua】組み込み系言語総合 その3【Squirrel】
http://hibari.2ch.net/test/read.cgi/tech/1272643397/

■過去スレ
その2 http://pc12.2ch.net/test/read.cgi/tech/1243210301/
その1 http://pc12.2ch.net/test/read.cgi/tech/1205208141/

プログラミング言語 Lua
その3 http://pc11.2ch.net/test/read.cgi/tech/1160799232/
その2 http://pc8.2ch.net/test/read.cgi/tech/1063711237/
その1 http://pc5.2ch.net/tech/kako/1034/10341/1034182349.html
0809デフォルトの名無しさん2011/10/25(火) 08:16:25.28
c++/clrでlua使うと動いてけど
warning LNK4248: 未解決の typeref トークン (0100001A) ('lua_State') です。イメージを実行できません。
とでる、このwarningどうしたら解決できるのだろうか?

#include "stdafx.h"
#include <lua.hpp>
using namespace System;

int main(array<System::String ^> ^args)
{
lua_State *L;
return 0;
0810デフォルトの名無しさん2011/10/25(火) 09:23:00.98
>>809
#include <lstate.h>
0811デフォルトの名無しさん2011/10/26(水) 01:36:17.41
LuaってC++とかで言うところのenumあったっけ?
0812デフォルトの名無しさん2011/10/26(水) 01:55:37.87
ないよ。標準APIだとそのへんは単純に文字列だぬ
0813デフォルトの名無しさん2011/10/26(水) 01:58:43.66
>>811
ない。
enum相当ならば
http://lua-users.org/wiki/ReadOnlyTables
などで実現できる。
0814デフォルトの名無しさん2011/10/26(水) 16:41:55.17
luaって学んでいく内に他の言語にはあるような機能が無かったり変な縛りがあったりして
少し残念に思ったりする。まぁ代わりの手段はあるとはいえ。
0815デフォルトの名無しさん2011/10/26(水) 19:42:30.06
そこら辺は速度優先するためのトレードオフになってる面が大きいから仕方ないだろ。
気に入らなかったら自分で拡張すれば良いんだし。
0816デフォルトの名無しさん2011/10/27(木) 20:16:43.70
>>815
それもそうか。速さは大事だし。
あんま気にしてなかったけどluaってインタープリター系の言語なんだっけ?
0817デフォルトの名無しさん2011/10/27(木) 21:53:16.36
AngelScript|Д`)<分かりやすい文法と聞いて飛んできました
0818デフォルトの名無しさん2011/10/27(木) 23:16:29.31
>>816
中間言語にコンパイルして、その中間言語をインタプリタ(VM)が実行するスタイルなので、
分類としては「中間言語コンパイラ(バイトコードコンパイラ)」かな。

JIT機能があるので、実際の動作はさらに複雑
0819デフォルトの名無しさん2011/10/28(金) 04:56:52.45
自分がLuaの仕様で最も嫌なところは、ローカル変数を宣言する時、キーワード: local を付けないといけないところ。
つけ忘れると、グローバルになってしまう。
スクリプトはプログラマ未満が書くことも多いため、結果グローバル変数が散見されることもある。
Pythonみたいにデフォルトでローカル、キーワード明示宣言でグローバル出あるべきだと思う。
0820デフォルトの名無しさん2011/10/28(金) 06:05:49.67
>>819
あー、考えてみたらその通りだね。
PHPやPythonみたいにグローバル宣言の時はglobal指定子必須とかにしておくべきだったと思う。
まぁlocal指定子も語感がカッコよくて割りと好きなんだけどねw
0821デフォルトの名無しさん2011/10/28(金) 07:24:52.97
初めてリファレンスみながらいぢってるのだけど
for i=1,10 do
のi ってlocal扱いしてくれるのかな?
0822デフォルトの名無しさん2011/10/28(金) 07:36:35.69
というかグローバルかローカルかなんてどっちでもいい。
0823デフォルトの名無しさん2011/10/28(金) 07:45:56.61
>>821
for文で用いられる変数はローカル変数になると言語仕様に明記されている。

>>821
こんなシロウトがいて開き直るから困る。
0824デフォルトの名無しさん2011/10/28(金) 07:47:39.29
シロウトは>>822だった。
0825デフォルトの名無しさん2011/10/28(金) 08:00:41.25
俺は「変数宣言はlocalで行う」と考えることにした
グローバル変数なんてだいたい無くても何とかなるし
0826デフォルトの名無しさん2011/10/28(金) 08:10:50.50
どう困るかシロウトでも分かるように説明してくれよ。
i と l を見間違えるからとかあほっぽいこといいださないだろうな。
0827デフォルトの名無しさん2011/10/28(金) 08:30:17.05
Luaは配列が1開始なのがやっぱ一番気になるなぁ。
連携先の言語は基本的に0開始だから妙なバグ埋め込まないか不安になる。
まあ今更変更なんて効かない部分だろうけど。
0828デフォルトの名無しさん2011/10/28(金) 10:26:40.29
そういえばC++とかだと
for ( int i=0; test != 10; i++ )
とか条件節に任意の式書けるけど
luaのfor文って条件節に相当する部分には繰り返す数しか書けないよね

while文あるから別に困らないけど少し驚いた
0829デフォルトの名無しさん2011/10/28(金) 10:59:19.34
>>819
whileでもifでもブロック内でlocalにしようと思えばできるところがいいんじゃないか
localをつけ忘れる言語より、つけようと思ったのにできなかった言語の方が不安だ

配列も、ずらそうと思えばずらせる
0830デフォルトの名無しさん2011/10/28(金) 11:29:17.48
英語の文法は日本語と違うとこがいやだといくらいっても無駄だって。
マイナーで流行らないオナニー言語の増加を招くだけ。
0831デフォルトの名無しさん2011/10/28(金) 11:55:32.02
http://moonscript.org/
http://moonscript.org/reference/
これとか中々良いんじゃないか
0832デフォルトの名無しさん2011/10/28(金) 13:01:35.57
グローバル変数はまず単純に処理が重い。

もっと深刻なことは、そのグローバル変数がどの環境で束縛されているか分からなくなるから、クロージャやコルーチンを安全に使うことが難しくなる。

いや、普通に関数呼び出しを行うのも怖くなるか…。
0833デフォルトの名無しさん2011/10/28(金) 17:30:35.91
プログラム初心者のためにlua乗せようと思ったけど
グローバルやらローカルやら教えて使わせるのってつらくないか?

起動に時間かかるプログラムを再起なしで変更くわえられるので
スプリクトとして使えるのがうれしいけど
中級者以上限定って感じ?

皆どんな感じで使ってるの?
0834デフォルトの名無しさん2011/10/28(金) 17:37:49.62
いやもう、なにがなんだかw
0835デフォルトの名無しさん2011/10/28(金) 19:06:02.22
スプリクト! スプリクト!
0836デフォルトの名無しさん2011/10/28(金) 19:41:00.53
習得は容易で初心者でもすぐ扱えるようになるけど
その使途や目的の都合上、実用する際はそれなりにスキルのある人間がやる事が多いんだよね。
だから割と不満が出るんだろうな。
0837デフォルトの名無しさん2011/10/28(金) 21:20:58.72
http://jspp.javascript.am/
luaにcoffeescriptやこういうのみたいに、コンパイラや静的型チェッカーを作ってるプロジェクトはあるのかな?
0838デフォルトの名無しさん2011/10/28(金) 21:33:08.74
http://www.reddit.com/r/lua/comments/j1iwv/using_templates_to_make_a_mostly_typesafe_lua/
lua type-safeで探したら、LuaWrapperという、新しいc++ラッパーが出てきた。
https://bitbucket.org/alexames/luawrapper/src
https://bitbucket.org/alexames/luawrapperexample/src
0839デフォルトの名無しさん2011/10/28(金) 21:57:31.51
>>837
http://lua-users.org/wiki/ProgramAnalysis
0840デフォルトの名無しさん2011/10/29(土) 06:30:45.13
>>835
池袋の西部百貨店の本屋行ってみ。あるから。スプリクトコーナー。マジで。
0841デフォルトの名無しさん2011/10/29(土) 07:53:37.42
>>840
まじかww
0842デフォルトの名無しさん2011/10/29(土) 09:12:44.46
>>827
気になるなら、配列先頭にマッチする正規表現を作ってgrepした結果を比較したら良いだけの話では?
その程度の作業なら3分もかからないだろ。
0843デフォルトの名無しさん2011/10/30(日) 00:55:20.21
12分ぐらいで知るLuaVM
http://www.slideshare.net/Isoparametric/12-luavm
へ〜
0844デフォルトの名無しさん2011/10/30(日) 01:00:39.62
>>839
あざーす
0845デフォルトの名無しさん2011/10/30(日) 03:45:12.60
linux向け?のluaで拡張するブラウザー
lua組込フリークってオオイナー
http://www.linuxjournal.com/content/luakit-extensible-micro-browser
0846デフォルトの名無しさん2011/10/30(日) 06:27:16.17
コマンドラインシェルのNyaosもLuaで拡張できるみたいだね

http://www.nyaos.org/
0847デフォルトの名無しさん2011/10/30(日) 06:55:52.10
>>842
それ比較しても配列の添字が変数だとどうしようもないと思うけど
0848デフォルトの名無しさん2011/10/30(日) 08:40:20.49
というか0開始がおかしいとは考えないの?
0849デフォルトの名無しさん2011/10/30(日) 09:18:02.24
>>847
その変数も追えば良いんじゃね?
0850デフォルトの名無しさん2011/10/30(日) 21:08:55.99
面倒なら配列が0から始まるスクリプト言語使えばいいじゃない。
0851デフォルトの名無しさん2011/10/30(日) 22:31:41.67
ソースからライブラリまで置換してzerolua作ればいいと思う。
全部変える必要があるか分からないけど。
zeroforとかキーワード追加するのもありかもね。
0852デフォルトの名無しさん2011/10/30(日) 22:38:47.11
http://lua-users.org/wiki/CountingFromOne
http://lua-users.org/wiki/IndexIntervalFormatIssue
コメントだらけ、、、
0853デフォルトの名無しさん2011/10/31(月) 01:46:29.25
>>848
自分は最初C学んだ時に0開始になれるのに結構時間かかった。
1開始のが初学者には絶対直感的だけど慣れてくると0開始のが確かに楽できるね。

自分はluaのダメだと思うところはやっぱグローバルがデフォルトなところ。
あとi++とかi += 1とかいう書き方ないのもちょっと面倒くさい

あとさ、luaってCやC++みたいな関数のプロトタイプ宣言なくて
PHPやJavaScriptみたいにファイルの下の方にある関数を自動的に先読みもしてくれないよね。
同一ファイル内でなら自作関数呼び出す前に関数を先に書いておくしかないから
そこがちょっとなーって思う。

まあlua超早いからそういう欠点は大したことないんだけどねw
0854デフォルトの名無しさん2011/10/31(月) 02:46:17.94
デフォルトlocalは無理なので、とりあえず、strict.luaを使えという状況なのか。
http://www.rtpro.yamaha.co.jp/RT/docs/lua/tutorial/strict_lua.html

http://lua-users.org/wiki/DetectingUndefinedVariables
0855デフォルトの名無しさん2011/10/31(月) 03:09:59.10
> 1開始のが初学者には絶対直感的だけど慣れてくると0開始のが確かに楽できるね。
混在してるのは困るが、オリジンは慣れりゃ大差ない
>
> 自分はluaのダメだと思うところはやっぱグローバルがデフォルトなところ。
今更後方互換捨てて変えられてもまいるけどね
ま、省略時グローバルになる言語ならstrictモードがあるし。

> あとi++とかi += 1とかいう書き方ないのもちょっと面倒くさい
代入が文はメリットでもある

> あとさ、luaってCやC++みたいな関数のプロトタイプ宣言なくて
> PHPやJavaScriptみたいにファイルの下の方にある関数を自動的に先読みもしてくれないよね。
> 同一ファイル内でなら自作関数呼び出す前に関数を先に書いておくしかないから
> そこがちょっとなーって思う。
function f(){}ではなくf=function(){}のつもりで。
0856デフォルトの名無しさん2011/10/31(月) 06:02:13.68
>>808
MetaLuaにcontinueがあった、
制御文も関数型言語みたいに関数なのかとおもったら、ASTでプログラム構造をいじってた。
http://metalua.luaforge.net/src/index.html
0857デフォルトの名無しさん2011/10/31(月) 07:51:21.08
>>853
主観的なことを並べて日本語のほうが英語より優れてるとかいっても無駄だよ。
0858デフォルトの名無しさん2011/10/31(月) 12:52:49.11
よく日本語と英語で例えられるけど
luaはハングルみたいなものだと思う
0859デフォルトの名無しさん2011/10/31(月) 13:52:02.29
???
0860デフォルトの名無しさん2011/10/31(月) 15:14:48.87
「I am a girl.」 (i = i + 1)
と書かなくても
「女です」(i++)
と書ける日本語のほうが優秀ーとかいっても無意味ってこと。
0861デフォルトの名無しさん2011/10/31(月) 15:31:09.68
短く書くことが出来るならその点に於いては優秀である、と言うことが出来ると思うがね。
書式を簡略化するメリットというのは確かにあるわけだし。
0862デフォルトの名無しさん2011/10/31(月) 16:09:18.10
cだと、++i, i++があって、i++の動作が分かりづらい。
0863デフォルトの名無しさん2011/10/31(月) 16:14:29.87
http://www.kouno.jp/home/c_faq/c3.html
いまでも、未定義なの?
0864デフォルトの名無しさん2011/10/31(月) 16:19:32.42
未定義
i++はあまり必要じゃないけど
++iはよく使うからあったら嬉しい
0865デフォルトの名無しさん2011/10/31(月) 16:27:01.87
>>861
だったら i+ とか i~ とかでもいいやん。i++は長いだろ。
別に短いのがいいのか悪いなんて議論するつもりはないよ。
自分がよく使う言語にあるという主観的理由で言語仕様を批判しても無駄といってるだけで。
0866デフォルトの名無しさん2011/10/31(月) 16:31:30.57
C の != は変。何でびっくりマークやねん。not は ~ が普通だろ。
0867デフォルトの名無しさん2011/10/31(月) 16:32:54.66
どうすると何が未定義なのか、ちゃんとわかって「未定義」と言ってるのか?

++i は i += 1 と同じだから、C言語では特にいらん気がするけど、i++ は i を
インクリメントしたうえで、式の値はインクリメント前の値だから、たまに
うまく使えることがある。
0868デフォルトの名無しさん2011/10/31(月) 16:39:06.65
ソースが分かりづらくなるだけやん
0869デフォルトの名無しさん2011/10/31(月) 16:41:03.76
冗長であればわかりやすいと錯覚する人向けではないね
0870デフォルトの名無しさん2011/10/31(月) 16:47:56.23
>>866
~はCでもNOTだよ。ただしビット演算の方だけど
0871デフォルトの名無しさん2011/10/31(月) 17:46:59.37
i++はCが作られたCPUかま
ポストインクリメントが出来たからだよな
ポインタなんかでは合理的
0872デフォルトの名無しさん2011/10/31(月) 17:47:55.16
日本語typoわり
0873デフォルトの名無しさん2011/10/31(月) 17:51:56.06
ポインタの指してるオブジェクトのサイズに応じたインクリメント、とか
PDPで出来たのかな?
0874デフォルトの名無しさん2011/10/31(月) 18:43:47.55
>>865
自分が良く使う、というレベルではなく
過半数のプログラミング言語にある仕様であればそれはもう主観的とは言いがたい。
既存のプログラミング言語とどこが違うか考えることは
言語の深い習得にとても重要なことだよ
0875デフォルトの名無しさん2011/10/31(月) 18:57:09.53
++が必要だったらソースあるんだから改造したり、コンバータ作ればいいだけじゃないの?
0876デフォルトの名無しさん2011/10/31(月) 19:33:19.73
JITを作ったのも本家じゃないんだろ?
構文糖も外の人に任せて本家はVM的なものだけ作ってればいいんじゃないの
0877デフォルトの名無しさん2011/10/31(月) 21:34:46.51
よしお前らAngelScriptを使うんだ。
0878デフォルトの名無しさん2011/10/31(月) 22:18:37.55
>>873
68kの元になったアーキテクチャだしな
ちょっとみた限りアクセスサイズ分はいけんじゃないかな
任意のサイズは無理だが
0879デフォルトの名無しさん2011/11/01(火) 01:09:51.02
> 過半数のプログラミング言語にある仕様であればそれはもう主観的とは言いがたい。

「過半数のプログラミング言語にある」だなんて、プログラミング言語を少々知ってれば、
決して言えない台詞だと思うがどうか。

あと ++ の存在、だなんていう表層にとらわれたらダメで、意味論を考えないと。
0880デフォルトの名無しさん2011/11/01(火) 04:00:23.69
てか誰もluaを貶したりしてるわけじゃないと思うんだけどな。
現状不満は無いけどもう少し使いやすくなればいいのにな、って言ってるだけで。
どうもこのスレは理屈っぽいというか偏執的というか、そんな人が多いね。
0881デフォルトの名無しさん2011/11/01(火) 04:13:38.15
まあこれだけだと荒らしみたいなんで、建設的な話題をば。

luaをjavaで使うライブラリでluaJってのがあるみたいだけど、これ速度面は大丈夫なのかな。
見たところ全部javaで書かれてるっぽいから、持ち味の速度が殺されてしまいそうで不安なんだけども。
やっぱJNIで自前実装すべきなんだろうか?
0882デフォルトの名無しさん2011/11/01(火) 04:58:55.99
>>879
言い方が悪かった。過半数というのは古今東西の言語全てではなく、
今主流になっている実務で使われるような言語の中で、という意味ね。
例えば書店で参考書籍が普通に買える様なプログラミング言語には
まず++か+=の仕様が存在すると思う。
まぁ、これは別に++や+=に限らず、他の部分にも言える。

人が使う言語にある仕様ってのは少なからず人が求めているっていうそういうこと。
君だって別に無いならないでもいいけど、あればあった方がいいとは思わない?
0883デフォルトの名無しさん2011/11/01(火) 07:02:38.52
>>882
字面さえ真似ればよくて、もともとそう書かれた理由というのを無視してでもいいじゃない、
便利なんだから。ってこと?
0884デフォルトの名無しさん2011/11/01(火) 07:28:55.34
>>882
Luaは、自分でも作れそうな気がするところに魅力を感じるので
求める人と作る人に分かれて話し合うのは違和感がある。
そういう別々の立場に立つという発想自体が、無い方がいい。
0885デフォルトの名無しさん2011/11/01(火) 07:58:35.23
>>882
何度もいうけど
英語的な文法が世の主流だから英語が客観的に優れてる日本語もそうすべきとかいっても無駄だよ。
0886デフォルトの名無しさん2011/11/01(火) 08:22:16.31
出たマジックワード「実務」w

>>885
いいたとえだ。

文の最初に動詞があれば命令、という規則は単純でわかりやすいから、
日本語もそうしろ、って理屈が暴論なのはわかるよね。それと同じだから。
0887デフォルトの名無しさん2011/11/01(火) 08:34:45.05
つーかお前等そこまで意地になって反論するようなことかぁ?

「○○あったら便利じゃね?」「せやな」

これで済む話だろ。いい加減この話は終われ。邪魔。
>>882もいくら言っても多分平行線で終わるから諦めたほうがいい。
0888デフォルトの名無しさん2011/11/01(火) 08:40:15.98
そもそも全くダメな発想であることを当人が納得しないと、
結局何度も何度も蒸し返しやがるからウザいんだよこのネタは。
0889デフォルトの名無しさん2011/11/01(火) 08:50:42.04
+= はあった方が、テーブルの中のテーブルの中のテーブルの中の要素…辺りを弄るときには楽だと思う
0890デフォルトの名無しさん2011/11/01(火) 09:05:23.99
何度もいうけど、ソースが分かりにくくなるだけジャン
08918872011/11/01(火) 09:06:49.97
>>888
ダメな発想ねぇ・・・
蒸し返すも何もLua自体の開発はまだやってるんだから
言語仕様についての話題出すのは別に構わないと思うんだがな。

そういやLua5.2ってまだリリースはされてないんだったっけ?
0892デフォルトの名無しさん2011/11/01(火) 09:07:32.13
>>887
間違ったことは正さないと。オナニー仕様のオナニー言語が増えるだけジャン。
0893デフォルトの名無しさん2011/11/01(火) 09:11:27.31
そうだよ。世界は892様の為にあるんだから
0894デフォルトの名無しさん2011/11/01(火) 09:37:36.83
仕様仕様うるせーんだよ。いやなら違うスクリプト使えやボケが。
0895デフォルトの名無しさん2011/11/01(火) 09:47:37.97
>>894
いいこと言うな。オナニー仕様がいい奴はオナニー言語でも使ってればいいんだよw
0896デフォルトの名無しさん2011/11/01(火) 09:55:36.58
そうそう。世界は895様が導くんだから
0897デフォルトの名無しさん2011/11/01(火) 10:27:04.39
ソース公開されてるんだから、c-like に変更して配って、賛同者あつめればいいのにね。

一番下にダイクストラの説明が
http://c2.com/cgi/wiki?ZeroAndOneBasedIndexes
0898デフォルトの名無しさん2011/11/01(火) 10:42:56.32
++ は短く書けて便利だけど、式中の項になりえるのが混乱の原因だね。
自作の Teco では ++ のみの文(ステートメント)として定義したよ。
でもC言語で += の動作が未定義になる時ってどんな時だ?
0899デフォルトの名無しさん2011/11/01(火) 15:15:04.92
foo(i++, i++)
が未定義とかって意味ではなくて?
0900デフォルトの名無しさん2011/11/01(火) 15:15:43.45
それよりも、AngelScript で可変個引数が使えるようになるのはいつなんだぜ?
0901デフォルトの名無しさん2011/11/01(火) 22:04:19.34
>>900
ストリームみたいに何かの演算子で渡して、自身の参照を返すようなオブジェクトではダメかい?

int a=100;
ASSteam s;
s<<"とりあえず "<<a<<"を表示";

みたいな感じで。
0902デフォルトの名無しさん2011/11/01(火) 23:38:19.42
>897
それってSquirrelじゃね?
0903デフォルトの名無しさん2011/11/02(水) 00:05:27.75
>>898
初歩的な質問をする時は名無しを装ったほうがいい
0904デフォルトの名無しさん2011/11/02(水) 07:49:09.41
>>903
ありがと。深く考えてなかったw

++ や += みたいな省略記法が便利かどうかは主観的なのかね?
0905デフォルトの名無しさん2011/11/02(水) 08:19:33.68
客観性を口実に何かを義務付けられると不便
義務よりオプションが便利
0906デフォルトの名無しさん2011/11/02(水) 08:59:20.14
>>904
ここは最近やたら屁理屈こねまわす奴が常駐してるからその問いに関するまともな答えは返ってこないと思うよ。
ID出ない板だからいくらでも自演できるしな。

自分の意見としてはこの程度の事で主観だの義務だの議論する事自体ナンセンスだと思うね。
糖衣構文なんて元々オプションみたいなもんだし、いやなら使わなければいいだけ。
他人のソースを解析とかしない限りそれを見ることは決して無いんだから、ソースが分かりにくくなることも無い。
0907デフォルトの名無しさん2011/11/02(水) 09:06:52.93
そもそもC言語の規格で、なにがどう未定義なのかまともな説明すら出ないレベルで、
屁理屈もへったくれもないわw
0908デフォルトの名無しさん2011/11/02(水) 09:17:01.67
>>907
じゃあその話が結論付いたら主観だの義務だ言ってる事の答えになるのか?
そうやってすぐ話をそらす所がへそ曲がりだって言ってるんだよ。
レス数が900を超えています。1000を超えると表示できなくなるよ。