[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/27 16:07 / Filesize : 264 KB / Number-of Response : 1020
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2013/03/10(日) 15:10:32.28 .net]
LuaやSquirrelやAngelScriptなどアプリケーションへの組み込み用途で
使われるプログラミング言語についてのスレッドです
まとめwiki(なにか質問する前に必ずみること!)
wikiwiki.jp/lua/

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

■前スレ
【Lua】組み込み系言語総合 その5【Squirrel】
toro.2ch.net/test/read.cgi/tech/1321063450/
■過去スレ
その4 hibari.2ch.net/test/read.cgi/tech/1301414458/
その3 hibari.2ch.net/test/read.cgi/tech/1272643397/
その2 pc12.2ch.net/test/read.cgi/tech/1243210301/
その1 pc12.2ch.net/test/read.cgi/tech/1205208141/
プログラミング言語 Lua
その3 pc11.2ch.net/test/read.cgi/tech/1160799232/

694 名前:デフォルトの名無しさん mailto:sage [2015/05/16(土) 00:33:56.90 ID:nBVK7qH/.net]
Lua自体にはメソッドという分別は無いので関数かどうかで判断するだけだな

for k,v in piars(player) do
if type(v) == "function" then
printf(k, v)
end
end

695 名前:デフォルトの名無しさん [2015/05/16(土) 00:48:49.46 ID:yj1J+1ps.net]
お〜
できました〜
かゆいところにきちんと手が届いてくれていい言語ですねぇコレ
ありがとうございます。

696 名前:デフォルトの名無しさん mailto:sage [2015/05/18(月) 06:50:19.69 ID:QWumnvsF.net]
すう様はきちんと考えながら英語を喋ってるよ。
あれはカンペとかじゃない。

697 名前:デフォルトの名無しさん mailto:sage [2015/05/19(火) 14:34:42.08 ID:dht99EFe.net]
Luaで悩んでいます。ご教示お願いいたします。
下記のようなテキストの入った複数の配列があり、

tbl01={"a","b","c"}
tbl02={"d","e","f"}
tbl03...

ストリング型のstrという変数に"tbl"という文字列が入っています。
やりたいことは、文字列型の値を何とか加工してtblの要素にアクセスしたいんです。

str[1]

とするとエラーが出ますし・・・(まあそうですよね)
強引にtable型に型変換できないかな?とか悩んでいます。
文字列しか受け取れない場合、複数ある配列にアクセスするには
どのようにすればよろしいでしょうか?

詳しい方教えてください。お願いします!

698 名前:687 mailto:sage [2015/05/19(火) 14:37:23.12 ID:dht99EFe.net]
↑すみません、間違えました。
strの中に入っている文字列は"tbl"ではなく"tbl01"としています。
いずれにせよ無理ですが…

699 名前:デフォルトの名無しさん mailto:sage [2015/05/19(火) 16:19:59.83 ID:Nw+B6083.net]
>>690
string.sub() or .byte()
1文字ずつ処理するのはC系に比べて苦手。
代わりに正規表現が使えないか要検討。

700 名前:デフォルトの名無しさん mailto:sage [2015/05/19(火) 16:23:48.21 ID:26zc2bnI.net]
微妙にエスパー能力が必要な質問だが、こういうことけ?

local function getTableByName(name)
 local tables = {
  tbl01 = {'a', 'b', 'c'},
  tbl02 = {'d', 'e', 'f'},
 }
 return tables[name]
end

local str = 'tbl01'
local t = getTableByName(str)

print(t[1])

701 名前:デフォルトの名無しさん mailto:sage [2015/05/19(火) 16:28:09.88 ID:Nw+B6083.net]
>>690
違うな。質問の意図を取り違えていたかも?
str[1]の代わりになるのは >>692 だが、
元々の目的が「変数に入っている変数名を経由したアクセスがしたい」ならば _G を使う:
str = "tbl01"
assert(_G[str] == tbl01)

tbl01 等がグローバル変数、ローカル変数、他テーブルの要素で処理が違うものになるから、これでダメならまた聞いてくれ。

702 名前:デフォルトの名無しさん mailto:sage [2015/05/19(火) 22:19:05.65 ID:dht99EFe.net]
>>692
>>693
お二方、ありがとうございます!
エスパーみたいな質問になってしまいましたね。すみません。
実現したいことの詳細をより細かく記載します。どうしても実現したいので。もう3日悩んでます。

ゲームを制作しています。
ゲームエンジンからluaを呼んでluaで処理させることができるのですが、
ゲームエンジンの仕様でlua側に渡せる値が文字列のみです。

luaで何をしたいかというと、上記のように大量にテーブルを作って中身も代入しておきます。
すべて文字列のデータです。

ゲームエンジン側から@文字列Aテーブル名の二つの値を渡します。(もちろん両方文字列でしか渡せません)
その二つの値がlua側に渡ったら、Aを使ってテーブルを探し、@を使ってそのテーブルの中に
@と同じ文字列があるか比較します。

文字列があったら1を返して、なかったら2を返す…ということを実現したいのです。

>>690の例で行くと、ゲームエンジンから@"a"とAtbl01をもらって、lua側のtbl01をforで回して
探していけばいいや…と思っていました。しかし、
strにtbl01が入っていたとして、

for i=1 , table.maxn(str) , 1 do

…なんてことをすると、文字列なのでエラーが返ってきますorz
いろいろ試してみてstr[i]なんてことまでやってみる始末。もちろん動



703 名前:かないですが。
そもそもluaって動的に型を決めてくれるので明示的にこちらから「こいつはtable型だよ!」
って指定できないんですね。(java使っている者でして…)

説明不足なら捕捉します。後出し申し訳ありません。何卒よろしくお願いいたします。
[]
[ここ壊れてます]

704 名前:デフォルトの名無しさん mailto:sage [2015/05/19(火) 22:35:28.81 ID:UWcSl4nD.net]
>>695
table型だよって指示できないもなにも、変数strの中身はあくまでstringなんだから、Javaで同じことやる場合でもHashTableかなんか使うよね?
つまり、>>694 がやりたいことなんじゃないの?
table.maxn(_G[str]) でできると思うよ

705 名前:デフォルトの名無しさん mailto:sage [2015/05/19(火) 23:29:17.09 ID:dht99EFe.net]
>>696
やりました!!!
要素にアクセスできましたーー!

そのまま文字列一致の判定をして、フラグ1が返ってきました。
これでゲームの核の部分が作れました。

そもそも_Gの使い方を間違ってました…
しかしLuaって色々弄って思ったのですが想像以上に柔軟なんですね。

お三方、親身に教えてくださってありがとうございます。

706 名前:デフォルトの名無しさん mailto:sage [2015/05/25(月) 21:08:36.02 ID:sCH5oSB/.net]
質問失礼します。
OSX 64bit Unity という環境で Lua を使用しています。
Windowsでは正常に動くのですが、OSX 64bit で動かすと LuaDLL.luaL_newstate(); で null が返ってきて困っています。
パッケージを見ると Mac (x86 only) と明記してありました。
OSX 64bit でも動かしたいのですが、どうやれば良いでしょうか?

707 名前:デフォルトの名無しさん mailto:sage [2015/05/25(月) 21:17:17.45 ID:WFHyWYJ8.net]
64bitなdllを別途準備しないとダメじゃね?

708 名前:695 mailto:sage [2015/05/25(月) 21:18:45.04 ID:sCH5oSB/.net]
>>699
そうですよね。。。
makeは通ったんで、頑張ってみます!

709 名前:695 mailto:sage [2015/05/28(木) 19:45:28.97 ID:52beXCpy.net]
詰まりました。。。
LuaJIT-2.0.2を利用しているのですが、OSX用のuniversal binaryで出力する方法が分かりません。
Luaの速さに全体重を乗っけてるんで、今更別の言語への切り替え等は考えられません。
分かる方、ぜひ教えてください。

710 名前:デフォルトの名無しさん mailto:sage [2015/05/29(金) 01:55:02.89 ID:p/ahFCvT.net]
個々にビルドした場合はlipoというツールで合体させるらしい?
https://www.google.co.jp/search?q=lipo+universal+binary

711 名前:デフォルトの名無しさん mailto:sage [2015/05/29(金) 02:07:51.90 ID:p/ahFCvT.net]
luajitではなく、luaならhomebrewとかみるとuniversalのオプションがあるね。
brew install lua --universal

>698も根が深そうな。。。
https://www.google.co.jp/search?q=luaL_newstate+64bit
https://gist.github.com/nddrylliog/8722197

712 名前:デフォルトの名無しさん mailto:sage [2015/05/29(金) 02:13:23.25 ID:p/ahFCvT.net]
とおもったけど、普通に64bitになっていた。
https://github.com/Homebrew/homebrew/blob/master/Library/Formula/luajit.rb

$ lipo -info /usr/local/opt/luajit/bin/luajit
Non-fat file: /usr/local/opt/luajit/bin/luajit is architecture: x86_64



713 名前:デフォルトの名無しさん mailto:sage [2015/05/29(金) 09:55:09.44 ID:2a3TZL/2.net]
>>702-704
ありがとうございます!
LuaJITの32bit版ライブラリと64bit版ライブラリを出力して、lipoというソフトで合体という事ですよね?
試行錯誤してみます!

714 名前:695 mailto:sage [2015/05/29(金) 15:29:21.86 ID:2a3TZL/2.net]
>>698も根が深そうな。。。
まさにコレでした。
問題は2つあったんですね。
もうお手上げです。
とりあえず勉強になりました。
ありがとうございました。

715 名前:695 mailto:sage [2015/05/30(土) 02:16:04.85 ID:WJHjPFg2.net]
ちょっとレスにミスったんで、訂正

>>703
>698も根が深そうな。。。
↑まさにコレでした。

716 名前:デフォルトの名無しさん mailto:sage [2015/09/14(月) 16:28:17.35 ID:SxkHJw7D.net]
最新のsnes9xでluaを読み込む方法を教えてください

pastebin.com/nBuJChc9を動作させたいです

717 名前:デフォルトの名無しさん [2015/09/30(水) 15:13:43.25 ID:gLrxUsPl.net]
Nekoって一応プログラミング言語だったのか
Haxeのプログラムを動かすVMとだけ思ってた

https://en.wikipedia.org/wiki/Neko_(programming_language)

718 名前:デフォルトの名無しさん mailto:sage [2015/09/30(水) 15:57:26.40 ID:2TkwnPLU.net]
新進気鋭のプログラミング言語「Neko」ってなに?
news.mynavi.jp/articles/2007/08/06/neko/

719 名前:デフォルトの名無しさん [2015/10/06(火) 22:32:11.35 ID:uxUTfTFS.net]
受ける会社大丈夫?
下記の条件が全て当てはまる会社にご注意下さい。

・IT系 in tokyo
・「社名 労基」でググると過去の2chスレが出てくる
・転職会議で2.5点

720 名前:デフォルトの名無しさん mailto:sage [2015/10/21(水) 00:53:22.02 ID:Kl04gCQo.net]
Ravi

https://github.com/dibyendumajumdar/ravi

lua5.3互換、静的型付け追加、jit

721 名前:デフォルトの名無しさん mailto:sage [2015/10/21(水) 01:29:46.09 ID:+L1p2dWm.net]
きみのためなら死ねる。Ravi!

722 名前:デフォルトの名無しさん mailto:sage [2015/11/02(月) 08:39:42.03 ID:LHJrrN+c.net]
FlashAirにLuaが組み込まれてた



723 名前:デフォルトの名無しさん mailto:sage [2015/12/07(月) 06:26:50.82 ID:sv1H4v2t.net]
duktapeはどうなん?
使ってる人いる?

724 名前:デフォルトの名無しさん [2015/12/08(火) 17:05:55.06 ID:yVFhtqC/.net]
スマホのマクロアプリのスクリプトがLuaのコードで書かれてるんだけどusleep関数を使うと徐々にズレてくるんだが正確に待機させる事ってできます?
命令としてはタップ、待機、タップの繰り返しなんだけども10回目くらいで目に見えて遅れてる
usleep自体正確じゃなく、1回ズレると以後ズレた地点から待機時間が計算されるからその繰り返しになっていると思う
os.clockで開始時間計って目的のタップまでの待機時間を計算していくしかないかなと思ってるんだけどいかんせん700回以上を計算して行くのは心が折れるので何か方法があれば教えて下さい

725 名前:デフォルトの名無しさん mailto:sage [2015/12/08(火) 17:52:14.14 ID:V92FzyIA.net]
>>716
luaに限った話じゃないが
次に目を覚ましたい時刻までの差分だけ寝れば?

726 名前:デフォルトの名無しさん mailto:sage [2015/12/08(火) 18:05:12.63 ID:yVFhtqC/.net]
>>717
os.clockでタップさせたいタイミング全ての時間を取得するって事ですか?

727 名前:デフォルトの名無しさん mailto:sage [2015/12/08(火) 18:45:35.86 ID:V92FzyIA.net]
>>718
「全ての時間」ってのがよくわからないな。キリのいい間隔ではだめなのか?

例えば 200ms おきにタップしたいなら、
ベース時刻から 0, 200, 400, 600ms …の経過で処理するんでしょ?
で、200ms の処理の際に時計を見て、実際には 205ms の時刻なら、次は 400 - 205 = 195ms だけ寝る。

何かしら負荷がかかって 400ms の時刻に近すぎたり過ぎたりしたら
スキップするなり、数回間隔を狭めて調整する処理も要るかも。

