5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

プログラミング言語 Lua

1 :デフォルトの名無しさん:02/10/10 01:52
Lua について語ろう。

http://www.lua.org/

2 :デフォルトの名無しさん:02/10/10 01:54
ぅあ

3 :デフォルトの名無しさん:02/10/10 01:55
せめて、もうちょっとリンク貼ってくれよ。

4 :デフォルトの名無しさん:02/10/10 02:00
5行くらいLuaのサイトのabout読んだけどどういう言語かよく分からんぞ。

>>1は責任を持ってどこがどうパワフルでライトウェイトな言語なのか説明汁。

5 :デフォルトの名無しさん:02/10/10 02:01
言語虫?

6 :デフォルトの名無しさん:02/10/10 02:02
VM?

7 :デフォルトの名無しさん:02/10/10 02:03
Lua FAQ
http://www.lua.org/faq.html

プログラミング言語Luaの紹介
http://staff.aist.go.jp/yutaka.ueno/lua/docsjp.html

プログラミング言語Lua
http://www.etl.go.jp/etl/divisions/~ueno/lua/docj/indexjp.html

8 :デフォルトの名無しさん:02/10/10 02:07
これって、なにがうれしいの?

9 :デフォルトの名無しさん:02/10/10 02:30
>>7
言語仕様にあまり癖がなくてライブラリサイズが小さいのはいいね。
組み込むアプリがないとしょうがないが。

10 :デフォルトの名無しさん:02/10/10 02:54
ヽ(`Д´)ノルァ!

11 :デフォルトの名無しさん:02/10/10 05:26
無意味に同型の言語増やしても意味無いと思うんだ。最近。

12 :デフォルトの名無しさん:02/10/10 05:52
Ruby一つで充分だよね

13 :11:02/10/10 06:04
いや、Rubyなんていらね

14 :デフォルトの名無しさん:02/10/10 06:17
Rb <- ルビジウム

15 :デフォルトの名無しさん:02/10/10 06:17
TTS!

16 :デフォルトの名無しさん:02/10/10 06:44
同型って?(w
増やしてもいいけど取り上げる必要は無いと思うね。

17 :デフォルトの名無しさん:02/10/10 07:55
>>12 >>16
同意。特別嬉しいことが具体的にないのなら。

18 :デフォルトの名無しさん:02/10/10 08:01
Rubyは処理系がださすぎ
初心者丸出しのインタプリタじゃないか!

19 :デフォルトの名無しさん:02/10/10 11:24
>>11
同感。新しいのを出すなら、何らかのパラダイムシフト、または既存言語への
アンチテーゼがあるべきと思います。

20 :デフォルトの名無しさん:02/10/10 13:24
既存言語に対する,同人誌みたいなもんだろ

21 :デフォルトの名無しさん:02/10/10 13:47
>>20
はぁ?意味わかんね

22 :デフォルトの名無しさん:02/10/10 16:02
頭にGoをつけて新言語とするためのネタ言語。

23 :デフォルトの名無しさん:02/10/10 16:39
マイナー言語のスレ立てるのはいいが、>>1はその後のフォローもやれよな。
スレ立てるだけならサルでも出来るぞ。

24 :デフォルトの名無しさん:02/10/10 16:51
 ∧||∧
(  ⌒ ヽ >>1
 ∪ 。ノ
  ∪∪

25 :デフォルトの名無しさん:02/10/10 21:07
前ベンチやってるページ見たらかなり速かったね。るbyとか言う言語よりも♠

26 :デフォルトの名無しさん:02/10/10 22:36
文章で説明されるよりサンプルプログラムがいくつかあると理解が早いと思うんだけどな。

27 :デフォルトの名無しさん:02/10/10 23:38
他言語と貶める過激な紹介文がないと普及しないよ。

28 :デフォルトの名無しさん:02/10/10 23:51
>>27 その点でもRubyは先進的だよね。

29 :Ruby!!!!!!!!!!!:02/10/18 19:46
sonoとおり!

30 :bloom:02/10/18 19:47

http://homepage.mac.com/bloombloom/

31 :デフォルトの名無しさん:02/10/18 20:14
↑Ruby使いは必見!!

32 :デフォルトの名無しさん:02/10/18 21:56
ふぉお
% lua -e 'for i=1,10000000 do end; print(clock())'
0.3359375
% perl -e'for($i=1;$i<10000000;$i++){}; ($u,$s,) = times; print $u+$s,"\n"'
5.78125
% ruby -e'for i in 1..10000000 do end; t = Time.times; p t.utime+t.stime'
3.7578125
%


33 :デフォルトの名無しさん:02/10/21 05:10
Lua Versus Python
ttp://lua-users.org/wiki/LuaVersusPython


34 :デフォルトの名無しさん:02/10/22 07:27
local create = function()
  local t = {content=nil}
  
  local get = function()
    return %t.content
  end

  local set = function(c)
    %t.content = c
  end

  return {get = get, set = set}
end

local o1, o2 = create(), create()
o1.set(1)
o2.set(2)
print(o1.get())  -- 1 が出力される
print(o2.get())  -- 2 が出力される

35 :デフォルトの名無しさん:02/10/22 14:12
とにかく軽くて小さいのはいいぞ。組み込み系な雰囲気。
最近ゲームやゲーム用にライブラリに結構使われてる模様。
Pythonもいいが、ひたすら重厚長大だしな。

36 :デフォルトの名無しさん:02/11/06 11:01
通報しますた

37 :デフォルトの名無しさん:02/11/06 11:44
どこに?

38 :デフォルトの名無しさん:02/11/06 12:05
行末に' ; 'が不要な言語は気持ち悪くて使いたくならない。

「 ' ; 'を付けてもよい 」と書いてあるから
自分で書くぶんには付ければよいだけだが
サンプルプログラムを読むだけでも気持ち悪い。

いつのまにか' ; '無しでは生きていけない身体になってしまってる。


39 :デフォルトの名無しさん:02/11/06 12:25
>>38;
C系言語中毒ですね;
お大事に;

40 :デフォルトの名無しさん:02/11/08 06:54
>>38
Pascal(Delphi)やBasicみたいに区切りに;を使うのを見ると混乱する人ですか?

41 :デフォルトの名無しさん:02/11/08 06:58
lua.org落ちてる?

42 :デフォルトの名無しさん:02/11/08 07:09
Cマガで一度見たきりだな

43 :デフォルトの名無しさん:02/11/08 07:17
> chunk ::= {stat [';'}]
まあ、いやけりゃつけろってことだな。


44 :デフォルトの名無しさん:02/11/08 12:53
まあ、プログラマでないスクリプターさんには
いちいちセミコロン忘れてエラー出るよりありがたいだろう。



45 :デフォルトの名無しさん:02/11/08 17:20
スクリプト言語にも「速さ」が求められる時代なんですね。
・・・って昔からそうだろうけど。

46 :デフォルトの名無しさん:02/11/08 21:09
(2..4).map{|e|e*2}.reverse #=> [8, 6, 4]

↑これは Lua ではどう書けるの?

47 :デフォルトの名無しさん:02/11/08 21:11
(8,6,4)

48 :デフォルトの名無しさん:02/11/08 21:46
いまLuaの処理系ないけど調べてみる。

49 :デフォルトの名無しさん:02/11/09 02:04
iota と map と reverse を書けば

reverse(map(function (i) return i*2 end, iota(2,4)))

とかでいいんじゃない?
Lua知らないから通るかどうか知らんが。


50 :46:02/11/09 07:59
>>49
なるほど〜、ありがとう

51 :デフォルトの名無しさん:02/11/11 02:21
-- Y combinator
function I(x) return x end

function Y(f)
  return I(function (x) return %f(x(x)) end)(
    function(x)
      return %f(function(arg) return %x(%x)(arg) end)
    end
  )
end

local fact = Y(
  function(f)
    return function(x)
      if x == 0 then
        return 1
      else
        return(x * %f(x-1))
      end
    end
  end
)

print(fact(5))  -- 120

52 :luaでGo!:02/11/13 11:04
>>35>最近ゲームやゲーム用にライブラリに結構使われてる模様。ゲーム用ライブラリやプログラムのサンプルなど、どこかにないですか?

53 :デフォルトの名無しさん:02/11/13 11:19
ふと「ひょっとしてPHPレベル?」という疑念が浮かんだのだが。。

54 :名無しさん@Emacs:02/11/13 11:29
いつの間にかLuaのスレッドが出来てたのね。
Lua 3.2の頃に同人ゲームで使ったことある。さくさく使えて楽しいよ。
Lua 5.0になって色々変わって面白そう。またやろうかな。

>>52
> ゲーム用ライブラリやプログラムのサンプルなど、どこかにないですか?

とりあえず思いつく限りではこんな感じ。他にもLua使っているゲー
ムはClanlib使っているゲームの中にちらほらとある。

[GraphicFrontend]
ttp://www.gime.org/twiki/bin/view/Gime/GraphicFrontend

[Clanlib]
http://www.clanlib.org/

[LuaSDL]
http://tulrich.com/geekstuff/index.html

[engine testbed]
http://sourceforge.net/projects/tu-testbed

[Soul Ride]
http://soulride.com/


55 :デフォルトの名無しさん:02/11/15 02:26
>>53
そのレベルというのがどういう観点かわからないけど、
PHPにクロージャはない。luaにはある。

言語としての表現力はかなりレベルが違う。


56 :デフォルトの名無しさん:02/11/16 08:27
参考リンク
http://dmoz.org/Computers/Programming/Languages/Lua/

57 :デフォルトの名無しさん:02/11/16 10:53
あまり面白げなページないな。

58 :デフォルトの名無しさん:02/11/24 00:44
全然盛り上がらんな(笑)

式を評価させるために利用してるよ、自前実装面倒なんで

ttp://staff.aist.go.jp/yutaka.ueno/lua/spe96jp.html
の「2.Luaを作った理由」辺りを読んで使えると思った
やつだけが使えば委員でないの?

59 :58:02/11/24 00:45
で、WinでSJIS日本語の一部の文字(0x5cを含む文字「ソ」とか
「表」とか)がうまく扱えないんで手抜き日本語対応パッチ
(lua-4.0.1用、ビッグエンディアンの人はそれなりに変更すれ)

llex.c 236行から273行
 switch (LS->current) {
  case EOZ: case '\n':
  // 略
 }

 if (_mbsbtype((unsigned char*)&LS->current, 0) == _MBC_LEAD) {
  save_and_next(L, LS, l);
  save_and_next(L, LS, l);
 } else {
  switch (LS->current) {
   case EOZ: case '\n':
   // 略
  }
 }
と変更

60 :58:02/11/24 00:47
ゲームに組み込むとしたらロードとセーブに対応させないと
いけないんだが、いちいち変数ごとに処理するの面倒なので
lua_Stateの状態をそのまま保存・復帰できないのか調査中
やった人居る?

61 :デフォルトの名無しさん:02/12/02 17:37
保守あげ

62 :デフォルトの名無しさん:02/12/07 15:14
>>58 全然盛り上がらんな(笑)

盛りageようyo! Go Lua !!

63 :デフォルトの名無しさん:02/12/07 20:41
>>8

64 :デフォルトの名無しさん:02/12/12 09:11
すぐ下がるねぇ。

あげついでに
lua for unicode なんて話題でも。
http://groups.yahoo.com/group/lua-l/messages/10665

65 :デフォルトの名無しさん:02/12/19 01:14
LUA 5.0beta キター!
http://groups.yahoo.com/group/lua-l/message/10805


66 :Merry X'mas:02/12/24 22:51
lua-5.0-beta.tar.gz 17-Dec-2002 12:34 187k
lua-l-archive.gz 24-Dec-2002 02:33 5.5M
lua-l-digest.gz 23-Dec-2002 22:58 5k
lua-l-recent.gz 24-Dec-2002 02:33 998k
ttp://www.lua.org/ftp/

67 :デフォルトの名無しさん:03/01/09 02:54
また、大阪か、、

68 :デフォルトの名無しさん:03/01/09 03:35
また、大阪か、、

69 :デフォルトの名無しさん:03/01/09 04:19
削除要請板をみると
個人の掲示難なのに管理者側が
めちゃ官僚的なのに笑えます。


70 :デフォルトの名無しさん:03/01/09 13:54
福島もキタ━━━━━━(゚∀゚)━━━━━━ !!!!

71 :デフォルトの名無しさん:03/01/09 14:43
>255
本音が書き込めない

72 :デフォルトの名無しさん:03/01/09 17:40
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────

73 :デフォルトの名無しさん:03/01/09 23:31
>>775
それもコピペ荒らし

74 :デフォルトの名無しさん:03/01/09 23:40
プログラミング言語 Lua の話はどうなった?

75 :デフォルトの名無しさん:03/01/10 08:32
>>607
Age2ch Part4
http://pc3.2ch.net/test/read.cgi/software/1041952901/

76 :デフォルトの名無しさん:03/01/10 09:52
>>196
また明け方に現われる・・・・(´Д⊂)

77 :デフォルトの名無しさん:03/01/10 10:33
>>196
その登場はずるい・・・ヽ(`Д´)ノウワァァン

78 :デフォルトの名無しさん:03/01/10 11:04
>>551

二つ前のレスも読めないのですか。

79 :デフォルトの名無しさん:03/01/10 12:18
>>703
年末まで

80 :デフォルトの名無しさん:03/01/10 13:08
>>639
ウザとかって、もしかして真剣に聞いてたのか?
正直すまんかった。厨は早く寝てね。

81 :デフォルトの名無しさん:03/01/10 15:31

放置してもいいんだが、つい説教してしまうのだよ。
荒らしの放置とは別次元の攻防なわけだ。
一般人が荒らしを放置するのとは違う話ってことだよ。

82 :デフォルトの名無しさん:03/01/10 16:59
IDはたまにかぶるよな。おかげでひどい目にあったよ

83 :デフォルトの名無しさん:03/01/10 23:20
>各板のTOPに一定期間、お知らせみたいに貼ってたら?
テストの結果次第でこのまま運用が続いたら書くかもです。

84 :デフォルトの名無しさん:03/01/10 23:27
■これまでの経緯

削除依頼を出したら
 →削除依頼板以外では受け付けませんよ。
  晒し?知りません

2chルールで削除依頼を出したら
 →2chの匿名は弱者保護です。内容の真実性の判断が出来ません。
  問題があれば裁判でもどうぞ。

状況が不利になってきたら
 →IP記録して問題は当事者どうしで、と言ってみるテスト

現在
 →全部にいれてみた。

85 :デフォルトの名無しさん:03/01/11 00:45
誹謗中傷ってのも立場によって受け止め方も変わる
企業やある個人の内容について要望や改善点を指摘したつもりで書いたものが
誹謗と受け止められるようでは傲慢以外の何物でもない
ただの私怨であってもなんらかの事柄があっての書き込みだろうし
匿名だからこそ参加している者が多数いただろうし
魅力なくなるね

86 :デフォルトの名無しさん:03/01/11 00:50
なにしとんねん!w

87 :デフォルトの名無しさん:03/01/11 11:38
「あそこの病院は、イイ、悪いって」いうのは当然知っておくべき
情報でしょ?口コミだって立派な宣伝なんだから。あまりにも
現実とかけ離れた根拠のない発言はいけないと思うが
「あそこの病院で誤診された」とかっていうのはなんでいっちゃ
いけないの。おれも生まれたとき医者のミスで体の一部分を
無くしたんだが、うやむやになって結局手術台は自分持ちだった。


88 :デフォルトの名無しさん:03/01/11 13:41
赤青ピンク白紺紫
全部混ざれば只の黒
フルート、オーボエ、ティンパニー、オルガン、ピアノ、チェロ、尺八、
チャルメラ、シチリキ、琴、ハープ、
一緒に鳴らせば只の雑音

89 :デフォルトの名無しさん:03/01/11 16:27
幻の.kpドメインが見られるんでつか!!!
それは楽しみでつ。

90 :デフォルトの名無しさん:03/01/11 16:34
内部告発されるようなことをするのが悪いと思うが。

91 :デフォルトの名無しさん:03/01/12 00:38
だいぶ前にあった、2chのシステムを利用したオークションサイトができるという話はどうなったの?

92 :デフォルトの名無しさん:03/01/12 00:48
http://www.maido3click.com/2ch/ranking.html

93 :デフォルトの名無しさん:03/01/12 03:27
あれなんでスレストかかったの?
もう最後の方はさっぱり意味わかんなかったけど・・・
ってゆうかほろゆきが止めたのか?

94 :デフォルトの名無しさん:03/01/12 03:28
は何なの?マドカですらちびりそうになった身としては怖くて開けない。
各板で見るけど。感想は「びびった」ばかり。

