[表示 : 全て 最新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/

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のヘッダのインクルードやらリンクやらでソース丸々アップとか難しい状態
文字でしかやりとりできない、もどかしくてごめんね、みんなありがとう






[ 続きを読む ] / [ 携帯版 ]

前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