728 名前:デフォルトの名無しさん mailto:sage [2015/12/08(火) 23:00:53.20 ID:yVFhtqC/.net]
>>719
一定間隔ではないんですよね
止める時間はだいたい4パターンのうちどれか
タップした時の時間と目的の時間を比較する方法があれば良いんですが
一定間隔ズレているなら良いですが徐々に少しずつ遅れているなら結局700回を全て調整していくしかないわけですよね…
コツコツ頑張ります

729 名前:デフォルトの名無しさん [2015/12/09(水) 01:20:52.01 ID:uEc6NdFX.net]
【 オンラインTCGエディター 】 >>1

デュエル・マスターズ的な非電源TCGの 《 オンライン化ツクール系ソフト 》 制作の企画。

例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持っており

730 名前:ながら、
当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを
ブロック構造の組み合わせで後付け挿入できるように予めシステム化してあるソフト(エディター)。
既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。
バトスピ、ヴァンガ、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、ガンダム・ウォー、ライブオン、ディメンション・ゼロ、カードヒーロー、シャーマン・キングなど
のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書いて。
マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストして。
WEB通信での対戦は、個vs個、多数乱戦、チームvsチーム、個vsチームを可能な仕様とする方針。

設計思想は 《 RPGツクール 》 が良いかな?  他に、優れたエディター有ったら挙げてみて。

個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。

エディター群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。

遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。
なるべく前述3つで可能な再現は全て実装させる方向を目指す。 まぁ努力する・・・
バトスピ、ヴァンガ、バディ、デュエマなど発売済みゲームソフトが存在してるケースはベンダーに研究させる。

各社TCGを再現するテストプレイ ⇒ 更に改良や修正。

機能制限した下位版を5万円以上で発売 + デュエリ−グ用に改造した上位版でサーバー稼動=営業開始。

下位版の改造および商用利用には、別途で当社との契約が必要。

さ〜て、製作ベンダー見つけよっと!ww(クス
http://wc2014.2ch.net/test/read.cgi/entrance2/1449039272/-18
[]
[ここ壊れてます]

731 名前:デフォルトの名無しさん mailto:sage [2015/12/30(水) 01:11:18.19 ID:TU1EcnmS.net]
初心者ですがLuaのサイト行ってダウンロードしたんですけど
インストール出来ません
アドバイスを御願いします(´・ω・`)

732 名前:デフォルトの名無しさん mailto:sage [2015/12/30(水) 01:46:15.47 ID:LbvdgCkv.net]
>>722
luabinaries.sourceforge.net/



733 名前:デフォルトの名無しさん mailto:sage [2015/12/30(水) 05:57:27.20 ID:47mVpj3E.net]
>>720
local start_usec = sysyem_usec();
〜色々やる〜
usleep(sleep_time - (sysyem_usec() - start_usec));
これだけの話じゃないの?

ちなみにos.clockはprogramが使用したCPU時間だからCPUが寝てる間は増えないよ

734 名前:デフォルトの名無しさん mailto:sage [2015/12/30(水) 18:30:13.07 ID:Sj5i/aUt.net]
>>722
OSがワカランけど
ソースをコンパイルするなら

tar zxvf lua-5.3.2_Sources.tar.gz
cd lua53
make linux or
make macosx or
make mingw or
make posix or
make solaris or

make install

735 名前:デフォルトの名無しさん mailto:sage [2016/01/07(木) 20:02:10.72 ID:lAIllFG+.net]
Luaは組み込みが簡単だっていうけど
Javaの呼び出しAPI使う方がずっと簡単じゃん
Javaなら書くのにEclipseとか使えるし

736 名前:デフォルトの名無しさん mailto:sage [2016/01/07(木) 21:06:07.28 ID:YzB9fcaP.net]
コンパイル型の言語を組み込んで何がしたいんだ?

737 名前:デフォルトの名無しさん mailto:sage [2016/01/08(金) 08:07:50.80 ID:QEjOaegz.net]
「組み込みが簡単」の意味を誤解してるに一票

738 名前:デフォルトの名無しさん mailto:sage [2016/01/11(月) 03:28:28.16 ID:Va0MVjV0.net]
じゃあJavaをアプリケーションに組み込んでみなよ

739 名前:デフォルトの名無しさん mailto:sage [2016/01/11(月) 04:05:21.99 ID:Va0MVjV0.net]
luaのスタック操作APIが面倒というのならbind用ライブラリ一杯ある

lua-users.org/wiki/BindingCodeToLua
それ使うとJNIが面倒と思えるぐらい便利なのあるよ

740 名前:デフォルトの名無しさん mailto:sage [2016/01/11(月) 04:14:11.05 ID:0EvHa66G.net]
静的型付きの組み込み言語ってないの?
実行時コンパイルできるやつ

741 名前:デフォルトの名無しさん mailto:sage [2016/01/11(月) 04:27:46.70 ID:Va0MVjV0.net]
>>731
それってエラーになるの結局実行時だしIDEがサポートしないとメリットなくない?

742 名前:デフォルトの名無しさん mailto:sage [2016/01/11(月) 05:37:06.41 ID:0EvHa66G.net]
すまん言葉が足りなかった。
そうじゃなくて、実行時コンパイル「も」できるやつと言いたかった。つまり実質Evalを捨ててない静的型付き言語。
というかIDEサポートなくたってメリットあるだろ・・・コンパイル時に型エラー出るじゃん



743 名前:デフォルトの名無しさん mailto:sage [2016/01/11(月) 07:27:44.99 ID:H4zd5jav.net]
>>712みたいなLLVMバックエンドの奴なら

744 名前:デフォルトの名無しさん mailto:sage [2016/01/11(月) 07:39:28.66 ID:H4zd5jav.net]
いやそんなの組み込むのは無理か、間違い

745 名前:デフォルトの名無しさん mailto:sage [2016/01/11(月) 09:54:45.69 ID:EOECSf3M.net]
>>733
JavaScriptを組み込んでTypeScriptで書く
IDEサポートも VisualStudio なり VisualStudio Code なりがある
v8なりJsRTが使える環境なら性能面でもかなり良い選択だと思う

746 名前:デフォルトの名無しさん [2016/01/11(月) 17:05:44.51 ID:if9kJcKP.net]
>>736
v8をアプリに組み込むのは手間だし(クロスプラットフォームを考えると尚更)
altJs系の言語はeval出来るって要件満たしてない

747 名前:デフォルトの名無しさん mailto:sage [2016/01/12(火) 15:56:16.83 ID:pvMT9PCj.net]
jsのエンジンってposix系のapiってあるの?
commonjsのnode組み合わせたり必要なんだよね?

v8意外にもあるみたいだけど。
mattn.kaoriya.net/software/lang/c/20150815003033.htm

748 名前:デフォルトの名無しさん mailto:sage [2016/01/12(火) 15:58:08.09 ID:pvMT9PCj.net]
cljsだとeval出来るようだ。

749 名前:デフォルトの名無しさん mailto:sage [2016/01/15(金) 01:33:01.12 ID:9hWfybeU.net]
>>733
AngelScript|Д`)ノ<静的型付き言語と聞いて。Anyもあるよ!

750 名前:デフォルトの名無しさん mailto:sage [2016/01/19(火) 20:51:03.31 ID:0e0GcKQy.net]
PSLってのはどうよ?
俺はスクリプト言語に静的型はそれ程魅力無いと思ってるし実績あるからLuaでいいやってなってるけど

751 名前:デフォルトの名無しさん mailto:sage [2016/01/24(日) 13:23:45.64 ID:xtpCszE9.net]
>>58
Lua の文法って簡単なんだなーと思って試しにパーサを書いてみてたんだけど、
マニュアルの BNF 通りだと左再帰になってるから無限ループに陥ってしまった。
間接的な左再帰だから俺のへぼい知識では除去できなかった。

実際に Lua の実装では再帰下降してるっぽいからなんとかしてるんだとは思うけど、
左再帰を除去した文法規則の表とかってどっかにないかな?
ソースコード読むしかない?

752 名前:デフォルトの名無しさん mailto:sage [2016/01/31(日) 02:54:56.98 ID:kn/5LVuq.net]
Lua使ってる人binderは何使ってる?
そんなもん要らん!標準のstack APIで充分だ!って人もどれくらい居るんかな



753 名前:デフォルトの名無しさん mailto:sage [2016/01/31(日) 11:34:52.69 ID:Pw2nI7hG.net]
わしはstack形にすっかり慣れた

754 名前:デフォルトの名無しさん mailto:sage [2016/01/31(日) 23:47:27.75 ID:kn/5LVuq.net]
慣れても面倒くさいものは面倒くさくね?
C++のオブジェクトをLuaから使えるようにするだけでもやりたくなくなる

755 名前:デフォルトの名無しさん mailto:sage [2016/02/02(火) 07:57:29.11 ID:lmUWOHWt.net]
英語より面倒な日本語にもすっかり慣れたしなんとかなるもんだよ

756 名前:デフォルトの名無しさん mailto:sage [2016/02/03(水) 23:36:18.56 ID:8yWl5BHB.net]
Lua ってパッチ当てないと日本語つかわれへんの?
21世紀にもなってなんでや。

757 名前:デフォルトの名無しさん mailto:sage [2016/02/04(木) 00:44:14.34 ID:lRklN/w3.net]
>>747
utf8ならそれなりに使える
21世紀にもなってSJISは使ってないんだろ?

とはいえファイル名はOSネイティブの文字コードが要るとか
幾つか注意点や手を入れたくなる所はあるが

758 名前:デフォルトの名無しさん mailto:sage [2016/02/04(木) 01:00:10.15 ID:Jx1/Vtha.net]
>>747
使えるけど?

759 名前:デフォルトの名無しさん mailto:sage [2016/02/04(木) 23:42:25.61 ID:wmCOjGkS.net]
SJIS使ってないなんて都合が良いことありえないw
Winだと何しても所詮SJISから逃れることはできん。

むしろSJISに対応してないプログラムの方が大問題だ。

760 名前:デフォルトの名無しさん mailto:sage [2016/02/04(木) 23:52:14.71 ID:wmCOjGkS.net]
>>747
今の言語だと、ソースをマルチバイトで記述しようが、utf8で記述しようが、
マルチバイト書いたソースから、utf8で書いたクラス呼ぼうが、
変換などソースのどこを探しても1行たりとも表れないのが常識なんだけれども
Luaは変換だらけ。

761 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 00:44:16.88 ID:FMLvAXOG.net]
string型をバイナリ配列として利用しようとするコードが存在する限りもう無理ぽ

762 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 01:33:38.19 ID:XGMa0UOY.net]
swigでsample.iに

typedef struct {
int a;
int b[4];
}hoge_t;

int hogehoge(hoge_t * test);

と書いて swig -lua sample.i 実行で吐き出されるグルー関数を使う場合

luaの記述は

test = require "xxx"

test_t = hoge_t()
test. a =10
result = hogehoge(test_t )

とかすればよいのですが、

test.b[1]=3とか
test.b[2]=4とかするとグルー関数でパラメータチェックで弾かれます。
構造体のポインタ渡しで構造体の中に配列がある場合は
LUA側でどんな記述をすればいいのだろう?



763 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 01:35:33.28 ID:XGMa0UOY.net]
間違えた↑訂正

test_t = hoge_t()
test_t. a =10
result = hogehoge(test_t )

とかすればよいのですが、

test_t.b[1]=3とか
test_t.b[2]=4とかするとグルー関数でパラメータチェックで弾かれます。
構造体のポインタ渡しで構造体の中に配列がある場合は
LUA側でどんな記述をすればいいのだろう?

764 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 06:22:46.35 ID:pWou2Qho.net]
>>750
ANSI 版の API を使ってるやつこそクソ。
正直言って A 付きの Windows API は全部廃止してもいいくらいだ。
UNICODE 版の API 使えよ。

765 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 08:17:19.47 ID:ToPlCIrz.net]
>>755
Luaの話ならstringはchar固定でwchar_t等に変更するのは本体の改造が要る。

Luaのstringは、byte-arrayという名前のほうが適切だと言える。
不適切な変換はしないが、「UTF8として解釈するならutfモジュールを使え」というスタンス。
同様に、SJISに対応したいなら自分でsjisモジュールを作ることになる。

Windowsがsetlocale("UTF8")をサポートしていないのが面倒の原因なんだよな。
他のOSならできるから、もうみんなUTF8に統一して満足しちゃってる。

766 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 15:39:47.51 ID:brMGa4PB.net]
いち早くUnicode()に対応したはいいけど2バイトに収まりきらず、固定長じゃなくなってメリットが何もなくなった上に
他のプラットフォームは軒並みUTF-8になってしまって孤立してしまったが互換性のためにSJISを捨てられないWindowsさん
MSVCで設定とかでUTF-8版のCライブラリ(中でUTF-16に変換するような)を使えるようにしてくれたらいいような気もするんだけど何か問題あるんだろうか

767 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 16:03:19.95 ID:TvHQKkN9.net]
ラテン語圏のやつらが作る言語はいつもこう。

768 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 19:16:06.06 ID:brMGa4PB.net]
ははっ、
RubyのWindowsでの日本語対応がマトモだったと思ってる?

769 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 19:54:12.16 ID:Jcxd0Fsw.net]
Windows切るだけで解決する