95 :デフォルトの名無しさん:03/01/12 10:56
(´・ o ・`) ホー

96 :デフォルトの名無しさん:03/01/12 10:58
は?おいらのこと?
おいらは2ちゃんの味方ですが?
コピペなんかした事ないし

97 :デフォルトの名無しさん:03/01/12 21:30
神戸

98 :デフォルトの名無しさん:03/01/12 21:32
日本の法>>>>>>>>>>(超えられない壁)>>>>>>>>>>>>>>>>2ちゃんのルール

今更の話題によく盛り上がってるな。年明け初2ちゃん組か?

99 :デフォルトの名無しさん:03/01/12 21:43
自作PC板やハード板やDTM板がIEからのアクセスで見れません。
専用ブラウザでは見れます。対処お願いします。

100 :山崎渉:03/01/13 19:03
(^^)

101 :デフォルトの名無しさん:03/01/13 23:34
ID:1/uCJjOuは知的障害者
ID:ADTGAx9xはヒッキー

つーか、いつ寝てるんだ?>おまいら

102 :デフォルトの名無しさん:03/01/15 15:24
age

103 :デフォルトの名無しさん:03/01/15 15:30
この言語はオブジェクト指向言語ではないのか。
残念。

C言語onlyソースから呼び出して使うこともできないのか。

104 :山崎渉:03/01/15 18:16
(^^)

105 :デフォルトの名無しさん:03/01/18 01:25
The Year In Scripting Languages Lua/Perl/Python/Ruby/Tcl 2002
http://www.vendian.org/language_year/

Lua は激動の一年だったそうだ。

106 :デフォルトの名無しさん:03/01/18 01:26
なんせ2chにスレが立ったからな

107 :デフォルトの名無しさん:03/01/20 17:54
>> 103
できるよ

108 :デフォルトの名無しさん:03/01/22 06:49
>>103
オブジェクト指向的使い方もできるよ。
luaのtableはかなーり柔軟。

http://lua-users.org/wiki/ClassesAndMethods


109 :デフォルトの名無しさん:03/01/22 06:53
>>1
これかい?
http://homepage3.nifty.com/digikei/ten.html

110 :山崎渉:03/01/23 20:04
(^^)

111 :デフォルトの名無しさん:03/02/04 23:32
ほしゅ

112 : :03/02/07 18:32
最近、淋しいので…
>>103 C言語onlyソースから呼び出して使う...

system("lua");

さぶ〜


113 :デフォルトの名無しさん:03/02/07 19:08
>>103 >>111
LUAのソースはC言語だし、組み込み用のヘッダファイルも全部C言語なのだがー

114 :113:03/02/07 19:13
訂正。
gsub(>>113, ">>111",">>112")


115 :デフォルトの名無しさん:03/02/07 19:31
ちらっと見るだけだといまいちそそられる感が無いんだけど
誰かどんな点が特徴として熱いのか熱く叫んで。

116 :デフォルトの名無しさん:03/02/08 07:18
小さい。

117 :Go Lua:03/02/09 14:42
あつい国ブラジルで生まれたんだYo-!!!


118 :デフォルトの名無しさん:03/02/10 02:22
#include <stdio.h>
#include "lua.h"
#include "lualib.h"

int main(void){
 lua_State *L=lua_open(0);
 lua_strlibopen(L);
 lua_dostring(L, "a = 1*2*3*4");
 lua_dostring(L, "b = gsub('age sage', '(%w+)', '%1 %1')");
 lua_getglobal(L, "a");
 lua_getglobal(L, "b");
 printf("a = %f\n", lua_tonumber(L, -2));
 printf("b = %s\n", lua_tostring(L, -1));
 lua_close(L);
 return 0;
}

119 :デフォルトの名無しさん:03/03/08 09:50
これmakeしないと使えない。。。
winでmakeする方法を教えてください。

120 :デフォルトの名無しさん:03/03/08 16:59
makeでけた

121 :デフォルトの名無しさん:03/03/09 09:07
luaユーザー募集age

122 :デフォルトの名無しさん:03/03/10 00:55
あるところで、rubyのようでいてオブジェクト指向でない言語として
紹介されたんだが。。。

luaってどう読むの?「ルア」でいいの?

あと、流行ってますか?


123 :デフォルトの名無しさん:03/03/10 01:09
かなり昔、Cマガで取り上げられたの見たっきりだな。
単純だという事以外には、特に利点も無さそうだ。

124 :デフォルトの名無しさん:03/03/10 01:16
組み込み向け、サイズが相当小さい(100k以下)、ゆるいライセンス、が特徴かね。

Angband が使ってるね。
http://www.lua.org/uses.html

125 :デフォルトの名無しさん:03/03/10 18:55
xwLuaあげ

126 :デフォルトの名無しさん :03/03/10 18:58
(#゚Д゚)ルア!!

127 :デフォルトの名無しさん:03/03/10 19:13
とりあえずここかな
http://lua-users.org/wiki/LuaAddons

128 :デフォルトの名無しさん:03/03/10 19:26
Mailing list traffic 見れば結構盛り上がってるぞ。
http://www.lua.org/lua-l-stats.html

129 :デフォルトの名無しさん:03/03/10 20:33
ゴッルア!でいいの?


130 :デフォルトの名無しさん:03/03/10 21:23
lua は、オブジェクト指向的なプログラムも書ける。

http://www.iplab.is.tsukuba.ac.jp/protoku/lua/Lua.htm


131 :デフォルトの名無しさん:03/03/10 23:33
ダウンロード&コンパイルしたけど。。。
こめんとが--というのが萎えた。。。


132 :デフォルトの名無しさん:03/03/10 23:38
そういうな。' よりは良いぞ。

133 :デフォルトの名無しさん:03/03/11 18:20
age

134 :デフォルトの名無しさん:03/03/11 19:01
これ正規表現とか無いの?
つーか何に使うの?


135 :デフォルトの名無しさん:03/03/11 22:04
Ruby-Lua
http://ruby-lua.unolotiene.com/

136 :デフォルトの名無しさん:03/03/11 23:16
>var ::= `Name'
stdin:1:<name> expected near `:'

これの意味は何ですか? エラーぽいんですけど。。

137 :デフォルトの名無しさん:03/03/11 23:29
BNF 記法。言語の文法を表したもの。

138 :デフォルトの名無しさん:03/03/12 23:31
あと、==の反対が~=というのも萎えた。。。


139 :デフォルトの名無しさん:03/03/13 23:19
これってこのソースを使って何かあたらしいスクリプト言語を
作るのに良さそう(w


140 :デフォルトの名無しさん:03/03/13 23:22
うんこ

141 :デフォルトの名無しさん:03/03/14 00:39
素晴らしい言語だが、細部でいままでの言語と趣の違いを感じる。
これがラテンなんだろうか?


142 :デフォルトの名無しさん:03/03/14 02:48
有名どころだと tcl も結構妙ちきちんだぞ。

143 :デフォルトの名無しさん:03/03/14 03:03
テーブルって微妙

144 :デフォルトの名無しさん:03/03/14 19:24
>>143

テーブルは、かなり便利と感じたが。。。


145 :デフォルトの名無しさん:03/03/14 19:52
テーブルっていうのは、COBOL の配列の事か?

146 :デフォルトの名無しさん:03/03/14 22:05
コボルは知らんが、多分普通でいうところの配列
ただし、連想配列なのでAWKの配列のイメージ

このあたりはrubyよりかなりいい!


147 :デフォルトの名無しさん:03/03/15 20:52
コメントって - なの?

それとも -- なの?


148 :デフォルトの名無しさん:03/03/16 00:18
-- >147

149 :デフォルトの名無しさん:03/03/18 22:26
>>148

ありがとう。

ところで、luaつかってますか???


150 :デフォルトの名無しさん:03/03/19 04:15
使い方が分かりません

151 :デフォルトの名無しさん:03/03/19 22:17
>>150
どういうこと?
マニュアルなら日本語の奴もある、
単に用途がみつからんということ???


152 :デフォルトの名無しさん:03/03/20 00:20
なんかこれといって、特徴とか、売りとかがない気がする。
luaだからこんなことができる、とかあるのかな。

感想。
0)全ての文(?)の終端がendなのは萎える。
 rubyもそうだけど、これ、実はすごく読みにくい。
 結局、文の対応がインデントでしかわからない。
1)式の終端記号がない。危険な香りがする。
2)テーブル{}に関係する構文と操作全般がわかりにくい。
3スクリプト用途にしては、)returnとかfunctionとか長い名前が気になる。
 return不用、function → fn or lambda、 local → letとか。まあ修正すりゃいいけど。
4)elseifかよ。
5)local変数群への多重代入がややわかりにくい。
6)でも多値を返せるのは便利。
7)レジストリって何?
8)タグの有効な使い方ってなんだろう?
9)テーブルは慣れれば使いやすいかも。


153 :デフォルトの名無しさん:03/03/20 02:31
>>152
> 7)レジストリって何?

組み込み/拡張用でわ

> 8)タグの有効な使い方ってなんだろう?

タグメソッドでわ

VectorTag=newtag()
function Vector(a,...) do v={}; settag(v,VectorTag); v[1]=a; for i=1,getn(arg) do v[i+1]=arg[i] end; return v; end; end
function dot_product(v, u) do s=0; for i=1,min(getn(v),getn(u)) do s=s + v[i]*u[i] end; return s; end; end
settagmethod(VectorTag, "mul", dot_product)

print(dot_product({1,2}, {3,4}))
print(Vector(1,2)*Vector(3,4))

154 :デフォルトの名無しさん:03/03/20 23:16
>>152

確かにendって使いにくいね。
読みやすさが有ると言う意見もあるが、ちょっこりif文なんかいれて
end忘れたひにゃ。。。(以下略)

あと、キーワードが長過ぎるのも同感

多値リターンはすぐれものか?


155 :デフォルトの名無しさん:03/03/20 23:18
ライセンスがMITなんだけどこれって本当にgpl互換なんだろうか?


156 :デフォルトの名無しさん:03/03/20 23:50
>>155
MIT は修正 BSD 相当だから互換じゃないのか?

157 :ヽ(´ー`)ノ:03/03/21 00:16
>>154
end 使いにくいよね。Lua も Python もかじってみたいんだけど、俺的にネック。


158 :デフォルトの名無しさん:03/03/21 00:19
>157
Python?

159 :デフォルトの名無しさん:03/03/21 00:27
Pythonはendじゃないよね


160 :デフォルトの名無しさん:03/03/21 00:31
rubyの間違い?


161 :ヽ(´ー`)ノ:03/03/21 00:51
あ、ゴメン、Ruby と間違えた。Python はインデントだっけ?
始めに触ったのが C だからブレースが無い言語は苦手…。

162 :デフォルトの名無しさん:03/03/21 01:30
でも、そんなこと気にしてたらもったいないと思う
すぐに慣れるし、慣れたらそんなことどうでも良くなるよ


163 :デフォルトの名無しさん:03/03/21 01:49
end を使うのはブロックの開始を省略できるかどうかによるんじゃないかな。
まあそれはいい。しかし
function f(x)
a = x+1
return a
end
print(f(1))
これのワンライナが
lua -e 'function f(x) do a = x+1; return a end end; print(f(1))'
になるのには少々驚いた。

164 :デフォルトの名無しさん:03/03/21 04:13
おお、こういう書き方ができるのか。upvalue はなかなか画期的な文法かも。

plus = function(a) return function(b) return %a+b end end
print(plus(2)(3)) -- 5

165 :デフォルトの名無しさん:03/03/21 05:49
>>164
それ高階関数だね。
ML風に書くと
val plus=fn a=>fn b=>a+b; print(plus 2 3);
テーブルの役割からすると意味的にはLISPと似てる。
(((lambda(a)(lambda(b)(+ a b)))2)3) ;;5


166 :デフォルトの名無しさん:03/03/21 17:40
>165
むしろ upvalue を使ったスコープの制御が面白いかなと。

それと plus(x)(y) と書けるのは直観的だなと。
ruby だと変数名の後にカッコでは引数を渡せないから [] を使う必要がある:
plus = lambda{|a|lambda{|b|a+b}}
p plus[2][3] # 5
python ではどう書くのだろう。
plus = lambda a: lambda b: a+b
では駄目だし。
この点S式は比べにくい。

167 :デフォルトの名無しさん:03/03/21 18:17
漏れ的に一番驚いたのは、複数戻り値が返せるという点

2番目は、そのソースとバイナリの大きさかな?


168 :デフォルトの名無しさん:03/03/21 19:45
小さいのは builtin が少ないからだろね。おかげで速いのは良きかな良きかな。

多値や多重代入は python でも ruby でもできるよね。
% lua -e 'function f(x) return x*2,x*3 end; a,b = f(3); print(b,a)'
9 6
% python -c '
def f(x): return x*2,x*3
a,b = f(3)
print b,a'
9 6
% ruby -e 'def f(x) return x*2,x*3 end; a,b = f(3); p b,a'
9
6

169 :ヽ(´ー`)ノ:03/03/21 21:14
>>162
そうだね。とりあえず、Lua と Ruby を勉強してみるよ。ありがとう。

>>168
む〜、便利だな。Perl の list($a,$b) = f(3) とは違って、配列と同じ扱いじゃないの?

// 今ちょっとコンパイラが(゚Д゚)マズ-な事になってて Lua を入れれないのです。


170 :デフォルトの名無しさん:03/03/21 23:48
>>169
lua の場合は一つの何かを返すわけではないので common lisp の values に近いみたい
しかしこう↓書けるのでさらにイカす
% lua -e '
function f(x,y) return x+1,y+10 end
print(f(f(0,0)))'
2 20

python と ruby は値を引数リストに展開するために f(*f(1,2)) と書く必要がある
多値といっても ruby は Array を、python は tuple を返すから

171 :デフォルトの名無しさん:03/03/22 16:03
perl -e "sub f{(1+shift,10+shift)} $,=' '; print f(f(0,0))"
2 20


172 :デフォルトの名無しさん:03/03/22 21:58
ルアってユーザいたんだ(w


173 :デフォルトの名無しさん:03/03/23 10:10
luaってオブジェクト指向ですか?


174 :デフォルトの名無しさん:03/03/23 10:11
ユーザっていうか、試用してる。
しかしendがウザイね。
return省いて多値返すときだけvaluesにしたらいいのに。
fun f(x,y) x+1,y+10; //カンマは演算子。y+10が関数の値
fun f(x,y) values x+1,y+10; //カンマはvaluesの区切り


175 :デフォルトの名無しさん:03/03/23 10:13
>>173
どっちかっていうと、LISPみたいな関数型だな。
テーブルのタグ付けでそれっぽい事はできそうだが。

176 :デフォルトの名無しさん:03/03/23 10:24
>>175
Lispみたいなというのはちょとちがうのでは?

177 :デフォルトの名無しさん:03/03/23 10:28
>>176
簡単に言えば、
リストをテーブル(配列)にして、括弧無くしたLISPモドキ→Lua
でしょ

178 :デフォルトの名無しさん:03/03/23 15:20
lispっぽいのは
・関数と変数に型がない
・call by value
・lambda 相当の function
・無名関数
くらいでは。eval がない点は大きく違う。

179 :デフォルトの名無しさん:03/03/23 15:59
lispといえど、関数のeval使うことなんてほとんどない。
repl改造する時ぐらいじゃないか。
それに、lua自身もeval入れようと思えば出来るだろうし。

180 :デフォルトの名無しさん:03/03/23 16:03
むしろlispとの大きな違いは演算子と、区間を限定する構文が
使える事だろう。
lispは括弧を閉じ忘れるだけで、エラー個所の特定が難しくなる。

181 :デフォルトの名無しさん:03/03/23 16:10
eval に代表させたけど反射性は言語の大きな特徴だと思うよ

182 :173:03/03/23 17:09
いろいろ情報ありがとう>>all

私も触ってみようと思いました。
ところで、最近endで区切るのが流行ってる(?)ような感じですが、
これってメリットあるのでしょうか?

(好みは別として)

なんか、素人丸出しで恐縮ですが、{}の方が閉じ忘れをすぐに見付
けることができるっぽいので(例:vi の % キー)良いような気もし
ています。


183 :デフォルトの名無しさん:03/03/23 18:06
そうね。なんちゃら〜endだと非対称だから、
ちゃんとparseしない限り機械的な対応付けも辛い。
既にlua-mode.elなんてのもあるけど。

184 :デフォルトの名無しさん:03/03/23 18:30
>>182
Pascal派への挑戦と受け取る。
























爆撃

185 :デフォルトの名無しさん:03/03/23 21:36
>>182
好みの問題でしょう。
ブロックの開始を省略できるのがメリット
と思える人にはメリット。

186 :デフォルトの名無しさん:03/03/23 22:10
いきなりendは、心臓に悪い。

187 :デフォルトの名無しさん:03/03/23 23:02
>>185
それなら}のみにすれば更に吉かも?


