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/
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 的な動作なら、そっちのほうが良いかもしれない。