770 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 20:10:36.21 ID:pWou2Qho.net]
Windows の API を UTF-8 にすべきだったとは思わんのだよな。
UTF-8 を基本にしてしまうと ASCII コードの範囲内で使う分には対応してようがいまいが使えちゃうから、
対応してない部分が顕在化し難いまま混在してわけわからんようになるのが見えてる。
その点、 UTF-16 と ASCII (ANSI) が混ざったらすぐ発覚する。

771 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 20:32:40.84 ID:brMGa4PB.net]
>>761
へぇ
Windows以外はわけわからんようになってるという主張でございますか?

772 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 21:00:24.37 ID:I7CO4PTN.net]
主要なコードもUTF8じゃなく、OS内部もUTF8じゃなく、標準入出力もUTF8じゃなく、あげく、UTF8にしても世界の文字の一部しか対応できないので
いうような利点はないってことでしょ。

utf8にしても、実際の運営としてはASCIIのような運営範囲なんでしょ?w



773 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 21:04:55.16 ID:ToPlCIrz.net]
>>761 の真意はよくわからんが
char (1 byte) にしか対応していないコードや製品が氾濫するのは困るが
wchar_t (2 byte) にしか対応していないものなら許容できるってニュアンスか?

それもサロゲートペアができて破綻したけどな。
絵文字のせいで目にする機会も無いではないし。

774 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 21:28:04.79 ID:brMGa4PB.net]
>>763
何言ってるのかよくわからんけど
>>UTF8にしても世界の文字の一部しか対応できないので
表現できる範囲はUTF-16も同じなんだが、それもダメって言ってるんだよね?

ってことはつまりSJISとかそれぞれのエンコーディングで適切な処理を行えってこと?

俺はUTF-8のコードポイントの区切りかたは知ってるけど、
他の言語の専用エンコーディングどころか
SJISのコードポイントの区切り方すら知らないわ、
それをプログラミング言語作る人にしかも日本語とかまったく使わない海外の作者に強いるとかできないっすわ。

775 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 21:36:38.36 ID:TvHQKkN9.net]
そんなもん自慢話にもならん。誰それ構わず噛み付いてアホか。

776 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 21:53:39.03 ID:brMGa4PB.net]
誰が自慢話してるんだ?

777 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 23:17:47.52 ID:AF25xcuE.net]
妥協も多いけど現実的だったオリジナルのUnicodeが、世界中のあらゆる文字をひとつのコードで
表現するという無謀な目標を掲げた10646と合流してごみ溜めのようになった。
そんなのに付き合って苦労するのはバカらしいから、基本多言語面だけサポートしてサロゲートペアは
トーフ扱いするのが現実的。どうせろくにフォントも無いし。

778 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 23:26:52.29 ID:pWou2Qho.net]
>>762
コードページの概念を捨てられないという主張。 そりゃ全部 UTF-8 に出来ればベストだとは思うよ。
でも捨てられない以上、下手に混ざってわけわからんようになるよりは混ざったらすぐわかる方がマシって話。

779 名前:デフォルトの名無しさん mailto:sage [2016/02/05(金) 23:56:37.35 ID:wLhOEYBg.net]
各国のコンソールのコードページも65001じゃないし、65001じゃ
日本語もまともに表示できないわけで。

逆にプログラミング言語ごときが数十億人が使ってる現実的な各文字コードを押しのけて
utf8に全文書統一しろ、今すぐしろとか言っても、相手にされんよ。

780 名前:デフォルトの名無しさん mailto:sage [2016/02/06(土) 00:27:48.85 ID:/BZKOehd.net]
Unicodeで表現できない文字って少なくとも日本では名前に変体文字使ってる数%がごねてるだけでしょ
数十億人とか盛りすぎ

781 名前:デフォルトの名無しさん mailto:sage [2016/02/06(土) 00:47:56.49 ID:/BZKOehd.net]
というかSJISには割り当てられててUnicodeで割り当てられてない文字ってあるの?

>>768
最近の携帯電話使ったことないのかい?

>>770
Windows内部はUnicodeで扱ってるからコンソールもUnicodeで表現できない文字は表示できませんよ
WindowsのコンソールをCP65001にしてもまともに表示できないのは実装がタコなだけ
あとメジャーな携帯電話のOSはどちらもUnicodeですけどこれは本当に数十億人が使ってますよ

782 名前:デフォルトの名無しさん mailto:sage [2016/02/06(土) 02:13:32.99 ID:bnndf23C.net]
iOSは消滅確実だが、Androidは十分残りそうだなぁ。

実装がカスとかいったところで、モノ生産してるデスクトップ85%から占めてるてるものを
否定して見ない振りしてもしょうがない。

逆にビューワー(携帯)なんか資産性がないからどうでもいいよ。



783 名前:デフォルトの名無しさん mailto:sage [2016/02/06(土) 03:04:06.56 ID:/BZKOehd.net]
話をどこへ持っていきたいのかよくわからんけど元々は、
WindowsがUTF-8をまともにサポートすべきかっての論点だと思ってたけど。だからいまの実装を見ないふりもなにもないよ。
MicrosoftがWindowsでUTF-8をちゃんとサポートししようとしても今と変わらずクソ実装になるって主張じゃないよね?

>逆にビューワー(携帯)なんか資産性がないからどうでもいいよ。
プログラムを動かすのは大多数が持ってるビューワーなわけで、それこそ否定して見ないふりしてどうすんのよ。
今はサーバーはLinuxで携帯はiOS or Androidなわけで、プログラムを実行する環境全体を見るとWindowsなんて少数派だよ。

784 名前:デフォルトの名無しさん mailto:sage [2016/02/06(土) 08:26:37.09 ID:X7qr0C1S.net]
OSのネイティブ (C言語) では UTF-16 (Windows) と UTF-8 (それ以外) があるけど
今主流の言語 (Java, C#, Swift/Obj-C, JavaScript) のレベルでは
ほぼ UTF-16 に統一された印象があるんだが、この認識は間違っているだろうか?
ファイル入出力では文字コード変換をするのは前提として。
OSうんぬんより、むしろ文字列型がUTF-16でない言語が問題な気がする。

785 名前:デフォルトの名無しさん mailto:sage [2016/02/06(土) 12:03:30.10 ID:BlYk2woR.net]
結局こういう面倒な問題はグレーにしてるLuaが勝ち組

786 名前:デフォルトの名無しさん mailto:sage [2016/02/06(土) 14:43:17.15 ID:8fDg9LDU.net]
>(Java, C#, Swift/Obj-C, JavaScript)
その辺の言語はUTF-8が産まれる前からある言語だからな
SwiftはUTF-16じゃないし(もちろん扱えるけど)、goは基本UTF-8

787 名前:デフォルトの名無しさん mailto:sage [2016/02/06(土) 15:15:51.79 ID:su9E+X74.net]
Ruby ソースコードはコメントで指定、文字列型は内部にエンコーディング情報を持ってる
python 内部表現はデフォルトucs4(WindowsだけUTF-16)
php よく知らんけどググってみる限り統一されてなさそう

というわけでUTF-16に統一されてるわけじゃないよ。

788 名前:デフォルトの名無しさん mailto:sage [2016/02/06(土) 15:22:16.66 ID:22sNDRQR.net]
結局のところ、このスレ的にはC言語の整合がとれてないのが困りどころよな

wchar_t をいまさら統一とは言わないけど、なんか統一した別枠の仕様を標準化してほしい

789 名前:デフォルトの名無しさん mailto:sage [2016/02/06(土) 15:44:17.53 ID:22sNDRQR.net]
あ、C/C++の規格的にはもう11で統一されてたのか

char16 _t がutf-16、char32_tがutf-32で固定の組み込み型。u"" U"" でそれぞれリテラル指定も可能

ただし全部これに対応したライブラリーは整備されてないので、
実情はあんまかわらん模様

790 名前:デフォルトの名無しさん mailto:sage [2016/02/06(土) 15:52:48.40 ID:22sNDRQR.net]
アプリ内部はchar16_tかchar32_tでかいて、
OS依存処理は分離した上で、winはwchar_t がutf-16だからそのままワイド系の関数やapi使って、
unix系はwchar_tは信頼できないから、c16rtomb かc32rtomb でmbに変換して対応、が、C11以降の正しい書き方ってことかな

791 名前:デフォルトの名無しさん mailto:sage [2016/02/06(土) 22:02:21.26 ID:iW4Rvogm.net]
ここ何のスレだっけ…?

792 名前:デフォルトの名無しさん mailto:sage [2016/02/06(土) 22:11:19.39 ID:+jWWiLZa.net]
組み込み言語だろ。流れには沿ってるよ



793 名前:デフォルトの名無しさん mailto:sage [2016/02/07(日) 00:18:29.86 ID:LSSjhAu+.net]
>>780
だからUTF-8に統一すりゃいいのにって話に戻るわけだ

794 名前:デフォルトの名無しさん mailto:sage [2016/02/07(日) 00:48:50.94 ID:4QXOAnIu.net]
言語処理系がSJISソースコードを処理できるか(5C問題)と、言語やOSの内部文字コードの話がたまに混ざる。

795 名前:デフォルトの名無しさん mailto:sage [2016/02/07(日) 03:59:45.36 ID:LSSjhAu+.net]
SJISでソースコード書くやつなんて今時いないよね?
それに誰もそんな話してないよね?

796 名前:デフォルトの名無しさん mailto:sage [2016/02/07(日) 20:56:40.56 ID:8pvMtac5.net]
utf-8サポート入ったlua5.3以降の話だったのね。
以前(5.1/5.2)はsjisパッチがあったりしたので、そっちの話も出てたのかとおもった。

797 名前:デフォルトの名無しさん mailto:sage [2016/02/07(日) 23:13:24.81 ID:vQROT1hb.net]
>>786
今でもマルチバイトのソースコードは山盛りだよ。
最も使用頻度が多いVSがデフォルトSJISだぞ。

そんな現実すら知らずにプログラマやってて
本気で言ってるな、周りが全く見えてない能無し。

798 名前:デフォルトの名無しさん mailto:sage [2016/02/07(日) 23:15:09.52 ID:jiomZ/W6.net]
たまに文字列リテラル内の文字コードが書かれた文字コードに依存する糞処理系とかあるしな・・・

799 名前:デフォルトの名無しさん mailto:sage [2016/02/07(日) 23:22:01.52 ID:vQROT1hb.net]
utg8に依存してるmrubyとかなw

800 名前:デフォルトの名無しさん mailto:sage [2016/02/07(日) 23:44:00.61 ID:LSSjhAu+.net]
>>788
それはWindowsでしか動かないプログラムを書くお前の環境特有の話
それに気が付いてないなら
>周りが全く見えてない能無し。
自己紹介おつ

>>790
組み込み言語なら現実的な選択でしょ
多種多様なエンコーディングに対応するためにOSとか巨大な外部ライブラリに依存するほうが糞

801 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 00:07:53.29 ID:0XuKQtD5.net]
だいたいMicrosoft傘下になったゲームスタジオのWindows10アプリ移植版が
日本語ユーザー名だとエラーになるっていう体たらくだよ。
完全にSJISがMicrosoft自身の足も引っ張ってる

802 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 00:20:53.72 ID:+/8cbHLD.net]
そういうのはマルチバイトエンコーディングを適切に扱わずにUS-ASCIIしか想定して
なかったという類の問題でしょ。UTF-8だったとしてもやらかす奴はやらかす。



803 名前:デフォルトの名無しさん [2016/02/08(月) 00:48:05.85 ID:0XuKQtD5.net]
>>US-ASCIIしか想定してなかった
違うよ。日本語表示も(他の言語の表示も)できてる。予想だけど内部ではUTF-8で処理してんだろうよ。

ここまで書けば多数の人は何を指してるのかわかるだろうから具体的なゲーム名は言わないけど
そのゲームは
PC版(Java) → スマートフォンへの移植版(ネイティブアプリ版) → Windows10アプリ版
と移植されていったわけ、スマートフォンではUTF-8がデファクトスタンダードだから当然の結果だね。
で、Windows10版もUTF-8文字列をそのままファイル操作のAPIへ渡してしまったんだろうね

>>UTF-8だったとしてもやらかす奴はやらかす。
とはいってもSJISを"適切に扱う"ということと比べたら屁みたいなもん

それにこのゲームでの問題の適切な解決策はSJISを適切に使うではなくWindowsのみUTF-16へ変換してwide版のAPIを呼び出すだ。

804 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 01:08:11.78 ID:B1wV/kIt.net]
文字コード総合スレ Part10 [転載禁止]©2ch.net
peace.2ch.net/test/read.cgi/tech/1444822140/

どうしてもここで語りたいなら言語と処理系を限定しろ
話が発散する

805 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 03:55:04.72 ID:9ZhGg5zu.net]
システムのファイル名・ユーザー名などは、
半角英数字のみを使う

外人は日本語でのテストなどをやっていないから、
日本語などを使ったら、バグる

SEの常識だろ。日本語など、
誰もメンテナンス・テストしていないものを、
システムで使うのはおかしい

Linux・Macなんか、ファイル名に半角スペースがあっても、バグる

806 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 07:43:55.20 ID:stcXIyTr.net]
ドイツ語でもバグるよ

807 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 08:08:27.71 ID:+/8cbHLD.net]
スマートフォンでUTF-8がデファクトスタンダードってなんのことを言っているのやら。
iOSやAndroidのプログラミングしたことないのかね?

808 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 09:04:21.92 ID:rq38tdFU.net]
AndroidもiOSも代表的なutf-16環境だな