188 :デフォルトの名無しさん:03/03/23 23:03
vimでは対応してますか?


189 :デフォルトの名無しさん:03/03/23 23:05
>>187
いっそ.とかの方が気持ちよくないか?

190 :デフォルトの名無しさん:03/03/23 23:28
end に慣れたから正直些細なこととしか思わない。
Pascal の後で C をやったときは == にも抵抗があったがそれも今では些細なこと。

191 :デフォルトの名無しさん:03/03/24 01:00
>>190
いや、そうではなくて(つまり、好き嫌いとかなれとかでなくて)
editorが対応してない香具師があるというのが問題なんだ

下手すればemacs専用になるよ(w


192 :デフォルトの名無しさん:03/03/24 01:03
>>191
何を訳のわからんことを・・・

193 :デフォルトの名無しさん:03/03/24 01:03
漏れは、c/awk/ruby/...と見て来たが、正直luaもハマリそうだ
しかし、言語が変わるたびに書き方変わるのが正直つらい。

いつになったら、--になれることやら。。。

だれか?マジデluaを改造してくれんか?


194 :デフォルトの名無しさん:03/03/24 04:43
>>190
重度の不感症ですね。

195 :デフォルトの名無しさん:03/03/24 14:24
>191
ttp://lua-users.org/wiki/LuaEditorSupport
Vim, Emacsen, Jed, MED, NEdit, TextPad, Scintilla/SciTE, EditPlus, EditPadPro, MC-Cooledit

196 :デフォルトの名無しさん:03/03/24 19:50
>>195
おお〜、ありがとう!!


197 :デフォルトの名無しさん:03/03/24 21:20
ついでといっちゃあなんだけど、if〜then のthen
ってなんで必要なんだろう?

改行じゃまずいのでしょうか?


198 :デフォルトの名無しさん:03/03/24 21:42
>>195
これって単にハイライト表示するだけじゃないの?
{}のマッチと比較するには非力か?(ちがってたら、スマソ)


199 :MLer:03/03/24 22:07
>>197
演算子の区分を決めるために必要。
ただし、別にthenじゃなくてもいいんだけど。
例えば、C言語の条件演算子'?' と ':' の間の式中には
優先度の低いカンマ演算子が置ける。これと同じ原理。
仮に改行を区切り子にすると、BASICの様な行指向言語に
なってしまう。

200 :デフォルトの名無しさん:03/03/24 23:05
>>199
でも、どうでしょう?
実際のところifの条件箇所をマルチラインでサクッと書ける言語
なんてほとんどないと思うけど。。。


201 :デフォルトの名無しさん:03/03/24 23:12
話が噛み合ってない。

202 :200:03/03/24 23:24
えっと、うまく伝わらなかったみたいでスマソ、

例えば、すっごくなが〜い条件文があったとしても、
backslash で結べば十分だとおもうのですが。。。どこか欠けてますか?

if x>3 and \
y<3
a=4
end

来んな風には書けないとおもったが。。。

if x>3 and
y<3 then
a=4
end



203 :200:03/03/24 23:28
いま手もとでやってみたら書けた(動いた)!
スマン>ALL


204 :デフォルトの名無しさん:03/03/25 01:26
>>198
indent/lua.vim は適切にインデントしてくれる

205 :デフォルトの名無しさん:03/03/25 06:24
だれかコンパイル済みのluaください。

206 :デフォルトの名無しさん:03/03/25 06:32
http://angband.oook.cz/distrib/Angband-303.exe

207 :デフォルトの名無しさん:03/03/25 07:09
>>205
luaのオフィサイトにおいてあるけど

208 :デフォルトの名無しさん:03/03/25 11:16
>>195
最新のvimには両方ついてくるね

209 :デフォルトの名無しさん:03/03/26 22:13
>>204

勘違いしてる香具師が多いので言っとくけど、インデントなんて
ど〜でもいいんよ!


210 :デフォルトの名無しさん:03/03/26 22:37
言語仕様的にはどうでもいいけど、変なインデントは人が読むにはつらいので、適切にインデントしてくれることは重要だと思う。

211 :デフォルトの名無しさん:03/03/26 22:41
pretty-printぐらい欲しいだろう

212 :デフォルトの名無しさん:03/03/26 22:58
>>209

{ } じゃなくて end だと数があってるかがエディタで確認しにくい
  ↓
エディタが end を認識すればいいんだけど
  ↓
emacs ならできるよ
  ↓
じゃあ emacs 以外は?
  ↓
vim には標準で indent/lua.vim がついてくる

213 :デフォルトの名無しさん:03/03/26 23:05
    ↓
vim なんか使ってネエ
    ↓
たかがindentがeditorに依存するのは馬鹿げてる
    ↓
luaは一応program作る言語
    ↓
pretty-printぐらい欲しいだろう
    ↓
pretty-print誰か作れ

214 :デフォルトの名無しさん:03/03/26 23:08
>>213
知るか、死ね。

215 :デフォルトの名無しさん:03/03/27 03:46
>>212,213

サンクス、流れがよくワカッた。
つまり、vimならインデントと言っても%によるマッチが(標準で)つかえるのね?



216 :デフォルトの名無しさん:03/03/27 19:58
LUAって結局はCから呼ばれるライブラリみたいなもんでしょう?
これをスクリプト言語として使うのは、無理でないにしてもやや
目的外って感じになるのでしょうか???


217 :デフォルトの名無しさん:03/03/27 20:47
>>216
んなこたないと思うよ。5.0ではtagまわりがさらに強化されてるし。>>108のリンク嫁

218 :デフォルトの名無しさん:03/03/27 23:46
>>215
試してみたが、indentはインデントであって % によるマッチは行なわない。
改行した瞬間やendと打った瞬間にインデントされる。
また gg=G でバッファ全体のインデントが修正される。
詳しくはvim使いに聞いて。

219 :デフォルトの名無しさん:03/03/28 00:20
>>218
やはり、というか%マッチの威力を知らん香具師のあおりの検証サンクス!
有る意味、自動でインデント(綺麗に)されてると、変なかたわれブロック
が出来たときにかえってバグ取りが難しくなる。

よって、endは糞決定!

>>217
結局TAGっていっても素直にADDのFUNCTIONと(この例読むかぎりでは)なん
の違いもない。(こちらは、99%もれの理かい不足!)


220 :デフォルトの名無しさん:03/03/28 00:31
>>219
> 有る意味、自動でインデント(綺麗に)されてると、変なかたわれブロック
> が出来たときにかえってバグ取りが難しくなる。

そのためにも >> と << があるのでは。

221 :デフォルトの名無しさん:03/03/28 23:44
>>220
なにそれ?


222 :デフォルトの名無しさん:03/03/29 00:00
>>221
To increase the amount of indent in a line, use the ">" operator. Often this
is used as ">>", which adds indent to the current line.
そういうことじゃなくて?

まあ % 好きに非難されるのは理解できなくはない

223 :デフォルトの名無しさん:03/03/29 16:27
もう分かってると思うが
普通のif文の中で、endのないifをいれてしまったら
と思うとぞっとする。


224 :デフォルトの名無しさん:03/03/29 17:48
ほんと、構文については書き直して欲しいな、これ。
センスなさすぎ。

225 :デフォルトの名無しさん:03/03/30 20:20
とはいえ、以外に伸びるなぁこの擦れ
こんなにマイナーな言語なのに。。。(w


226 :デフォルトの名無しさん:03/03/31 05:39
sage

227 :デフォルトの名無しさん:03/03/31 16:07
Lua5.0のcoroutine(Schemeの継続みたいなやつ)って結構おもろいな。

228 :デフォルトの名無しさん:03/03/31 22:12
>>227
subroutineと違うのか?


229 :デフォルトの名無しさん:03/04/01 01:47
おもろいけど独特過ぎないか

230 :デフォルトの名無しさん:03/04/01 05:03
それは言いすぎでないか

231 :デフォルトの名無しさん:03/04/02 00:11
coroutineって普通にCソースから使えないのかな?軽く実装してみたが
どうもうまくいかん。

lua_dostring(l, ... );
while( lua_resume(l) != 0 ){
;
}

というような感じの事をしたいのだけど、5.0Βはまだ謎がいっぱいだ。


232 :デフォルトの名無しさん:03/04/02 00:16
あぁ、あと、構文だけど、ソースをちょっと弄ればCライクなスコープが
記述できるようになるんだけど、Luaって改変して配布するのってOKなの
かな?

まぁ、そこまでして使うのはどうかと思うけど、どーせ使うならあのダサ
いコメント「--」だけは//辺りに変更する事をお勧めするよ。

233 :デフォルトの名無しさん:03/04/02 00:25
>>232
>ダサいコメント「--」だけは//辺りに変更する事をお勧めするよ。

正直、//に比べて--のどこがダサいのかわからん。

単にお前の好き嫌いだろ?



234 :デフォルトの名無しさん:03/04/02 01:08
触ったことある言語だと Ada Occam Haskell Eiffel Sather は -- だったよ
あ SQL もそうだよ
珍しくもないな

235 :デフォルトの名無しさん:03/04/02 01:10
begin endがダサいと言ってるのと変わらんわな

236 :デフォルトの名無しさん:03/04/02 02:37
coroutine って resume で引数渡せるから油断すると goto なみに危険

237 :デフォルトの名無しさん:03/04/02 02:57
>>233
理由は簡単。Cへの組み込みスクリプトだからコメントがCと同じほうが
いいに決まってる。それに--はCではデクリメント演算子なので意味合い
が違う。だから--コメントはダサい。と、個人的に思う。
まぁちょっとパッチ当てるだけで変更出来るんだからいいんだけどね。


238 :デフォルトの名無しさん:03/04/02 03:42
コメントが // で出来るCの処理系ってそんなに多い?

239 :デフォルトの名無しさん:03/04/02 03:48
gccでも-pedanticつけると//はエラーになるな

240 :デフォルトの名無しさん:03/04/02 04:37
いつの話だ‥‥
今じゃ // コメントは ISO C の標準になってるよ。


241 :デフォルトの名無しさん:03/04/02 04:41
gcc でも -std:c99 -pedantic とやればエラーにならない。


242 :デフォルトの名無しさん:03/04/02 04:46
endやめて;にしてくれ>だれか

243 :デフォルトの名無しさん:03/04/02 08:42
>>241
Invalid option `-std:c99'だってよ。ちなみにgcc 2.95.3

244 :241:03/04/02 09:57
>>243
ごめん。-std=c99 のまちがい。
ていうかもはやぜんぜん Lua の話じゃないね。


245 :デフォルトの名無しさん:03/04/02 12:28
>>232
Lua(5.0beta)はMITライセンス(修正BSDライセンス相当)だから、
自由に改変、再配布できるよ。

俺もコメントは//か#がいいのでパッチ作成キボン。
ついでにdo ... endを{ ... }にしてくれると最高。


246 :デフォルトの名無しさん:03/04/02 12:37
>>231
test.c:
#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
int main(int argc, char **argv) {
  int index, i;
  lua_State *L, *co;
  L = lua_open();
  lua_baselibopen(L);
  index = lua_gettop(L);
  lua_dofile(L, "test.lua");
  lua_settop(L, index);
  lua_getglobal(L, "coroutine");
  lua_pushstring(L, "create");
  lua_gettable(L, -2);
  lua_getglobal(L, "co_func");
  lua_call(L, 1, 1);
  co = lua_tothread(L, -1);
  lua_setglobal(L, "co");
  index = lua_gettop(L);
  for (i = 0; i < 4; i++) {
  lua_pushnumber(co, i);
  printf("c: resume=%d\n", lua_resume(co, 1));
  printf("c: co top=%d, L top=%d\n", lua_gettop(co), lua_gettop(L));
  printf("c: co result1=%lf\n", lua_tonumber(co, -2));
  printf("c: co result2=%lf\n", lua_tonumber(co, -1));
  }
  lua_close(L);
  return 0;
}


247 :続き:03/04/02 12:38
test.lua:
function co_func(arg)
  i = 100
  print("co_func: start")
  while 1 do
    print("co_func: arg=", arg, " i=", i)
    i = i + arg
    arg = coroutine.yield(i, arg)
  end
end


248 :デフォルトの名無しさん:03/04/02 18:09
>>246
こんな感じでもOK

#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>
int main(int argc, char **argv) {
  int i;
  lua_State *L, *co;
  L = lua_open();
  lua_baselibopen(L);
  lua_dofile(L, "test.lua");
  co = lua_newthread(L);
  lua_getglobal(co, "co_func");
  for (i = 0; i < 4; i++) {
lua_pushnumber(co, i);
    printf("c: resume=%d\n", lua_resume(co, 1));
    printf("c: co result1=%lf\n", lua_tonumber(co, -2));
    printf("c: co result2=%lf\n", lua_tonumber(co, -1));
  }
  lua_close(L);
  return 0;
}


249 :デフォルトの名無しさん:03/04/03 00:24
>>246
うお神降臨!さっそく試してみます。ところでlua_closethreadって実装されて
なさげなのですが、任意のスレッドを開放するにはどうすればいいんでしょうね?
lua_close使うとエラー 出るし。マニュアルにはちゃんとあるんだけどなー。

>>245
Lua5.0b file:llex.c line:317に次レスを追加。//と/**/が普通に使えるようになります。
きちんとデバッグしてないので自己責任でどーぞ。#も似たような感じで。
ちなみに漏れはlua_commentblock( "//" , "/*" , "*/" )で自由にカスタムできるよう
にしてます。あと、--コメントを消し去りたいのならその次のブロックをコメントアウト。
 Cスコープ{}にあわせる方法はLuaを弄る訳ではなくプリプロセスを通してLua
コードに変換するだけなので汎用性はあるけど、ちょっと微妙。スマヌ。


250 :デフォルトの名無しさん:03/04/03 00:28
case '/': {
next(LS);
if (LS->current != '/' && LS->current != '*' ) return '/';
/* else is a comment */
//long comment
if (LS->current == '*'){
while (1){
if( LS->current == '*' ){
next(LS);
if( LS->current == '/' ){
next(LS);
break;
}
continue;
}
if ( LS->current == EOZ) break;
next(LS);
}
continue;
}

//short comment
next(LS);
while (LS->current != '\n' && LS->current != EOZ){
next(LS);
}
continue;
}

251 :デフォルトの名無しさん:03/04/03 00:36
あー、見直したらいきなりバグあるわ…。/*/がコメントとして扱えちゃう。
上の7行目(if (LS->current == '*'){の次)に
next(LS);
を追加しといてちょ。

252 :デフォルトの名無しさん:03/04/03 00:42
声にならぬ

253 :デフォルトの名無しさん:03/04/03 06:31
>>245
たとえ改変OKでも、言語仕様を変えてしまうのはどうかと思う。


254 :デフォルトの名無しさん:03/04/03 07:23
べつに

255 :デフォルトの名無しさん:03/04/03 09:22
>>249
>ところでlua_closethreadって実装されて

GCに引っ掛けると開放されるのかな?
というか、変数参照されたスレッドをクローズしちゃうとかなりやばそう。

256 :デフォルトの名無しさん:03/04/04 02:01
 うーん、なんかLuaのメモリ管理ってガベコレしてるのか知らんけど、
すんげー量の未使用メモリが残るのな。開放のタイミングも全然良く解か
らんし、こりゃメモリリソースがキツい環境じゃ使用がためらわれるな。
断片化怖いしな。

257 :デフォルトの名無しさん:03/04/04 19:54
でも、その割にはゲームとか組み込みとかリソースの厳しいアプリが多い様な

258 :デフォルトの名無しさん:03/04/04 20:42
>>256
そりゃダメダメだな。
採用しようかと思ってたが、見送ることにするよ。

259 :デフォルトの名無しさん:03/04/04 22:35
コメントは、漏れも#に変えて(ソース変えて)使ってる。
ただ、MLの感じでは5.1あたりから#もコメントとして認識される方向のようだね。


260 :デフォルトの名無しさん:03/04/05 10:21
Cプログラムからのアクセスの仕方がよくわからないです。
わかりやすく説明してほしいなぁ。

261 :デフォルトの名無しさん:03/04/05 12:54
どのへんが分からんの?

262 :デフォルトの名無しさん:03/04/05 13:38
>>261

>>248の例だと、
co = lua_newthread(L); ここで"test.lua"の実行環境整えて、
lua_getglobal(co, "co_func"); co_funcを探して、
lua_pushnumber(co, i); co_funcに引数わたして、
printf("c: resume=%d\n", lua_resume(co, 1)); co_funcがyieldを実行するまで待って、
printf("c: co result1=%lf\n", lua_tonumber(co, -2)); スタックから結果を取り出す。
って感じで理解できるんだけど、

>>246の例では、getglobalとかgettable,settop等が何をやっているのかわかりません。


263 :262:03/04/05 13:39
あと、
>>248の例で、co_funcがどのタイミングで実行されるのかもわかりません。

264 :デフォルトの名無しさん:03/04/05 18:47
>>262
あー、coroutine, thread関係はとりあえず忘れたほうがいいかも?
5.0の新機能だし。

>>246のforの前まではLuaで書くと、以下の文と同様のことをしてる。

 co = coroutine.create(co_func)

(1)lua_getglobal(L, "coroutine");
 グローバル変数"coroutine"をスタックのトップに積む
 ちなみにこいつはテーブルだ。

(2)lua_pushstring(L, "create");
 文字列"create"をスタックのトップに積む

(3)lua_gettable(L, -2);
 スタックのトップから2番目の要素((1)のcoroutineのこと。テーブルである必要がある。)から、
 スタックのトップに積んである文字列("create")で示されるメンバをスタックに積む。
 このとき、スタックのトップはpopされる。
 ちなみに、createメンバは関数なので、その関数がスタックのトップに詰まれる。
 こいつは、(4)で使われる。

(3)lua_getglobal(L, "co_func");
 test.luaで定義された関数co_funcをスタックのトップに積む。

続く...

265 :続き:03/04/05 18:48
(4)lua_call(L, 1, 1);
 関数コール: 引数が(3)のco_funcで、呼ぶ関数が(2)のcreate。
 ちなみに、lua_call(L, m, n)と呼ぶときは、スタックは以下のようになってなければならない。
  stack: ... [関数] [引数1] [引数2] ... [引数n] <- ここがスタックのトップ
 で、呼ばれるとスタックはこうなってる↓。
  stack: ... [戻り値1] [戻り値2] ... [戻り値m] <- ここがスタックのトップ
 つまり、(4)は、
  [関数"create"] [関数:"co_func"] -> [createの戻り値(スレッド)]
 となるわけだ。

(5) co = lua_tothread(L, -1);
  lua_setglobal(L, "co");
 スタックのトップから値をスレッド型でとってきてそれをグローバル変数"co"に設定する。

こんなんで分かるかな?スタックの状態を想像しながら読んでくれ。
coroutineのことは置いといて、LuaをCから使うための基本は大体入ってるような
気がする(グローバル変数の操作、テーブルの操作、Luaの関数呼び出し)。 
あとは、indexの指定の仕方とかどの関数で何がpushされて何がpopされるかが
分かれば大体作れると思うんだけど。

ちなみにcoroutineは、lua_baselibopen(L)を呼んだときに定義されます(ハズ)。


266 :デフォルトの名無しさん:03/04/05 18:50
あ、ごめん。nとmが逆だ。
× ちなみに、lua_call(L, m, n)と呼ぶときは、スタックは以下のようになってなければならない。
○ ちなみに、lua_call(L, n, m)と呼ぶときは、スタックは以下のようになってなければならない。


267 :デフォルトの名無しさん:03/04/05 19:00
>>263
関数が呼ばれるのは、lua_resumeが呼ばれたとき。
lua_resumeは、スレッドのスタックの一番下(index=1)に積んである関数を
呼ぶ(もしくはyieldで中断された実行を再開する)関数ね(多分)。
lua_resumeに指定するのはLじゃなくてスレッドオブジェクトだということに注意。

で、>>248>>246
co = coroutine.create(co_func)
for i = 0, 3 do
  r1, r2 = coroutine.resume(co, i)
  print("main:", r1)
  print("main:", r2)
end
と動作的には同じ事をしてる(厳密に同じわけじゃないけど)。
test.luaのこいつを書き加えれば同じように動くよ。

268 :デフォルトの名無しさん:03/04/06 09:45
C の continue 相当ってどう書いてる?

269 :デフォルトの名無しさん:03/04/06 10:11
>>264-267
coroutine.createってcoroutine["create"]って感じですね。
すごくわかりやすくて、Luaを組み込めるようになりそうです。
どうもありがとうございます。


270 :デフォルトの名無しさん:03/04/06 11:32
マニュアルの日本語訳ってどこ行っちゃったの?
http://216.239.53.100/search?q=cache:www.etl.go.jp/etl/divisions/~ueno/lua/manual4jp.html


271 :デフォルトの名無しさん:03/04/06 12:41
こっちに移ったみたい
http://staff.aist.go.jp/yutaka.ueno/lua/manual4jp.html

272 :デフォルトの名無しさん:03/04/06 23:16
おお!サンクス。
こっちは最後まであるんだね。
これまで、googleのキャッシュをローカルに保存してみてたので、
ちゃんとしたのがあるのは嬉しいなぁ。


273 :デフォルトの名無しさん:03/04/06 23:17
そういえば、Lua4.0とLua5.0bのC言語APIは微妙に違うんだよね。
ちょっとだけ混乱したよ。

274 :デフォルトの名無しさん:03/04/07 00:47
table.function(a, b, c)

table:function(a, b, c)
は逆にして欲しかった。
もしくは、JavaScriptみたいにselfを暗黙のローカル変数にするか。

275 :デフォルトの名無しさん:03/04/07 01:05
変えたいなら、さっさと修正すりゃいいじゃん。

276 :デフォルトの名無しさん:03/04/08 21:51
仕様といえば、複数値がかえせるのに
それを一挙に代入しようとすると、扱いが変わってしまうとき
があるようなので、ちょっと萎えた。


277 :デフォルトの名無しさん:03/04/09 00:07
そうなんだっけ?
例えばどんな場合か書いてもらえると嬉しい。

278 :デフォルトの名無しさん:03/04/09 21:16
たとえば、
x,y=2,3
ならお望み通り

しかし、aho(0)->4,5 と返す関数があったとして、
x,y,z=aho(0),6
としてみて!


279 :デフォルトの名無しさん:03/04/10 08:50
>>278
たとえば
A, B, C を集合とするとき <a,b>∈A×B, c∈C に対して
<x,y,z> = <<a,b>, c> で x=a ∧ y=b ∧ z=c を期待すべきか?
まあ、確かにそうかも知れない。

しかし、
x,y,z = 1,2 ; x == 1 and y == 2 and z == nil
が成り立つ世界でもそれは妥当か?

280 :デフォルトの名無しさん:03/04/10 12:27
で、
function a()
  return 1, 2
end
x, y, z = 0, a()
とすると、
x=0, y=1, z=2
なんだよね。

確かに一貫性がないように見えるね。
リスト中に多値を返す関数がある場合は、
・リストが展開される
・常に戻り値が一つに丸められる
のどちらかに統一した方が仕様的には美しいかも?まぁ、好みの問題か。
(ただ、前者だと関数がいくつ値を返すかによってプログラムの動作が
異なってしまうので好ましくない。)

ちなみにこの辺の動作は、マニュアルの「Calling Functions」の項に
それとなく書かれてる。


281 :280:03/04/10 12:33
うそ。
×「Calling Functions」の項
○「Function Calls」の項
http://staff.aist.go.jp/yutaka.ueno/lua/manual4jp.html#SECTION00045800000000000000


282 :デフォルトの名無しさん:03/04/10 12:36
print((function()end)()) と a=(function()end)(); print(a) が違うのは気持ち悪い

283 :280:03/04/10 13:45
>>282
ん?自然だと思うが?

284 :デフォルトの名無しさん:03/04/10 16:07
>>282
L
ua 4.0 Copyright (C) 1994-2000 TeCGraf, PUC-Rio
>
> print((function()end)())
error: `)' expected;
last token read: `(' at line 1 in string "print((function()end)()) "
>
なんか実行できねーんですけど。
このインタプリタなんかおかしい?

285 :デフォルトの名無しさん:03/04/10 16:10
> a=(function()end)(); print(a)
error: <statement> expected;
last token read: `(' at line 1 in string "a=(function()end)(); print(a) "

なんなの、これ。
一つも実行できねえ。
全然駄目だ・・

286 :デフォルトの名無しさん:03/04/10 16:15
つーかエラーの意味がさっぱりわかんねえ。
これでどうしろと。

287 :デフォルトの名無しさん:03/04/10 16:41
$ lua -v
Lua 5.0 (beta) Copyright (C) 1994-2002 Tecgraf, PUC-Rio
$ lua -e 'print((function()end)())'

$ lua -e 'a=(function()end)(); print(a)'
nil


288 :デフォルトの名無しさん:03/04/10 16:43
>287
-eつかわないでやりたいんだけど

289 :デフォルトの名無しさん:03/04/10 16:44
つーか5.0ってベータじゃん。そんなの使いたくねえ

290 :デフォルトの名無しさん:03/04/10 17:02
>>289
んじゃこれ

$ lua4
Lua 4.0.1 Copyright (C) 1994-2000 TeCGraf, PUC-Rio
> function f() end
> print(f())

> a=f(); print(a)
nil

291 :デフォルトの名無しさん:03/04/10 17:08
>290
そっちは通った。
なんで>>282はダメなの?
なんかLuaって構文的に変だよな。

292 :デフォルトの名無しさん:03/04/10 17:51
>>291
ただ単に、
'(' 式 ')' '(' 引数リスト ')'
っていう構文が定義されてないだけでしょ。

5.0にあるHISTORYに
+ more general syntax for function calls (e.g. (print or write)(9)).
とか書いてあるから、>>282みたいな構文は5.0から新設されたんだと思われ。


293 :デフォルトの名無しさん:03/04/10 18:08
>>291
4のころは
function foo() return function() end end
とは書けたけど、無名関数に適用する構文がなかった。
関数がファーストクラスオブジェクトな言語ではそれは不便なわけで、
実際5では使えるようになったわけで、喜ばしいんじゃないの。

294 :デフォルトの名無しさん:03/04/10 18:28
>>282 は多値と値の個数の関係が気になったんでやってみた。
function f0() return end
function f2() return 1,2 end
に対して
a,b,c,d = f2(),f0(),f2(),f0() は a,b,c,d=1,2,1,2 か a,b,c,d = 1,2,nil,1,2 か。
しかし実際はどちらでもなく a,b,c,d = 1,nil,1,nil となる(>>278)。
では print(f2(),f0(),f2(),f0()) はどうか。
これは print(1,nil,1) と等価(省略可能な引数は値がなければ渡されないから)。
まあ仕組みは分かるんだけど、理屈は納得しにくい。

295 :デフォルトの名無しさん:03/04/10 18:53
そんなことよりendがうざいんですけど。
英語メール打ってよ。
「日本ではendが不評です。
functionは長すぎです。」って。

あとさ、returnあるときと無いときってどうなってるの?
print(function()end)
ってreturn書いてないからエラーにすべきじゃないの?

a = function()end
print(a())

print(a(), 1)
nil 1
結果も違うし、おかしいよこれ。


296 :デフォルトの名無しさん:03/04/10 19:09
print(a(),a())
nil
さっぱりわからん

297 :デフォルトの名無しさん:03/04/10 19:10
>>295
値のない関数自体は悪くないんじゃない?
まあ明示的な return がなければ最後の値またはnilを返すというのもありだと思うが。
それから>>294もいってるように最後の引数は省略可能なので
print((function()end)()) は print() と同様の扱い。

298 :デフォルトの名無しさん:03/04/10 19:12
もう一から設計し直した方がいい気がする・・・。

299 :デフォルトの名無しさん:03/04/10 19:13
> function argn(...) print(arg.n) end
> function nul() end
> argn(nul())
0
> argn(nul(),nul())
1
> argn(nul(),nul(),nul())
2

300 :デフォルトの名無しさん:03/04/10 19:19
>>297
そういうことじゃなくて、つまりさあ、
a()は値を返さない関数なわけだから、
他の関数の引数として使われた時点でエラーにでもしないと
辻褄合わないでしょって事。これじゃバグ埋めこみまくり。

print(a())
error: 値を返さない関数a()を引数に適用しました

とかなんとか。
もうだめぽ。

301 :デフォルトの名無しさん:03/04/10 19:25
まー、確かに関数呼び出しの戻り値の評価のされ方が文脈依存ってのは、
ちょっと気持ち悪いかもな。
C言語APIいじってるとそのうち違和感なくなったりするんだがw


302 :デフォルトの名無しさん:03/04/10 19:27
> a
error: `=' expected;
last token read: `<eof>' at line 1 in string "a"

もういいや。
疲れただけだった。

303 :デフォルトの名無しさん:03/04/10 19:28
こんな感じで処理されてるんよ。多分。

・リスト(引数リスト、多値代入リスト)の途中に現れた場合、1個の戻り値が要求される
・リストの最後に現れた場合、戻り値がそのままリストに加えられる
・どちらの場合でも、戻り値が要求された個数に満たない場合はnilが補完される。
 また、多すぎる場合、先頭から要求された個数のみ使用される。
5.0からは次の場合が追加されてる。
・()で括られた場合、1個の戻り値が要求される。

んで、要求された個数だけ値がリストに加えられて、多値代入なり、
関数コールに使われるわけだね。


304 :デフォルトの名無しさん:03/04/10 19:39
>>300
うーむ、どういうバグを埋め込んでしまうんだろう。。。?

305 :デフォルトの名無しさん:03/04/10 19:43
>>304
値を返すつもりがreturn書いて無かった

エラー出ない

気付かない

動かない


306 :デフォルトの名無しさん:03/04/10 19:51

Lua使えねえ

作者にスパムメール

タイーホ

(´・ω・`) ショボーン

仮釈放

復讐のオニ(`・ω・´)

作者にスパムメール

(繰り返し)

307 :デフォルトの名無しさん:03/04/10 19:54
>>305
動的型付けの言語でそれを期待する方がおかしいと思うが…。
luaだけの問題じゃないし。
(というか、インタプリタでそういうえら出すやつってあんまりないような。)

308 :デフォルトの名無しさん:03/04/10 19:58
っと、動的型付けはあんまり関係ないか。


309 :デフォルトの名無しさん:03/04/10 19:58
>>307
ちゃんと読んでよ。
問題はそこじゃないくて、returnの付け忘れで値が変化することだろ。
防止できないならreturnなんて構文は無い方がいい。
ということ。

310 :デフォルトの名無しさん:03/04/10 20:00
LISPとかRubyは全ての構文が値を返すという前提があるから
こういう問題は起きない。

311 :デフォルトの名無しさん:03/04/10 20:04
ああ、なるほど。
>>298に同意。

312 :デフォルトの名無しさん:03/04/10 20:12
RubyだってLISPだって「値を返すための処理」を付け忘れたら同じことになるんじゃない?

それともそのバグのある関数をほかの関数呼び出しの引数の最後にくっつけたとき、
渡される引数の個数が異なるのことを問題にしてる?


313 :デフォルトの名無しさん:03/04/10 20:13
>>312
>>309

314 :デフォルトの名無しさん:03/04/10 20:26
結局何が言いたいのかよく分からん

rubyなら、
def foo
 initialize()
 result = ...
finalize()
result
end
def foo
 initialize()
 result = ...
finalize()
end
で、値が違ってくるでしょ?
これは、luaのreturnありなしと同じことじゃない?
それともこんな書き方は「できない」ようにした方がいい?


315 :デフォルトの名無しさん:03/04/10 20:28
>>312 >>314
つまりこういうこと。

> a = function() return 0 end
> b = function () a() end --return付け忘れた
> b()
> print(a())
0
> print(b())


あれれ・・

316 :デフォルトの名無しさん:03/04/10 20:36
やっぱ設計し直した方がいいよこれ

317 :デフォルトの名無しさん:03/04/10 20:42
>>315
やっぱり引数の数を問題にしてる?
それが問題になるのは、可変長引数の関数のときだけでしょ?

もしくは、本当に値のことなら、
def foo
 0
end
def foo
 0
 print "debug..."
end
とか、つまらんミスだけど完全には「防止」できないよね?
(俺には「値を返す場所が1つ」で「そこにreturnを付け忘れた」なんていうミスは
上と同列(文法を理解してない)に見える。)

まぁ、関数にreturnが一つでもついていたら、
「returnで値を返さないパスが存在します。」とかの
warningくらい出してくれてもバチは当たらないだろうけどね。

318 :デフォルトの名無しさん:03/04/10 20:44
>>317
なんか、全然理解してくれてないね。
もういいよ。

319 :デフォルトの名無しさん:03/04/10 20:51
ふうむ、もし return を無意味にするためにすべての構文が値を持つようにしたら、
代入文も値を持つので a = b = 0 とか出来るようになるが、
一方で a = b == 0 も合法になるので、
if a = 0 then ... end というありがちな罠が出来るわけだがその辺はどうよ。

320 :デフォルトの名無しさん:03/04/10 20:52
うぅ。ほんとに理解できないんだよ。俺が馬鹿なのか?
誰かもっと実際にありえそうな例で解説してくれ。


321 :デフォルトの名無しさん:03/04/10 20:55
>>320
あんたの好きなrubyの場合、
def a(x) print(x) end と def a(x) return print(x) end で a(1) は nil を返すし、
lispならそもそも return がないが、lua の場合、
function a(x) print(x) end と function a(x) return print(x) end は違うのが危ない
っていってんだろ。

322 :デフォルトの名無しさん:03/04/10 20:59
> a = function(x) if x == 0 then return 0 else b() end end
> b = function()end
> print(a(b()))

> print(a(0))
0

確かに危険だなこれ。

323 :デフォルトの名無しさん:03/04/10 21:03
PascalやVBで言う、「手続き」と「関数」がいっしょくたに書けてしまう
という事だな。
Luaは関数のくせに値を返さない可能性がある。

324 :デフォルトの名無しさん:03/04/10 21:07
function やめて subroutine にすれば解決

325 :デフォルトの名無しさん:03/04/10 21:12
>>324
その場合もfunctionで書いたとき、
return忘れをチェックできないと解決しない。
全ての関数が値を返すという前提で、
return削除するのが一番簡単で楽だと思うけど。

326 :デフォルトの名無しさん:03/04/10 21:18
5.0とかバージョン番号は立派だが、まだ使える段階の言語じゃないな。
0.5の方がいいんじゃないのか。

327 :デフォルトの名無しさん:03/04/10 21:21
>>325
returnはセミコロン(;)と同じ様に、あってもなくてもいい事にすれば、
修正も最小限で済むかな。
さらに変な言語になるけど。

328 :デフォルトの名無しさん:03/04/10 21:34
>>325
いやいや、subroutine は本来値を持つものではないのよ。
しかし return によって値つきで戻ることが出来るわけで。

329 :デフォルトの名無しさん:03/04/10 21:37
リターンなかったらnilを返すようにすればいい。


330 :デフォルトの名無しさん:03/04/10 21:42
そもそも値を返さない function を用意したのはなぜなんだろ
単に構文要素 procedure をケチっただけなんだろうか

331 :デフォルトの名無しさん:03/04/10 21:45
>>328
なんじゃそりゃ。

>>329
それも問題ある。
というか問題が変わってない。

332 :デフォルトの名無しさん:03/04/10 21:50
作ったやつに大きな欠陥があるな。これは。
付き合いきれん。

333 :デフォルトの名無しさん:03/04/10 22:29
 なんかウゼーやつが粘着してんな。ruby厨はどこ行ってもこうだよな。
気に入らないなら使わなきゃいい。これだけヌルいライセンスなんだから
解決策も上げずにクダクダ文句言うのはお門違いだ。キエロ


334 :デフォルトの名無しさん:03/04/10 22:32
ruby厨逝ってよしには同意だが見てる限りじゃ文句いってるのはruby厨ではなさそう

335 :デフォルトの名無しさん:03/04/10 22:35
・functionとprocedureを分ける。
・functionで、returnがない実行パスがあった場合エラー
・procedureは引数リストや代入の中で使えない
でOK?

parserの改造くらいですみそうだが。


336 :デフォルトの名無しさん:03/04/10 22:36
>>333
解決策は上がってるじゃん。
つーかウザそうなやつって、真っ先にお前じゃねーか(w

337 :デフォルトの名無しさん:03/04/10 22:40
そだな。よく読むとただのガイキチのようだ。スマヌ>ruby厨

 ところで、ちょっと前にも話題に出したのだけどlmem.c内のメモリ
確保/開放の所をトレースすると全くと言って良いほど開放が行われて
いないのね。試しにループコード書いてみたらメモリが100M近くまで
確保されても開放する気配もなかった。っていうか通常でも良く解か
らないタイミングでメモリ確保するのね。たとえば
a=1
これだけの行でも数個のメモリを確保してる。(しかも開放しやがらねー)

 生成したスレッドの開放手段も用意されてないし、クラスモドキは
作れてもデストラクタが作れないとか、いろいろと組み込みには問題が
山積みのような気がする。

 betaだからだと思いたいなぁ。


338 :デフォルトの名無しさん:03/04/10 22:40
Luaの中の人も変だったな。

339 :デフォルトの名無しさん:03/04/10 22:41
>>337
gc積んでるんじゃないの?

340 :デフォルトの名無しさん:03/04/10 22:49
>>335
互換性考えるなら、>>325 and >>327

341 :デフォルトの名無しさん:03/04/10 22:50
>>339
そそ、GC積んでるみたいなんだけど、開放タイミングが良く解からないのね。
っていうか、メモリ周りはもうちょっとクリーンに使えないとつらいねぇって話。
出来る事ならメモリ周りはlua_openの時のみ1回の確保にして貰えると助かる。
足りないときは例外投げて再確保とかがいいな。


342 :デフォルトの名無しさん:03/04/10 22:53
>>337
というかそもそもl_free()ってreallocでしか使われてないじゃん。

GCの後余ったメモリをOSに返すようにするGCって稀なんじゃないかな。
コンパクションのときオブジェクト再配置でかかるコストとか馬鹿にならなそう出し。
んで、確保したメモリは1回メモリプールに置いといて、足らなくなりそうだったら
改めて確保するわけだ。だからタイミングが不定に思えるんでしょう。

前にメモリの断片化を心配してたみたいだけど、オブジェクトサイズは
ほぼ一定の大きさになるようにして、文字列とか不定長のやつは別管理にする
とかいうメモリ管理をするのが一般的だと思う、インタプリタでは。
(luaがどうなってるのかは知らないが。realloc()のコストが高そうだ…。)

まぁ、組み込み用途としては失格なのかもしれんが(組み込み機器なんかで使いたい場合は特に。)

デストラクタは、自分で作って明示的に呼びましょうってことじゃない?
Javaと同じく(Javaには一応あるけど事実上使えないよね)。


343 :342:03/04/11 01:03
ソース見てみたけど、たしかにluaのメモリ管理はちょっとアレだね。
どかっとメモリ確保してそれを分割して使うわけじゃないのか。
ちなみに、4.0もほぼ同じコードなのでbetaとれても変わらないでしょう。

まぁ、lmem.cのreallocを自分で固定メモリ領域から取ってくるように
改造すれば対応可能だから、まだましか…?
そういうのを作ってコントリビュートしてみてもいいかもね。

344 :デフォルトの名無しさん:03/04/11 01:20
>>343
うん。lmem.cを見る限りでは外部のallocaterを利用する事も考慮している
みたいなんよね。ただ、開放のタイミングがちょっとアレなので例えばメモ
リプールを64kとかするとあっという間に溢れちゃう。やっぱメモリは不要に
なった先から開放して欲しいっす。
 ここをなんとかしないととてもじゃないけど組み込みどころかPCでも使え
ないすね。っていうかどうゆう環境を想定してんだろ…。

 個人的にはメモリブロックを取得して保存/復帰が出来るようになれば
サイコーなんだけど…。


345 :デフォルトの名無しさん:03/04/11 01:43
 あぁ、ごめん、ちょっと迂闊な事書いたかも。GCのしきい値を決める
void lua_setgcthreshold (lua_State *L, int newthreshold);
って関数があるね。

 ちとLuaをガベコレレスに改造するテストしてみようと思います。上手
くいったらレポートします。

 あとはスレッドの開放だな…。
void lua_closethread (lua_State *L, lua_State *thread);
はマニュアルに記述はあるのでそのうちFixされると思いたいのだが…。


346 :デフォルトの名無しさん:03/04/11 01:57
PCだと、有名どころで
・Baldur's Gate
・MDK2
・Angband
とかあるね。
まぁ、どこで使われてるか、ってのも問題だけど。
BGはAIのところだっけ?

347 :デフォルトの名無しさん:03/04/11 08:14
>>279 4/10 8:50〜の1日だけで投稿数68か。何かあったのかな?
荒らしでもなく、sage優先にしては記録的!
でも、ageると嵐が来そうなので、sageておこうっと。

348 :デフォルトの名無しさん:03/04/11 11:14
>>347
Luaの仕様をちゃんと理解できないやつが難癖つけてただけじゃない?


349 :デフォルトの名無しさん:03/04/11 14:43
>>337
free()で領域がOSに返るかどうかはlibc依存なんだがそういう話ではない?
現状ではOSに返らない環境の方が多いと思う。

350 :デフォルトの名無しさん:03/04/11 15:24
>>349
そういう話ではない。

351 :デフォルトの名無しさん:03/04/11 15:37
どういう話なんだかよくわからないな。

メモリが足りなくなった時に追加確保しないでゴミ掃除なりして欲しいってこと?
(ちゃんとソース読んでないけど) safe-point 方式っぽいからしょうがないんじゃないのかなあ。

参照カウント方式はカンベンしてほしいし。

352 :デフォルトの名無しさん:03/04/11 16:09
>>337
top(1)で観察できるluaのコードは何かありますか?

353 :デフォルトの名無しさん:03/04/11 16:26
GCは単純なマーク&スィープ方式だね。
こいつは、オブジェクトが多くなればなるほど時間がかかるという弱点を持ってる。

上の話は、言語で一括してメモリプールを取るんじゃなくて
オブジェクトを作るたびにmalloc()が走るからメモリ使用状況が
把握しにくいから嫌、って話じゃない?
んで、解決方法としては、malloc()のソースとか持ってくるなりして
アロケータを適当に書く、と。

実際には、言語内で確保したオブジェクトをプールしてるのか、
しばらくするとアロケータもGCもあんまり走らなくなるんだけどね。
(複雑なサンプルでは試してないけど、単純ループとか再帰とかでは。)


354 :デフォルトの名無しさん:03/04/11 21:43
>>353
 コード追ってみました。ほぼ353氏のいうとおりですね。不思議なのは
最後にあるようにある程度走らせたらメモリの再利用らしき挙動が起こっ
てメモリの確保が行われなくなる事かな。ガベコレってそういうもんなの
かも知れないけど、これがちょっと困り者。

 ぶっちゃけ、自分が想定していた家庭用ゲームコンソールへの組み込み
はよほど扱いを限定しないとむつかしそうな感じです。PCゲーならOKかな?

355 :デフォルトの名無しさん:03/04/12 00:24
えらい伸びようだなぁ〜
なんかGCにいちゃもんつけてる粘着がいるみたいだけど、
第一そんなにシビアな環境でなんでインタプリタ使うんだ??
俺には信じられんが。。。(w

まぁ、PCゲーあたりが現実的なターゲットかと。。


356 :デフォルトの名無しさん:03/04/12 00:45
>>355
LuaのWikiでは、ゲームに使うためにGCを何とかしようとかいう議論もあったけどね。
インクリメンタルGCとか世代別GCとか。
俺的には、リアルタイム性という点では、mark&sweepより参照カウントのほうが
向いてると思うんだけどね。Luaを参照カウント方式にするのはかなり労力掛かると思うが…
で、保険としてmark&sweepも入れておくと。

全体的にLuaはメモリアロケーションが少なくてすむように設計されてるように見えるので、
メモリ管理関係にあんまりこだわるのも本質じゃないのかも(もう少しソース追わんと
はっきりとしたこといえないけど。)
ただ、Luaのソース上でのGC呼び出しタイミングとか見てみると、どうもmalloc()が失敗する
ことはほぼ無いという前提で作ってるように見えるので、組み込み系はちょっときついのも
確かか。


357 :sage:03/04/12 01:06
やはり、luaはluaであって
汎用スクリプトには向かん見たいですね。


358 :デフォルトの名無しさん:03/04/12 03:45
>>356
 Luaをガベコレレスにしようと一日格闘してみましたが、根が深くて相当
骨が折れますね。で、諦めて色々なケースでパフォーマンスのチェックをし
てみたのですが、普通の利用では30〜40kb程度で動くようです。複雑な再起
でも単純なループでも確保量があまり変わらないのでおそらくこの辺がLua
の標準プールサイズなのかと思われます。うーん…今の所はこれぐらいすね。

>>355
 別にいちゃもんつけてる訳じゃなくて、Luaの正確な挙動を把握しようと
しているだけ。汎用スクリプトとしてのLuaは非常に興味深いので。
まぁメモリアルゴリズムは組み込み用途に合わせて幾つかのアルゴリズムを
選択できると理想的なんだけどね。

 うーん、有意義な話題だと思ったが粘着扱いか…欝だ。


359 :デフォルトの名無しさん:03/04/12 04:16
正直HSPの方がましだな

360 :デフォルトの名無しさん:03/04/12 04:20
最近>>355みたいな検討違いなバカ多いね。

361 :デフォルトの名無しさん:03/04/12 06:03
>>358
>  Luaをガベコレレスにしようと一日格闘してみましたが、根が深くて相当

漏れも Boehm-Demers-Weiser に変えたらどうなるか調べようと思ったけど、
2時間くらいでは終らなかった。

362 :デフォルトの名無しさん:03/04/12 12:43
>>358
ガベコレレスなんてできるの?
できたら神、ってもう諦めたのかyo!

363 :デフォルトの名無しさん:03/04/12 17:21
構文変えて、違う言語として公開したら、怒られますか?

364 :デフォルトの名無しさん:03/04/12 18:40
怒られないよ。少なくとも5.0betaであれば。
それ以前のバージョンはライセンス読んでないから知らない。

365 :デフォルトの名無しさん:03/04/12 22:04
じゃ、GOLuaでも作るか。

366 :デフォルトの名無しさん:03/04/12 22:08
Lua5.0正式版リリースage

http://www.lua.org/ftp/lua-5.0.tar.gz

367 :デフォルトの名無しさん:03/04/12 22:53
>>365
GとOは何の略でいく?

GNU Objective Lua・・・じゃ面白くないし

368 :デフォルトの名無しさん:03/04/12 23:02

GOLua is Objective Lua

Luaが土台なら使えるものができるかも!

369 :デフォルトの名無しさん:03/04/13 02:03
GOLua is not Overwrite 'Lua'

370 :デフォルトの名無しさん:03/04/13 03:06
さてさて、vmを少し追って見たわけだけど、reallocが呼ばれる可能性があるのは、
・テーブルを作るとき
・テーブルサイズが大きくなるとき(グローバル変数定義含む)
・スレッドを作るとき
・ユーザオブジェクトを作るとき
・文字列操作をしたとき
・再起なのでスタックサイズが伸びたとき
・パーサが動いたとき(luaのインタラクティブモードだとこれでいっぱい確保される)
くらいだと分かりました(漏れがあるかもしれんけど)。

つまり、スタックサイズが十分にあれば、
・テーブルを作らない
・テーブルのメンバを増やしたり配列を伸ばしたりしない
・「深い」関数コールや深い再帰をしない
・文字列操作をしない
という条件下ではreallocはまったく呼ばれないみたいです。
当然オブジェクトも増えないからGCも呼ばれない。

上の話題でメモリが開放されないってのはつまり確保されてないからだね。
for i=0,10000 do a = {} end
こういうのを実行すれば定期的にGCが実行されてメモリが開放されてるのも分かるはず。


371 :デフォルトの名無しさん:03/04/13 03:19
ついでに固定メモリ(配列)からメモリ確保を行うように独自アロケータを作ってみた。
ほんとはlibcとかのmalloc.cとかまともなのもって来たほうがいいんだと思うんだけど、
読むのめんどくさいので超適当なやつ。
Luaは小さいメモリをたくさん確保するので、それにあわせてみた。

↓差分ファイル。 patchに食わせてね。
http://up.your2ch.net/1050171092.txt

メモリ確保は早くなってるみたい。
% time ./lua -e 'for i=0,10000000 do a = {} end'
4.046u 0.015s 0:04.12 98.3% 129+5465k 0+0io 0pf+0w
% time lua -e 'for i=0,10000000 do a = {} end'
6.429u 0.000s 0:06.50 98.7% 128+240k 0+0io 4pf+0w


372 :デフォルトの名無しさん:03/04/13 14:14
>>371
 うわ、またしても神登場だ。ただ、問題視されているのは
for i=0,10000 do a = {} end
で必要とされているメモリはa = {}だけなのにGCの開放タイミングが微妙
なお陰で十数kb近くの確保が行われちゃう事なのね。だから参照カウンタ
方式にして不必要になったらすぐ開放しちゃって欲しいって訳。

 あと、1/60sceとかでループをまわすゲーム用途にはGCが働いた時に負荷
が偏るのも宜しくない訳です。

 うーんでもこの調子で皆でパッチを当てあえばそのうち何とかなりそう
だね。GoLuaができる日も近そうだ。漏れも神目指してがんばるべ。

373 :デフォルトの名無しさん:03/04/13 17:53
>>372
参照カウンタだと参照が循環してるとゴミにならないんだけどそれでいいの?
参照が循環しないように注意しながらプログラムすることに不満はない?

374 :デフォルトの名無しさん:03/04/13 18:12
>>373
参照カウンタとGCを組み合わせればいいのでは?

375 :デフォルトの名無しさん:03/04/13 20:34
>>372
ん、もしかしてgcの基本的な動作が把握出来てない?
あれはスレショルド越えるまでオブジェクトを確保して最後に一気に要らないメモリを開放するという仕組み。
だから不定期にしか解放されないのは問題無い。

最初に数十キロ確保されるのは関数や文字列が確保されるせい。その中に無駄なメモリは無いハズ。
gcを動かさないための条件は上に書いた通り。

ま、任意のオブジェクトをその場で消す機能くらいあってもいいとおもうけどね。

376 :デフォルトの名無しさん:03/04/13 22:14
んでもって、GCレスな言語としてのLuaの現実的な使い方としては、
あらかじめ十分な量のオブジェクト(テーブル)を確保しておいて、
実際のループ内では、オブジェクトプールから必要な分を取ってきて
使うという方法。テーブルじゃなくてユーザデータを使うのもいいかもしれない。

そうすれば、確保するオブジェクト量+Luaコードの複雑さで、
必要とされるメモリ量はほぼわかるはず。
あとは、独自アロケータでも用意しとけば安定した運用が出来るわけですな。
ただ、運用では、安全のために、テーブル生成子({})を使えないようにする
必要があるかも?

スクリプト中でメモリ確保を行うような動作をさせたい場合、
毎フレーム強制的にGCを呼ぶという手もあるけど、GCの速度がまだ未知数…。
暇があったら、今度計ってみようと思う。


377 :デフォルトの名無しさん:03/04/13 23:06
>>376

それは正しいが、そこまでする必要あるならなんでluaつかう?(


378 :デフォルトの名無しさん:03/04/13 23:10
>>377
いや、わからんなら使わないでもいいと思うけどね。熱血で解決。
↓このへんでも読んどくといいんじゃない?PythonをPC、コンソールともに使ったところの記事。
http://www.gamasutra.com/features/20020821/dawson_01.htm


379 :デフォルトの名無しさん:03/04/13 23:49
最近luaもオブジェクト嗜好になりつつあるようで、萎え!


380 :デフォルトの名無しさん:03/04/14 00:00
>>379
超古参ユーザーでつか?

381 :379:03/04/14 01:18
ん?最近ってことでもないのかな?
ソースはVer1のを見たっきり。。。(w


382 :デフォルトの名無しさん:03/04/14 12:08
>>377
漏れ的には演算やループや関数呼び出しにメモリ確保がない(=GCが呼ばれない)だけで
十分に利用価値があると思うけどなぁ。

383 :5.0しか知らない新参者:03/04/14 12:21
>>381
HISTORYによるとオブジェクト指向的な要素が追加されたのは、
1.1→2.0の時のようですな。1995年ころのことらしい。


384 :381:03/04/15 01:02
なるほど、TNX!


385 :デフォルトの名無しさん:03/04/15 03:29
LUAと直接関係無いですが、
どういった部分にスクリプト機能を導入すると、効果的でしょうか?
いろんな例を知りたいです。宜しくお願いします。

386 :デフォルトの名無しさん:03/04/15 04:37
>>377
Luaを含め、内部にVM持ってる系はほとんどがそうだが。

387 :デフォルトの名無しさん:03/04/15 04:37
>>377じゃなくて>>382だった。

388 :デフォルトの名無しさん:03/04/15 04:39
あ、Luaはgc呼ばれるんだっけ。
寝ぼけてた。すんません。

389 :デフォルトの名無しさん:03/04/15 06:18
>>385 いろんな例
ttp://www.lua.org/uses.html

390 :デフォルトの名無しさん:03/04/15 07:10
へー、MKD2で使われてんだ

391 :デフォルトの名無しさん:03/04/15 09:04
>>386
うん。で、言語的に他に遜色ない記述能力を持ち、かつ、処理系が小さい。
だから、Luaに注目してるわけだが…。

392 :デフォルトの名無しさん:03/04/15 12:13
>>391
小さいつったら、他にも沢山ありそうだけど。
あえてLuaに拘る理由って何?

393 :デフォルトの名無しさん:03/04/15 12:49
>>392
よければ他のよさげな候補を教えてクレー。

394 :デフォルトの名無しさん:03/04/15 13:33
>>392
まぁ、別にどうしても拘ってるってわけじゃないけどね。そう見えた?

組み込みというと、PythonやRubyがそういうのを意識したつくりになってるね。
Perlはどうなんだろう?
Pythonは世代別GCをもってるみたいなんで、Luaよりはリアルタイムな組み込み系に
向いてるかもしれない。そういう実績もあるみたいだし。
Rubyも世代別GCが実装されて、バイトコード化もされたんだっけ?詳しく追ってない。

あとは、Mozillaなんかに使われてるJavaScriptエンジンとか、
Netscapeで使われてたJavaScriptエンジン(njs)とかあたりも、ブラウザ以外の
アプリに組み込みで使われることを意識して作られてるね。
njsは実行効率も結構良いらしい(というのはとある日記の受け売りだけど…)。

言語の速度比較サイトとかみてみると興味深いかも。
http://www.bagley.org/~doug/shootout/

あと、LISPとかScheme系で使えそうなのがいろいろありそうだけど調べてない。
おれも情報求む。


395 :デフォルトの名無しさん:03/04/15 14:47
PythonやRubyは組み込むにはちょっとでかいなぁ。
誰でも使いこなせるほどにはコンパクトな仕様じゃない。
あと、ライブラリのスクリプトも同梱しなきゃなんないし。

396 :デフォルトの名無しさん:03/04/15 15:33
>>394

lua思ったより早いですよね。



397 :394:03/04/15 15:39
あー、そうだ、Luaに興味を持ったのはcoroutine(協調型thread)が使えるからだった。
glueとしてのスクリプトだけじゃなくて、各オブジェクトの振る舞い記述にも使えそう
かなぁ、と。だから拘って見えるのは正解だ。

ちなみにpythonもstackless pythonという実装があって、こいつもおんなじ様なことが
できるみたいね。
http://www.stackless.com/spcpaper.htm


398 :デフォルトの名無しさん:03/04/15 15:46
最近の(Stacklessでない方の)Pythonにはgenerator
って仕組みがあってコルーチン的に使えるんだが、
これ以上はスレ違いなのでsage

399 :デフォルトの名無しさん:03/04/15 17:50
>>396 tr 早 速
この速さ(と小ささ)は ruby も見習って欲しいです

400 :デフォルトの名無しさん:03/04/15 22:11
 Luaの魅力はやっぱコードサイズの小ささだろ。後は組み込みの容易さ。
Pythonは気軽に使うにはちと繁雑。Rubyはライセンスうざいから無視。
 あと、複数帰り値や可変引数の扱いが非常にイイ。そんな訳でGCに絡む
メモリ周りはなんとかしたいですね…。


401 :デフォルトの名無しさん:03/04/15 22:19
rubyウザクないよ。デマ流すな。
Artisticライセンス(Perlで使われてるもの)使えばいいでしょ。

402 :デフォルトの名無しさん:03/04/15 22:42
Luaは特に小さいとは思えないが。
言語の大きさはほとんどがライブラリの大きさだよ。

403 :デフォルトの名無しさん:03/04/16 01:26
>>402
比較するならなんかデータを示してほしーなーとか。
ポインタでもいいから。

404 :デフォルトの名無しさん:03/04/16 02:06
ぽいんた?

405 :デフォルトの名無しさん:03/04/16 02:48
既存の比較がないなら今から比較してもいいんだが、
組み込み型やクラスを外すとその型やクラスに関係した文法の
意味論が無効になるわけだがその場合同じ言語と呼べるのか否か。

406 :デフォルトの名無しさん:03/04/16 09:14
LISP系は全部はずしたら何も出来なくなる…。


407 :デフォルトの名無しさん:03/04/16 09:16
ぅあ

408 :デフォルトの名無しさん:03/04/16 16:00
世代別GCは、今実装してるっぽい?
どの辺が、"some internal modifications"なんだろ?

http://lua-users.org/lists/lua-l/2002-10/msg00191.html

> what is the current plan for GC in Lua 5 [...]

We are planning to release 5.0, and then to start working in a
generational GC for 5.1. To make a new GC for 5.0 would delay too much
its final release.

-- Roberto

http://lua-users.org/lists/lua-l/2003-01/msg00147.html

>"incremental garbage collection"? Are there plans for an incremental
>collector or is the generational one being summerised (wrongly?) as an
>incremental one? Did I miss something?

You read it right, we plan to have incremental garbage collection in 5.1.
Lua 5.0 already has some internal modifications to allow this but the real
work will begin as soon as Lua 5.0 (final) is released officially.
--lhf


409 :デフォルトの名無しさん:03/04/16 16:03
>>400
smallとかどうですか?
http://www.compuphase.com/small.htm

parser無しで50Kくらい。
JIT、デバッガつき。ポインタ、GCが無い。Cライク文法。
実績:
 halflife admin mod
 NoX: free Ultima Online Server
 他


410 :デフォルトの名無しさん:03/04/16 19:00
>>409
いいねこれ。
#if とか使えるのが特に。
まさに組み込み向け?

411 :デフォルトの名無しさん:03/04/16 19:33
ICIは割とよく聞く名前なんだけどどうかな
ttp://ici.sf.net/

412 :デフォルトの名無しさん:03/04/16 23:04
>>ici はパブリックドメインなのがいい!


413 :デフォルトの名無しさん:03/04/16 23:44
組み込み向け言語スレ、作った方がよくないか?
light wight 言語萌え

414 :デフォルトの名無しさん:03/04/17 00:19
もう少しここで比較してもいいんじゃないかと思う

415 :デフォルトの名無しさん:03/04/17 00:27
>>408
 Lua5.1か…。意外とリリースは早いのかな?ところで次世代GCと呼ばれる
ものはどういうものを指すのかな?GC+SmartPointerと見て問題なさげ?

 smallって開発止まってたと思い込んでいたけどそうでもなかったのね。
ところで軽量スクリプト言語でリコンストラクトをサポートしているモノ
ってありますか?記憶領域ブロックを保存することで同じ状態を再現でき
るようなもの。
 Unrealに使われているスクリプトエンジンがそんな感じっぽかったんだ
けど、さすがに汎用ではそんなのないか…。

416 :デフォルトの名無しさん:03/04/17 00:44
初歩的な事なんで質問ですが、
sin()とかcos()とかを自前の奴に差し替えたいんですがどうしたらいいんでしょうか?


417 :デフォルトの名無しさん:03/04/17 00:59
>>415
>次世代GC
ナニソレ?

>記憶領域ブロックを保存することで同じ状態を再現できるようなもの。
これは永続化の事を言ってるの?だとしたら、全てのオブジェクトを
GCのマークフェーズの様に辿れる状況であれば、オブジェクトの
アドレスをインデックスに変換するだけでファイルから読み書きできる。
自作の言語でも使ってるけど、昔いくつかのLISP処理系でも見かけた。
あと、この機能を抜き出した単体製品もあった。
ただし、ポインタを辿らせる関係で色々設定が必要。

418 :デフォルトの名無しさん:03/04/17 00:59
>>415
generational GC のことを言っているなら「次世代 GC」じゃなくて「世代別 GC」

どういうものかは Paul R. Wilson の
Uniprocessor Garbage Collection Techniques あたりでも参照してください。

419 :デフォルトの名無しさん:03/04/17 01:04
Lua で採用する次の GC の候補のことなんじゃねえの

420 :デフォルトの名無しさん:03/04/17 01:05
>>416
ttp://lua-users.org/wiki/BindingCodeToLua

421 :デフォルトの名無しさん:03/04/17 01:08
世代別GC(Generational GC):
ゴミになるオブジェクトのほとんどが新規作成されたオブジェクトであるという
仮定の元に作られたGC。通常は新しいオブジェクトのみを対象としたGCを
行うことで、対象オブジェクト数を減らしGCのスピードを稼いでいる。
http://ruri.csys.ce.hiroshima-cu.ac.jp/~masato/research/master-slide/
http://www.atmarkit.co.jp/fjava/rensai2/webopt06/webopt06.html

インクリメンタルGC(Incremental GC):
GCを分割して行えるようにしたもの。GC時間が分割できるのでリアルタイム向け。
全体のGC時間は大きくなる。
http://members.tripod.co.jp/zzyyb/gc/incremental-collector.html

両方の手法をあわせたものもあるみたい。
>>408のlhfが言ってるincremental garbage collectionがどれをさしてるのかは
分からないが。ただ、参照カウントにはならなそうだね。オーバーヘッドやら
実装の複雑性やらが云々とか書いてあった。


422 :デフォルトの名無しさん:03/04/17 01:53
>>420

メッチャ、サンスコ。


423 :デフォルトの名無しさん:03/04/17 02:00
sweepをlazyにしたm&s-gcが単純で速い。
markを世代別にすればさらに無駄が少なくなる。

424 :デフォルトの名無しさん:03/04/17 03:31
>>417
 まぁなんていうか知らないけど、漏れは再構築機構と呼んでます。漏れの
Luaのな使い方はアプリケーションのステータスやインストラクション情報の
構築なんかなんだけど(ゲームで言えばステージセットや敵の配置やイベント
処理ね)、これをLuaコードで吐き出すのではなくLuaに確保した配列情報を
そのままLuaバイナリイメージで保存してそのまま復元できたりすると便利だろうなぁと。

 例えばアプリのコンフィグデータを扱うような場合を考えてみると便利
さが解ると思います。更に将来的にデータが拡張されたりユーザ数によって
サイズが可変したりなんて場合にも連想配列で扱えると便利ですよね?


425 :デフォルトの名無しさん:03/04/17 04:02
コアダンプみたいなものね
しかしインタプリタの実装が変わったらアウトなんでは?
コルーチンを永続化したいのでない限りは、
単にテーブルをシリアライズして持っとけば十分と思うんだが。

426 :山崎渉:03/04/17 15:16
(^^)

427 :デフォルトの名無しさん:03/04/17 22:22
GCによっては、予期しないエラーが発生したりしないですか?


428 :デフォルトの名無しさん:03/04/17 23:16
しない。
つーか主語が何なのか書けよ。質問する前に日本語なんとかしろ。

429 :デフォルトの名無しさん:03/04/17 23:22
主語は書いてあるだろgolua!

430 :デフォルトの名無しさん:03/04/17 23:26
在日はこれだから困る( ´A`)

431 :デフォルトの名無しさん:03/04/18 17:21
luaに刺激されて新しいスクリプトを作ってみたんだけど。。。
演算(+-*/)とif文だけ作って、strip しても既に30kB
luaは脅威だ!!


432 :デフォルトの名無しさん:03/04/18 18:21
>>431
ネタですか?
手元にある、
read.eval.gc.cons.car.cdr.quit.defun.lambda.quote.setq.eq.null.atom.
numberp.print.terpri.rplaca.rplacd.progn.cond.and.or.not.list.+.-.*./.divide.>.<
が組み込まれた習作LISPの実行ファイルは19kb、
quote.if.lambda.set!.macro.begin.define.while.with-input-from-file.with-output-to-file.
and.or.quasiquote.unquote.unquote-splicing.sharp-hook.car.cdr.cons.read.write.load.eq?.
strcat.gc.oblist.pair?.null?.symbol?.string?.number?.macro?.newline.memq.apply.substring.
read-char.write-char.list->string.string->list.not.add2.sub2.mul2.div2.mod2.<.>.<=.>=.display.
string-length.string->symbol.symbol->string.length.string->number.number->string.eqv?.
peek-char.back-char.getd.procedure?.closure?.set-car!.set-cdr!.eval.append2.identity
が組み込まれたSchemeの実行ファイルは26kbですが。
ちなみにUPXで圧縮するとそれぞれ10kb, 14kb,。
ソースは両方ともC言語で700行以下。mingw -O2 strip

433 :デフォルトの名無しさん:03/04/18 19:15
call/ccも欲しい





ってそういう話題じゃないか…。

434 :431:03/04/19 03:40
いや、本当だ。
でも700行でなにがでるんだろう?

今の段かいでwc-lしてみたけど、約2000行いってた。

もちろん、これを1行で書くことも出来るわけだが。。。(w


435 :431:03/04/19 04:17
ちなみに、意味のないことかもしれんが1〜100万までを単純ループで
足し算して合計を求めてみたが。。。

<2000行>
real0m1.234s
user0m1.230s
sys0m0.010s

<lua>
real0m1.538s
user0m1.530s
sys0m0.010s

<ruby>
real0m8.752s
user0m8.710s
sys0m0.010s

と、とりあえずは早いみたい。32ビットコードに変換して
実行させてるからかな?(大きさ&速度)

激しくオフトピなのでsage


436 :デフォルトの名無しさん:03/04/19 05:41
>>435
rubyってもっと遅くない? >>32

437 :デフォルトの名無しさん:03/04/19 05:57
24行もあればBASICインタプリタが
書けることが実証されていますが…
ttp://www.ioccc.org/1990/dds.c

438 :デフォルトの名無しさん:03/04/19 09:10
>>437
BASICではないように見えるが…

439 :>>436:03/04/19 10:11
これみるとrubyはluaより5倍ぐらい遅いみたいね
十分遅いとおもうけど?(w


440 :デフォルトの名無しさん:03/04/19 10:11
>>432
うpしる!!!!

ていうかして下さいお願いします(=´ω`)

441 :デフォルトの名無しさん:03/04/19 10:35
>>437
なにいれてもOkしか帰って来ない?


442 :デフォルトの名無しさん:03/04/19 11:22
lua の フックの仕方が今一よくわからない。

443 :デフォルトの名無しさん:03/04/19 11:57
>>441
$ ./dds
Ok
100 S = 0
Ok
120 FOR I = 1 TO 100
Ok
130 S = S + I
Ok
140 NEXT I
Ok
150 PRINT S
Ok
RUN 100
5050
Ok


444 :デフォルトの名無しさん:03/04/19 11:58
ttp://www0.us.ioccc.org/1990/dds.hint
ttp://www0.us.ioccc.org/1990/LANDER.BAS

445 :デフォルトの名無しさん:03/04/19 14:12
いつのまにか俺言語自慢大会に?


446 :デフォルトの名無しさん:03/04/19 14:44
>>422

すまそ。自己解決。
日本語マニュアル良い感じで訳されて( ・∀・)イイ!!

447 :>>443:03/04/19 15:04
TNX!
なるほど出来た、たいしたもんだね。
100万回ループさせたら、桁溢れしたけど(桁溢れを考慮すると)
値は正しいものだった。

ちなみに、速度は。。。
同一環境で。。。

real0m4.990s
user0m4.980s
sys0m0.000s

こちらも、このソースを考えればすごい!

rubyは、オブジェクト指向なので単純比較は出来ないのかもしれんが、
やはり遅いようだね。


448 :デフォルトの名無しさん:03/04/19 15:31
四則演算するにもオブジェクト参照とメソッドコールが発生するからね。

449 :デフォルトの名無しさん:03/04/19 18:04
1) lua: while
function loop()
 local i = 1000000
 while i > 0 do
  i = i - 1
 end
 return i
end

2) 700行scheme: while
(define (a)
 (let ((i 1000000))
  (while (> i 0)
   (set! i (- i 1)))
  i))

3) 700行scheme: tail call
(define (b)
 (let loop ((i 1000000))
  (if (> i 0) (loop (- i 1))
   i)))

1) 842msec
2) 973msec
3) 2108msec

