【Lua】組み込み系言語総合 その6【Squirrel】
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん
2013/03/10(日) 15:10:32.28使われるプログラミング言語についてのスレッドです
まとめwiki(なにか質問する前に必ずみること!)
http://wikiwiki.jp/lua/
その他の参考URLは>2から
■前スレ
【Lua】組み込み系言語総合 その5【Squirrel】
http://toro.2ch.net/test/read.cgi/tech/1321063450/
■過去スレ
その4 http://hibari.2ch.net/test/read.cgi/tech/1301414458/
その3 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/
0821デフォルトの名無しさん
2016/02/13(土) 01:55:35.83ID:24vNB1dvお互いさっぱりだね。
元の話は、スマホでデファクトなのはutf16じゃろってだけの話だよ
runeはあきらかに他の言語の「文字列型」を想定したものだと言ってるだけだよ。言葉遊びしたいわけじゃない
0822デフォルトの名無しさん
2016/02/13(土) 05:49:29.94ID:M5U5EIyyだからgoの文字列型はstringだろ。そこに異論がある?
runeは文字列からコードポイントの配列を取るだけ。
そんなもん他の言語、Luaにすら5.3からあるわ
スマホがUTF-16がデファクトってのも上に乗っかってるJavaとObjective-C(Swift除く)だけ使うならそうだろうよ。
でも一番最初の話はスマホへゲームを移移植するときの話 でAndroidもiOSでも動かす場合はUTF-8がデファクトスタンダードだって話をしてたんだ。それをUTF-16だろってツッコミ入れられたから反論してるだけで最初から俺はJavaとかObjective-Cは話の外にあんの
0823デフォルトの名無しさん
2016/02/13(土) 07:08:29.64ID:tl7vIPkr>AndroidもiOSでも動かす場合はUTF-8がデファクトスタンダード
とりあえずこれ、まともに根拠を示せてないんだけど。
0824デフォルトの名無しさん
2016/02/13(土) 07:42:00.73ID:6QXsiJCAその上で動作する組み込み言語の話をせよ
0825デフォルトの名無しさん
2016/02/13(土) 12:35:56.00ID:AxbgYY0vUTF16は中途半端感が半端ないよな
0826デフォルトの名無しさん
2016/02/22(月) 21:10:17.21ID:6cWcowj10827デフォルトの名無しさん
2016/02/23(火) 00:28:29.80ID:liQI2ylD0828デフォルトの名無しさん
2016/02/23(火) 10:19:51.72ID:kQ/gcKij目的:C++で実装したクラス(lua クラス バインド でggって出てきたページを参考に作成)を
Luaでnewしてインスタンスを生成、それを更にC++で実装した
全く別の独立した静的関数にそのまま渡してその関数内でインスタンスへの変更処理を行う
実装:関数の引数にluaのソースのtestclass:new()によって生成したインスタンスを指定すると
C++側からはlua_Stateのスタック経由でユーザデータで渡ってくると仮定して実装してみた
結果:C++で実装したクラスのlua側から生成したインスタンスの稼動は正常な模様。
しかし、そのインスタンスをC++の関数で参照する際、
肝心のインスタンスを取得する際に実行しているluaL_checkudata()にてエラー発生、
エラー出力は "bad argument #-2 to 'lua側に公開しているメソッド名'( expected, got userdata"。
ステップインしてみるとlauxlib.c(309)、luaL_testudata()内のlua_rawequalの結果の判定にて
/* value is a userdata with wrong metatable */ とコメントされている箇所でNULLが返されている。
(#-1にはluaのソースでの [クラス名]:new() のコロン使用での暗黙の第一引数が入っている?憶測)
備考:簡単なスタックダンプで見る限りではユーザデータしか積まれていない様に見える。(主観)
徹夜してまで追跡しても方法わからず、何か勘違いや問題点があったら教えてくらはいおながいします
0829デフォルトの名無しさん
2016/02/23(火) 12:27:23.57ID:UPC5owG9(★ expected, got userdata
のエラーメッセージで、正確な★の値を確認してほしい。
luaL_checkudata は引数 tname の文字列で型チェックをするのだが、
luaL_newmetatable や luaL_setmetatable で登録したものと一致しているだろうか?
0830デフォルトの名無しさん
2016/02/23(火) 16:36:12.58ID:liQI2ylDそれはbinderの質問だな
binderは何を使ってるの?
その問題が再現する最小のコードを作って作者に質問すりゃいいよ
英語が苦手ならここでもいいけど解決する保証はできん
0831デフォルトの名無しさん
2016/02/23(火) 21:28:17.51ID:kQ/gcKij>>829
Luaでnew()したC++のクラスのインスタンスを受け取る関数で実行してるとこで
void * const pv = luaL_checkudata( pluastate, -1, "TestClass" );
にするとそのまま(hoge expected, got userdata)になっちゃった
C++のクラスのテーブル作ってるとこのlua_setglobal( pluastate, "TestClass" );と同じでもダメだし
もちろんC++側でのクラス名でも変わらず
>>830
binderはざっくり検索した範囲だと大きかったりboost必須だったり
更新してなかったりで将来に不安が残る感じで何も使ってないの、アメリカ語は_〜
クラスのテーブル作るとこで型名を明示的に指定してやったりしないといけないのかな
きっとthisの値を生で吐き出すメソッド実装してそれを関数に渡せば何とかなるんだろうけど
そういう力技あんまし使いたくないし後々すんごく気持ち悪くなりそうな・・・
0832デフォルトの名無しさん
2016/02/23(火) 21:43:48.82ID:kQ/gcKijCString str = lua_typename( pluastate, -1 );
してみたんだけど "no value" になった、lua_type()は相変わらずユーザデータ
念の為luaのソースで引数を数値にしてC++の関数でluaL_checkinteger()に入れ替えると
正しく整数がそのまま流れてくるから位置は間違ってない可能性が高いと思ってる(憶測)
メタテーブルと言っても所詮(?)はユーザデータだし、
ユーザデータ作る時にlua_setglobal()の前後で明示的に型名を指定してあげないとダメなのかな?
0833デフォルトの名無しさん
2016/02/23(火) 21:50:32.63ID:UPC5owG9エラーメッセージを加工しないでくれ。
luaL_checkudata( pluastate, -1, "TestClass" );
の呼び出しで
hoge expected, got userdata
の表示はありえない。hoge はどこから来たんだ?
「Luaでnew()した」だとどこが悪いのか切り分けられないから
まずは、Luaスクリプトを使わず、C APIのみで作成と取得を試してはどうか?
気になるのは lua_setglobal("TestClass") と書いていること。
luaL_checkudata の tname 引数は luaL_*metatable 系で使った
C側の内部的な文字列であり、Lua側に公開した変数名ではないぞ?
0834デフォルトの名無しさん
2016/02/23(火) 21:51:06.03ID:liQI2ylDそうなんか。
まあ俺も使ってたbinderに不満があってオレオレbinder作っちゃったから人の事言えないけど
classや関数一つ一つスタックで操作するのはミスしやすいしお勧めしないよ。
classの登録
luaL_newmetatable(L, "TestClass");
〜stackの一番上にtableが入ってるのでそれに対してメンバーの登録処理が続く。
newの中
void *storage = lua_newuserdata(L, sizeof(TestClass));
new(storage) TestClass();
luaL_setmetatable(L, "TestClass");
引数の受け取り
TestClass* ptr = static_cast<TestClass*>(luaL_checkudata( L, 1, "TestClass" )); //1個めの引数
0835デフォルトの名無しさん
2016/02/23(火) 22:01:41.19ID:liQI2ylDメタテーブルはユーザーデータではないぞ
ユーザーデータにメタテーブルって形で普通のテーブルを設定できるだけでメタテーブル自体はtable型
ユーザーデータはテーブル参照されると、そのユーザーデータに設定されているメタテーブルを参照して
値があればそれを返す
>>833
hogeは察するにlua側の関数名だろ
0836デフォルトの名無しさん
2016/02/23(火) 22:03:44.40ID:liQI2ylDlua_typename( pluastate, -1 );
この第二引数はスタックのindexではなくlua_typeで返る値
0837デフォルトの名無しさん
2016/02/23(火) 22:50:47.99ID:kQ/gcKijすまない、hogeからもう一度TestClassやluaTestClass、その他の定義
色々試し直してたら不一致になってしまった
LuaからC++、C++からLuaは既に成功していて、C++からC++も既に成功というか
OpenCVの亜種とFreeBSDのlibの一部をLuaに機械的な手作業でバインドしようとしてるから
その辺りの実績は問題ない・・・筈
>>834
凄いヒントをありがとう、今までnewの後にluaL_setmetatable()はしてなかった
けど単純に追加しただけじゃダメらしい、相変わらず同じメッセージが出力されて失敗する
>>835>>836
メタテーブルの認識を間違えてたんだ、それとlua_typename()の第二引数・・・
勉強し直して再確認して出直してくる
OpenCVの亜種とBSDのlibのヘッダのインクルードやらリンクやらでソース丸々アップとか難しい状態
文字でしかやりとりできない、もどかしくてごめんね、みんなありがとう
0838デフォルトの名無しさん
2016/02/23(火) 23:12:34.76ID:liQI2ylDluaL_setmetatable はスタックの一番上の値に対して引数で与えた名前のメタテーブルを設定する
メタテーブルの名前はluaL_newmetatableで作った時のもの。
http://www.lua.org/pil/24.2.3.html
ここにstack dumpのサンプルコードがあるからそれで出力して色々なタイミングのスタックの状態を
printfデバッグすりゃいいんじゃないかな
Lua5.3以降ならluaL_newmetatableした時にそのテーブルに__nameが設定されるから
例えば上記URLのstackDumpで
case LUA_TUSERDATA:
if (luaL_getmetafield(L, i, "__name") == LUA_TSTRING)
{
printf("userdata:%s", lua_tostring(L, -1));
lua_pop(L, 1);
break;
}
ってするとユーザーデータに設定されているメタテーブルの名前も一緒に出力できる
0839デフォルトの名無しさん
2016/02/23(火) 23:30:00.22ID:kQ/gcKij一発でわかった、ありがとう、ありがとう、そして一番のキーワードは>>834のluaL_setmetatable()
目的:C++で実装したクラス(lua クラス バインド でggって出てきたページを参考に作成)を
Luaでnewしてインスタンスを生成、それを更にC++で実装した
全く別の独立した静的関数にそのまま渡してその関数内でインスタンスへの変更処理を行う
問題:割愛
原因:Lua側でのいわゆるクラスの型情報であるグローバル変数の実体の作成時に、
クラスのテーブルの作成にもユーザデータ共通のメタテーブルの作成にもlua_newtable()を使用していた
対処:
正しく(?)は、メタテーブルの作成の際にはluaL_newmetatable()を使用するべき
憶測(言い訳?):
メタテーブルであるべきところをネットのサンプル通りに普通(?)のテーブルで実装してしまった為、
単純なC++からLua、LuaからC++のやりとりでは不都合が出なかっただけだと思われる
長文かつサンプルの提示なしの質問に長々と付き合ってくれてありがとうございました、無事解決しました
0840デフォルトの名無しさん
2016/02/24(水) 08:09:28.85ID:4eLJNqm50841デフォルトの名無しさん
2016/03/08(火) 07:25:35.42ID:kiMIo1Bf0842デフォルトの名無しさん
2016/03/08(火) 07:37:15.49ID:kiMIo1Bf0843デフォルトの名無しさん
2016/03/20(日) 11:05:43.19ID:S+FF32wmgoogleのJavaScriptエンジンv8をVS2015のレガシーなC++でビルドして
VS2015のC++/CLIでリンクして実行するとヒープ破壊のエラーが出て落ちます。
(デバッガでトレースが始まる前の段階で落ちているので追跡しようがありません)
v8::V8そのものへの参照を全てコメントアウトすると落ちずにmain関数に入ってきます。
何か特殊な設定か対処の類が必要なのでしょうか?
それともC++/CLIがダメ子ちゃんなのでしょうか?
0844デフォルトの名無しさん
2016/03/20(日) 11:49:11.85ID:Byvmq8tFその組み合わせは使ったことは無いが、もしネイティブC++で問題ないなら
2種類のGCを持つ環境が競合しているんだろうな
v8 の代わりに Chakra JsRT なら、MS同士だから実績があるかもしれない
0845デフォルトの名無しさん
2016/03/20(日) 22:46:48.41ID:S+FF32wmgc回りの机上でのコード追跡に挫折しました・・・
v8のコードを一切コールしなくても、v8::V8回りがリンクされるだけでダメっぽいです。
CRT回りの静的変数の初期化の時点でヒープ破壊のエラーが発生してしまうので
(ソースをちょっといじるだけでエラーの種類が変わるのでここで書いても意味がないと判断)
ChakraCoreをいじってみます、レスありがとうございました。
0846デフォルトの名無しさん
2016/03/20(日) 23:22:32.65ID:Byvmq8tFhttps://en.wikipedia.org/wiki/List_of_ECMAScript_engines
WindowsオンリーならChakraで十分
速度がいるならv8だけど、巨大で複雑な部類だとは思う
Duktapeやv7はLua感覚で使えそうだけど、品質や実績はよくわからない
0847デフォルトの名無しさん
2016/03/21(月) 00:04:57.23ID:jBN/3X9xけどv8ですらまだドキュメントやサンプルが多い方だったんですね。
(Isolateの実装で殆どがコンパイルに通らなくなった様ですが)
ChakraCore一つとってみても例えば
var userobj = new Userobj();
NativeGlobalFunc( userobj );
を実現する道筋の調査に一苦労、
1時間調べてもオブジェクトの作り方すらまだ確信が持てていない状態・・・
片っ端から調べ直して出直してきます。
0848デフォルトの名無しさん
2016/03/27(日) 14:51:27.25ID:WUzBhCSW吐き気がする気持ち悪い・・・
結局教育機関が作る言語はどれも学生脳の自慰言語ばっかかよ
0849デフォルトの名無しさん
2016/03/27(日) 15:03:16.21ID:9eGj+oKvLua 1.1 は 1994年。そのころはPascal系もまだ元気だったんだ。
自然淘汰の結果として死滅しただけで、最初から未来が見えてたわけじゃない。
今なら、LuaのVMやAPIを真似たJavaScript実装 (>>846) や
先行き不安なSquirrelなど、自分で組み込むなら選択肢はある。
使う側ならどうしようもないが。
0850デフォルトの名無しさん
2016/03/27(日) 15:12:37.47ID:WUzBhCSWおとなしくうっすいトランスレータ書くわ
0851デフォルトの名無しさん
2016/03/27(日) 15:18:28.87ID:Pr6yzqXD公式のJavaよりもC++に近いが彼らが負けを認めることはないだろう
負けを認めない相手と張り合うのは時間の無駄
0852デフォルトの名無しさん
2016/03/27(日) 21:30:21.55ID:H7mb6W0C定義されていなければ{}を返すようにメタを設定することはできますか?
0853デフォルトの名無しさん
2016/03/27(日) 21:46:25.71ID:xKhiQxW2luaの話?
であれば__newindexで{}返す関数を設定すればいい
0854デフォルトの名無しさん
2016/03/28(月) 01:39:38.42ID:WtaHq3/v0855デフォルトの名無しさん
2016/03/28(月) 03:40:07.32ID:zJAWFm4u$ lua
Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio
> pp = require 'pl.pretty'
> mytable={1, 2, 3}
> pp.dump(mytable.test)
nil not a table
> setmetatable(mytable, {__index=function() return ({}) end})
> pp.dump(mytable.test)
{
}
0856デフォルトの名無しさん
2016/03/28(月) 04:37:20.45ID:OzjTEsq7すまん。
>>855
せやったな。
__newindexは代入したときに無かったらや。
0857デフォルトの名無しさん
2016/03/28(月) 12:35:11.30ID:K6EkYblLSafe Navigation Operator 的な動作なら、そっちのほうが良いかもしれない。
0858デフォルトの名無しさん
2016/03/30(水) 08:03:28.46ID:MvqxUS0Kプログラマーではない人をターゲットにしていたからだよ。
つまり英語をある程度知ってる人なら内容を理解できるようにってこと。
パスカルを真似ったってよりも日本語ベーシックみたいなものかな。
0859デフォルトの名無しさん
2016/03/30(水) 10:21:33.98ID:PJ1J1ZJR普及してるからそれが普通に見えるだけで
0860デフォルトの名無しさん
2016/03/30(水) 10:50:30.01ID:IKaSwJOVSwiftも { } は使うけど ( ) が無いから気持ち悪いんだろうか?
0861デフォルトの名無しさん
2016/03/30(水) 11:35:11.53ID:mjOFe187local i, j = f(x, ...)
int i=0, j=0; のような文法をそのまま採用するのは無理
0862デフォルトの名無しさん
2016/03/30(水) 13:09:07.35ID:MvqxUS0Kうごけ x=x+1 まで x < 10 おわり
0863デフォルトの名無しさん
2016/03/30(水) 13:44:09.05ID:UL6gISrgそんなノリで「ならおまえが作れよ」でObjective Pascalやら○言語やら
色々出たし確かに文脈としてはCよりマシだったけど結局普及しなかったしな
一旦普及しちまうとIA64やらOSXやら互換性を捨てたモンが代替に成り上がるのは難しいね
過去のソースの流用だけじゃなくてコーダーの慣れとかの問題も含めて
>>862
ぴゅう太だっけか
今なら[ #define もし if( ] [ #define おわり ) ]とかで凌げるのかね?
0864デフォルトの名無しさん
2016/03/30(水) 23:36:59.47ID:/8cK4WLw0865デフォルトの名無しさん
2016/03/31(木) 01:03:50.28ID:zQkq4gxf0866デフォルトの名無しさん
2016/03/31(木) 02:59:26.18ID:nACjm5l+{}の変わりにdo endがあるでしょう
0867デフォルトの名無しさん
2016/03/31(木) 20:47:53.62ID:nkzU0v9F1年またぎで RC1 が正式リリースになったのか うっひょーー
0868デフォルトの名無しさん
2016/04/01(金) 06:14:44.27ID:rWTRiDhV間が空くと細かいとこ忘れがちだしちょいと心配なリリースではある
0869デフォルトの名無しさん
2016/04/07(木) 01:07:47.63ID:dZYAORArfunctionA(value)
functionB(value)
functionC(value)
この時に、値渡しでなく参照渡しにする方法はありますか?
戻り値で返してもらうとかしないと駄目でしょうか?
0870デフォルトの名無しさん
2016/04/07(木) 01:37:09.92ID:m5Wmq6v/総合スレだから言語を明記してね
Luaだとすると参照渡しはない
戻り値か、テーブルで渡して中身を書き換える
具体的な用途が決まってるなら別解もあるかも
0871デフォルトの名無しさん
2016/04/07(木) 01:49:59.00ID:dZYAORAr言語はluaです。
returnを書き忘れそうなんで、
下記みたいなゲッターセッターのクロージャ渡すことにします。
後で拡張するのも楽そうだし。
ありがとうございます。
local value
function getter_setter(val)
if val != nil then value = val end
return value
end
0872デフォルトの名無しさん
2016/04/07(木) 23:57:49.14ID:s1RKY7Zg変な理由だな。returnを忘れるぐらいだったら代入とかクロージャの呼び出しを忘れる心配もしなければならなくない?
0873デフォルトの名無しさん
2016/04/08(金) 00:31:02.22ID:NMv2dsC8参照渡しの主な用途は、複数の返値か、変数の入れ替えだと思うんだが
Luaだと自然な記述でどちらも書けるから必要になったことはないなぁ
その例なら value = val or value みたいな書き方もできるし
0874デフォルトの名無しさん
2016/04/08(金) 09:00:43.43ID:QHM1+lud必須じゃないからreturnいらないし、呼び出し忘れたってかまわないです。
ただ、生存期間中は使いたい場合があるのです。
0875デフォルトの名無しさん
2016/04/08(金) 09:05:33.22ID:Awm5dteq0876デフォルトの名無しさん
2016/04/08(金) 10:02:48.01ID:NMv2dsC80878デフォルトの名無しさん
2016/04/08(金) 18:15:07.93ID:QKtAKDZQif err ~= nil then return err end
これを参照渡しのように f(seterr) と書くのは合理的だと思う
人間がみんな合理的に行動すればコミュ力は重要ではないかも
0879デフォルトの名無しさん
2016/04/08(金) 21:19:50.62ID:ZsT2Hxo0どう合理的なんだ?
seterrのエラーチェックしてないからイコールなコードでもないしどういう利点が有るのか説明してよ。
r=assert(f());
のような書き方出来なくなるし
0880デフォルトの名無しさん
2016/04/08(金) 21:32:21.04ID:QKtAKDZQ0881デフォルトの名無しさん
2016/04/08(金) 22:34:01.66ID:NMv2dsC8日本語でおk
JavaScript でいう Promise の reject ハンドラのような意図か?
Luaは例外処理 (try-catch) が書き難いから、その手の用途なら必要性は理解できる。
0882デフォルトの名無しさん
2016/04/09(土) 01:02:16.06ID:EFL/mBbR何もしないで続行するのは自由だからそれでいいけど
後で念のため再度エラーチェックする自由も欲しい
0883デフォルトの名無しさん
2016/04/09(土) 02:22:04.50ID:u1ofpue+0884デフォルトの名無しさん
2016/04/09(土) 07:21:19.22ID:FoBfIIvs0885デフォルトの名無しさん
2016/04/09(土) 07:34:56.67ID:u1ofpue+そうかもな、どういう場面か具体的なコードで示してくれるとありがたい
合理的なコードならありふれてるよね?
あと例外は複雑になりやすいからGoとかでも例外は排除して多値でエラー返すようにしてる
0886デフォルトの名無しさん
2016/04/09(土) 08:25:05.90ID:WDrzc2WmむしろLuaもGoも複数の返値を持てることがポイントだと思う。
{ 本来の返値, エラー? } のペアを返すという発想で、合理的。
「例外」という別口をわざわざ用意しなくて良くなった。
ただ、All or Nothing のトランザクション等、処理事にエラー値の確認が面倒というのも想像できる。
その場合、Luaの流儀なら >>879 の assert のように、エラー値を例外ジャンプに変換する関数で包むべきなんだろうな。
0887デフォルトの名無しさん
2016/04/09(土) 08:38:40.76ID:FoBfIIvs関数が関数テーブルに構造化されている場合、多値を返すと他の関数と戻り値の仕様がごちゃごちゃになってくるので、引数のレベルで疎結合にしておきたい。
0888デフォルトの名無しさん
2016/04/09(土) 08:50:59.47ID:EFL/mBbR嘘だとわかる場面に出くわした
0889デフォルトの名無しさん
2016/04/09(土) 09:01:44.19ID:WDrzc2Wm関数テーブルに構造化されていると言うなら、
引数や返値含め、全ての関数は同じ型であるべきだろう。
それぞれが違うなら、それは構造化ではなく寄せ集めだ。動的型言語に甘えてる。
0890デフォルトの名無しさん
2016/04/09(土) 09:19:31.93ID:l8xjVqJCしなくていいという理由が大きいと思うが。
タプルを返せるのはステータスを参照型の引数に返すよりは合理的だとは思うが
例外の代用になるかというとそれはちょっと違うと思う。
0891デフォルトの名無しさん
2016/04/09(土) 09:23:54.21ID:WCRIlqKIいずれにせよtry-catch-fainalyは標準で欲しいな
0892デフォルトの名無しさん
2016/04/09(土) 09:43:40.75ID:EFL/mBbR失敗時の記述が不要というのはexitでもできる
スレッドがあるならスレッドを止めてもいい
なので本当の理由は、プロセスやスレッドの起動・再起動が遅すぎるからじゃないか
0893デフォルトの名無しさん
2016/04/09(土) 11:18:07.50ID:8JT9QS2Iというかオプソなんだし気に入らないなら修正すりゃええやん
他と互換性なくていいならやりたい放題なんだし、
その修正を公開してメジャーになったとしたらバックポートしてくれるかも知れんでよ
0894デフォルトの名無しさん
2016/04/09(土) 11:28:03.33ID:WDrzc2Wm旧来の書き方がしたいならばその通りなんだが、
非同期処理が一般的になってきた昨今では、最良かどうかは分からない。
tryブロック内で処理が同期的に完了するとは限らないから。
タプル返しも、error/pcallも、rejectハンドラ渡しもできるから、現状のLuaで十分汎用性はある。
せいぜい構文糖のためにパーサを改造したくなるくらい。
0895デフォルトの名無しさん
2016/04/09(土) 12:43:02.89ID:FoBfIIvsただのトレードオフ。
どこを重視するかは自由。
0896デフォルトの名無しさん
2016/04/09(土) 13:38:58.58ID:u1ofpue+引数にしたら引数の仕様がごちゃごちゃになってくると思うんだけど。
引数を受け取るだけの関数を渡せとなるなら尚更
0897デフォルトの名無しさん
2016/04/09(土) 14:08:41.76ID:u1ofpue+別にluaに限定する必要ないよ
引数で返すのが合理的に見えるコードであれば
C言語みたいに返値を一つしか返せないからって理由なのは無意味だから外して欲しいけど。
>>890
何もしなかったらそのままアプリが終了するだけじゃん
個人的にはtry catchは要らないかな。Goが例外無くしたのと同じ理由で
0898デフォルトの名無しさん
2016/04/11(月) 08:27:07.88ID:k7zVs+aP確かにGo的なのでいいかもな。
ttp://www.geocities.jp/m_hiroi/golang/abcgo15.html
足りないのはdeferとrecoverかな?
deferは__gcメタテーブル使えばできそうだけど標準で欲しいな。
recover はわからん。
0899デフォルトの名無しさん
2016/04/11(月) 08:58:49.07ID:WTwt1caFdeferのようなものは例外とは関係無いところが理由で欲しいね
途中returnでclose書くの面倒とかそういう所で
gcに任せてたらいつ実行されるかわからんし
recoverはpcallでいいんじゃないかな
0900デフォルトの名無しさん
2016/04/11(月) 09:29:17.60ID:AFQC7gKw0901デフォルトの名無しさん
2016/04/11(月) 10:19:40.88ID:UaC8pXHzLuaのソースを読んでると
スコープを抜けるタイミングでクロージャのupvalueを閉じる処理があるから
その辺りを改造すると、スコープ終了時に何かする機能が追加できる気がした。
0902デフォルトの名無しさん
2016/04/12(火) 00:55:24.80ID:JDMXFvBX0903デフォルトの名無しさん
2016/04/12(火) 01:26:42.97ID:fKt10c2M0904デフォルトの名無しさん
2016/04/13(水) 22:16:47.11ID:PD+aqUpV負荷が高いものはCやC++で書けばいいしやっぱ速度はそれ程重要じゃないのな
0905デフォルトの名無しさん
2016/04/13(水) 22:23:51.85ID:7YNUgm8C例えば、メッセージテーブルみたいなのをloadfileで読み込んで使いたいです。
MSG.PLEASE_INPUT_ANY_KEY
0906デフォルトの名無しさん
2016/04/14(木) 08:00:44.86ID:PaNxRcDiスコープというのはブロック単位のことだと思うんだけど
確かにブロック単位でdeferができれば便利ですな。
個人的にはdeferという単語はイマイチだけど
0907デフォルトの名無しさん
2016/04/14(木) 08:31:22.32ID:PaNxRcDi0908デフォルトの名無しさん
2016/04/14(木) 12:08:10.65ID:z7Vrjvws何か勘違いしてない?
0909デフォルトの名無しさん
2016/04/14(木) 17:46:31.38ID:PaNxRcDiなぜ勘違いしてると感じたの?
0910デフォルトの名無しさん
2016/04/15(金) 00:30:26.65ID:MuKGbCph突然gotoが出てきたから
0911デフォルトの名無しさん
2016/04/15(金) 04:18:23.81ID:+t9YcmSiでも思ったことをそのまま喋ったら明らかな失言や暴言や嘘も増える
脅迫や詐欺みたいな発言を連発するよりは、少し意味不明な方がマシじゃないか
0912デフォルトの名無しさん
2016/04/15(金) 07:45:58.29ID:Hp4CXrU7だってさ、たとえば ::finally:: というラベルを作って、
if エラー発生 then goto finaly end とかやればいっしょじゃね?
0913デフォルトの名無しさん
2016/04/15(金) 08:24:11.24ID:uS8f5f96全然違う。それだと途中でreturn出来ないし、しないように注意しなければいけない。
コーデイング規約でreturnはfinallyラベルの後の一つだけにするって定めるつもり?
それに後処理が必要になるものはそのすぐ近くにそれを書きたいもの。
0914デフォルトの名無しさん
2016/04/15(金) 08:41:49.74ID:+t9YcmSi2. 行きたくない人などいるはずがないからreturn出来ない
0915デフォルトの名無しさん
2016/04/15(金) 09:10:31.83ID:9cTSD0EJ「エラー処理をどうするか」なら良いのだけれど、話の流れは
「エラー処理を忘れないようどうするか」だったと思うんだ。
Luaに限れば、必ず後始末したい場合は pcall が必須なのがメンドイ。
0916デフォルトの名無しさん
2016/04/15(金) 09:56:06.34ID:Hp4CXrU7ただそういうのは織り込み済みの上で gotoで足りると中の人は考えてるのかもしれないなぁ、ということ。
これって勘違いというほどのもの?
0917デフォルトの名無しさん
2016/04/16(土) 15:05:29.04ID:ls9rc/e1例えばホスト側が「文字列を丸ごとファイルに書き出す」機能を公開すれば
スクリプト側で「失敗したらファイルを閉じて削除して〜」などと考えず済む。
汎用言語なら細かい粒度のAPIのほうが小回りが利くけど
所詮組み込み言語なんだから「どのように」ではなく「何をしたい」単位で記述させたほうが良い。
0918デフォルトの名無しさん
2016/05/01(日) 13:23:19.66ID:tKi6j9CTBitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
0
0919デフォルトの名無しさん
2016/05/15(日) 09:01:08.96ID:WYUaDR6g0920デフォルトの名無しさん
2016/05/15(日) 12:38:52.61ID:llz61aSC車輪の再発明?知らんな!
レス数が900を超えています。1000を超えると表示できなくなるよ。