809 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 09:17:28.34 ID:5blmn2mR.net]
扱わないといけない文字コードは4種類ある。
 1. プログラム中の文字列型
 2. OSのAPI
 3. ソースコード
 4. 入出力ファイル
4については、対応が必要なぶんの変換モジュールを用意すればよいだけ。
3については、1に決め打ちするのが楽だが、4があるなら変換して読み込めばいい。

で、Windows対応を謳うには以下のどちらかが必須。
・setlocale で 1=2 という環境に限定し、1に対してmblen等の適切な処理をする
・1=ユニコード (UTF-8/16/32は問わない) として 2=W系API を使う

Luaの実装はどちらでもないので、「Windows対応が完全ではない」と評価するのが妥当。
Squirrelなら後者になるようコンパイルできるので、この件に関しては問題ない。
他の環境はわからないが 1=ユニコード なら後者を満たしていると期待できそう。

810 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 11:43:28.74 ID:M0j0fnEJ.net]
Squirrel って最近聞かないと思ったら1年前の最新リリースから止まってるのかよ

811 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 11:52:01.97 ID:5blmn2mR.net]
>>801
そう。だから「この件に関しては」と書いた
他の要素、将来性などは……

812 名前:デフォルトの名無しさん mailto:sage [2016/02/08(月) 14:05:07.38 ID:rq38tdFU.net]
>>800
windowsの cランタイムのsetlocale が utf-8 に対応さえしてくれれば悩む必要無いのにねぇ



813 名前:デフォルトの名無しさん [2016/02/08(月) 22:35:54.46 ID:jpNGf5dG.net]
>>798
>>799
上に載っかってるJavaとObjective-Cしか使ったことないの?
NSStringはUTF8Stringで、JNIではGetStringUTFCharsでUTF8の文字列を取れるけどUTF1 文字列で直接取得する方法ないぞ。
クロスプラットフォームの為にCやC++を扱うならUTF8にするのが常識

814 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 00:41:57.31 ID:W9OWY02z.net]
>>804
デファクトって言うなら主要開発環境でみないと駄目じゃろ

815 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 07:41:05.80 ID:Wb20B9c6.net]
>UTF1 文字列で直接取得する方法ないぞ。

UTF-16のtypoだろうが、NSStringならcharacterAtIndexとか、JNIならGetStringCharsとか。

816 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 07:54:13.04 ID:OaLyyuyL.net]
>>804
NSStringはそのままUTF16だからgetCharactersでunicharでとれるな

UTF8用の処理は低層のUnixとのやりとりのためのものだし、その層ではutf-8が必要なのはもちろんだけど、それをAndroidやiOSの標準かのように言うのはおかしいと思うな

817 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 08:14:07.29 ID:DpNg1xio.net]
UTF16なら固定長で行ける!という勘違いをしてる
外人は多いよ。

818 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 10:53:46.23 ID:dd4nRHCa.net]
>>807
ユニコードでさえあれば、内部のUTF表現まで気にする必要はないんじゃ?
特に文字列型がimmutableなら、複数の表現をキャッシュしても問題なさそうだし

>>808
日本人でも多くないか?
新しく言語を設計できるなら、CharはUTF-32であるべきだとは思う

819 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 12:19:21.81 ID:+sr/gpA9.net]
charのサイズがintのサイズに近づけばintの配列を使う人も出てくるんじゃないの
それにluaがpythonに近づけばpythonを使う

820 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 12:28:04.23 ID:OaLyyuyL.net]
>>809
話の流れはutf8がデファクトかどうか、です
実際にはutf16のが主流だろって指摘

外部はutf8でいいとして、内部で使うなら今後はやっぱ32だな。少なくともサロゲートペアの罠は回避できるし

821 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 14:09:36.45 ID:+sr/gpA9.net]
sjisとutf16とutf32って、まるでxpとvistaと7みたいだね

822 名前:デフォルトの名無しさん mailto:sage [2016/02/09(火) 17:44:02.58 ID:zKyrJnIK.net]
>>809
それって言語の問題無の? 標準ライブラリで吸収できない?



823 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 08:02:28.26 ID:2QwVjJmi.net]
Web系の主流がutf8なのは確か

824 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 12:03:00.48 ID:ShaMeiRT.net]
iOS もAndroidもC言語文字列を扱うAPIはwideでもそれ以外の整数型の配列でもなくconst char*のutf-8だけどな
iOSはCore*とかAndroidはC用API自体少ないけどAAssetManagerとかAStorageManagerとか

825 名前:デフォルトの名無しさん mailto:sage [2016/02/10(水) 13:05:28.92 ID:D1g79far.net]
だから、どの部分か限定しないと意味がないって
>>800 の分類なら 1 (文字列型) はUTF-16の言語もあるけど
低レイヤのC言語APIを含む、2,3,4 (API/ソース等) はUNIX系ならUTF-8ってだけだろ
ほとんど全員の言っていることは正しいよ

で、互換性や過去のしがらみがない場合、文字列型のあるべき姿が
SJIS等の個別エンコードを触れるべきなのか、
UTF-8/16/32のどれかに見えるべきなのかは、また別の話

Luaを改造してUTF-32 Luaを作ってくれてもいいんじゃよ

826 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 08:59:17.26 ID:w1PVoXoh.net]
>>816
>UTF8用の処理は低層のUnixとのやりとりのためのものだし、
の反論として書いただけなんだけどね

今から言語作るならUTF-32にすべきって人もいるけど俺はそうは思わないな、最近でた言語のgoも基本UTF-8だしswiftの文字列型も内部表現は21bitだし(UTF-32に近い物ではあるけど)ね。
goはコードポイント単位で扱いたい場合は32bit配列に変換するイメージ
文字列をfor rangeで回すとコードポイント単位で取れたりと扱いやすくはなってるけどね

(ソースコードのエンコーディングはUTF-8一択だと思ってるのでどうでもいいです)

冗談につっこむのもアレだけどUTF-32版のluaって何をUTF-32にするんだろうか。
string型?lua5.3からのutf8でstringを簡単にコードポイント単位で扱えるんだからstring自体をUTF32にする必要そんなに無いと思うけど

827 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 09:29:05.34 ID:whWT7zC/.net]
>>817
「文字列型のエンコーディング」の話をする場合、
内部の保持方法なのか、文字単位で扱う場合の見え方なのかで祖語があったかも。

私見だが、内部表現は言語本体の開発者だけが知っていれば良いもので、
使う側は文字単位でしか扱えなくて構わないと思ってる。
UTF-8で保持して、文字を要求されるとUTF-32で返す実装ももちろんアリだ。

UTF-32 Luaもそんなイメージだった。
UTF-8での保持が前提だから、WindowsではUTF-16へ変換してW系のAPIを使えるし
長さ, substr, 正規表現 等は、バイトではなく文字数で指定させる。

828 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 11:00:48.21 ID:x5lzfsVs.net]
>>817
UNIXとのやりとり≒C言語の文字列処理APIだから反論になってなくて同じこと言ってるだけだと思う

go言語は従来的な言語での「内部コード」相当は結局のところ32bitってことだよね
コンバートを言語仕様に組み入れて使いやすくしたところは偉いけど、複雑で面倒とも言える

829 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 13:17:26.15 ID:w1PVoXoh.net]
>>819
中身Javaで書かれたAndroidのフレームワーク使うのがUnixとのやり取り?C言語だったらUnixとのやりとりなん?
センセーWin32を使うのもUnixとのやり取りに入りますかー?

>go言語は従来的な言語での「内部コード」相当は結局のところ32bitってことだよね
言ってる意味がわからん…。簡単32bitに変換できたら内部コードは32bit?
C++でも関数一つで変換出来るけどC++の内部コードは32bit相当になれますか?
ちなみにgoでlen(string)したらUTF-8でのbyte数返るよ。

830 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 15:01:37.11 ID:XlZH7QFA.net]
確率的に考えるとサロゲートペアは "\r\n" よりマシだが
無料ソフトがすごすぎて誰も確率やコスパの話をしない

831 名前:デフォルトの名無しさん mailto:sage [2016/02/12(金) 22:39:27.60 ID:Bbm2lPXR.net]
>>820
s/UNIX/C言語ベースのOSのAPI/でいい?

内部コードは以下のながれ
・今つくるなら32bitだろってのは「文字列型」の内部表現の話
・従来の多くの言語での文字列型は、長さ=文字数を期待してつくられた(実際は破綻したけどそれはさておく)
・go言語でも、文字数=長さで処理したい場合は、32bitなruneにするんだから発想は同じだよね?

832 名前:デフォルトの名無しさん [2016/02/13(土) 01:24:52.89 ID:M5U5EIyy.net]
>>822
だからC言語ベースのOSのAPI ってくくりだとUTF-8をまともに扱えないWin32も入るでしょ?何が言いたいのか全く解らんのだけど

GoのruneはあくまでもUnicodeのコードポイントが入るサイズの整数(int32)の配列であって文字列型では無いと思うけど。その配列をそのまま文字列として出力できないしね



833 名前:デフォルトの名無しさん mailto:sage [2016/02/13(土) 01:55:35.83 ID:24vNB1dv.net]
>>823
お互いさっぱりだね。
元の

834 名前:bは、スマホでデファクトなのはutf16じゃろってだけの話だよ

runeはあきらかに他の言語の「文字列型」を想定したものだと言ってるだけだよ。言葉遊びしたいわけじゃない
[]
[ここ壊れてます]

835 名前:デフォルトの名無しさん [2016/02/13(土) 05:49:29.94 ID:M5U5EIyy.net]
>>824
だからgoの文字列型はstringだろ。そこに異論がある?
runeは文字列からコードポイントの配列を取るだけ。
そんなもん他の言語、Luaにすら5.3からあるわ

スマホがUTF-16がデファクトってのも上に乗っかってるJavaとObjective-C(Swift除く)だけ使うならそうだろうよ。
でも一番最初の話はスマホへゲームを移移植するときの話 でAndroidもiOSでも動かす場合はUTF-8がデファクトスタンダードだって話をしてたんだ。それをUTF-16だろってツッコミ入れられたから反論してるだけで最初から俺はJavaとかObjective-Cは話の外にあんの

836 名前:デフォルトの名無しさん mailto:sage [2016/02/13(土) 07:08:29.64 ID:tl7vIPkr.net]
なんだ、最初の奴がまだ頑張ってたのかよw

>AndroidもiOSでも動かす場合はUTF-8がデファクトスタンダード

とりあえずこれ、まともに根拠を示せてないんだけど。

837 名前:デフォルトの名無しさん mailto:sage [2016/02/13(土) 07:42:00.73 ID:6QXsiJCA.net]
OSの話はスレ違い
その上で動作する組み込み言語の話をせよ

838 名前:デフォルトの名無しさん mailto:sage [2016/02/13(土) 12:35:56.00 ID:AxbgYY0v.net]
何がスタンダードでもいいけど
UTF16は中途半端感が半端ないよな

839 名前:デフォルトの名無しさん mailto:sage [2016/02/22(月) 21:10:17.21 ID:6cWcowj1.net]
mrubyも仲間に入れて良いですか?

840 名前:デフォルトの名無しさん mailto:sage [2016/02/23(火) 00:28:29.80 ID:liQI2ylD.net]
良いと思います

841 名前:デフォルトの名無しさん mailto:sage [2016/02/23(火) 10:19:51.72 ID:kQ/gcKij.net]
Luaについての質問

目的: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() のコロン使用での暗黙の第一引数が

842 名前:入っている?憶測)
備考:簡単なスタックダンプで見る限りではユーザデータしか積まれていない様に見える。(主観)

徹夜してまで追跡しても方法わからず、何か勘違いや問題点があったら教えてくらはいおながいします
[]
[ここ壊れてます]