誤差はあるけど順位は変わらないです。
schemeはread時点でmacro-expand済み。
3)はgcの影響。ちゃんとフロー解析して2)に近づけるのが目標。

450 :デフォルトの名無しさん:03/04/19 19:44
みんな、たいした門だ、
やっぱり、こういうことするには大学の情報系出てるか、
独学で難しい理論しってる必要あるの?


451 :デフォルトの名無しさん:03/04/19 20:03
大学の情報系出てて難しい理論知ってても、こういう事できない人は多い。

452 :デフォルトの名無しさん:03/04/19 20:12
最も大事なのは、やる気、努力、根性、など。
その次に経験が重要で、それらがあれば知識は自然に付いてくる。
ちがうかなぁ?

453 :デフォルトの名無しさん:03/04/19 21:05
速度的にはLuaもいいセンいってるのかな?
ソース見てみると結構煩雑に見えるけど。

454 :デフォルトの名無しさん:03/04/19 23:50
>>453
たしか、上のほうで誰かがHP書いてくれてたけど、
他のスクリプトと比べてもかなり良い線入ってる漢字がした。
配列がやや遅い漢字もするが、これはハッシュと同一なので
納得できるきもする。

いかが?>ALL


455 :デフォルトの名無しさん:03/04/20 00:09
break の文法的制約が繁雑なのと continue がないのは結構不便。

