2008-01-01ãã1å¹´éã®è¨äºä¸è¦§
RealLibã®å®è£ ãã©ãããåçã«ãªã£ã¦ãã®ã解æãããã·ãªã¼ãºã§ããã·ãªã¼ãºã¨ãããªãããèªã¿å§ãã¦ã¿ããããªãã·ã³ãã«ã ã£ãã®ã§1åã§çµãããã¡ããã¾ãï¼ å®æ°ãªãã¸ã§ã¯ãã®æ§é // Real.h class Real { private: RealObject *m_pObject; ... }; â¦
RealLib ã®ã½ã¼ã¹ã³ã¼ãèªã¿ãå§ããã¯ãã ã£ããã§ããããªãã ãå ¨ç¶é²ãã§ãªãã®ã§é©å½ãªã¾ã¨ãã¨ã³ããªã§ãè¶ãæ¿ãã¾ãï¼ RealLib ãæ®éã«ãã£ãããããã®ã§ç´¹ä»ãã¾ãããããªãã¾ããã®ã§ç´¹ä»è¨äºã§ãã å®æ°è¨ç®ã¨èª¤å·® ããã¦ãã®ããã°ã©ãã³ã°è¨â¦
ãã²ããã¶ãã§ãï¼æ¬¡ãããExact Real Arithmetic ï¼å®å ¨ç²¾åº¦å®æ°è¨ç®ï¼å®çªã®è¨³èªã£ã¦ãªãã ããï¼ï¼ãã®ãåå¼·ãã¯ããã¾ãã The RealLib Project ã®ã³ã¼ããèªã¿ã¤ã¤ A Calculator for Exact Real Number Computation ãèªã¿ã¤ã¤ãã¨ããå½¢ã«ãªãäºå®ã§â¦
ãã¡ãã§è¦ããã話é¡ã»ã»ã» http://natu.txt-nifty.com/natsutan/2008/06/vm_e3c7.html http://shinh.skr.jp/m/?date=20080624#p01 Lua ã® VM 㯠4.0 ã§ã®ã¹ã¿ãã¯ãã·ã³ãã 5.0 ã§ã¬ã¸ã¹ã¿ãã·ã³ã«å¤æ´ããããããããã®æã®çç±ã Lua: papers ã® "The â¦
http://lulu.luaforge.net/index.ja.htmlãªãªã¼ã¹ãã¾ããï¼ãããããé¡ããã¾ãï¼ãã£ã¨ã½ã¼ã¹ã綺éºã«æ´é ãã¦ããluaforgeã«ä¸ãããã¨æã£ã¦ãããã§ããã»ã»ã»ãªãã ã飽ãã¡ãã£ã¦(^^;)ããã£ããä¸éå端ã§ããããããªãããã§ãããã®ã¾ã¾ããããâ¦
LuaForgeã«ããã¸ã§ã¯ããã¼ã¸ã§ãä½ã£ã¦ã¿ããï¼ã¨ããããã§ã¢ã«ã¦ã³ãä½ã£ã¡ããã¾ãããã§ãããã¸ã§ã¯ãç³è«ãã度è¸ãåºãªããå°ã£ãï¼
ä»æ¥ã®ææï¼http://hzkr.kokage.cc/lulu4.zip ã³ã«ã¼ãã³ã¨ getfenv/setfenv å®è£ ãã¾ããããã¨ãä»åã¯ã¤ã³ããã㦠loadfile é¢æ°ã§ãã¹ãã®Luaã«ã³ã³ãã¤ã«å¦çããã£ã¦ããããã¨ã«ããã®ã§ãluac ã®åºåã§ã¯ãªããç´æ¥ .lua ã®ã½ã¼ã¹ãå®è¡ã§ããããâ¦
ããã¾ã§ã°ãã¼ãã«å¤æ°ã®æ±ããã£ããé©å½ã«è¦ã¦ããã§ããã©ã Foo = {x = 100} (function () setfenv(1, Foo) y = 2 z = x + y end)() print(Foo.x) -- 100 print(Foo.y) -- 2 print(Foo.z) -- 102 setfenv/getfenvã¨ããã®ã§ãã°ãã¼ãã«å¤æ°ã®åç §ããâ¦
Luaã«ã¯ãcoroutineï¼ã³ã«ã¼ãã³ï¼ãã¨ããæ©è½ããã£ã¦ãLua 5.0ã®VMã®ãã¶ã¤ã³ãããã楽ã«å®è£ ããããã«æ¡ç¨ãããé¢ããããããã®ã§ãVMãå¦ã¶ã«ããã£ã¦éè¦ãªãã¤ã³ãã§ãããããªæ©è½ã function countUp() local n = 0 while true do coroutine.yiâ¦
ä»åã¯ãå²ã¨è¨èªã®ã³ã¢ãªé¨åã ããã©ï¼VMãããªãã¦ï¼ã©ã¤ãã©ãªå®è£ ã«ãªã£ã¦ãé¨åãæ¾ã£ã¦ããã¾ãã
Yueliang - Lua 5 in Lua ã¦ã®ãç¥ãã¾ãããLua 5 in Lua ã£ã¦ãããã¼ãã¿ãã¶ã£ã¦ãã£ã¦ã¬ãã«ãããã¼ãï¼ã¨æã£ããã©ããã¡ãã¯ä»ã®ã¨ããããã³ãã¨ã³ã ï¼ã½ã¼ã¹ããã¹ããVMã®ã³ã¼ãã«ã³ã³ãã¤ã«ããã¾ã§ï¼ã®å®è£ ã®ããã§ãããLuLu ã¨çµã¿åãããâ¦
ä»æ¥ã®ææ â http://hzkr.kokage.cc/lulu3.zip ã¡ãã£ã¨ã½ã¼ã¹ã³ã¼ããé ·ãã§ãããããªãããCALLã®ã³ã¼ããï¼ã«æãããã«ã³ããããã¦ã¾ãããã¨ã§ã¡ããã¨ãªãã¡ã¯ã¿ãªã³ã°ããããã ä»åèªãã å ¨å½ä»¤ãå®è£ ï¼ãã ããã¡ã¿ãã¼ãã«ã®å¦çã¯é¤ãï¼ãã¦â¦
Lua 5.1 ã® VM ã®å ¨å½ä»¤ãåé¡ããã¨ããããªãã¾ãã å¤æ°/å®æ°ã³ãã¼ MOVE, LOADK, LOADNIL ã°ãã¼ãã« GETGLOBAL, SETGLOBAL é¢æ°å¼ã³åºã CALL, TAILCALL, RETURN æ¼ç®å ADD, SUB, MUL, DIV, MOD, POW, UNM, NOT, LEN, CONCAT, GETTABLE, SETTABLE ã¸ã£â¦
ååå¯å¤é·ã®æ±ãããµãã£ãã®ã§ä»åã¡ããã¨èªããã¨ã«ãã¾ããã ã¾ããå¯å¤é·å¼æ°ã®é¢æ°ãå¼ã³åºãããã¨ãã¯ãluaD_precallå ã§ãã®ã調æ´ããè¡ããã¾ãã else { /* vararg function */ int nargs = cast_int(L->top - func) - 1; base = adjust_vararâ¦
ãå¾ ã¡ããï¼ã®ã¯ãã¼ã¸ã£ã®å®è£ ã§ãããããªãµã³ãã«è¡ã£ã¦ã¿ã¾ãããã function counter() local x = 0 local up = function() x=x+1 return x end local dn = function() x=x-1 return x end return up, dn end up,dn = counter() print(up()) -- 1 prinâ¦
whileæãrepeatæã¯ç¹å¥ãªãã¨ã¯ä½ããªããæ¡ä»¶åå²ã使ã£ã¦å®ç¾ããã¦ã¾ããåé¡ã¯foræã§ãããã«ã¯å°ç¨å½ä»¤ãç¨æããã¦ãã¾ããã¾ãã¯æ°å¤ã«é¢ããã«ã¼ãããã for i=1,100 do print(i) end ããã¯ãã«ã¼ãã®é ã«FORPREPå½ä»¤ã¨ãå®éã«ã«ã¼ããå¸ãFORâ¦
LuaVMã«ã¯ç´ç²ãªã¸ã£ã³ãå½ä»¤ã¯ï¼ã¤ããããã¾ãããç¸å¯¾è·é¢ããªãã©ã³ãã«ã¨ã£ã¦ãpcãå¤åãããç¡æ¡ä»¶ã¸ã£ã³ãã§ãã case OP_JMP: { dojump(L, pc, GETARG_sBx(i)); continue; } dojumpãã¯ãã®å®ç¾©ã¯ãã㧠#define dojump(L,pc,i) {(pc) += (i); luaiâ¦
Luaã®æ¼ç®åã«ä¸å¯¾ä¸ã«å¯¾å¿ããå½ä»¤ãããããç¨æããã¦ãã¾ããOP_ADD, OP_SUB, OP_MUL, OP_DIV, OP_MOD, OP_POW, OP_UNM, OP_NOT, OP_LEN, OP_CONCAT, OP_GETTABLE, OP_SETTABLEãä¾ã¨ãã¦ãOP_ADDã®å®è£ ã¯ãããªãã§ãã case OP_ADD: { arith_op(luai_nâ¦
ä»åã®ç®æ¨ã¯ãLua VMã®å½ä»¤ã»ããå®å ¨å¶è¦ï¼ã§ãã
ã³ã³ãã¤ã«ã > luac -o lulu.out lulu.lua > luac -o test1.out test1.lua > cat test1.lua function foo(a,b,c,d) print(a,b,c,d) end function bar(a,b) return b,a end foo(1,2,bar(3,4))Lua! > timeit lua test1.out 1 2 4 3 ... Elapsed Time: 0:00:00â¦
ã¨ããããã§ãLua VM on Lua ç¥ã㦠LuLu ãå®è£ ããã·ãªã¼ãºç¬¬ï¼åã§ããä»æ¥ãã£ããã¨ã®ææ¡ã¨ãããã¨ã§ããã function foo(a,b,c,d) print(a,b,c,d) end function bar(a,b) return b,a end foo(1,2,bar(3,4)) ãåãããã¨ãç®æ¨ã«ãã¾ãã
VMã®æ§æã¯ããã£ãã®ã§ãã¨ã¯åå½ä»¤ã®å®è£ ãè¦ãã®ã¿ï¼ï¼ï¼ã¡ã¤ã³ã«ã¼ãã®luaV_executeé¢æ°ã¯ãç´°ããã¨ãããé¤ãã¨é常ã«ç´ ç´ãªã«ã¼ãã§ããä¾ã«ãã£ã¦ãANSI C äºæã«ããããã«ã¹ã¬ããããã³ã¼ãã®ãããªæé©åã¯ãã¦ãã¾ãããã¨ã®ãã¨ã§ããã void â¦
ã¹ã¿ãã¯ã®æ§é ã®æ¬¡ã¯ãLuaã®ä»®æ³ãã·ã³èªã®å½ä»¤ã®æ§é ãè¦ã¦ããã¾ããå½ä»¤ã表ãå Instruction // llimits.h typedef lu_int32 Instruction; ã¯ã32bitæ´æ°ã§ãå½ä»¤æ¯ã«ãbitã®ä½¿ãæ¹ã¯3éãããã¾ãã ABCå B:9bit, C:9bit, A:8bit, OpCode:6bit ABxå â¦
ã¾ããLuaã®VMã®ã¹ã¿ãã¯ãã©ã®ããã«ä½¿ããããã調ã¹ã¾ããååã¡ãã£ã¨è§¦ããããã«ãLuaã®VMã¯ãã¬ã¸ã¹ã¿ãã·ã³ãã¨ããã©ããã¹ã¿ãã¯ã¨å¥ã«ç¹å¥ãªãã¬ã¸ã¹ã¿ããããããã§ã¯ããã¾ããããã¼ã«ã«å¤æ°ãå ¨ã¦ã¹ã¿ãã¯ã«ä¿åããã¦ç®¡çããã¾ãããããâ¦
ä»å㯠Lua VM ã®ã¡ã¤ã³ã«ã¼ãã®å®è£ ãè¦ã¦ãããã¨æãã¾ããæãã¾ãããã¾ãæåã«ãLua VMã¹ã¿ãã¯ã®æ§é ãææ¡ãã¦ããã»ã»ã»ã¨æã£ã¦å§ãããé·ããªã£ã¦ãã¾ã£ãã®ã§ãé©å½ãªã¨ããã§æ¬¡åã«åãã¾ãã^^ããããã° A No-Frills Introduction to Lua 5.â¦
éè«ã¿ã°ãæã¾ãªãã¨ãµã¤ããã¼ã®ææ°ã¿ã¤ãã«ã®ã¨ãã§åºåãããããã«ãããªã¼ã¨æã£ã¦æ[éè«]ãæããã¨ã«ãã¦ãã®ãä»æãåºãã¾ãããã¨ãã£ã¦ãç¹ã«æ¸ããã¨ããªãã§ãããã©ããã¾ãããããã¼ã¨ãã¼ã¨ãhttp://b.hatena.ne.jp/hzkr/ ã¯ã¦ãªããã¯â¦
èªãã ã³ã¼ãã®ç¢ºèªã¨ãã¦ã"LuaVM on Lua" ç¥ã㦠"LuLu" ãä½ã£ã¦ã¿ããã¨æãã¾ããLuaã®åå¥è§£æãæ§æ解æããå ¥ãã®ã¯å¤§å¤ãããªã®ã§ãã¾ãã¯ãããªã³ã³ãã¤ã«æ¸ã¿ã®ã³ã¼ããèªã¿è¾¼ãã§å®è¡ããVMãä½ãã¾ããèªã¿è¾¼ã¿åã¯ãlundump.c/lundump.h ã® luâ¦
ãmainããluaV_executeã¾ã§ãã¨ãããã¨ã§ã次ã«ãluaã¤ã³ã¿ããªã¿ã®èµ·åãããVMã®ã¡ã¤ã³ã«ã¼ãã«ãã©ãã¤ãã¾ã§ã®æµããèªã¿ã¾ããLuaã¯ã¢ããªã±ã¼ã·ã§ã³ã¸ã®çµã¿è¾¼ã¿ãèãã¦ãã£ããå é¨ãAPIåããã¦ããã®ã§ãå§ãã¦èªã身ã«ã¯éã«ä¸èº«ãå ¥ãçµãã§ãâ¦
å¤ã表ããã¼ã¿æ§é // lua.h #define LUA_TNIL 0 #define LUA_TBOOLEAN 1 #define LUA_TLIGHTUSERDATA 2 #define LUA_TNUMBER 3 #define LUA_TSTRING 4 #define LUA_TTABLE 5 #define LUA_TFUNCTION 6 #define LUA_TUSERDATA 7 #define LUA_TTHREAD 8 // loâ¦
ä»æ¥ã¯ãLuaã®VMã«ä½¿ããã¦ããã¼ã¿æ§é ããããã£ã¨çºãã¦ã¿ã¾ãã ãã¨ãmainããã¯ãã¾ã£ã¦VMã®ã¡ã¤ã³ã«ã¼ãã«å°éããã¾ã§ã®æµãã確èªãã¡ããã¾ãã