843 名前:デフォルトの名無しさん mailto:sage [2016/02/23(火) 12:27:23.57 ID:UPC5owG9.net]
>>831
(★ expected, got userdata
のエラーメッセージで、正確な★の値を確認してほしい。
luaL_checkudata は引数 tname の文字列で型チェックをするのだが、
luaL_newmetatable や luaL_setmetatable で登録したものと一致しているだろうか?

844 名前:デフォルトの名無しさん mailto:sage [2016/02/23(火) 16:36:12.58 ID:liQI2ylD.net]
>>831
それはbinderの質問だな
binderは何を使ってるの?
その問題が再現する最小のコードを作って作者に質問すりゃいいよ
英語が苦手ならここでもいいけど解決する保証はできん

845 名前:デフォルトの名無しさん mailto:sage [2016/02/23(火) 21:28:17.51 ID:kQ/gcKij.net]
レスくれたのに遅れてごめね、潰れてた

>>832
Luaでnew()したC++のクラスのインスタンスを受け取る関数で実行してるとこで
void * const pv = luaL_checkudata( pluastate, -1, "TestClass" );
にするとそのまま(hoge expected, got userdata)になっちゃった
C++のクラスのテーブル作ってるとこのlua_setglobal( pluastate, "TestClass" );と同じでもダメだし
もちろんC++側でのクラス名でも変わらず

>>833
binderはざっくり検索した範囲だと大きかったりboost必須だったり
更新してなかったりで将来に不安が残る感じで何も使ってないの、アメリカ語は_〜

クラスのテーブル作るとこで型名を明示的に指定してやったりしないといけないのかな
きっとthisの値を生で吐き出すメソッド実装してそれを関数に渡せば何とかなるんだろうけど
そういう力技あんまし使いたくないし後々すんごく気持ち悪くなりそうな・・・

846 名前:デフォルトの名無しさん mailto:sage [2016/02/23(火) 21:43:48.82 ID:kQ/gcKij.net]
連投すまぬ、>>833をヒントに検索したらlua_typename()なる関数を発見、スタックに積まれてる引数に
CString str = lua_typename( pluastate, -1 );
してみたんだけど "no value" になった、lua_type()は相変わらずユーザデータ

念の為luaのソースで引数を数値にしてC++の関数でluaL_checkinteger()に入れ替えると
正しく整数がそのまま流れてくるから位置は間違ってない可能性が高いと思ってる(憶測)

メタテーブルと言っても所詮(?)はユーザデータだし、
ユーザデータ作る時にlua_setglobal()の前後で明示的に型名を指定してあげないとダメなのかな?

847 名前:デフォルトの名無しさん mailto:sage [2016/02/23(火) 21:50:32.63 ID:UPC5owG9.net]
>>834
エラーメッセージを加工しないでくれ。
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側に公開した変数名ではないぞ?

848 名前:デフォルトの名無しさん mailto:sage [2016/02/23(火) 21:51:06.03 ID:liQI2ylD.net]
>>834
そうなんか。
まあ俺も使ってた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個めの引数

849 名前:デフォルトの名無しさん mailto:sage [2016/02/23(火) 22:01:41.19 ID:liQI2ylD.net]
>>835
メタテーブルはユーザーデータではないぞ
ユーザーデータにメタテーブルって形で普通のテーブルを設定できるだけでメタテーブル自体はtable型

ユーザーデータはテーブル参照されると、そのユーザーデータに設定されているメタテーブルを参照して
値があればそれを返す


>>836
hogeは察するにlua側の関数名だろ

850 名前:デフォルトの名無しさん mailto:sage [2016/02/23(火) 22:03:44.40 ID:liQI2ylD.net]
連投すまんが
lua_typename( pluastate, -1 );
この第二引数はスタックのindexではなくlua_typeで返る値

851 名前:デフォルトの名無しさん mailto:sage [2016/02/23(火) 22:50:47.99 ID:kQ/gcKij.net]
>>836
すまない、hogeからもう一度TestClassやluaTestClass、その他の定義
色々試し直してたら不一致になってしまった
LuaからC++、C++からLuaは既に成功していて、C++からC++も既に成功というか
OpenCVの亜種とFreeBSDのlibの一部をLuaに機械的な手作業でバインドしようとしてるから
その辺りの実績は問題ない・・・筈

>>837
凄いヒントをありがとう、今までnewの後にluaL_setmetatable()はしてなかった
けど単純に追加しただけじゃダメらしい、相変わらず同じメッセージが出力されて失敗する

>>838>>839
メタテーブルの認識を間違えてたんだ、それとlua_typename()の第二引数・・・
勉強し直して再確認して出直してくる

OpenCVの亜種とBSDのlibのヘッダのインクルードやらリンクやらでソース丸々アップとか難しい状態
文字でしかやりとりできない、もどかしくてごめんね、みんなありがとう

852 名前:デフォルトの名無しさん mailto:sage [2016/02/23(火) 23:12:34.76 ID:liQI2ylD.net]
たぶんちゃんとメタテーブルを設定できてないんだと思うよ。
luaL_setmetatable はスタックの一番上の値に対して引数で与えた名前のメタテーブルを設定する
メタテーブルの名前はluaL_newmetatableで作った時のもの。

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;
}
ってするとユーザーデータに設定されているメタテーブルの名前も一緒に出力できる



853 名前:デフォルトの名無しさん mailto:sage [2016/02/23(火) 23:30:00.22 ID:kQ/gcKij.net]
>>841
一発でわかった、ありがとう、ありがとう、そして一番のキーワードは>>837のluaL_setmetatable()

目的:C++で実装したクラス(lua クラス バインド でggって出てきたページを参考に作成)を
 Luaでnewしてインスタンスを生成、それを更にC++で実装した
 全く別の独立した静的関数にそのまま渡してその関数内でインスタンスへの変更処理を行う
問題:割愛

原因:Lua側でのいわゆるクラスの型情報であるグローバル変数の実体の作成時に、
 クラスのテーブルの作成にもユーザデータ共通のメタテーブルの作成にもlua_newtable()を使用していた
対処:
 正しく(?)は、メタテーブルの作成の際にはluaL_newmetatable()を使用するべき

憶測(言い訳?):
 メタテーブルであるべきところをネットのサンプル通りに普通(?)のテーブルで実装してしまった為、
 単純なC++からLua、LuaからC++のやりとりでは不都合が出なかっただけだと思われる

長文かつサンプルの提示なしの質問に長々と付き合ってくれてありがとうございました、無事解決しました

854 名前:デフォルトの名無しさん mailto:sage [2016/02/24(水) 08:09:28.85 ID:4eLJNqm5.net]
おまえらすげぇな

855 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 07:25:35.42 ID:kiMIo1Bf.net]
“という名前のファイルをio.openで開こうとすると開けないのですがどうやったら開けるようになりますか?

856 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 07:37:15.49 ID:kiMIo1Bf.net]
開けました

857 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 11:05:43.19 ID:S+FF32wm.net]
スレチかもですがJavaScriptエンジンのスレがないのでお邪魔させてくだちい。

googleのJavaScriptエンジンv8をVS2015のレガシーなC++でビルドして
VS2015のC++/CLIでリンクして実行するとヒープ破壊のエラーが出て落ちます。
(デバッガでトレースが始まる前の段階で落ちているので追跡しようがありません)
v8::V8そのものへの参照を全てコメントアウトすると落ちずにmain関数に入ってきます。
何か特殊な設定か対処の類が必要なのでしょうか?
それともC++/CLIがダメ子ちゃんなのでしょうか?

858 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 11:49:11.85 ID:Byvmq8tF.net]
>>846
その組み合わせは使ったことは無いが、もしネイティブC++で問題ないなら
2種類のGCを持つ環境が競合しているんだろうな
v8 の代わりに Chakra JsRT なら、MS同士だから実績があるかもしれない

859 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 22:46:48.41 ID:S+FF32wm.net]
>>847
gc回りの机上でのコード追跡に挫折しました・・・
v8のコードを一切コールしなくても、v8::V8回りがリンクされるだけでダメっぽいです。
CRT回りの静的変数の初期化の時点でヒープ破壊のエラーが発生してしまうので
(ソースをちょっといじるだけでエラーの種類が変わるのでここで書いても意味がないと判断)
ChakraCoreをいじってみます、レスありがとうございました。

860 名前:デフォルトの名無しさん mailto:sage [2016/03/20(日) 23:22:32.65 ID:Byvmq8tF.net]
自分も最新の情報は持っていないけど、今や組み込みJSも結構な数があるっぽい
https://en.wikipedia.org/wiki/List_of_ECMAScript_engines

WindowsオンリーならChakraで十分
速度がいるならv8だけど、巨大で複雑な部類だとは思う
Duktapeやv7はLua感覚で使えそうだけど、品質や実績はよくわからない

861 名前:デフォルトの名無しさん mailto:sage [2016/03/21(月) 00:04:57.23 ID:jBN/3X9x.net]
こんなにあったんだ・・・
けどv8ですらまだドキュメントやサンプルが多い方だったんですね。
(Isolateの実装で殆どがコンパイルに通らなくなった様ですが)
ChakraCore一つとってみても例えば
var userobj = new Userobj();
NativeGlobalFunc( userobj );
を実現する道筋の調査に一苦労、
1時間調べてもオブジェクトの作り方すらまだ確信が持てていない状態・・・
片っ端から調べ直して出直してきます。

862 名前:デフォルトの名無しさん [2016/03/27(日) 14:51:27.25 ID:WUzBhCSW.net]
luaってなんでC++系の文法真似なかったん?
吐き気がする気持ち悪い・・・
結局教育機関が作る言語はどれも学生脳の自慰言語ばっかかよ



863 名前:デフォルトの名無しさん mailto:sage [2016/03/27(日) 15:03:16.21 ID:9eGj+oKv.net]
>>851
Lua 1.1 は 1994年。そのころはPascal系もまだ元気だったんだ。
自然淘汰の結果として死滅しただけで、最初から未来が見えてたわけじゃない。

今なら、LuaのVMやAPIを真似たJavaScript実装 (>>849) や
先行き不安なSquirrelなど、自分で組み込むなら選択肢はある。
使う側ならどうしようもないが。

864 名前:デフォルトの名無しさん [2016/03/27(日) 15:12:37.47 ID:WUzBhCSW.net]
>>852
おとなしくうっすいトランスレータ書くわ

865 名前:デフォルトの名無しさん mailto:sage [2016/03/27(日) 15:18:28.87 ID:Pr6yzqXD.net]
C++に近いといえばgcjがある
公式のJavaよりもC++に近いが彼らが負けを認めることはないだろう
負けを認めない相手と張り合うのは時間の無駄

866 名前:デフォルトの名無しさん [2016/03/27(日) 21:30:21.55 ID:H7mb6W0C.net]
mytable.test とテーブルの要素にアクセスした時に
定義されていなければ{}を返すようにメタを設定することはできますか?

867 名前:デフォルトの名無しさん [2016/03/27(日) 21:46:25.71 ID:xKhiQxW2.net]
>>855
luaの話?
であれば__newindexで{}返す関数を設定すればいい

868 名前:デフォルトの名無しさん [2016/03/28(月) 01:39:38.42 ID:WtaHq3/v.net]
何かうまくいかないから今度またやろう。。

869 名前:デフォルトの名無しさん [2016/03/28(月) 03:40:07.32 ID:zJAWFm4u.net]
__indexじゃないかな
$ 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)
{
}

870 名前:デフォルトの名無しさん [2016/03/28(月) 04:37:20.45 ID:OzjTEsq7.net]
>>857
すまん。
>>858
せやったな。
__newindexは代入したときに無かったらや。

871 名前:デフォルトの名無しさん mailto:sage [2016/03/28(月) 12:35:11.30 ID:K6EkYblL.net]
nil のメタテーブルって設定できたっけ?
Safe Navigation Operator 的な動作なら、そっちのほうが良いかもしれない。

872 名前:デフォルトの名無しさん mailto:sage [2016/03/30(水) 08:03:28.46 ID:MvqxUS0K.net]
>>851
プログラマーではない人をターゲットにしていたからだよ。
つまり英語をある程度知ってる人なら内容を理解できるようにってこと。
パスカルを真似ったってよりも日本語ベーシックみたいなものかな。



873 名前:デフォルトの名無しさん [2016/03/30(水) 10:21:33.98 ID:PJ1J1ZJR.net]
C++というかC言語は構文的には美しくないからな
普及してるからそれが普通に見えるだけで

874 名前:デフォルトの名無しさん mailto:sage [2016/03/30(水) 10:50:30.01 ID:IKaSwJOV.net]
Luaって ( ) と { } が無いだけで、後はほぼJavaScriptと感じたけどなぁ
Swiftも { } は使うけど ( ) が無いから気持ち悪いんだろうか?

875 名前:デフォルトの名無しさん mailto:sage [2016/03/30(水) 11:35:11.53 ID:mjOFe187.net]
引数と戻り値が可変長だから
local i, j = f(x, ...)

int i=0, j=0; のような文法をそのまま採用するのは無理

876 名前:デフォルトの名無しさん mailto:sage [2016/03/30(水) 13:09:07.35 ID:MvqxUS0K.net]
もし i==1 そのとき x=2 そのほか x=3 おわり
うごけ x=x+1 まで x < 10 おわり

877 名前:デフォルトの名無しさん mailto:sage [2016/03/30(水) 13:44:09.05 ID:UL6gISrg.net]
>>862
そんなノリで「ならおまえが作れよ」でObjective Pascalやら○言語やら
色々出たし確かに文脈としてはCよりマシだったけど結局普及しなかったしな
一旦普及しちまうとIA64やらOSXやら互換性を捨てたモンが代替に成り上がるのは難しいね
過去のソースの流用だけじゃなくてコーダーの慣れとかの問題も含めて