456 :デフォルトの名無しさん:03/04/20 01:40
if ... then
end

萎える

あと、 functionなんで古スペル?


457 :デフォルトの名無しさん:03/04/20 01:53
>>456
お前もか。
俺も、

if ... then begin
end

でないと、と思ったよ。

> function
さすがに、funcとか、fnだと萎えるだろ?

458 :デフォルトの名無しさん:03/04/20 02:06
また構文の話か。
Luaは生涯、この手の話題で無限ループだな。

459 :デフォルトの名無しさん:03/04/20 02:14

漏れは、

if(...){
}

の方が楽で良いな。あと関数はfuncがよくない?

なんつーか、最近の言語ってキーワードが長過ぎて萎え萎え


460 :デフォルトの名無しさん:03/04/20 02:19
>>457
begin無いほうがすっきりするよ。
Wirth先生もModula-2ではbegin無くしてたし

461 :デフォルトの名無しさん:03/04/20 02:52
構文が嫌いなら他の言語使えっての。

462 :山崎渉:03/04/20 02:54
   ∧_∧
  (  ^^ )< ぬるぽ(^^)

463 :デフォルトの名無しさん:03/04/20 02:55
つーかこのスレ、実際にLua使ってる人がいない気がする。
なんか宣伝とか比較とか実験とかそんなのばっかりだし。