>>865
ぴゅう太だっけか
今なら[ #define もし if( ] [ #define おわり ) ]とかで凌げるのかね?

878 名前:デフォルトの名無しさん mailto:sage [2016/03/30(水) 23:36:59.47 ID:/8cK4WLw.net]
Squirrel 3.1 stable

879 名前:デフォルトの名無しさん mailto:sage [2016/03/31(木) 01:03:50.28 ID:zQkq4gxf.net]
もし 私 が イケメン なら あなた は モテる 違うなら あなた は 爆発 おわり

880 名前:デフォルトの名無しさん mailto:sage [2016/03/31(木) 02:59:26.18 ID:nACjm5l+.net]
>>863
{}の変わりにdo endがあるでしょう

881 名前:デフォルトの名無しさん mailto:sage [2016/03/31(木) 20:47:53.62 ID:nkzU0v9F.net]
>>867
1年またぎで RC1 が正式リリースになったのか うっひょーー

882 名前:デフォルトの名無しさん mailto:sage [2016/04/01(金) 06:14:44.27 ID:rWTRiDhV.net]
RC1からリリースまでの間に一体何があったのか
間が空くと細かいとこ忘れがちだしちょいと心配なリリースではある



883 名前:デフォルトの名無しさん [2016/04/07(木) 01:07:47.63 ID:dZYAORAr.net]
下記のように、関数群に対して値型の変数を与えるとします。

functionA(value)
functionB(value)
functionC(value)

この時に、値渡しでなく参照渡しにする方法はありますか?
戻り値で返してもらうとかしないと駄目でしょうか?

884 名前:デフォルトの名無しさん mailto:sage [2016/04/07(木) 01:37:09.92 ID:m5Wmq6v/.net]
>>872
総合スレだから言語を明記してね
Luaだとすると参照渡しはない
戻り値か、テーブルで渡して中身を書き換える

具体的な用途が決まってるなら別解もあるかも

885 名前:デフォルトの名無しさん [2016/04/07(木) 01:49:59.00 ID:dZYAORAr.net]
失礼、総合でしたか。
言語はluaです。

returnを書き忘れそうなんで、
下記みたいなゲッターセッターのクロージャ渡すことにします。
後で拡張するのも楽そうだし。
ありがとうございます。

local value
function getter_setter(val)
if val != nil then value = val end
return value
end

886 名前:デフォルトの名無しさん [2016/04/07(木) 23:57:49.14 ID:s1RKY7Zg.net]
>>874
変な理由だな。returnを忘れるぐらいだったら代入とかクロージャの呼び出しを忘れる心配もしなければならなくない?

887 名前:デフォルトの名無しさん mailto:sage [2016/04/08(金) 00:31:02.22 ID:NMv2dsC8.net]
>>874
参照渡しの主な用途は、複数の返値か、変数の入れ替えだと思うんだが
Luaだと自然な記述でどちらも書けるから必要になったことはないなぁ

その例なら value = val or value みたいな書き方もできるし

888 名前:デフォルトの名無しさん mailto:sage [2016/04/08(金) 09:00:43.43 ID:QHM1+lud.net]
>>875
必須じゃないからreturnいらないし、呼び出し忘れたってかまわないです。
ただ、生存期間中は使いたい場合があるのです。

889 名前:デフォルトの名無しさん mailto:sage [2016/04/08(金) 09:05:33.22 ID:Awm5dteq.net]
そもそも基本的なところから勘違いしてるに一票

890 名前:デフォルトの名無しさん mailto:sage [2016/04/08(金) 10:02:48.01 ID:NMv2dsC8.net]
他人が見たら首をかしげるようなスパゲティ・コードになってそう

891 名前:デフォルトの名無しさん [2016/04/08(金) 11:47:10.88 ID:tJM0u/og.net]
>>879
もうなってるでしょ >>877 の説明読んでも何言ってるのかさっぱりわかんないし

892 名前:デフォルトの名無しさん mailto:sage [2016/04/08(金) 18:15:07.93 ID:QKtAKDZQ.net]
err = f()
if err ~= nil then return err end
これを参照渡しのように f(seterr) と書くのは合理的だと思う

人間がみんな合理的に行動すればコミュ力は重要ではないかも



893 名前:デフォルトの名無しさん [2016/04/08(金) 21:19:50.62 ID:ZsT2Hxo0.net]
>>881
どう合理的なんだ?
seterrのエラーチェックしてないからイコールなコードでもないしどういう利点が有るのか説明してよ。

r=assert(f());
のような書き方出来なくなるし

894 名前:デフォルトの名無しさん mailto:sage [2016/04/08(金) 21:32:21.04 ID:QKtAKDZQ.net]
インクルードガードのように、中に入ってから#ifndefすれば、外でしなくてもよい

895 名前:デフォルトの名無しさん mailto:sage [2016/04/08(金) 22:34:01.66 ID:NMv2dsC8.net]
>>883
日本語でおk

JavaScript でいう Promise の reject ハンドラのような意図か?
Luaは例外処理 (try-catch) が書き難いから、その手の用途なら必要性は理解できる。

896 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 01:02:16.06 ID:EFL/mBbR.net]
catchした変数がすぐ消えてなくなるのが困る
何もしないで続行するのは自由だからそれでいいけど
後で念のため再度エラーチェックする自由も欲しい

897 名前:デフォルトの名無しさん [2016/04/09(土) 02:22:04.50 ID:u1ofpue+.net]
何言ってるのか俺には理解不能だわ…

898 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 07:21:19.22 ID:FoBfIIvs.net]
理解できないのはそういう場面に出くわしたことがないからかと思われ。

899 名前:デフォルトの名無しさん [2016/04/09(土) 07:34:56.67 ID:u1ofpue+.net]
>>887
そうかもな、どういう場面か具体的なコードで示してくれるとありがたい
合理的なコードならありふれてるよね?

あと例外は複雑になりやすいからGoとかでも例外は排除して多値でエラー返すようにしてる

900 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 08:25:05.90 ID:WDrzc2Wm.net]
>>888
むしろLuaもGoも複数の返値を持てることがポイントだと思う。
{ 本来の返値, エラー? } のペアを返すという発想で、合理的。
「例外」という別口をわざわざ用意しなくて良くなった。

ただ、All or Nothing のトランザクション等、処理事にエラー値の確認が面倒というのも想像できる。
その場合、Luaの流儀なら >>882 の assert のように、エラー値を例外ジャンプに変換する関数で包むべきなんだろうな。

901 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 08:38:40.76 ID:FoBfIIvs.net]
多値で返すのは当然いいのだけれども、
関数が関数テーブルに構造化されている場合、多値を返すと他の関数と戻り値の仕様がごちゃごちゃになってくるので、引数のレベルで疎結合にしておきたい。

902 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 08:50:59.47 ID:EFL/mBbR.net]
Luaがマイナーすぎるおかげで「合理的ならありふれてる」は嘘だとわかった
嘘だとわかる場面に出くわした



903 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 09:01:44.19 ID:WDrzc2Wm.net]
>>890
関数テーブルに構造化されていると言うなら、
引数や返値含め、全ての関数は同じ型であるべきだろう。
それぞれが違うなら、それは構造化ではなく寄せ集めだ。動的型言語に甘えてる。

904 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 09:19:31.93 ID:l8xjVqJC.net]
値を返す関数で失敗時に例外を飛ばすのは、それを呼ぶ側では成功時の記述しか
しなくていいという理由が大きいと思うが。
タプルを返せるのはステータスを参照型の引数に返すよりは合理的だとは思うが
例外の代用になるかというとそれはちょっと違うと思う。

905 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 09:23:54.21 ID:WCRIlqKI.net]
Windows APIみたいに GetLastError 的なものを用意した方が簡単じゃね。
いずれにせよtry-catch-fainalyは標準で欲しいな

906 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 09:43:40.75 ID:EFL/mBbR.net]
>>893
失敗時の記述が不要というのはexitでもできる
スレッドがあるならスレッドを止めてもいい
なので本当の理由は、プロセスやスレッドの起動・再起動が遅すぎるからじゃないか

907 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 11:18:07.50 ID:8JT9QS2I.net]
化石並の言語体系に何を求めているのやら
というかオプソなんだし気に入らないなら修正すりゃええやん
他と互換性なくていいならやりたい放題なんだし、
その修正を公開してメジャーになったとしたらバックポートしてくれるかも知れんでよ

908 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 11:28:03.33 ID:WDrzc2Wm.net]
>>894
旧来の書き方がしたいならばその通りなんだが、
非同期処理が一般的になってきた昨今では、最良かどうかは分からない。
tryブロック内で処理が同期的に完了するとは限らないから。

タプル返しも、error/pcallも、rejectハンドラ渡しもできるから、現状のLuaで十分汎用性はある。
せいぜい構文糖のためにパーサを改造したくなるくらい。

909 名前:デフォルトの名無しさん mailto:sage [2016/04/09(土) 12:43:02.89 ID:FoBfIIvs.net]
>>892
ただのトレードオフ。
どこを重視するかは自由。

910 名前:デフォルトの名無しさん [2016/04/09(土) 13:38:58.58 ID:u1ofpue+.net]
>>890
引数にしたら引数の仕様がごちゃごちゃになってくると思うんだけど。
引数を受け取るだけの関数を渡せとなるなら尚更

911 名前:デフォルトの名無しさん [2016/04/09(土) 14:08:41.76 ID:u1ofpue+.net]
>>891
別にluaに限定する必要ないよ
引数で返すのが合理的に見えるコードであれば
C言語みたいに返値を一つしか返せないからって理由なのは無意味だから外して欲しいけど。

>>893
何もしなかったらそのままアプリが終了するだけじゃん
個人的にはtry catchは要らないかな。Goが例外無くしたのと同じ理由で

912 名前:デフォルトの名無しさん mailto:sage [2016/04/11(月) 08:27:07.88 ID:k7zVs+aP.net]
>>900
確かにGo的なのでいいかもな。
ttp://www.geocities.jp/m_hiroi/golang/abcgo15.html
足りないのはdeferとrecoverかな?
deferは__gcメタテーブル使えばできそうだけど標準で欲しいな。
recover はわからん。



913 名前:デフォルトの名無しさん [2016/04/11(月) 08:58:49.07 ID:WTwt1caF.net]
>>901
deferのようなものは例外とは関係無いところが理由で欲しいね
途中returnでclose書くの面倒とかそういう所で
gcに任せてたらいつ実行されるかわからんし

recoverはpcallでいいんじゃないかな

914 名前:デフォルトの名無しさん mailto:sage [2016/04/11(月) 09:29:17.60 ID:AFQC7gKw.net]
try catch は大域脱出に使うから、無くすなら別途機構が欲しいやね

915 名前:デフォルトの名無しさん mailto:sage [2016/04/11(月) 10:19:40.88 ID:UaC8pXHz.net]
>>902
Luaのソースを読んでると
スコープを抜けるタイミングでクロージャのupvalueを閉じる処理があるから
その辺りを改造すると、スコープ終了時に何かする機能が追加できる気がした。

916 名前:デフォルトの名無しさん [2016/04/12(火) 00:55:24.80 ID:JDMXFvBX.net]
PC版は今日発売のdarksouls3もLua使ってるのな

917 名前:デフォルトの名無しさん mailto:sage [2016/04/12(火) 01:26:42.97 ID:fKt10c2M.net]
たしかクソ1の頃からLuaのクレジットあったぞ

918 名前:デフォルトの名無しさん [2016/04/13(水) 22:16:47.11 ID:PD+aqUpV.net]
しかもLuaJITじゃなくて本家Luaなんだな
負荷が高いものはCやC++で書けばいいしやっぱ速度はそれ程重要じゃないのな

919 名前:デフォルトの名無しさん mailto:sage [2016/04/13(水) 22:23:51.85 ID:7YNUgm8C.net]
なにかのエディタで補完を効かすことはできますか?

例えば、メッセージテーブルみたいなのをloadfileで読み込んで使いたいです。
MSG.PLEASE_INPUT_ANY_KEY

920 名前:デフォルトの名無しさん mailto:sage [2016/04/14(木) 08:00:44.86 ID:PaNxRcDi.net]
>>904
スコープというのはブロック単位のことだと思うんだけど
確かにブロック単位でdeferができれば便利ですな。
個人的にはdeferという単語はイマイチだけど

921 名前:デフォルトの名無しさん mailto:sage [2016/04/14(木) 08:31:22.32 ID:PaNxRcDi.net]
それとも goto で十分なんだろうか

922 名前:デフォルトの名無しさん [2016/04/14(木) 12:08:10.65 ID:z7Vrjvws.net]
>>910
何か勘違いしてない?



923 名前:デフォルトの名無しさん mailto:sage [2016/04/14(木) 17:46:31.38 ID:PaNxRcDi.net]
>>911
なぜ勘違いしてると感じたの?

924 名前:デフォルトの名無しさん [2016/04/15(金) 00:30:26.65 ID:MuKGbCph.net]
>>912
突然gotoが出てきたから

925 名前:デフォルトの名無しさん mailto:sage [2016/04/15(金) 04:18:23.81 ID:+t9YcmSi.net]
頭で思ったことを全て言語化してないから唐突な感じになる
でも思ったことをそのまま喋ったら明らかな失言や暴言や嘘も増える
脅迫や詐欺みたいな発言を連発するよりは、少し意味不明な方がマシじゃないか

926 名前:デフォルトの名無しさん mailto:sage [2016/04/15(金) 07:45:58.29 ID:Hp4CXrU7.net]
>>913
だってさ、たとえば ::finally:: というラベルを作って、
if エラー発生 then goto finaly end とかやればいっしょじゃね?

927 名前:デフォルトの名無しさん [2016/04/15(金) 08:24:11.24 ID:uS8f5f96.net]
>>915
全然違う。それだと途中でreturn出来ないし、しないように注意しなければいけない。
コーデイング規約でreturnはfinallyラベルの後の一つだけにするって定めるつもり?

それに後処理が必要になるものはそのすぐ近くにそれを書きたいもの。

928 名前:デフォルトの名無しさん mailto:sage [2016/04/15(金) 08:41:49.74 ID:+t9YcmSi.net]
1. finallyに行きたくなければreturn出来る
2. 行きたくない人などいるはずがないからreturn出来ない

929 名前:デフォルトの名無しさん mailto:sage [2016/04/15(金) 09:10:31.83 ID:9cTSD0EJ.net]
>>915
「エラー処理をどうするか」なら良いのだけれど、話の流れは
「エラー処理を忘れないようどうするか」だったと思うんだ。

Luaに限れば、必ず後始末したい場合は pcall が必須なのがメンドイ。

930 名前:デフォルトの名無しさん mailto:sage [2016/04/15(金) 09:56:06.34 ID:Hp4CXrU7.net]
returnの話も、pcallの話も全て理解できるよ。
ただそういうのは織り込み済みの上で gotoで足りると中の人は考えてるのかもしれないなぁ、ということ。
これって勘違いというほどのもの?

931 名前:デフォルトの名無しさん mailto:sage [2016/04/16(土) 15:05:29.04 ID:ls9rc/e1.net]
そもそもエラー復帰処理を組み込み言語側に書かせるべきなのだろうか?
例えばホスト側が「文字列を丸ごとファイルに書き出す」機能を公開すれば
スクリプト側で「失敗したらファイルを閉じて削除して〜」などと考えず済む。

汎用言語なら細かい粒度のAPIのほうが小回りが利くけど
所詮組み込み言語なんだから「どのように」ではなく「何をしたい」単位で記述させたほうが良い。

932 名前:デフォルトの名無しさん [2016/05/01(日) 13:23:19.66 ID:tKi6j9CT.net]
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています

言語は何でも大丈夫だそうなので、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的に分散され、特定のサーバーに依存しません




933 名前:デフォルトの名無しさん [2016/05/15(日) 09:01:08.96 ID:WYUaDR6g.net]
luabindオリジナルは更新止まってて5.2すら使えないしfork多すぎてどれ使えばいいか解らん

934 名前:デフォルトの名無しさん mailto:sage [2016/05/15(日) 12:38:52.61 ID:llz61aSC.net]
プログラマなら自分で作っちゃいなYO!
車輪の再発明?知らんな!

935 名前:デフォルトの名無しさん [2016/05/15(日) 12:41:10.00 ID:WYUaDR6g.net]
>>923
それだと意味が無いんですよ

936 名前:デフォルトの名無しさん mailto:sage [2016/05/15(日) 12:42:54.01 ID:ZVMufeYJ.net]
自分の1年前のバインダ引っ張り出したら目を背けたくなるコードで
結局リファクタリングしたなんてこともあったな
効率はともかく他人のコードのリファクタリングも結構勉強になるし
とりあえず無難そうなのを選んで落としてデッドコピーしてみたら?

937 名前:デフォルトの名無しさん [2016/05/15(日) 13:13:01.22 ID:WYUaDR6g.net]
色々なlua binder使ったときのベンチマーク書いててluabind使うこと自体が目的なんですよね
なので、ぱっと見修正量多いから自分で修正したくないしメンテもしたくないから何処かから引っ張ってこれるのが理想なんですけど
欲を言えば5.1以降全部に対応してたらいいんですが…

938 名前:デフォルトの名無しさん [2016/05/15(日) 13:30:11.07 ID:iV9cVQst.net]
kaguyaが使いやすそう

939 名前:デフォルトの名無しさん mailto:sage [2016/05/17(火) 15:46:15.62 ID:WJtZW0Wv.net]
autotouchで音ゲーマクロを組みたいと思ってるんですが
タップからタップまでをusleepで停止させると後半になるにつれ目的の時間から遅れてしまいます
もちろん処理にかかる時間をはusleepから引いています
処理を停止させる命令はusleepの他にはないでしょうか
遅れる原因が何故だか分かりますか?

940 名前:デフォルトの名無しさん mailto:sage [2016/05/17(火) 16:16:50.99 ID:awF8sDTJ.net]
>>928
とりあえず >>716 に似たような質問があるな。

「目的の時間」と「処理にかかる時間はusleepから引いて」あたりを
詳しく説明してもらわないとコメントのしようがないと思う。
現状の処理が適切かわからないし、むしろ音ゲー側の時間がずれている恐れも。 []
[ここ壊れてます]

942 名前:デフォルトの名無しさん mailto:sage [2016/05/17(火) 16:37:01.75 ID:WJtZW0Wv.net]
>>929
過去にあったんですね、遡ってみます

os.clockでタップ処理にかかる時間を計ってusleepの停止時間からマイナスしてます



943 名前:デフォルトの名無しさん [2016/05/17(火) 17:11:06.80 ID:aW8j1xwW.net]
>>930
前にも書いたけどos.clockは実際の経過時間ではなくプログラムが使ったCPUの時間を返す
sleepとかで待ってる間は増えないし、例えばそのプログラムで二つのコアが100%使われてる場合は実時間の二倍増える
Cのclock関数で実装されていて、それはLinuxだとclock_gettimeのCLOCK_PROCESS_CPUTIME_IDの返す値が使われてる。

944 名前:デフォルトの名無しさん mailto:sage [2016/05/17(火) 17:24:24.06 ID:WJtZW0Wv.net]
>>931
タップ処理ににかかる時間を計るのに使ってます
問題の待機時間には使ってないです
コアが2つ使われてたら2倍っていうのは気になりますが前半は目的のタイミングでタップされているので問題ないですかね…

945 名前:デフォルトの名無しさん mailto:sage [2016/05/17(火) 17:54:24.20 ID:awF8sDTJ.net]
>>932
タップ処理にかかった実時間とCPU時間が等しい保証が無いという意味。
君が欲しいのは「実時間」だが、os.clockは「CPU時間」だから加減算できない。
身長と体重の値を足すようなもの。

(Luaからデフォルトで使える) 標準Cだけだと1秒より良い精度は無理と言われてる。
stackoverflow.com/questions/361363/how-to-measure-time-in-milliseconds-using-ansi-c
| There is no ANSI C function that provides better than 1 second time resolution

autotouch APIに高精度タイマーは用意されてないかな?
Lua から clock_gettime 等を呼ぶモジュールを加えるのも難しいか?

なお、Windowsのclockは(あえて)実時間を返すようだ。誤解が多い原因かもしれない。
https://msdn.microsoft.com/library/4e2ess30.aspx
| The elapsed wall-clock time since the start of the process
| Note that this is not strictly conformant with ISO C99

946 名前:デフォルトの名無しさん [2016/05/17(火) 20:04:41.45 ID:aW8j1xwW.net]
>>933
補足サンキュー
しかしCPU時間返されてもベンチマークぐらいしか使い道ないよね。
でも文句はそれしか用意してない標準Cに言うんだ。Luaは高い移植性のために標準Cから外れる物は極力実装しないんだ

947 名前:デフォルトの名無しさん mailto:sage [2016/05/18 ]
[ここ壊れてます]

948 名前:(水) 08:00:35.07 ID:6L3zAH6b.net mailto: そもそもCPUがきっちりTSS(スレッドってかタスク)への突入から離脱までに使った時間を
コア毎に記録する機能でも積んでなきゃ、
目安になりそうな計測をして加算し続けるくらいしか現実的な手段ないからね

マルチメディアタイマ動かすスレッドを裏側に置いてポーリングするか
別のコンテキストでタイマのタイムアウト毎にスクリプト起動するとかしかないんじゃないかな
(メインのスレッドと同じコンテキストで実行しちゃダメだよ)
[]
[ここ壊れてます]

949 名前:デフォルトの名無しさん mailto:sage [2016/05/18(水) 09:46:49.35 ID:k2SHVqf6.net]
clockってプロセッサ使用時間で課金していた時代の名残じゃねーの?
名前に騙されて、古代の課金処理を現代のプログラムで使うからおかしくなるんだよ

950 名前:デフォルトの名無しさん mailto:sage [2016/05/18(水) 15:47:48.90 ID:bch1M3Ro.net]
返事が遅れてしまいすみません
皆さんありがとうございます
autotouchのAPIになさそうです
autotouchでclock_gettime使ってみます

951 名前:デフォルトの名無しさん mailto:sage [2016/05/25(水) 01:28:46.05 ID:PQF3VaRV.net]
この業界に限り車輪の再発明はさほど問題でない
あーだこーだ探したり高いライセンスを払うより
1から自分で作ったほうが速い場合も多々ある

952 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 10:31:37.40 ID:lpov0tDn.net]
メモリが潤沢な環境でのゲーム向けに0から作れば
組み込みを意識してVM自体をなるべくROMにおいやったり
定数になるべくデータを追いやったりしてRAMやスタックの消費量抑えたりみたいな細工をする事無く
素直でわかりやすく、高速なコード書き放題だもんな



953 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 10:49:26.89 ID:LqK2D4Ix.net]
自分で作ったほうが速い場合は少ないだろうが
自分で作ったほうが早い場合はありそうだな

954 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 18:41:47.35 ID:iZpcR2mh.net]
ハード面も自分でカスタマイズできるのが最善だけど
なかなかそうはいかないよね

955 名前:デフォルトの名無しさん mailto:sage [2016/05/26(木) 22:46:21.63 ID:kkdzC4Pz.net]
FPGAがCPUみたいにソケット化して1個単位で買えるようになったらいいなぁ

956 名前:デフォルトの名無しさん [2016/05/27(金) 03:25:00.38 ID:fvoGjXwU.net]
スレ間違えてない?

957 名前:デフォルトの名無しさん mailto:sage [2016/05/31(火) 20:56:31.07 ID:J6Jy3eBO.net]
mrubyの事はココでおk?
gr-sakura2ボードが新たに発売されたんでmrubyやろうと思ったら、ライブラリとかv2なっててどうしようかと。

mruby入りスケッチビルド通ったんで焼いてもだんまりだわ。デバッグする方法あるのかな(汗

958 名前:デフォルトの名無しさん mailto:sage [2016/06/01(水) 22:16:27.31 ID:ItE+il1R.net]
mrubyはここでもいいと思うが
gr-sakuraは別の意味の組み込みじゃなかろうか

959 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 13:17:30.66 ID:Cceun6yB.net]
Lua 5.3.3 released

Luaのメンテナンス・ポリシーだと最新版しかバグ修正されないのね
最近見つかった昔からあるバグでも5.3しか修正版が出ない
diff形式で公開されているから自分でどうにかしろってことか

960 名前:デフォルトの名無しさん mailto:sage [2016/06/07(火) 15:13:34.60 ID:1jTwDXeQ.net]
どこかのOSみたく互換性無視ってわけじゃないし

961 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 10:50:09.10 ID:8vn3zKAG.net]
グローバル関数ではなく、メンバー関数をc#から呼ぶにはどうしたらいいでしょうか?
function Hoge
 return{
  Foo=function end
 };
end

みたいなクラスです

962 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 10:50:57.07 ID:8vn3zKAG.net]
NLuaを使っています



963 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 17:55:08.38 ID:XziS+43H.net]
使ってないからよくしらんけど
var foo = ...
foo["Foo"]();
とかでいけるんじゃない?

964 名前:デフォルトの名無しさん mailto:sage [2016/06/11(土) 18:00:29.69 ID:8vn3zKAG.net]
>>950
キャストしてCall呼び出したらいけました

965 名前:デフォルトの名無しさん mailto:sage [2016/07/16(土) 14:37:12.17 ID:ClCwwHut.net]
CRuby使いだがインタプリタごと配布するにはでかすぎるのでLua5.3.3とmruby1.2.0を試してみた
ひとまずデバッグ用にバイナリ文字列をHexダンプするコードを書いてみる

Lua5.3.3(UPX圧縮後で250,064 Byte)
path = "C:/Windows/system32/calc.exe"
f = io.open(path, "rb")
f:seek("set", 0)
b = f:read(512)
f:close()

io.write("\"" .. path .. "\" / " .. string.len(b).."Byte Dump...\n")
i = 1
l = ""
repeat
w = string.sub(b, i, i + 15)
for c in string.gmatch(w, ".") do
l = l .. string.format("%02X ", string.unpack("B", c))
end
l = l .. string.rep(" ", 3 * (16 - string.len(w)))
l = l .. " "
l = l .. string.gsub(w, "[^\x20-\x7e]", ".")
l = l .. "\n"
i = i + 16
until string.len(b) + 16 < i
io.write(l)

966 名前:デフォルトの名無しさん mailto:sage [2016/07/16(土) 14:41:48.88 ID:ClCwwHut.net]
・・・mrubyの方が403で張れないんだけどw

967 名前:デフォルトの名無しさん [2016/07/19(火) 21:09:20.86 ID:5Ru68Qww.net]
require("hoge");
func=function()end;

hoge={
func=function()end
};
の違いって何ですか?

968 名前:デフォルトの名無しさん [2016/07/19(火) 22:10:30.90 ID:Uci7C8fw.net]
言語が書かれてないけどLuaということにして話を進めると

hogeというモジュールを読み込む
funcというグローバル変数に何もしない関数を代入する

funcという何もしない関数をもつテーブルを作成しhogeというグローバル変数に代入する

969 名前:デフォルトの名無しさん [2016/07/19(火) 22:35:55.44 ID:5Ru68Qww.net]
つまりモジュールが読み込まれると、

func=function()end;
hoge={func=func};

をするって事?

970 名前:デフォルトの名無しさん [2016/07/19(火) 22:51:15.91 ID:Uci7C8fw.net]
require(’module_name’)としたとき何を行うかはその読み込んだモジュールしだい
最近のものはグローバル環境を汚すのを嫌って勝手に代入せずテーブルを返すのが推奨されているから
module=require(’modname’)
って書く

971 名前:デフォルトの名無しさん [2016/07/19(火) 22:54:48.00 ID:5Ru68Qww.net]
>>957
何となく分かった気がする
ありがとう

972 名前:デフォルトの名無しさん [2016/08/02(火) 15:28:41.79 ID:vpqNpIG1.net]
継承って
local self=BaseClass.new();
self.hoge=0;
return setmetatable( self, { __index = Class } );
でいいんでしょうか?
色々な方法が書いてあってどれをすればいいか分かりません