464 :デフォルトの名無しさん:03/04/20 03:06
まあ、間違ってもメジャーな言語ではないしね。組み込み向けというのも特殊だし。
前に C もどきのマクロ言語作ったことあったけど、
次にそういう仕事があったら Lua 使うかも。
言語仕様考えるのって大変。

465 :デフォルトの名無しさん:03/04/20 03:06
>>463
漏れはプライベートプログラムじゃ活用しとるが、仕事ではまだ使うには
情報不足やねぇ。で、こんなスレに足げに通ってるワケだ。

でも、何となくだけどアマチュアプログラムの組み込みにLuaはちょっと来
るんじゃないかという予感もあるよ。HSPとかあの辺の層を一気に取り込む
だけの動きがあるんじゃないかと。もちろん漏れはそんなのには興味ないが
そういうコミュニティからLuaへのフィードバックは期待できるしなー。


466 :デフォルトの名無しさん:03/04/20 03:09
http://www.acc.umu.se/~arvid/luabind/
これ何?


467 :山崎渉:03/04/20 03:33
   ∧_∧
  (  ^^ )< ぬるぽ(^^)

468 :デフォルトの名無しさん:03/04/20 06:23
<<465

おいらは、Lua使って弾幕記述言語作ってる。
HSP用のプラグインもついでに作ってるんだが、並列で走らせる方法
とwait時抜け出す方法が分からなくて・・・。
hook使うの分かってるんだがどうも。

469 :デフォルトの名無しさん:03/04/20 12:25
ue
なにそれ?


470 :デフォルトの名無しさん:03/04/20 13:05
もしや BML の実装?

471 :デフォルトの名無しさん:03/04/20 21:57
まぁ、いずれにせよ、luaを使う気はせんなぁ〜。
構文違うし、これといったメリットないし、
さらに、マイナーで、究めつけはまだバグが多くて、仕様がよく変わる。

やはり、組込み向けぐらいかね?漏れは知らんけど。。。


472 :デフォルトの名無しさん:03/04/20 23:07
はいはいそーですかーyかったですね

473 :GoLua:03/04/28 12:33
>>363-GoLua 開発計画はどーなった?

474 :デフォルトの名無しさん:03/04/28 20:09
そんな計画ないし。


475 :デフォルトの名無しさん:03/04/29 01:20
まずはparserから解析しないとね。
Yaccとかそういうのつかっててくれればなぁ…。

476 :デフォルトの名無しさん:03/04/29 15:50
GOLua Overrides Lua

477 :デフォルトの名無しさん:03/05/02 01:03
俺がGOLua作ってもいい?

478 :デフォルトの名無しさん:03/05/05 23:47
いいよ。

479 :468:03/05/06 22:40
白い弾幕君で真面目にサポートしてる<W
このスレもしかして見られてるのかな?

480 :デフォルトの名無しさん:03/05/07 15:57
>>479
見てます。別の弾幕記述言語として、
Lua使ってみたいなーと思って検索したらこのスレ見つけました。
ゲームの組み込みには本当にいいですね。

481 :468:03/05/07 19:45
luaXMLって言うのもあるので。BulletMLとチャンポンも・・・ゲフンゲフン

482 :デフォルトの名無しさん:03/05/07 20:48
コンパイル済みのLuaは公式サイトのどこにありますか?

483 :デフォルトの名無しさん:03/05/08 22:16
コンパイル済みのLuaなんかで何をやるつもりなの?
…としょうがないから反応してみる。

484 :デフォルトの名無しさん:03/05/08 23:35
コンパイル前のソースだけで使えるソフトウェアなどない!
…としょうがないから反応してみる。

MinGWでうまくコンパイルできないんです。

485 :デフォルトの名無しさん:03/05/09 01:34
ん?普通に出来るよ?
mame32plus!のコンパイルに使ったmingwセットだけどw

cygwinで-mno-cygwinだとライブラリは問題なくコンパイルできるけど
lua.exeがなんかうまくcygwinフリーにならない…


486 :デフォルトの名無しさん:03/05/12 02:40
D言語とどちらが先に滅ぶか競争だ!!

487 :デフォルトの名無しさん:03/05/12 03:43
D言語は滅ぶ前に使ってる人いるの?

488 :449:03/05/20 06:34
すれ違いだけど、あれから
2) 66msec
3) 564msec
にまで上がった。
ちなみにもう700行じゃない。
(Cで2000行、schemeで5000行程度)
2)と3)で、またかなり差が開いたが、
2)はループ全体をネイティブコードに変換できた結果。
簡単な演算なら全てネイティブ変換可能にした。
環境に対しての変数参照の手数が結構ある事と、
毎回デクリメントで型変換が発生するのでC言語程速くはならない。
これ以上は型について解析しないと改善されない。
3)はloop呼び出しで一旦ネイティブコードの中断が起きるのと、
毎回環境フレームの移動が起こる結果。
このケースではフレームの直接上書きが可能な事に着目すれば
もうちょっと改善される。whileに形式変換してしまう手もある。
GCは明示的にcons等やclosureを生成していかない限り、起動されることはない。

489 :山崎渉:03/05/28 13:06
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉

490 :デフォルトの名無しさん:03/06/01 01:18
Luaを弄って遊んでる最中。

関数も含めた内部状態を丸ごと保存・丸ごと復帰したいんだけど
方法が判らんぜよ。
luacみたくluaL_loadfile()してluaU_dump()する方法なら問題なく
できるんだけど・・・もしかしてluaL_dofile()、lua_dostring()した
結果は保存不可?

491 :デフォルトの名無しさん:03/06/06 16:28
他のLuaスクリプトファイルで定義されている関数を呼び出すには
どうすればよいでしょうか?
Cのincludeのようなものがあるのでしょうか?

それともlua_Stateを使ってなんらかのバインド処理を行うことが
できるのでしょうか?


492 :デフォルトの名無しさん:03/06/06 16:29
スクリプトなのにそんな面倒なことをしないといけないの?

493 :デフォルトの名無しさん:03/06/06 21:28
>>23
またまたご冗談を・・・・
猿がそんなことできるわけないでしょ。

494 :デフォルトの名無しさん :03/06/07 10:20
>>491
dofile("")


495 :デフォルトの名無しさん:03/06/07 11:25
> ("")
一瞬顔文字に見えたし。

496 :デフォルトの名無しさん:03/06/12 19:44
>>493
8ヶ月前にレスするなんて遅すぎでは?

497 :デフォルトの名無しさん:03/06/24 04:39
静かすぎ。保守。

498 :デフォルトの名無しさん:03/06/24 11:55
      ☆ チン     マチクタビレタ〜
                        マチクタビレタ〜
       ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        ヽ ___\(\・∀・) < Incremental GCまだ〜?
            \_/⊂ ⊂_ )   \_____________
          / ̄ ̄ ̄ ̄ ̄ ̄ /|
       | ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
       |  愛媛みかん  |/


499 :デフォルトの名無しさん:03/06/24 12:52
折返し(500)目前にしてペース落ちたね。
GOLuaどーなってるの? >>477

500 :500:03/06/24 12:53
折返し点 get!

501 :デフォルトの名無しさん:03/06/24 21:17
俺もLuaで弾幕(というか敵キャラモーション)記述言語に挑戦中。
coroutineつかって1キャラ1スレッドとかやってみた。
BulletMLみたいに逐次っぽく書けるやつ。それっぽく動いてる。

LuaXMLとかやったひといる?使い勝手とかどうなんでしょ。
http://lua-users.org/wiki/LuaXml

502 :480:03/06/25 00:45
>>501
期待っす。面白いものができたらぜひ公開してくださいな。
coroutine って速度的にはどうですか?

LuaXML に関してはなんで Lua から XML を
いじる必要があるんだろうかと思ってしまいますが…
たぶん C/C++ 側で処理した方が良いのでは。

503 :デフォルトの名無しさん:03/06/26 00:10
Luaは5.0でライセンスかわっちゃってちょっと使いにくくなったかも。

504 :デフォルトの名無しさん:03/06/26 00:21
■■■かわいそうな「ゲーム君」を2ちゃんの力でトップにしよう!■■■

HSPプログラムコンテスト2003オンライン投票
http://www.onionsoft.net/hsp/contest2003/entryn1.html
                                     
HSPプログラムコンテスト2003に一番乗りで出展したものの
Windowsに標準でついてくるゲームを手軽に起動できるという(というかただのショートカットつめあわせ)
しょーもないプログラムでたたかれまくっているプログラミング暦3年(!)の高校生の
作品、ゲーム君をみんなの力で一位にしよう。
【【【 投票方法 】】】            
http://www.onionsoft.net/hsp/contest2003/entryn1.html の一番下、エントリーNo8の「ゲーム君」
評価を「A」で選んでコメントを記入して「送信」(コメントいれるとなおよし)           
http://www.onionsoft.net/hsp/contest2003/eval/eval.cgi?md=cmt&id=8
でいままで送信されたコメントが見えるよ!(けっこう笑える)             

505 :デフォルトの名無しさん:03/06/26 01:22
うーむ、coroutine(thread)を途中で止めて(関数の終わりまで実行せず)、かつ、
そのcoroutineを再利用したい場合、どうしたらいいんだろう?
あ、再利用ってのは、lua_newthread()で作ったthreadの再利用ね。

スレッド毎回作るのは重そうだから、プールしといて再利用しようと思ったんだけど、
実行が終わってないと、再利用してlua_resume()呼んでも前の関数の続きが
実行されちゃうんだよね(あたりまえだが…)。

506 :505:03/06/26 01:48
ということで、lua_stopthread()を適当に作ってみた。ldo.cとかに入れてね。
今のところうまく動いているように見える。

LUA_API void lua_stopthread (lua_State *L) {
 lua_lock(L);
 L->ci = L->base_ci; /* go back to initial level */
 L->base = L->ci->base;
 L->nCcalls = 0;
 luaF_close(L, L->base); /* close eventual pending closures */
 restore_stack_limit(L);
 lua_unlock(L);
}

>>503
MITライセンスだから、ほとんど制限無いと思うんだが。


507 :505=501:03/06/26 01:57
>>502
>coroutine って速度的にはどうですか?
とりあえず、スレッド付きオブジェクトを200個くらい表示させてみても
60FPSは出てたみたいだから、そんなに遅くないみたい(Pen!!!866Mhz)。
ソース見ても関数呼び出しとほとんど同じだしね。


508 :デフォルトの名無しさん:03/06/26 07:24
>>501
god!
できたら実装例キボンヌ。

> MITライセンス
見てみたけど、BSDライセンスと同様に扱ってOKって感じかな?

509 :デフォルトの名無しさん:03/06/28 19:16
Reference Manualの3.20の
> Each thread has an independent global environment table.
> When you create a thread, this table is the same as that of the given state, but you can change each one independently.
> 各スレッドは独立したグローバル環境テーブルを持っている。
> スレッドを作ったときは、このテーブルは元のテーブルと同じ状態であるが、それぞれ独立して変更を加えられる。
って嘘?

関数はクロージャになってるからそのままではスレッドのグローバル領域に
アクセスできないのはわかるけど、getfenv(0)とかやっても、やっぱりスレッドごとに
別のグローバル変数領域が作られてるようには見えない…

まぁ、lua_newtable(L); lua_replace(L, LUA_GLOBALINDEX);で作ることが出来るわけだけど。。

510 :デフォルトの名無しさん:03/06/29 02:53
スレッドのグローバル変数テーブルをまっさらなテーブルに置き換えると
pairs()やipairs()が使えなくなることに気づいた!

イテレータ間数の取り出しが元のグローバル変数テーブルに依存してんだね。

511 :デフォルトの名無しさん:03/06/29 09:12
なんだか誤訳っぽいかも。
「スレッドを作ったときは、このテーブルは元のステートのものと同じであるが、それぞれ独立に変更できる。」 かな?

512 :デフォルトの名無しさん:03/06/29 11:41
ああ、そうか。
最初は「同じテーブルオブジェクト」を指してるけど、別々のものに
置き換えることも出来るという意味なんだね。
1文目が微妙なんだよなぁ…。あれじゃ、テーブルへのリファレンスの
話じゃなくてテーブル本体の話だと思っちゃうよ。

MLの方には、こう直したほうがいいとかいう話題も上がってた。
"Thread may have an independent table for global variables."
これなら解る。

513 :501:03/06/29 23:10
>>508
Luaでモーション記述する部分はだいたいできてきたんでアップしてみるよ。ソース付き。
luaに関する処理は、luasht.cppに大体まとまってるので、見てみてくださいな。

あと、BulletMLからLuaへのコンバータも適当に書いてみた。
まだうまく動かないのもあるけど、それなりに動いてるっぽい。
ちなみに、あたり判定無いのでゲームにはなってないです。

http://gamdev.org/up/img/030.zip (本体+ソース)
http://gamdev.org/up/img/031.zip (白弾くんのBulletMLから変換)

514 :デフォルトの名無しさん:03/06/30 06:26
>>513
(・∀・)イイヨイイヨー

515 :デフォルトの名無しさん:03/07/03 14:24
>>513
す・・すごいな・・

516 :デフォルトの名無しさん:03/07/03 16:56
もうちょっといかしたLUA用IDEはないもんか・・・
5.0用だと、wxLuaをつかわざるをえないのかな

517 :デフォルトの名無しさん:03/07/03 22:14
>>516
emacs+lua-mode.el

というか、IDEったってやることなさそう。

518 :デフォルトの名無しさん:03/07/04 10:09
>>517
ありがとう!ためしてみます。
ひょいひょい使える環境をさがしてたもんで。
wxLuaもなかなかのもんでした。

519 :デフォルトの名無しさん:03/07/07 23:47
また、スレッドの話なんだけど、lua_resume()して、yieldで戻ってきてサスペンドしてる
スレッドでlua_call()とかすると落ちちゃうんだね...
まぁ、なんとなく駄目かもとかいう予感はあったけど(lua_Stateの構造から)。

でも、スレッドのグローバル変数領域とlua_call()で呼ばれる関数から見えるグローバル
変数領域を同じにしたいんだな...。どうしたものか。

520 :デフォルトの名無しさん:03/07/08 20:33
もういっこスレッドを作って、それで call すれば?変数は共有できるっしょ、たしか

521 :デフォルトの名無しさん:03/07/09 09:16
いっぱいあるスレッドから、毎回グローバル変数領域取ってきて共有させて実行とか
結構越すとか借りそうかと思ったら、Lua関数3つ呼び出すだけでグローバル変数領
域移せるんだね。
lua_pushvalue(fromL, LUA_GLOBALSINDEX);
lua_xmove(fromL, toL, 1);
lua_replace(toL, LUA_GLOBALSINDEX);
そんなコストかから無そうだから、これで逝くことにした。
サンクス!

522 :デフォルトの名無しさん:03/07/09 11:01
>>521
ずいぶんと有益な情報だな・・・

523 :521:03/07/09 13:53
あ、>>521は、全部のLuaスレッドにあらかじめ別々のグローバル変数領域を
設定しているときの話ね。普通にスレッド作ると、グローバル変数領域は、
全部一緒の領域が共有されてるから。

524 :デフォルトの名無しさん:03/07/10 07:59
:と.の使い分けがいまだにわからん・・・


525 :デフォルトの名無しさん:03/07/10 09:22
obj:method(hoge)
は、
obj.method(obj, hoge)
と同じ。

526 :デフォルトの名無しさん:03/07/10 13:33
わ〜いサンクス>525

話は変わるけど、
eclipse+Luaやってみたい。


527 :デフォルトの名無しさん:03/07/14 00:14
wxLua2.1 あげ

528 :デフォルトの名無しさん:03/07/14 20:58
wxLuaってただのバインディングだと思ってたら、
すごい気合の入ったIDEもどきのエディタが入ってるんだね。
ステップ実行できるのはかなりイイ!

これ、自分のアプリに組み込めないかな。。。

529 :デフォルトの名無しさん:03/07/14 22:20
>>528
たのむ、VS.NET2003でコンパイルできようにしてくれ・・・

530 :山崎 渉:03/07/15 09:48

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄

531 :デフォルトの名無しさん:03/07/15 20:28
保守

532 :デフォルトの名無しさん:03/07/17 19:56
wxLuaに使われてるwxWindowsのライセンスって結構厳しいな…

533 :デフォルトの名無しさん:03/07/18 22:18
>>532
なになに?
どんなやつよ?GPLよりしょっぱい?


534 :デフォルトの名無しさん:03/07/19 09:49
LGPLとwxLuaライセンスのデュアルライセンス。
wxLuaの方は、バイナリ配布時にソース公開義務のないGPLかな。

BSDスタイルやMITのまま配る場合、ちょっときついねってだけでつ…

535 :デフォルトの名無しさん:03/07/21 22:46
純粋にLuaのプログラムだけを配布するぶんには、
関係ないでしょ?
(まぁ・・ないとは思うけど)

wxLuaは開発環境なわけだし。

536 :デフォルトの名無しさん:03/07/22 12:24
wxLuaは開発環境じゃなくてGUIツールキットです。
「サンプルとして」気合の入った開発環境が付いてます。

537 :デフォルトの名無しさん:03/07/22 12:25
>LGPLとwxLuaライセンスのデュアルライセンス。
LGPLと"wxWindows"のデュアルライセンスだね。

538 :デフォルトの名無しさん:03/07/23 02:09
>>536
そうでした!
wxなとこは全然つかってなかったもんで・・・


539 :デフォルトの名無しさん:03/07/24 10:16
lua to python dochiga ii?

540 :デフォルトの名無しさん:03/07/24 14:38
>>539
mazu nanini tsukaitaika ie.

541 :デフォルトの名無しさん:03/07/24 15:54
GCはPythonのほうが優秀(のハズ)。
サイズはPythonのほうが大きい。
スピードは知らん。上のほうに比較したページのリンクがあった。
LuaはPCのゲームで使用された実績が結構ある。
Pythonはコンシューマゲームで使われた実績があるらしい。
Pythonはリモートデバッグ環境があるらしい(↑で使われた)。

というか、Python少ししかやったこと無いんで、これぐらいしか言えん。

542 :デフォルトの名無しさん:03/07/24 16:27
>>539
http://lua-users.org/wiki/LuaVersusPython
必ずしも最新の情報じゃないが。

543 :デフォルトの名無しさん:03/07/24 16:58
>>542のページにもあるが、coroutine(+thread)がお気に入り。
generatorもcoroutine的に使えないことも無いけど、ちょっと制約多いね。

あと、↓が本当ならリアルタイム向けにはちょっと厳しいかも。
>Everything is an object allocated on the heap in Python, including numbers.

544 :デフォルトの名無しさん:03/07/25 02:01
Boots使うとPythonのが簡単に使えるなー。スレッドもファイバのあるPython
のが扱いやすいかも知れぬ。

しかし・・・Luaの文法のほうが一般には受けやすいと思うぞナ。

545 :デフォルトの名無しさん:03/07/25 02:39
>>544
Luaの文法・・・これは微妙でしょ。
#一般の定義なんてできるわけないから、煽りは無しの方向で。

Luaでも、オブジェクト指向っつーか(lua-users.org参照)
それっぽいことできるから
C++に浸かってる人にも、にゃかにゃかいけるんでは無いかな?


546 :デフォルトの名無しさん:03/07/25 09:23
>>544
bootsってboost?ファイバってなんでしょ。興味あります。
(検索しても出てこないし…)

>>545
LuaのOOはプロトタイプベースだしねぇ。
メタテーブルでいろいろやると暮らすベースに近いシステムも組めると思うけど。
(その場合の速度比はどれくらいだろ?)

547 :デフォルトの名無しさん:03/07/25 09:30
>>546
ゴメンboostだ。ただのタイプミス。ファイバもマイクロスレッドのほうが
一般的な呼び方だったかも。重ね重ねスマソ。

個人的にPythonはあの構文が受け付けなさ杉です。

548 :デフォルトの名無しさん:03/07/25 10:23
ファイバは一般的だろ。むしろマイクロスレッドの方がはつみみだよ。

549 :デフォルトの名無しさん:03/07/25 12:07
boost/pythonなんてのがあるのか。
ファイバは、stacklessのほうね。generatorはいまいちだったので、
そっちの方を調べてみるか。組み込み用途的にはstacklessはどうなんだろ?

550 :デフォルトの名無しさん:03/07/25 14:15
>>546
速度もそうだけど、メモリ効率がいまいち?
インスタンス?は、メソッドをコピってるから、
オブジェクトの生成ごとっつーかオブジェクト毎に
そのメソッドのためのメモリを食ってるかと思うと・・・
#ようするにVirtualTableが無い。




551 :デフォルトの名無しさん:03/07/25 15:20
>>550
LuaでOOについてはここね。クラスの作り方も書いてある。
http://lua-users.org/wiki/ObjectOrientationTutorial

metatableを使う場合、1回テーブルの検索を失敗してから
metatableを検索に行くみたいなので、その辺のオーバヘッドが
どれくらいかかるのかなぁと。

552 :ためしてみた:03/07/25 16:20
こんなふう↓に定義しといて、
-------------
Hoge = {}
mt = {}
function Hoge:new()
return setmetatable({}, mt)
end
function Hoge:foo()
end
mt.__index = Hoge
-------------

metatable経由で呼び出し: 0m2.827s
-------------
h = Hoge:new()
for i = 0, 10000000 do
h:foo()
end
-------------

テーブル内の関数を呼び出し: 0m1.843s
-------------
h = {foo=Hoge.foo}
for i = 0, 10000000 do
h:foo()
end
-------------

ちなみに、
空ループ: 0m0.327s
fooをグローバルに定義して呼び出すだけ: 0m1.608s
となった。

553 :デフォルトの名無しさん:03/07/25 17:39
>>552
うあ。ありがと。参考になる〜
ってことは、テーブルの要素がふえればふえるほど・・・

554 :デフォルトの名無しさん:03/07/25 19:30
つーかluaは大して速くないので。
OOやりたいならRubyとか専用のやつ使った方がいいよ。

555 :デフォルトの名無しさん:03/07/25 20:22
まぁ、LuaのOO風機能はおまけみたいなもんだ。

556 :デフォルトの名無しさん:03/07/25 23:43
ちなみに、>>554は、Luaより早い言語として何を想定してる?
いや、いっぱいあるのは分かるけど、代表的なものとして。
もしかして、自作処理系ですか?(上のほうにもそんな話題があったけど)。

557 :デフォルトの名無しさん:03/07/26 11:27
組み込みスクリプトにおう。とにかくサイズが小さい。
ゲームにつかうとき、
パラメータやシナリオの流れをLuaに逃がすとウマー
OOするための言語じゃねーぞ。
やろうと思えばできる。それで十分じゃねーか。


558 :デフォルトの名無しさん:03/07/27 00:52
組み込み言語としては、メモリ関連の処理がイマイチだったりと、
中途半端なところが多かったりするんだな。
まぁ、PCで使う分には全く問題はないんだけど(そのためのOSだし)。

というか、自世代GCまだ〜?ヽ(`Д´)ノ

559 :デフォルトの名無しさん:03/07/27 06:51
次世代GCって何だ?次世代ゲームキューブ?

それとも世代GCのことか?
結局ストップ&コピーだから停止するのに変わりない。
GCそのものよりも、いつGCが呼ばれるかの方が大事。

560 :デフォルトの名無しさん:03/07/27 12:58
LuaはコピーGCじゃないよ。

で、世代別GCが導入されれば、GC時間のオーダーは全オブジェクト数じゃなくて
新しい世代のオブジェクト数のみに依存するようになるから、毎フレームGCを呼ぶ
とか出来るようになるね(ゲームで使うなら)。
現状の奴では、オブジェクトが増えれば増えるほどGC時間が増えるから、
リアルタイム向きには、どうしてもオブジェクト数を限定して使わざるを得ない。

そういえばPythonはリファレンスカウンタだっけ?
GCが気になるならあっちの方がいいかも。

(あと「Luaの」次世代GCね。)

561 :デフォルトの名無しさん:03/07/27 15:45
自世代

562 :デフォルトの名無しさん:03/07/27 16:38
「次世代GC」で検索したら
任天堂だった。
つーか、次世代って言葉の意味わかってるのか。

563 :デフォルトの名無しさん:03/07/27 16:41
どーでもいいことだな。

564 :デフォルトの名無しさん:03/07/27 16:46
ま た G C の 話 で す か ?

565 :デフォルトの名無しさん:03/07/27 18:30
GCの話題は板違い
http://cheese.2ch.net/ghard/

こいうこと?

566 :デフォルトの名無しさん:03/07/27 18:57
>>565
上のほう読めってことでしょ。
かなり実のある話してまつ。

567 :デフォルトの名無しさん:03/07/27 20:55
文法の話よりかはましかも。

568 :デフォルトの名無しさん:03/07/27 21:05
言語よりもGCの話が盛り上がるなんてここぐらいだな。

569 :デフォルトの名無しさん:03/07/27 22:47
>>560
Luaの次世代GCってマジネタなのか?
ソースきぼん

570 :デフォルトの名無しさん:03/07/28 09:32
5.0がリリースされたときに、5.1ではインクリメンタルだか世代別だかのGCが
導入されるって、コアチームの人がMLで書いてたよ。リンクは上のほうにある。

571 :デフォルトの名無しさん:03/07/28 10:19
>>570 あ、ほんとだ。サンクス。>>408ですね。


572 :デフォルトの名無しさん:03/07/29 01:25
誰か、最新版のWindowsバイナリ落とせるとこ教えてくれ

573 :デフォルトの名無しさん:03/07/29 01:29
ここ?
http://lua-users.org/wiki/LuaAddons

574 :ここ:03/07/29 23:28
http://lua-users.org/wiki/LuaBinaries

575 :デフォルトの名無しさん:03/07/31 04:17
それだ。
ありがとう

576 :デフォルトの名無しさん:03/07/31 13:41
すごく興味あるんだけど、具体的にどういう用途で使えばいいのか
いまいち解らない。ゲームのパラメータなんかで使えると聞いたけど
どなたか実例キボンヌ。

577 :デフォルトの名無しさん:03/07/31 13:53
>>576
G-わんげ鳩大往生XII〜絆ダウン〜 三週目
http://game4.2ch.net/test/read.cgi/arc/1058781399/ 

578 :デフォルトの名無しさん:03/07/31 21:47
>>576
これでも読んど毛
http://lua-users.org/wiki/BindingCodeToLua

579 :デフォルトの名無しさん:03/08/01 01:52
>>577-578
狂おしくサンクスコ。というか、上のスレ面白いなw

580 :デフォルトの名無しさん:03/08/01 11:17
>>579
あと、>>513や、白い弾幕くんもLuaを使ってる。参考にすべ氏

白い弾幕くん
http://user.ecc.u-tokyo.ac.jp/~s31552/wp/sdmkun/



581 :山崎 渉:03/08/02 02:20
(^^)

582 :山崎 渉:03/08/15 16:32
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン

134 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)