973 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 21:42:21.39 ID:rXn2IC8I.net]
>>959
色々な方法があるから、使うフレームワークが推奨する方式に従うべき
特にそういう縛りがなければ自分で考えてみてもいいが
汎用性が高いのはJavaScriptと同じ方式だとは思う

974 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 22:00:37.77 ID:qJ2YHFft.net]
その色々な方法ごとに新しい言語を作るのが普通
一つの言語で色々やってるのは珍しいが効率は良い

975 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 08:06:53.16 ID:8fjgpLNn.net]
効率は悪いだろう? 開発者間で連携もしづらい
まぁLuaだと組み込み環境ごとに全く別の言語だと思ったほうが良いんだろうけど

976 名前:デフォルトの名無しさん [2016/08/04(木) 09:23:50.33 ID:Mm46IUtm.net]
https://www.lua.org/pil/16.2.html
本家に書いてあるやん

977 名前:デフォルトの名無しさん mailto:sage [2016/08/04(木) 20:01:15.52 ID:aMt1KCpE.net]
>>963
お手本を作ってクローンさせる方式だね
一般的なクラスとインスタンス方式にこだわりがなければLuaらしいやり方だ

978 名前:デフォルトの名無しさん [2016/08/05(金) 22:47:51.66 ID:K6ts8EaK.net]
継承のやり方は分かりました
ありがとうございます

もう一つあるんですが、動的に引数を指定したり複数の戻り値を返したりすることは出来ますか?

hoge(1,2,3)と通常は呼び出す物をhoge({1,2,3})と呼び出したり、
return 1,2,3;

return {1,2,3}
のように配列を使って動的に指定したいです

979 名前:デフォルトの名無しさん [2016/08/05(金) 23:10:53.81 ID:K6ts8EaK.net]
unpackで出来ました
すみません

980 名前:デフォルトの名無しさん mailto:sage [2016/08/26(金) 15:28:57.81 ID:BDiBxktH.net]
luaL_requiref(L, ...)
の次にlua_pop(L, 1) を入れるのはなぜですか?

981 名前:デフォルトの名無しさん mailto:sage [2016/08/26(金) 17:19:18.70 ID:LCNVy+4G.net]
>>967
luaL_requirefはロードしたモジュールをスタックに残すから
それをスタックから取り除いている
LuaのC APIはスタックを意識する必要がある
マニュアルにある [-0, +1, e] のような箇所で説明されている

982 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 07:51:02.13 ID:O603KyWm.net]
>>968
ありがとうございます。
スタックから取り除いても大丈夫(モジュールは使える)ということなのでしょうか?
もしそうならスタックに積まれるのはなぜなのですか?



983 名前:デフォルトの名無しさん mailto:sage [2016/08/28(日) 14:07:28.83 ID:A/8rNEYu.net]
>>969
Luaの疑似コードだと
local m = require("module")
m = nil
のような動作だと考えてくれ。
moduleが何かを返すタイプならスタックに積まれた m を使うことになるだろうし
グローバル変数を追加するタイプなら取り除いても(グローバル経由で)使えるだろう。

984 名前:デフォルトの名無しさん mailto:sage [2016/08/29(月) 18:22:57.78 ID:9ixLGi86.net]
>>970
よく分かりました。ありがとうございました。

985 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 18:19:09.71 ID:GHpvw+VU.net]
少しスレタイとは離れるかもしれないんだけど、開発環境について教えて欲しい
今まではメモ帳(付属のじゃないよ)だけで一つか複数のファイル開いてシコシコ書いてたんだけど、
数百から千くらいのファイル群のゲームの解析というか関数なんかの検索に、メモ帳では太刀打ちできなくて困ってます

出来たら沢山開けるメモ帳的な簡易的な物が良いんだけど、OSにインスコして、関連付けもしてくれちゃって・・・っていうのはむしろ要らない、アーカイブ展開したらすぐ使えるのがいいです
よろしくお願いします。

986 名前:デフォルトの名無しさん [2016/09/08(木) 18:46:36.03 ID:2gFs3OWY.net]
VSCodeおすすめ
OS非依存だからwin以外でも使える

987 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 19:45:27.86 ID:oP5NpzJh.net]
Atom.io

988 名前:デフォルトの名無しさん mailto:sage [2016/09/08(木) 21:07:48.97 ID:GHpvw+VU.net]
即レスありがとうございます。試してみます

989 名前:デフォルトの名無しさん mailto:sage [2016/09/09(金) 21:43:20.24 ID:++lP9HIx.net]
Luaで書かれたPHPインタプリタってないかな

990 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 00:03:26.44 ID:mCfQwN8m.net]
なんでそんな無駄なことするの

991 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 01:31:15.83 ID:1lwBEIiL.net]
>>977
FlashAirでPHPを実行できないかなーとか考えた

992 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 06:33:19.86 ID:URrhv4S0.net]
ライブラリの比重が大きな言語に対して構文解釈だけができても嬉しくない



993 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 09:08:02.15 ID:CKZv9HiE.net]
あってもFlashAirは内部メモリが小さいから無理っぽい

994 名前:デフォルトの名無しさん [2016/09/10(土) 10:14:04.84 ID:32Nzsdc+.net]
FlashAirってLua動かせるのかよ

995 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 13:14:30.12 ID:1lwBEIiL.net]
>>980
そうか、残念

>>981
最新モデルのW-03のみだけどLuaインタプリタを内蔵している
FlashAir Developers - APIガイド - Lua機能
ttps://flashair-developers.com/ja/documents/api/lua/
FlashAirのプログラミングにも使えるしCGIとしても使える

996 名前:デフォルトの名無しさん [2016/09/10(土) 13:27:13.60 ID:32Nzsdc+.net]
>>982
ただのPCに転送できるSDカードと思ってたわ
よくあのサイズで内臓出来たな…技術凄い

997 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 13:51:44.5 ]
[ここ壊れてます]

998 名前:9 ID:1lwBEIiL.net mailto: >>983
興味があるなら>>982のWebサイトのドキュメント→本の中にあるFlashAir Doujinshi 2を読んでみると良いよ
電子工作メイン(FlashAirのプログラミング)だけど裏話の他Luaによるプログラミング例がいくつか載っている
[]
[ここ壊れてます]

999 名前:デフォルトの名無しさん [2016/09/10(土) 14:08:02.65 ID:32Nzsdc+.net]
コルーチン使えないのか
ゲームじゃないからなくてもいいだろうけど

1000 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 21:52:55.71 ID:URrhv4S0.net]
Luaのコルーチンってそんなにメモリ喰うイメージないけどな
変数空間を共有してるから増分はコールスタック程度しかないはずだが

1001 名前:デフォルトの名無しさん [2016/09/10(土) 22:08:42.97 ID:IwLF9FUl.net]
C#の場合はコンパイル時に普通のクラスになるけどLuaはコルーチンをVMが対応しているん?

1002 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 22:55:58.05 ID:URrhv4S0.net]
C#とは違うね。Lua VMはコルーチンを動かす処理そのものだから
メインスレッド = グローバル変数テーブル + コルーチン でできてる



1003 名前:デフォルトの名無しさん [2016/09/10(土) 23:32:04.82 ID:IwLF9FUl.net]
>>988
糖衣構文ではなかったのか
何故かコルーチン関係がキーワードじゃなくてメソッドだし

1004 名前:デフォルトの名無しさん mailto:sage [2016/09/20(火) 23:56:31.17 ID:8JrnwUlq.net]
LuaでOO的なコーディングをする場合にメソッド内でローカル変数って使えないんですかね?
>type test.lua
CLASS = {
new = function()
x = 0
return setmetatable({}, {__index = CLASS})
end,
func1 = function()
print(x)
end
}
obj = CLASS.new()
obj.func1()
この場合のxはインスタンス変数ですよね?
>luajit test.lua
0

1005 名前:デフォルトの名無しさん mailto:sage [2016/09/21(水) 07:08:55.54 ID:8q78VamI.net]
>>990
その書き方だとグローバル変数の x を見にいってる
Luaはselfを省略できないから
{ ..., func1 = function(self) print(self.x) end }
にするか、もしくは { } の外で : を使う
function CLASS:func1() print(self.x) end

ところで次スレも同じタイトルでいいの?
LuaはともかくSquirrelは今や…

1006 名前:デフォルトの名無しさん mailto:sage [2016/09/21(水) 18:50:26.73 ID:eYdYUvGQ.net]
じゃあmrubyで

1007 名前:987 mailto:sage [2016/09/22(木) 03:54:45.83 ID:Ru9TIBDm.net]
>>991
Luaのデフォルトのスコープはグローバルなんか・・・

というかこの統一性がない仕様はすっきりしないなぁ
string.to_number_ulong = function(self) ←これは意図したとおりに使える

end
number.to_binary_ulong = function(self) ←これはnumberが無いと怒られて動かない

end
5.1だとビット演算がないからこのような変換も手間だし

1008 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 06:26:50.65 ID:t8yALPnl.net]
>>993
その例から「意図」が読み取れないから何とも言えない
統一性がない仕様もなにも、自分で定義している関数に不満を漏らす意味がわからない

>>990 も CLASS = { ... } はあくまで連想配列の定義だから
連想配列要素の定義中に兄弟要素の変数を参照しないのは言語に限らず当たり前だぞ

1009 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 13:55:49.27 ID:62PEa5hX.net]
5.1はdoubleとintを使い分けるよりintを捨てた方が統一性があると判断したんだな
だからビット演算がない
同様に、連想配列とオブジェクトを統一するためオブジェクトを捨てる

でも連想配列とdoubleのどっちかを捨てるのは無理だからそこは統一性がない

1010 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 14:25:23.06 ID:t8yALPnl.net]
意味がわからん
ビット演算は5.3で採用されたし、doubleとintはスクリプトからは意識されない
連想配列と統一するために捨てたオブジェクトとは何のことだ?
連想配列とdoubleの統一性のなさとは何だ?メタテーブルがあり演算子の定義もできるのに

1011 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 14:41:12.52 ID:62PEa5hX.net]
ほんとオブジェクトって何のことだろうね
意味がわからんから捨てる

1012 名前:987 mailto:sage [2016/09/22(木) 14:44:50.84 ID:Ru9TIBDm.net]
>>994
判りにくくてスマン。



1013 名前:number.to_binary_ulongは定義自体が出来ないです
>type test.lua
string.to_number_ulong = function(self) --←これは定義できる
--(略)4バイトの文字列をunsigned longに変換するコード
end
number.to_binary_ulong = function(self) --←これは定義できない
--(略)unsigned longを4バイトの文字列に変換するコード
end
s = "\226\167\100\53"
print(s:to_number_ulong()) --バイナリ文字列を数字に変換(意図した動作)
n = 895789026
print(n:to_binary_ulong()) --こんな感じで使いたい。数字をバイナリ文字列に変換
>luajit test.lua
luajit: test.lua:4: attempt to index global 'number' (a nil value)
stack traceback:
test02.lua:4: in main chunk
[C]: at 0x004020e0

リファレンスマニュアルがショボいためにググってばっかりで捗らん・・・
[]
[ここ壊れてます]

1014 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 15:27:10.87 ID:62PEa5hX.net]
歴史的に、演算子といえばnumberの演算子しかなかった
昔の言語にはstringの演算子がなかったからstringには関数が必要
numberにはあまり必要なかった
その影響で string.* という関数は色々あるが number.* は一個もない

1015 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 15:31:44.15 ID:t8yALPnl.net]
>>998
ああそういう意味か
"string" は文字列型のメタ __index にも登録してあるから、それでいける
| The string library ... also sets a metatable for strings ...

"number" は初期設定では存在しないが、自分で定義して
lua_setmetatable (in C) なり debug.setmetatable (in Lua) で
数値型のメタ __index として登録すれば、やりたかった動作になるだろう

このあたりは伝統的にnumberのメソッドよりも、mathモジュールやstring.formatで賄うことが多かったから仕方ない
ホスト側の作成者の美的センスで適当に改造すべき箇所なんだろうな

1016 名前:987 mailto:sage [2016/09/22(木) 16:31:47.44 ID:Ru9TIBDm.net]
>>1000
ありがとう。リファレンスマニュアルにも使用例がないので
試行錯誤してこんな感じになった。まぁ動けばいいか
>type test.lua
number = {}
debug.setmetatable(0, {__index = number})
number.to_binary_ulong = function(self)
--(略)unsigned longを4バイトの文字列に変換するコード
end
n = 1684234849
print(n:to_binary_ulong())
>luajit test.lua
abcd

1017 名前:987 mailto:sage [2016/09/22(木) 18:13:01.03 ID:Ru9TIBDm.net]
>>996
>メタテーブルがあり演算子の定義もできる
を見て思うところがあったのでリファレンスマニュアルを見たけど__addくらいしか書いていなくて何を定義できるのか判らない
ググってみるとメタテーブルチュートリアル的なのが出てくるけど[]とか[]=とかの定義は出来ないっぽい?
これを定義できると配列みたいな動作をするオブジェクトの使い勝手が良くなるんだけどな

1018 名前:デフォルトの名無しさん mailto:sage [2016/09/22(木) 18:24:14.43 ID:t8yALPnl.net]
新スレ
echo.2ch.net/test/read.cgi/tech/1474536226/l50

1019 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<264KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef