D言語 Part8
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/01/12(木) 21:15:04新進気鋭のプログラミング言語Dの総合スレッドです。
かつて高性能C++コンパイラで知られたDigital Mars社が送り出す
より実践的で、本当に使える仕様が目標にされています。
■参考URL
本家
http://www.digitalmars.com/d/
プログラミング言語 D (本家和訳)
http://www.kmonos.net/alang/d/
GCCフロントエンド gdc
http://home.earthlink.net/~dvdfrdmn/d/
http://gdcmac.sourceforge.net/
D言語研究
http://f17.aaa.livedoor.jp/~labamba/
0002デフォルトの名無しさん
2006/01/12(木) 21:15:38Part 7 http://pc8.2ch.net/test/read.cgi/tech/1122912733/
Part 6 http://pc8.2ch.net/test/read.cgi/tech/1109933426/
Part 5 http://pc5.2ch.net/test/read.cgi/tech/1102785854/
Part 4 http://pc5.2ch.net/test/read.cgi/tech/1091185216/
Part 3 http://pc5.2ch.net/test/read.cgi/tech/1079068715/
Part 2 http://f3.aaacafe.ne.jp/~null/cache/1079280501.html
Part 1 http://pc5.2ch.net/tech/kako/1003/10036/1003674814.html
0003デフォルトの名無しさん
2006/01/12(木) 21:31:33乙
0004デフォルトの名無しさん
2006/01/12(木) 22:41:370005デフォルトの名無しさん
2006/01/12(木) 23:58:590006デフォルトの名無しさん
2006/01/13(金) 00:00:41http://wisdom.sakura.ne.jp/programming/d/
0007デフォルトの名無しさん
2006/01/13(金) 09:22:16○○したいときは▲▲をインポートして
▼▼クラスの▽▽メソッドを使え
みたいな感じのものです
ちょっと探してみたんですが見つからなくて・・・
0008デフォルトの名無しさん
2006/01/13(金) 11:43:47乙であります
0009デフォルトの名無しさん
2006/01/13(金) 13:18:16自分で作ってwikiに投稿するんだ。
0010デフォルトの名無しさん
2006/01/13(金) 23:11:510011デフォルトの名無しさん
2006/01/14(土) 20:12:16Q
日本語が表示できません
A
Q
コードに日本語が入ってるとコンパイルに失敗します
A
Q
日本語ファイル名のファイルのオープン処理他が出来ません
A
0012デフォルトの名無しさん
2006/01/14(土) 20:14:54Q
日本語が表示できません
A
あきらめてください
Q
コードに日本語が入ってるとコンパイルに失敗します
A
あきらめてください
Q
日本語ファイル名のファイルのオープン処理他が出来ません
A
あきらめてください
0013sakurai
2006/01/14(土) 22:45:31Q
日本語が表示できません
A
toMBSうんぬんつかえばいい気がするけど、linuxやmacだとどうなのかといった、問題が。
Q
コードに日本語が入ってるとコンパイルに失敗します
A
UTF-8でコンパイルしてください。
Q
日本語ファイル名のファイルのオープン処理他が出来ません
A
toMBS使って変換してからやったらうまくいくのではないかと。
ちゃんとためせばいいんだろうけど、めんどうでやってません。
うー、ちゃんとやろうと思うと、どうあるべきかをウォルターたんと
話さないといけなくなると思うんだよなぁ。
英語堪能であればいいのだけど、、、。
悔しいなぁ。あ、めまいが、、、。orz...
yaneuraoさんがそのへんの話進めてたみたいだし、
話聞いて出来るところまでやってみたいところです。
djcodeとか含めて。
やれるだけやってみます。期待しないで放置しててください。
0014デフォルトの名無しさん
2006/01/14(土) 23:34:07C#2.0に勝てません。
A
諦めてください。所詮オナニー言語ですから。
0015デフォルトの名無しさん
2006/01/14(土) 23:49:330016デフォルトの名無しさん
2006/01/14(土) 23:51:41Q
仕様が変わりまくるのですが?
A
仕様です。
0017デフォルトの名無しさん
2006/01/14(土) 23:52:14仕様(しょう)がない
0018デフォルトの名無しさん
2006/01/14(土) 23:52:34何も知らないんだな。ngen.exeを調べてみるといいよ。
0019デフォルトの名無しさん
2006/01/14(土) 23:55:220020デフォルトの名無しさん
2006/01/14(土) 23:56:120021デフォルトの名無しさん
2006/01/14(土) 23:57:17試みようとする可愛そうなD信者(涙
0022デフォルトの名無しさん
2006/01/15(日) 00:03:13C Intel 91.61
D Digital Mars 83.89
C++ 69.48
Python 53.72
C# 52.64
スクリプト未満のC#って一体…
0023デフォルトの名無しさん
2006/01/15(日) 00:03:24Monoって普及したのかなぁ。
Dはまだこれからって感じだね。
0024デフォルトの名無しさん
2006/01/15(日) 00:06:27ポトペタできるVS.NET上のWeb開発ならまだしもMonoじゃあ利点が無い。
0025デフォルトの名無しさん
2006/01/15(日) 00:11:49昨日覚えた新技術が明日には負の遺産になってるかもしれん罠がある。
なのでどうせならマシン代が安くつくようにしたい。
そういう意味ではPerlでも十分なんだが、こんどは保守に時間/カネが取られる。
その辺のバランスを考えるとDかC#かなぁと。
別にC++でもいいんだけど。
0026デフォルトの名無しさん
2006/01/15(日) 00:14:120027デフォルトの名無しさん
2006/01/15(日) 00:15:040028sakurai
2006/01/15(日) 00:17:21うーん。本来、UTF8を扱う言語が文字列を出力する際に
どのような処理をすべきかって問題がすっきり解決されていないから
だめなんだろうなぁと思った。
utf8で出力した文字がコンソールに出る場合にのみ、
そのOS固有の文字コードになるべきなのか、
ファイルにもそうなのか?
コンソールがutf8に対応していないのがそもそも問題なんじゃないのかなぁ。
と思った。
utf8対応のコンソールないのかしらん?
0029デフォルトの名無しさん
2006/01/15(日) 00:17:510030デフォルトの名無しさん
2006/01/15(日) 00:18:35ならDとかは格好じゃないか?
外注とかPG抱えるようになったらリニューアルしてJavaに移行するつもりだけど。
このスレってDを対して冷静な人が多いんだね。
0031sakurai
2006/01/15(日) 00:37:34Dは宗教じゃないからかなぁ。宣教師になろうとは思わないもんなぁ。
現状は、文字出力したいときは、
printf(toMBS("こんにちは 世界\n"));
これでいくのが一番かと思います。
writefはファイル出力もあるし、utf8が標準の言語だから、、、
多分、utf8のコンソールがあれば済む話なんじゃないかと。
それ以外は設定ファイルを持ってて、ローケル見てうんぬんっていう
Javaみたいなことやったりしなきゃいけなさそう。
Javaはソースにsjisを許したけど、dは許さない方向性だからなぁ。
コンソール出力だけshiftjisでファイル出力はutf8でもいいのかもしれないけど
dprg>text.txt
とかやったときに、utf8じゃなくてsjisになってうんぬんとかあるんだろうし。
そこをどう解決するのかが問題。
後は、ウォルターさんを説得する方法を考えて粘着して無理やり変えてもらうとか。
嫌われそうだ。。。英語苦手だしなぁ。大仕事になりそう。
0032デフォルトの名無しさん
2006/01/15(日) 00:47:430033デフォルトの名無しさん
2006/01/15(日) 01:01:56今ならたいていのコンソールは対応してない?
最悪Windowsのコマンドプロンプトでもchcp 65001すれば表示はutf8になるぞな。
0034デフォルトの名無しさん
2006/01/15(日) 01:04:510035デフォルトの名無しさん
2006/01/15(日) 01:09:41でも結構いけるし
0036デフォルトの名無しさん
2006/01/15(日) 01:16:26import std.file;
void main()
{
writefln(toMBSz("テスト"));
}
これで8a0fd0とか出力されて日本語出力できないよ?
D良くわからん。
0037デフォルトの名無しさん
2006/01/15(日) 01:19:290038デフォルトの名無しさん
2006/01/15(日) 01:23:43だから>>31みたいにprintf使えばいいんじゃないかな
0039デフォルトの名無しさん
2006/01/15(日) 01:48:26一度出力し、それをshift-jisにエンコードしたものを生で標準出力に
出力するというのはどうでしょうか?
char[] name = "近藤";
Stream tmpStrm = new MemoryStream;
tmpStrm.writefln("私は%sです。", name);
ubyte[] sjisStr = utf8_sjis(tmpStrm.toString()); // なんらかの変換関数
dout.writeBlock(sjisStr, sjisStr.length);
0040デフォルトの名無しさん
2006/01/15(日) 01:51:08http://www.wikiroom.com/sakurai/?DJcode
0041デフォルトの名無しさん
2006/01/15(日) 01:55:28printfで出来ました。ありがとうございます。
ソース見たらstd.stdioってstdioなのに入力関数が無いんですね。
入力もしてみようと思って、
googleで検索して出てきたサイトを参考にしてみたけど、
今度は、undefined identifier stdinと怒られてしまう…
importが足りないのかなと思ってphobosのソースgrepしてみたらstdinってどこにも無いし。
廃止されちゃったのでしょうか?
import std.conv;
import std.stream;
import std.file;
void main()
{
printf(toMBSz("あなたの名前は?\n"));
char[] name;
stdin.readLine(name);
printf("%s%s%s", toMBSz("あなたの名前は"), name, toMBSz("です。\n"));
}
0042デフォルトの名無しさん
2006/01/15(日) 01:59:25004339
2006/01/15(日) 02:01:08Stream tmpStrm = new MemoryStream;
tmpStrm.writefln("私は%sです。", name);
ubyte[] sjisStr = utf8_sjis(tmpStrm.toString()); // なんらかの変換関数
dout.writeBlock(sjisStr, sjisStr.length);
0044デフォルトの名無しさん
2006/01/15(日) 02:01:48出力時の文字コードを設定で変更できるようにすればよんじゃないか?
日本ではMS821、EUC-JP、UTF-8さえ押さえておけばなんとかなるだろ。
0045デフォルトの名無しさん
2006/01/15(日) 02:02:04だめでした
0046デフォルトの名無しさん
2006/01/15(日) 02:04:31MS821って何?
0047デフォルトの名無しさん
2006/01/15(日) 02:13:31din.readLine(name);
とやって
printf("%s%s%s", toMBSz("あなたの名前は"), toMBSz(name), toMBSz("です。\n"));
あなたの名前はです。
printf("%s%s%s", toMBSz("あなたの名前は"), name, toMBSz("です。\n"));
あなたの名前は(null)(null)
になってしまいます。
これもstd.c.stdioのsscanfを使えという事でしょうか?
せっかくDなのでできればバッファサイズの事気にしないで済む
char[]を使える関数が使えると嬉しいなあと思うのですが。
というかgetlineが使えるC++より退化してるような…
0048デフォルトの名無しさん
2006/01/15(日) 02:19:190049デフォルトの名無しさん
2006/01/15(日) 02:26:11ありがとうございます。
日本語Windows環境ではコンソールでもWindowでも使い物にならないみたいですね。
Dが人気が無い理由が良く分かりました。
0050デフォルトの名無しさん
2006/01/15(日) 02:31:32だからtoMBSzがあるだろ
0051デフォルトの名無しさん
2006/01/15(日) 02:45:04それを加工したい場合、MemoryStreamを用いて入力を
一度メモリに出力して、それをUTF8に変換してからプ
ログラム内で扱えば大丈夫ですよ。
Dが悪いというよりもUTF8を扱えないWindowsの方に問
題があると思います。
因に、Linuxの端末は色々な文字コードに対応していま
す。Dを試すならLinux環境の方が便利だと思います。
0052デフォルトの名無しさん
2006/01/15(日) 02:45:12>din.readLine(name);
>とやって
それだとnameがASCIIでもNULL文字列しか入らない
din.readf("%s", &name);
0053デフォルトの名無しさん
2006/01/15(日) 02:46:37printf("%s%.*s%s", toMBSz("あなたの名前は"), name, toMBSz("です。\n"));
これが正解。
確かに文字コード周りはなんとかしたほうがいいのかもねえ。
0054デフォルトの名無しさん
2006/01/15(日) 02:49:46Error: 4invalid UTF-8 sequence
こんなんでました
0055デフォルトの名無しさん
2006/01/15(日) 02:51:36まあただ単に、最終出力をtoMBSしているだけだが。
linuxは、ロケール設定して、
wcstombs(3)したらいいんでないの。
005655
2006/01/15(日) 02:54:10cygwinってのと自分の環境でしかダメってのが気に入らないけど。
0058デフォルトの名無しさん
2006/01/15(日) 02:58:34>>52の問題かも
とりあえず家はこれで動いてる。
import std.cstream;
import std.windows.charset;
int main(char[][] arg)
{
char[] name = din.readLine();
printf("%s%.*s%s\n", toMBSz("あたいは"), name, toMBSz("です"));
name = din.readLine();
return 0;
}
0059デフォルトの名無しさん
2006/01/15(日) 03:01:14006055
2006/01/15(日) 03:02:11ああ、そっちか。すまん。
CFileは、readBlock、writeBlock以外にUTFのチェック処理があるので、
WindowsのコマンドプロンプトからMBSを入力するときは、
CFile.readBlockしたあとにUTF8へ変換しないとダメだったと思う。
0061デフォルトの名無しさん
2006/01/15(日) 03:07:44din.readf("%s", &name);
printf("%.*s\n", name);
printf("%s%.*s%s", toMBSz("おれは"), name, toMBSz("だ\n")); // 1
printf("%.*s%.*s%.*s", "おれは", name, "だ\n"); // 2
printf("%s%s%s", toMBSz("おれは"), toMBSz(name), toMBSz("だ\n")); // 3
>村田
村田
おれは村田だ
縺翫l縺ッ村田縺
Error: 4invalid UTF-8 sequence
// 3 のところで toMBSz にSJISを渡していたのが原因のようです
あと
din.readf("%s", name);
とすると文字列が空になります。
なんとなく違和感ありますが、こういうもんだと思うことにします。
006255
2006/01/15(日) 03:08:11これはいらないか。
入出力を相互変換すると便利って言いたかったと思ってくれ。
readBlock->mbs to utf8->D
writeBlock<-utf8 to mbs<-D
このあたりはPerlIOの考えが個人的にかなり好きなんだが、
・・・Dにそういう考えが入ることはないだろうな。
0063デフォルトの名無しさん
2006/01/15(日) 03:20:00import std.cstream;
int main(char[][] args)
{
for(int i = 0; i < args.length; i++)
printf("%2d [%s]\n", i, &args[i][0]);
return 0;
}
コマンドラインから
hoge 申能
と実行すると
0 [(パス省略)\test.exe]
1 [\能]
0064デフォルトの名無しさん
2006/01/15(日) 03:21:02>MemoryStreamを用いて入力を一度メモリに出力して
何故MemoryStreamを経由しなければならないのでしょうか?
char[]に入れてtoUTF8では駄目なのですか?
0065デフォルトの名無しさん
2006/01/15(日) 03:23:09文字列のまとめ
* 文字コード
DではUTF以外は上手く扱えない。
UTF以外を使いたい時は、涙をこらえてprintfを使う。
* char[]?char*?
Dのchar[]はCのchar[]とは別物。先頭に大きさが入っていたり、末尾に'\0'がなかったりする。
よってprintfに渡したいときは"%.*s"を使う。
ただしリテラルはCと同じ。
こんなもんかな
0066デフォルトの名無しさん
2006/01/15(日) 03:24:381 [456申123能txt]
test 申123能txt
1 [\123能txt]
test 能txt
1 [\txt]
先頭にある2バイト文字の2バイト目が5Cのときだけ変?
0067デフォルトの名無しさん
2006/01/15(日) 03:31:45一応DのcharはUTF-8の文字列を意味するということだそうです。
ですからSHIFT-JIS等のコードがcharに入れられるのは不正だと
考えていいと思います。
ただ、入れただけで即エラーになるかというとならないのですが。
0068デフォルトの名無しさん
2006/01/15(日) 03:32:470 [...\test.exe]
コマンドラインパラメータに日本語使うと取得出来ませんね
0069デフォルトの名無しさん
2006/01/15(日) 03:36:040 [...\test.exe]
1 [eeee]
test "もうだめぽ" 'うううう' eeee
0 [...\test.exe]
1 [もうだめぽ]
2 ['うううう']
3 [eeee]
0070デフォルトの名無しさん
2006/01/15(日) 03:40:080071デフォルトの名無しさん
2006/01/15(日) 03:41:04import std.windows.charset;
import std.string;
void main()
{
dout.writeLine(toString(toMBSz("あなたの名前は?")));
char[] name = din.readLine();
dout.printf("%s%.*s%s", toMBSz("あなたの名前は"), name, toMBSz("です。\n"));
}
toMBSzはあるのにtoMBSが無い理由が不明。
0072デフォルトの名無しさん
2006/01/15(日) 03:46:25こうしてもなぜか
Error: 4invalid UTF-8 sequence
が出てしまいます(><)
0073デフォルトの名無しさん
2006/01/15(日) 11:15:010074デフォルトの名無しさん
2006/01/15(日) 11:51:030075デフォルトの名無しさん
2006/01/15(日) 11:57:530076デフォルトの名無しさん
2006/01/15(日) 12:09:420077デフォルトの名無しさん
2006/01/15(日) 12:14:18LANGをみて動作を変えるのが普通じゃないか
0078デフォルトの名無しさん
2006/01/15(日) 12:15:40import std.cstream;
import std.windows.charset;
import std.regexp;
import std.string;
void main()
{
dout.writeLine(toString(toMBSz("あなたの名前は?")));
char[] name = din.readLine();
RegExp re = new RegExp("ほげ","g");
char[][] m = re.match(fromMBSz(name));
dout.printf("%s%s", toMBSz("あなたの名前は"~m[0]), toMBSz("です。\n"));
}
0079デフォルトの名無しさん
2006/01/15(日) 12:17:38008078
2006/01/15(日) 13:04:05英数字だけで入力したり、正規表現使うと死ぬ。
0081デフォルトの名無しさん
2006/01/15(日) 13:07:46そりゃそうだろね。
どっちかっていうと、
import std.cstream;
import std.windows.charset;
import std.utf;
import std.regexp;
import std.string;
void main()
{
dout.writeLine(toString(toMBSz("あなたの名前は?")));
char[] name = toUTF8(din.readLine());
RegExp re = new RegExp("ほげ","g");
char[][] m = re.match(name);
dout.printf("%s%s", toMBSz("あなたの名前は"~m[0]), toMBSz("です。\n"));
}
ではないかと。
0082デフォルトの名無しさん
2006/01/15(日) 13:09:370083デフォルトの名無しさん
2006/01/15(日) 13:12:01import std.windows.charset;
import std.utf;
import std.regexp;
import std.string;
void main()
{
dout.writeLine(toString(toMBSz("あなたの名前は?")));
char[] name = toUTF8(din.readLine());
RegExp re = new RegExp("ほげ","g");
char[][] m = re.match(name);
dout.writeLine(toString(toMBSz("あなたの名前は" ~ m[0] ~ "です。"));
}
やっとprintfが消えた。
0084デフォルトの名無しさん
2006/01/15(日) 13:13:290085デフォルトの名無しさん
2006/01/15(日) 13:37:04WindowsのコンソールがUTFを扱えれば変換しなくてもいいんだけどな。
0086デフォルトの名無しさん
2006/01/15(日) 13:55:04UTF-8なんて使わないで、SJISかEUC使うでしょ?
結局UTFに一旦変換して処理して元のコード戻さなきゃ駄目じゃん。
0087デフォルトの名無しさん
2006/01/15(日) 14:27:140088デフォルトの名無しさん
2006/01/15(日) 14:29:49UTF8で統一してみるってのも手だと思うけどなあ。
内部コードにSJIS使いたいですとかそういう話?
0089デフォルトの名無しさん
2006/01/15(日) 14:31:05将来的には正しい選択だったと思う日が来るよ
来るんじゃないかな?
来ればいいなぁ
009078
2006/01/15(日) 14:54:10import std.windows.charset;
import std.utf;
import std.regexp;
import std.string;
void main()
{
dout.writeLine(toString(toMBSz("あなたの名前は?")));
char[] name = fromMBSz(din.readLine());
RegExp re = new RegExp("(あ|ほ)(げ)+","g");
char[][] m = re.match(name);
if (!m) m = new char[][1];
dout.writeLine(toString(toMBSz("あなたの名前は" ~ m[0] ~ "です。")));
}
悪あがき。
文字をきちんと分けてやれば正規表現通るか。
でも、正直汚すぎる。
>>81 >toUTF8
こちらこの世に存在しないはずのWin98なもので。。。
fromMBSzを読み替えてくだしい。
0091デフォルトの名無しさん
2006/01/15(日) 17:01:540092デフォルトの名無しさん
2006/01/15(日) 19:29:19char[] name = toUTF8(din.readLine());
とやっても name がUTFになってくれないみたいです。(SJISのまま)
import std.utf; もやってますし、ソースは UTF8 で保存しています。
どうも toUTF8 がスルーされてるような気がするのですが、
何か間違ってるのでしょうか?
同じ症状出る方はいらっしゃいますか?
0093デフォルトの名無しさん
2006/01/15(日) 19:35:48char[] toUTF8(char[] s)
in
{
validate(s);
}
body
{
return s;
}
0094デフォルトの名無しさん
2006/01/15(日) 19:38:54出力はUTF8なはず。
0095デフォルトの名無しさん
2006/01/15(日) 19:46:15生の文字列はbyte[]で受け取って、文字コードを判別したら
自力でUTF-8なりUTF-16なりに変換しろってことだと思う。
0096デフォルトの名無しさん
2006/01/15(日) 19:46:42うほっ。まじっすか。
>>94
うまくいきました。ありがとうございます。
import std.windows.charset;
import std.file;
の2つを同時に import すると toMBSz が conflict するので、
実際使いたかった import std.file; の方だけ import してたため、
fromMBSz が使えなかったようです。
これはどうすれば回避出来るのでしょうか?
質問ばかりで申し訳ありません。
0097デフォルトの名無しさん
2006/01/15(日) 19:58:12toMBSzをstd.file.toMBSzか
std.windows.charset.toMBSzに書き換える
0098デフォルトの名無しさん
2006/01/15(日) 20:01:45みたいなのは無いの?
0099デフォルトの名無しさん
2006/01/15(日) 20:03:490100デフォルトの名無しさん
2006/01/15(日) 20:24:24実行OSに合わせて文字コードを最適化する処理を書いてうぉるた君に送ってあげるか。
0101デフォルトの名無しさん
2006/01/15(日) 21:52:49ttp://www.42ch.net/UploaderSmall/source/1137329516.zip
0102デフォルトの名無しさん
2006/01/15(日) 22:23:43CFileCC::
override char[] readLine() {
char[] rl = CFile.readLine();
return rl?cc.fromMBS(rl):"";
}
みたいにする必要があるな。
あと、dccoutとか長いからなんかいい名前ないかな。
0103デフォルトの名無しさん
2006/01/15(日) 22:37:21入力がないと落ちるのではなくてreadLineをnul終端と勝手に仮定して、
fromMBSというchar*を引数にする関数を呼び出しているのが問題だと思う。
nul終端の文字列への変換関数としてstd.string.toStringzがあるからそれを使って
override char[] readLine() {
auto r = std.string.toStringz(CFile.readLine());
return cc.fromMBS(r);
}
とすれば大体OKかな。
......というか、この手の勘違いする人を無くすために
A[]からA*への型変換をD言語から廃止してほしいなぁと思う今日このごろ。
0104103
2006/01/15(日) 22:47:47上の文は忘れて
0105sakurai
2006/01/15(日) 22:50:26http://www.digitalmars.com/d/archives/digitalmars/D/learn/1510.html
よくわかりませんが、こう言った議論があるようなので、そこらへん見てみます。
http://sakurai.s59.xrea.com/charset/a001.html
機械翻訳してみました。
cp1252は変換モジュールをつくっていたようです。
windowsのsjisは、cp932とかなんですよね。
0106101
2006/01/15(日) 22:51:55あちゃ、スマソ。fromMBSzの仕様勘違いした。
確かによく考えたら引数のほうがC文字列だ罠
修正するべきは
windows.charconvの
CodePage::
char[] fromMBS(char[] s) {
return fromMBSz(.toStringz(s));
}
です
0107103
2006/01/15(日) 22:55:580108デフォルトの名無しさん
2006/01/15(日) 23:00:08codePageが何するものかわからんが。
0109101
2006/01/15(日) 23:19:54よく知らないけれどUnicodeと変換先の文字コードの変換表だと思って指定できるようにした。
はい、引数に書くのを思いっきり忘れましたillorz
- return .toString(toMBSz(s));
+ return .toString(toMBSz(s, codePage));
- return fromMBSz(.toStringz(s));
+ return fromMBSz(.toStringz(s), codePage);
cstreamccとかかなり手抜き実装です。
本当はgetcのほうをオーバーライドしないといけないんだろうけどやってない…
マルチバイト文字の境目はどうやって判定すれば良いのやら
0110デフォルトの名無しさん
2006/01/15(日) 23:23:41いつまでたっても全くメモリが開放されないみたいなんです。
auto付けてfullCollectしてんのになあ。
import std.cstream;
import std.gc;
class GCTest {
private void[] _mem;
this(size_t s) { _mem = new void[s]; }
}
int main()
{
char c;
for (uint i = 1; i <= 3; ++i) {
dout.writefln("%dtimes.", i);
func();
fullCollect();
din.flush();
din.read(c);
}
return 0;
}
void func() { auto GCTest obj= new GCTest(1024*1024*200); }
0111デフォルトの名無しさん
2006/01/15(日) 23:38:490112デフォルトの名無しさん
2006/01/15(日) 23:46:18あと最強かどうかは用途とか状況による
0113デフォルトの名無しさん
2006/01/15(日) 23:49:36std.streamのFileとかMemoryStreamの定義見れば分かると思うけど、
定義しないといけないのはgetcじゃなくてreadBlock。
しかし、std.stream.Streamって色々詰め込みすぎで
派生するのに何を定義すれば良いかサッパリわからんから困る。
低レベルのIOと高レベルのIOでクラスを分割してくれとか思ってしまう。
0114デフォルトの名無しさん
2006/01/15(日) 23:57:29ところでGCの件が解決いたしません。
Linuxのシステムモニタでプロセスのメモリ使用量を追いかけているのですが
やっぱり開放してくれない。
0115デフォルトの名無しさん
2006/01/16(月) 00:35:03streambuf,iostream という風になっている。
なので派生したいときは、
streambufだけ面倒見れば良いから拡張はしやすいんだよなぁ
Dの場合は全部一緒にしてるから、
std.stream.Streamを拡張するのが、正直ダルイしヤヤコシイ。
頼むからもうチョイ拡張をしやすい設計にしてくれー
0116sakurai
2006/01/16(月) 01:18:55こんな返答が、、、。libiconvを使うという、、、。
0117デフォルトの名無しさん
2006/01/16(月) 02:59:05GCのデバッグ出力を見てみた感じ、そのデカい配列がずっとstaticデータ
領域から参照されていることになってて、そのせいで解放されていないぽい。
強制的に
version (Win32) {import internal.gc.win32;}
version (linux) {import internal.gc.gclinux;}
int main()
{
void *p;
uint nb;
os_query_staticdataseg(&p, &nb);
removeRange(p);
...以下略...
}
としたら解放されるようになるけれど、こんなことやると他でバグるはず。
Conservative GC だと仕方ないような気もするけど…
0118デフォルトの名無しさん
2006/01/16(月) 06:22:15めちゃくちゃすっきりすると今更思った。
import y4d_aux.widestring;
import std.cstream;
import std.utf;
void main()
{
char[] ask = "あなたの名前は?";
dout.writeLine(toMBS(ask));
char[] n = toUTF8(toWCS(din.readLine()));
char[] ans = "あなたの名前は" ~ (n?n:"?") ~ "です。";
dout.writeLine(toMBS(ans));
}
何でそのまま標準に取り入れなかったんだろう?
0119デフォルトの名無しさん
2006/01/16(月) 07:15:03GCがメモリを溜め込むときと、きちんと動いているときがあるのですが、
何が悪くて、なにがよいのかさっぱり分からない。
ちなみに>>110で、
>>そのデカい配列がずっとstaticデータ
>>領域から参照されていることになってて
参照しているstaticデータってのはどれで、どうみたらそれが分かります?
それで正しい動作なんですか?
0120デフォルトの名無しさん
2006/01/16(月) 07:24:36iconv使った事あるが2ちゃんねるのdatをSJIS->UTF8で全部変換出来なかった事がある・・・
0121デフォルトの名無しさん
2006/01/16(月) 10:08:00fullCollectもしくはminimizeが呼ばれれば開放しないと
いけないのでは?
0122117
2006/01/16(月) 11:34:49今のphobosの実装だと、gc_initの中(src/internal/gc/gc.d:105)で、
静的変数やらグローバル変数を置くために予約されたメモリ領域をまとめて
全部gc.addRange()してるんだが、その領域の使われてない部分が未初期化で(※)、
そこのゴミデータのビットパターンが"たまたま"newした領域のアドレスと
同じ値になってると、その領域は参照されてるとみなされて開放されない、
というパターンに見える。でかい配列になるほどゴミデータ中の値がたまたま
その配列の中へのポインタに誤認識される率が高いので>>110みたく200MBも
gcから取るとこうなりやすいんじゃなかろうか。
※ でもbssって普通ゼロクリアされてるような気もするんだが…わからん。
※ その辺dmdが何かバグってるのかもしれない。一応バグレポしといたほうがいいかも
>どうみたらそれが分かります?
debugオプション全部入りでphobosをビルド
>>121
開放される方が望ましいのは確かだが、
Conservative GCだとこの手の過剰認識は仕方がないかと…
0123デフォルトの名無しさん
2006/01/16(月) 12:14:22なら、その領域をnullに初期化すれば正常になるわけですね。
0124110=123
2006/01/16(月) 12:22:36されたメモリ領域がGCでうまく開放されませんでした。
下のプログラムでsizeを11,108KB以上にすると、GCが保持する
メモリ領域がsizeづつ増える場合もあるし増えない場合もあり
ました。
ところが、sizeが11,108KB未満だとGCはsizeより多く保持する
ことはありませんでした。
117さんの仮説によると、このsizeの条件がプログラムを走らせ
たときの状況で違ってくるってことでしょうか。
でも、これって明らかにバグな気が・・・。
import std.cstream;
import std.gc;
int main()
{
const size_t size = 1024*1024*11 + 1024*107 + 1023;
char c;
for (uint i = 1; i <= 10; ++i) {
void[] mem = new void[size];
dout.writefln("%dtimes.", i);
din.read(c);
}
return 0;
}
0125110=123
2006/01/16(月) 12:27:310126117
2006/01/16(月) 13:36:48いや普通にライブラリのglobal変数が置いてあるから、
nullで潰すと何も動かなくなると思う。ていうか
> 領域の使われてない部分が未初期化で
ごめん嘘ついた。もう少しマジメに調べてみたら俺の環境の場合、
std/utf.d の ubyte[] UTF8stride の途中にでてくる 0x02020202 が
mem.ptr と mem.ptr+size の間なもんだから開放されなくなってた。
実行環境によると思うがデカい配列は大抵こいつかstd/ctype.d の _ctype[] に引っかかってそう
今からD.bugsにレポート投げとく。けど、元々GCってこういうもんなので、
バグというのは酷かと…どうやって直せるんだろ、これ。
0127デフォルトの名無しさん
2006/01/16(月) 14:36:22nkf使っとけ。
0128デフォルトの名無しさん
2006/01/16(月) 14:37:240129119
2006/01/16(月) 14:54:35マジサンクス。
分かった気がする。
あと、gcx.dのminimizeが未実装になっているけど、
これは公式のガベレージコレクトのページにあるように
>普通は解放されたメモリをOSに返すことはしません。
>代わりに内部のプールに保持するのが一般的です。
ということから?
これだと、増えなくなることはあるけど、一度でかい領域を取ってしまうと戻せなくなるってことなの?
0130デフォルトの名無しさん
2006/01/16(月) 14:58:33ないですが、Cの関数は直接呼べるので、DLL持ってくれば使えます。
そういうのありなら、Apacheのapr-iconvも文字コード変換に関してはなかなか信頼できるのではないでしょうか。
ただ、公式サポートしては何か悲しい・・・。
DのライブラリもCAPNみたいになっちゃうのか。
いや、phobosは手抜きくさいので、
むしろD版CPAN作って、みんなでライブラリを作りまくったほうがいいかもな。
そこで評価の高いものを標準に入れてもらったり。
0131デフォルトの名無しさん
2006/01/16(月) 15:02:16ソースを覗いてみると、gcが確保した領域(ブロック)は開放されてないように見える。
0132デフォルトの名無しさん
2006/01/16(月) 15:17:04gcが確保した領域=標準のnewで獲得した領域ですよね..
>>126
ちょっと考えてみて既に挫折しましたが、
保守的なGCだと、どうがんばってもこういうテーブルが偶然一致する値があるかぎり
開放できない場所が出てくるわけですか..
いや、「ここは、ポインタを置いていませんよ」という意味で、GCの管理外にしとけばいいのかな。
removeRangeがそれみたいだけど、
これってGCがサイズを知っていること前提のIF(先頭ポインタのみ指定)なので、
もしやstaticな領域の場合区切りがないとかで使えない?
0133デフォルトの名無しさん
2006/01/16(月) 15:27:08ubyte[] UTF8stride;
static this()
{
UTF8stride = UTF8stride_static.dup;
UTF8stride_static[0 .. length] = 0;
removeRange(UTF8stride);
}
こうしたらいいのかな。
0134デフォルトの名無しさん
2006/01/16(月) 15:35:35マダーッ?
0135デフォルトの名無しさん
2006/01/16(月) 15:44:18GCの管理領域を指す可能性があるので、しようがない。
外部からの入力もあるわけだし、そこまで気を使ってコーディングできないわな。
DのGCは偶然によってリークすることがあるってことだ。
0136デフォルトの名無しさん
2006/01/16(月) 15:46:40ところで、GCもライブラリの一部のようなので、入れ替えできる、、、かな?
0137デフォルトの名無しさん
2006/01/16(月) 15:46:51removeRangeはaddRangeしたものを外す専用だから、あんまり使えない。
例えば class A { int n; void* p; } の A.n がポインタじゃないことの
判定を頑張るのは大変だからサボるのが保守的なGCで、このパターンが
避けられないのはどうしようもないと思う。けど、pointerを含む可能性が
ある型のnewとpointerを含まない型のnewを別に管理するGCになっていれば、
ubyte[] の中身を誤認識するパターンは保守的なGCでも回避できるはず。
(DならCと違って言語仕様でvoid*をintにキャストしたりするのも禁止されてるし)
巨大な配列をサーチする必要もなくなって高速化するしいいことづくめだと思うので
そういう風にgcを改造してWalterに送りつけたら採用してもらえるかも
0138デフォルトの名無しさん
2006/01/16(月) 15:49:21gcだけじゃなくてコンパイラも改造しないといけないのがめんどい罠
0139デフォルトの名無しさん
2006/01/16(月) 16:01:40なるほど。
void *をintにキャストできないのに、
ubyte[]になら入れ込める(いれれる前提の仕様)というのはどうなのかなと思うな。
0140デフォルトの名無しさん
2006/01/16(月) 16:48:400141デフォルトの名無しさん
2006/01/17(火) 00:38:070142デフォルトの名無しさん
2006/01/17(火) 02:55:45あれは、一定サイクルで動いているプログラムじゃないと、
開放するタイミングが難しいんじゃないの。
0143デフォルトの名無しさん
2006/01/17(火) 11:55:39kwsk
0144デフォルトの名無しさん
2006/01/18(水) 14:23:43Cのを使えってことかな?
DってCへの依存度が高過ぎる気がしないでもない。
0145デフォルトの名無しさん
2006/01/18(水) 17:01:03誰かが作らない限りずっとCのままだから、必要な人がつくるべきじゃないかな?
0146デフォルトの名無しさん
2006/01/18(水) 18:56:16ちなみに探索用のライブラリってどんなもの?
0147デフォルトの名無しさん
2006/01/18(水) 19:33:44import std.boxer;
int main()
{
Box x = box(4);
dout.writefln(unbox!(int)(x));
return 0;
}
を普通にコンパイルすると
gcc main.o -o main -lphobos -lpthread -lm
main.o(.gnu.linkonce.t_D3std5boxer24__T16unboxCastIntegerTiZ16unboxCastIntegerFS3std5boxer3BoxZi+0x15): In function `_D3std5boxer24__T16unboxCastIntegerTiZ16unboxCastIntegerFS3std5boxer3BoxZi':
: undefined reference to `_assert_3std5boxer'
collect2: ld はステータス 1 で終了しました
--- errorlevel 1
なります。assertのどれかがこけてるようなのでreleaseモード
でコンパイルしたらコンパイル成功。
これってバグでしょうか?
0148デフォルトの名無しさん
2006/01/18(水) 19:37:18Cでいうとbsearchです。
Cのbsearchだとポインタが剥き出しだし、引数で渡す比較関数
はextern (C)を付けて書かないといけないから嫌だなと思うの
です。
0149デフォルトの名無しさん
2006/01/18(水) 20:04:20確認してないが前にnewsgroupで
http://www.digitalmars.com/drn-bin/wwwnews?digitalmars.D/31993
>std.boxer doesn't seem to be built into phobos. Need to do the following
># dmd test c:\dmd\src\phobos\std\boxer
>to compile for DMD v0.141, v0.142, and v0.143
とか言ってる人がいた。バグじゃね?
0150147
2006/01/18(水) 20:12:42427 assert (value.type() !is null);
が原因みたいですね。そこで assert (value.type() is null)に
してみたんですけど、やっぱりこけるんですよ。
なんでだろ?
0151デフォルトの名無しさん
2006/01/18(水) 20:29:38boxer.dを引っ張り出してきていっしょにコンパイルすれば通るみたい。
0152147
2006/01/18(水) 20:37:50でも、unboxableは普通にコンパイルしてもこけないんですよね。
unbox使うとこけちゃいます。
0153デフォルトの名無しさん
2006/01/19(木) 02:26:56それ、おれも悩んだんだけど、
phobosをデバッグモードでコンパイルしたら出なくなった。
assert()がリリースモードじゃ消されてて、
でもテンプレートだからソース読んでくるから、
リリースモードのphobosに入っていないassertが存在してて、
リンクエラーになるのかと思ったんだけど、ちゃうかな。
0154デフォルトの名無しさん
2006/01/19(木) 17:04:33GUIライブラリもないのに最強はないなあ
0155デフォルトの名無しさん
2006/01/19(木) 17:30:02DFLとか?
0156デフォルトの名無しさん
2006/01/19(木) 17:45:260157デフォルトの名無しさん
2006/01/19(木) 17:47:010158デフォルトの名無しさん
2006/01/19(木) 18:56:04どっかにゲームならあったが
0159デフォルトの名無しさん
2006/01/19(木) 18:58:40duiを使ったのがあった。
今duiはコンパイル通らない。
0160デフォルトの名無しさん
2006/01/19(木) 19:04:25こないだGetStdHandle使おうと思ったら使えなくてへこんだ・・・
0161デフォルトの名無しさん
2006/01/19(木) 19:45:03wxDはどうなってるんだろう
0162デフォルトの名無しさん
2006/01/19(木) 20:02:06弱い○×ゲーム付。
0163デフォルトの名無しさん
2006/01/19(木) 20:11:02【Delphi互換!?】FreePascal【GPL】
http://pc8.2ch.net/test/read.cgi/tech/1137051510/
0164デフォルトの名無しさん
2006/01/19(木) 22:11:46GUIって使う側には優しくて好きなんですけど、作る側には優しくないん
ですね。
0165デフォルトの名無しさん
2006/01/19(木) 22:36:26作り方っていうか、ノウハウがわかってくれば
そんな苦でもないようなきがする。。
0166デフォルトの名無しさん
2006/01/19(木) 23:19:23GUI毎にAPIのポリシーや哲学みたいなものが違うのが最大の長所でもあり短所でもあるのでこればっかりはどうしようもないですねぇ。
0167デフォルトの名無しさん
2006/01/19(木) 23:21:380168デフォルトの名無しさん
2006/01/19(木) 23:24:32JavaのThinletってのがxmlでGUIの構造を定義してたよ。
LGPLだったからDに移植してみれば?(swing丸ごと必要だと死んじゃうけどさ)
0169デフォルトの名無しさん
2006/01/20(金) 00:02:370170デフォルトの名無しさん
2006/01/20(金) 00:10:510171デフォルトの名無しさん
2006/01/20(金) 00:13:080172デフォルトの名無しさん
2006/01/20(金) 00:14:480173デフォルトの名無しさん
2006/01/20(金) 00:21:04まあちょっと前に出た引数に日本語いれるとおかしくなるのは直して欲しいかな。
そんなもんじゃない?
0174デフォルトの名無しさん
2006/01/20(金) 00:33:54CKJなんてゴミとしか思われてないもん
0175デフォルトの名無しさん
2006/01/20(金) 00:49:500176デフォルトの名無しさん
2006/01/20(金) 00:58:360177デフォルトの名無しさん
2006/01/20(金) 01:01:24前はどう駄目だったの?
0178デフォルトの名無しさん
2006/01/20(金) 01:05:57文字コードは色々な思惑が入ったりしていて理論的ではないですし。
0179デフォルトの名無しさん
2006/01/20(金) 01:13:490180デフォルトの名無しさん
2006/01/20(金) 01:22:02自分専用ツールならいいけど、配布用のアプリには使えないね。
0181デフォルトの名無しさん
2006/01/20(金) 02:36:420182デフォルトの名無しさん
2006/01/20(金) 10:08:560183デフォルトの名無しさん
2006/01/20(金) 10:41:00cygwinのbashで環境変数LANGを書き換えればいけるけもしれない。
0184デフォルトの名無しさん
2006/01/20(金) 10:59:10ないわけですか?
0185デフォルトの名無しさん
2006/01/20(金) 15:34:00GCとか配列演算とか例外処理とかの言語機能そのものの実装なので、
ライブラリとして使うたぐいのものではないです
0186デフォルトの名無しさん
2006/01/20(金) 17:29:09Windows用のktermがあると思いましたけど。
0187デフォルトの名無しさん
2006/01/20(金) 17:34:53とりあえずck勧めとく。
0188デフォルトの名無しさん
2006/01/20(金) 18:30:20昔ckためしたときに出力だけは、変換されるのですが、
入力がMBSで入ってきた気がします。
あれ、入力の文字コードを設定できます?
0189デフォルトの名無しさん
2006/01/20(金) 18:39:12右クリックで選べる。
0190デフォルトの名無しさん
2006/01/20(金) 22:15:32なんとかしたいなぁ。
0191デフォルトの名無しさん
2006/01/20(金) 23:30:56使ったことないからわからないです。
そもそも、今まで文字コードを気にするようなものを
作ってこなかったなあ。
0192デフォルトの名無しさん
2006/01/21(土) 00:06:17ソースはWindows版はShift_JISを許容する。
なのでJ2EE+EclipseはデフォルトでShift_JIS(MS932)を使って開発ができる。
というかEclipseが文字コードの選択が出来る罠。
0193デフォルトの名無しさん
2006/01/21(土) 01:02:360194デフォルトの名無しさん
2006/01/21(土) 01:43:45ちょっと前のDirectXがある
0195デフォルトの名無しさん
2006/01/21(土) 03:23:570196デフォルトの名無しさん
2006/01/21(土) 10:51:180197デフォルトの名無しさん
2006/01/21(土) 12:14:260198デフォルトの名無しさん
2006/01/21(土) 12:25:390199デフォルトの名無しさん
2006/01/21(土) 12:31:200200sakurai
2006/01/21(土) 12:45:52久しぶりに2chみてたら、カッとしてやった。
今は後悔してる。
こんなにレスが付くとは思ってもみなかったんだ。
っていうかんじで。。。
ウォルターさんは、utf8使えゴルァ。
って感じで、一貫して昔から考えは変わっていないようです。
mangoか、iconvか、yanesdkかはわからんけど、
何らかの形でデファクトスタンダードを作っていくことが必要に思います。
writefなどの対応も、やるなら、phobos書き換えたライブラリを用意して、
毎回のバージョンごとに追従すると。
俺には根気がないので、無理かなぁと思ってます。
変換ライブラリは、dはハッシュ(連想配列)が使えるので、そいつに突っ込んでおけば
楽な気がします。
テーブルの初期化は、1GHzの俺のマシンで10msほどで済むようです。
あとは、プログラムサイズが大きくなるのがちょいと問題。
なんか、unicodeのサイトからテーブル生成してみたり、
javaからテーブル生成してみたり、そういったプログラムは書いてたんだけど
めんどくさくなってしまって動けなくなってしまったんで、
すまぬです。
また、気が向いたらやるかもしれません。
プログラムは、D言語研究に乗っけときます。
http://f17.aaa.livedoor.jp/~labamba/?%B9%F1%BA%DD%B2%BD%C2%D0%B1%FE
0201デフォルトの名無しさん
2006/01/21(土) 12:55:10OpenGLのフリップ速度に縛られてるんじゃないの?
ドライバのGLオプションでVSYNC同期とる設定になってるとか。
0202デフォルトの名無しさん
2006/01/21(土) 15:37:15大丈夫。ダレも本気でお前にレスとかしてるわけじゃない。
どうでもいい存在なんだよ。
0203デフォルトの名無しさん
2006/01/21(土) 17:12:08文字コード変換はまあ頑張れば方法はいくらでもあると思うが、
現状、自己流で各人が変換している状況に見える。
多分Dに新しく触れた人は同じ質問を繰り返すんじゃないかな?
そこに、選択肢の一つとして基本的な考えを作ろうという動きはありがたいと思う。
ただし、D言語は俺が守らねば、みたいにならず適当にやってればいいと思う。
いいもんだったら自然に誰かついてくし、いろんな手段が生まれてくるはず。
Dはもどかしさも含めて面白いと思うよ。
0205デフォルトの名無しさん
2006/01/21(土) 18:09:10はやく本気モードに移りたいんだがいまの状況ではモチベーションが維持できん。
0206デフォルトの名無しさん
2006/01/21(土) 18:36:34自分で作ったライブラリで公開しようと思うものを提供していって、
phobosに無いから自分で作ろうと思ったら、まずは既に作られていないかをそこで探せるなど。
そうしていくうちに、段々と「これといえばあれ」的な存在が出てきて、
ディファクトスタンダードになっていくんじゃないかな。
0207デフォルトの名無しさん
2006/01/21(土) 18:47:28ぜひぜひ作って下さい。
お願いします。
0208デフォルトの名無しさん
2006/01/21(土) 18:51:54仕様の変更やdmdのバージョンアップでDjcodeも修正無しでは
コンパイルできませんね。
DjcodeはCのソースを丸写しした感があるので元からちょっとアレでしたが。
0209デフォルトの名無しさん
2006/01/21(土) 19:06:16dsourceが一応そんな感じじゃないの?
0210デフォルトの名無しさん
2006/01/21(土) 19:12:12CやJAVAやboostと比較したのがあってもいいかもしれないと思う。
0211デフォルトの名無しさん
2006/01/21(土) 21:13:34dsourceは、大げさすぎて、
ちょっとした1ファイルライブラリを置く勇気がでないかなと思いまして。
公開する人の気軽さも必要だと思うのですよ。
>>207
言いだしっぺの法則かー!
0212デフォルトの名無しさん
2006/01/21(土) 23:25:05DelphiみたいなIDEがあるわけでもなし、正式版が出たとたん終わりそう・・・
0213デフォルトの名無しさん
2006/01/21(土) 23:46:56gdcが使えなくなることはないと思いますよ。
たいして浸透することもなさそうなので、そこま
で強気な態度をとることはできないかと。
0214デフォルトの名無しさん
2006/01/22(日) 02:18:23DelphiみたいなIDEがあるわけでもなし、正式版が出たとたん終わりそう・・・
0215デフォルトの名無しさん
2006/01/22(日) 02:36:41横やりを入れてみます。
アイデアキボウ。
0216デフォルトの名無しさん
2006/01/22(日) 03:24:10モジュールの正式版は普通に載せて、開発版は評価、バグ報告等の
コメントを寄せることができる掲示板風にしてはどうでしょうか?
ダウンロード数を表示するのも面白いかも。多ければ励みになりま
すし。やはり開発側のモチベーションを高める仕掛けは必須だと思
います。
0217デフォルトの名無しさん
2006/01/22(日) 04:14:36コードを載せるつもりが現状無い人にもとりあえず
アカウント登録してもらえるようなサイトにして、
「あー、せっかくつくったからとりあえずのせておこう」という
具合に供給を刺激するのがいいんじゃないかなぁと思う。
0218デフォルトの名無しさん
2006/01/22(日) 04:19:57気付いたらのめり込んでるみたいな?
で、気付いたら常連みたいな?
それ上手いですね。
0219デフォルトの名無しさん
2006/01/22(日) 05:15:150220デフォルトの名無しさん
2006/01/22(日) 05:32:22良いライブラリ作って下さい。
期待してます。
0221デフォルトの名無しさん
2006/01/22(日) 12:01:09そこにソースがある限り、皆でよってたかって改善するんだぞ。
それには終わりは無い。
0222デフォルトの名無しさん
2006/01/22(日) 14:07:02実際には一部の者が独占的に開発を行う
パッチを投げてもスルーが基本
例外的な幸せ体験を触れ回るのは、
北朝鮮がパラダイスだと心の底から噂した人たちと同じ行為だ
0223デフォルトの名無しさん
2006/01/22(日) 14:39:190224デフォルトの名無しさん
2006/01/22(日) 15:01:01少なくともFirefoxはオープンソースで成功していると思うぞ。
実際に技術力がある一般人がゴロゴロいるってほどでもないけどな。
</チラシの裏>
0225デフォルトの名無しさん
2006/01/22(日) 15:11:590226デフォルトの名無しさん
2006/01/22(日) 16:05:420227デフォルトの名無しさん
2006/01/22(日) 19:39:43Readerクラス、Writerクラスが自動的(あるいは任意)に言語を補完してくれる
みたいなライブラリがphobosに詰められれば解決なんだろうけど。
0228デフォルトの名無しさん
2006/01/22(日) 20:14:57D言語自体ぐだぐだなんだから仕方ないだろ。
0229デフォルトの名無しさん
2006/01/22(日) 23:52:130230デフォルトの名無しさん
2006/01/22(日) 23:53:280231デフォルトの名無しさん
2006/01/23(月) 00:34:02uint stride(char[] s, uint i);
ってs[i]がシーケンスの開始でない場合は0xFFを返すけどなぜだろう?
0を返すという仕様ではまずいのかな?
0232デフォルトの名無しさん
2006/01/23(月) 01:09:50エラー処理してないこんなやつが無限ループになるのを嫌ったか、
単に不正な値であることを強調したかったか。
0233デフォルトの名無しさん
2006/01/23(月) 01:19:28まあ、strideが255になる世の中ってのはこないとは思うけども。
地球外の文字集合を入れ込まない限り。
0234デフォルトの名無しさん
2006/01/23(月) 03:56:402004年のリリースだけど大丈夫かな?あやしい?
0235デフォルトの名無しさん
2006/01/23(月) 06:39:130236デフォルトの名無しさん
2006/01/23(月) 14:08:370237デフォルトの名無しさん
2006/01/23(月) 18:25:500238デフォルトの名無しさん
2006/01/23(月) 21:47:250239デフォルトの名無しさん
2006/01/23(月) 22:19:04WNDCLASSEXとか宣言されてないけどどうなの?>std.c.windows.windows
0240デフォルトの名無しさん
2006/01/23(月) 22:25:51http://www.kmonos.net/alang/d/htomodule.html
自分で宣言すべし
0241デフォルトの名無しさん
2006/01/23(月) 22:26:570242デフォルトの名無しさん
2006/01/23(月) 22:36:24おk、自分で宣言してるよ。
0243117
2006/01/24(火) 07:51:13http://www.digitalmars.com/drn-bin/wwwnews?digitalmars.D.bugs/6058
デカい配列はGCとは相性が悪いのでそういうのは自前でdeleteすべし。
class LargeArrayWrapper(T) {T[] buf; ~this(){delete buf;} ...}
みたいなのを経由してアクセスするようにすると楽だよん。
というありがたいお返事をいただいたので一応報告。
0244デフォルトの名無しさん
2006/01/25(水) 01:37:59deleteってデストラクタ呼ぶだけではなくて、GCからも削除されるのですか?
と思ったので確認してみたら、
>プログラムは、オブジェクトがもはや参照されないことを(delete式によって)
>ガベージコレクタへ明示的に伝えることもできます。
> この場合はGCはすぐに デストラクタを呼び出し、
>オブジェクトのメモリを自由領域へ戻します。
なんて記述があったのですが、これはつまり、他から参照がある領域でもdeleteなら開放できるという認識でOKでしょうか?
昔からこうでしたっけ?
0245デフォルトの名無しさん
2006/01/25(水) 02:00:21結構前からその文は入っていたように思いますよ.
0246デフォルトの名無しさん
2006/01/25(水) 15:56:54std.stream.BufferedFile 使うとなぜか4GBのファイルに膨れ上がる。
何が悪いんだろう?
std.stream.File なら問題ない。
BufferedFile に対して writeBlock 使うのはいかんのだろうか?
根本的にやり方間違ってる?
Windows版 dmd, Cygwin gdc の両方で同じ現象を確認。
import std.stream;
int main(char[][] args)
{
Stream fd_img = new BufferedFile("test.img", FileMode.In | FileMode.Out);
// Stream fd_img = new File("test.img", FileMode.In | FileMode.Out);
fd_img.seekSet(0);
ubyte buf[1];
buf[0] = 0x99;
uint write_size = fd_img.writeBlock(&buf[0], 1);
fd_img.close();
return 0;
}
0247デフォルトの名無しさん
2006/01/25(水) 18:36:08うちの環境ではなんともないでした。
実行形式も300KBちょいでした。
環境:VineLinux3.2 dmd0.143 pentium4
0248デフォルトの名無しさん
2006/01/25(水) 18:44:34すでにデータがあるところに書き込もうとすると
(上のプログラムだと二度目の起動)
Error: unable to move file pointer(File.seekにて)
とはじいてくれる。なんかおかしいかも。
0249244
2006/01/25(水) 18:54:03去年くらいにD言語をやろうと決めて、日本語サイトをざっと見たときに
deleteは単にデストラクタを呼び出すだけで、
メモリが開放されるかはGCがきめると書いてあったような気がしたのですが、
気のせいだったかもしれません。どうもです。
0250デフォルトの名無しさん
2006/01/25(水) 19:14:160251デフォルトの名無しさん
2006/01/25(水) 19:22:03std.stream:2080-
// opens file in requested mode and buffer size
this(char[] filename, FileMode mode = FileMode.In,
uint bufferSize = DefaultBufferSize) {
super(new File(filename,mode),bufferSize);
}
0252デフォルトの名無しさん
2006/01/25(水) 19:59:43deleteはデストラクタを呼ぶだけで、即インスタンスを
開放してくれるわけではありませんね。
0253247
2006/01/25(水) 20:05:02やっぱり何回やっても家の環境だとtest.imgは1byteのままです。
dmdを最新版にしてみたらどうでしょうか?
dmd0.144でやってみても全く正常でした。
0254デフォルトの名無しさん
2006/01/25(水) 20:05:09恐らくD言語研究室の記述だと思うが、
例えば>>110のプログラムのfunc()内でdeleteしたとしても
挙動が変わらないところを見ると記述の通りじゃないかと思う。
メモリの解放が全てGCに任されているのであれば
deleteしてもやっぱりゴミに邪魔されて解放できないのでは?
0255246
2006/01/25(水) 20:17:181byteだと動いちゃったりするかも?
dmd は最新のはず。もう一回ダウンロードして試してみます。
0256246
2006/01/25(水) 20:23:07dmd/src/std/*.d をコンパイルして *.obj にしたのをリンクする
ってのではいかんのかな?
writefln 仕込んでもぜんぜん出力してくれないんだけど。
0257デフォルトの名無しさん
2006/01/25(水) 20:27:320258247
2006/01/25(水) 20:44:25なんでしょうね?
0259デフォルトの名無しさん
2006/01/25(水) 21:36:43これ追うの死にそう
0260デフォルトの名無しさん
2006/01/25(水) 23:00:12あ、writeflnなんかやると、
streamのほうに書き出されます。
0261デフォルトの名無しさん
2006/01/25(水) 23:07:33他から参照があっても開放されるよ。(つーか正確にはフリーリストに
戻されるだけで物理的には開放されなくて、次他でnewがあったときに
使いまわされるようになる。)
ソースで言うと internal/gc/gc.d の _d_delclass で _gc.free されてる。
>>254
うちだと>>110の最後の行を
void func() { auto GCTest obj= new GCTest(1024*1024*200); delete obj._mem; }
に変えたら消費メモリは増えなくなったが…
0262261
2006/01/25(水) 23:10:160264244
2006/01/26(木) 01:20:48どうもです。
>>256
phobos.libが先にあるからかな?
phobosをデバッグモードでコンパイルしてデバッガで追っかけたほうが早いかもよ。
0265デフォルトの名無しさん
2006/01/26(木) 10:27:29できる。boemGCにいれかえたことがある
仕様上は「保守的なGCを規定してるわけではなく、GCなら何でもいいという規格」になってるけど、
現在の実装だとむりぽ
>>137
送りつけたけど採用されなかったお
wxDのページのmiscでこうかいしてるお
http://wxd.sourceforge.net/misc.html
0266246
2006/01/26(木) 13:00:49stream.d の中に
streamPos = s.seek(-bufferSourcePos, SeekPos.Current);
というのがあるんだけど、
bufferSourcePos は uint なのに対して、
ulong seek(long offset, SeekPos whence)
というインターフェースになっている。
ここで、uint の値を negate して、long に昇格できないという問題らしい。
import std.stdio;
void func(long lx)
{
writefln("%d", lx);
}
int main(char[][] args)
{
uint x = 1;
func(x);
func(-x);
func(1);
func(-1);
return 0;
}
結果
1
4294967295
1
-1
0267247
2006/01/26(木) 21:38:020268デフォルトの名無しさん
2006/01/26(木) 22:41:29ここでintに再びキャストされて問題無くなるみたい。
0269247
2006/01/26(木) 23:20:030270デフォルトの名無しさん
2006/01/27(金) 19:55:52凄い。細かいとこまでフォローしてる。>D.bugs
0271デフォルトの名無しさん
2006/01/29(日) 12:58:120272デフォルトの名無しさん
2006/01/29(日) 13:06:270273デフォルトの名無しさん
2006/01/29(日) 16:31:29プロパティのフォントでMSゴシックにしてchcp 65001やったらちゃんと日本語表示されたヨ!
あと、コマンドラインで日本語使えるようにinternal.dmain2を書き直してたらDMCのバグ見つけちまった。
第1引数の最初の文字がMBSだと正しく文字列が取得できねぇ。
test 日本語.txt にほんご.txt
1:..\test.exe
2:{.txt
3:にほんご.txt
これ何とかならんかな。
0274デフォルトの名無しさん
2006/01/29(日) 16:40:25ファイルの中身を全部メモリ上に保持してるんじゃなかったけ?>std.zip
0275デフォルトの名無しさん
2006/01/29(日) 17:27:19>>60-70 あたりと同じことか?
0276sage
2006/01/29(日) 21:29:10コマンドプロンプトでデフォになってんのがラスタフォントなんだけど、こいつがUTF8を扱えない。
MSゴシックはUnicodeフォントなんでUTF8を表示できるらしい。
この設定やればtoMBSzなんか使わんでも日本語表示が出来る。
もう一つの方なんだが、phobosではinternal.dmain2の中で
int main(int argc, char** argv)
が定義されていて、この中でgcとかの初期化をやった後
int main(char[][] arg)
を呼び出してる。
ところが[char** argv]の時点ですでにおかしくなってる。
ためしにCで引数を表示するプログラムを書いて
BorlandとDMのCコンパイラでコンパイルしたら、やっぱりDMだけおかしかった。
だからDMCのバグを直してもらうか、他のCコンパイラを使わなきゃいかん。
0277デフォルトの名無しさん
2006/01/29(日) 22:48:47プロパティでラスタフォントしか選択肢がないのだけど、どっかで設定しないといけない?
オレだけか・・?
0278デフォルトの名無しさん
2006/01/29(日) 23:28:020280!=277
2006/01/30(月) 00:12:52先生、XPですがMSゴシック選択肢にありません
ttp://www003.upp.so-net.ne.jp/kish/font/ttf_con.html
この辺りを参考にレジストリを弄って見たけど上手くいかん...
0281276
2006/01/30(月) 00:23:31オレは特に何もした覚えはないけどなぁ。
ttp://hp.vector.co.jp/authors/VA000092/nt/console.html
オレはこのページを見て気づいた。
0282277
2006/01/30(月) 04:59:170283276
2006/01/30(月) 12:35:48んー何が原因だろ?
[オプション]タブの設定とかはどうなってます?
現在のコードページの欄を変えると、選択できるフォントが変わるみたいだけど。
コードページごとにラスタフォントともうひとつTrueTypeフォントが選択できるはずなんだけど。
0284デフォルトの名無しさん
2006/01/30(月) 15:04:330285デフォルトの名無しさん
2006/01/30(月) 16:47:27いつも思うんだけど
Fixed D.bugs/6068
Fixed D.bugs/6079
とせずに
せめて要約しろよと思う
0286デフォルトの名無しさん
2006/01/30(月) 16:50:30でもさ,
printf("chcp 65001 でコードページを変更しても");
printf("このように");
printf("1行目しか表示されないんですけど\n");
(出力)
chcp 65001 でコードページを変更しても
>
なんか間違ってる?
0287デフォルトの名無しさん
2006/01/30(月) 18:50:15>printf("このように");
>printf("1行目しか表示されないんですけど\n");
>(出力)
>chcp 65001 でコードページを変更しても
これもDMCのバグだな。Cでコンパイルしても同じことが起きる。
とりあえずwritefなら正しく表示できるのでそっち使うべし。
0288286
2006/01/30(月) 19:35:29激しく同意
>>287
バグなのか・・・
dout.printfでも正しく表示されますた
文字コード周りはいろいろ問題だらけだなあDM
0289287
2006/01/30(月) 23:50:15writefでも一度改行すると後が表示されねぇ。
使えるのはdout.printfだけか・・・orz
プログラムの引数に日本語使えない問題は、phobos改造して出来るようになったよ。
参考
ttp://www.digitalmars.com/d/archives/digitalmars/D/bugs/6087.html
0290デフォルトの名無しさん
2006/01/31(火) 18:12:367-zip32.dllを動的に使いたいんだが以下のプログラムだと
何故かAccess Violationってエラーが出る。
誰か助けてくれ。
alias int function(HWND,LPCSTR,LPSTR,DWORD) Com_fp;//Command
int main()
{
HMODULE h;
FARPROC fp;
LPSTR dummy;
Com_fp comfp;
h = LoadLibraryA("7-zip32.dll");
fp = GetProcAddress(h,"SevenZip");
if(fp == null)
{
return 1;//Error
}
comfp = cast(Com_fp) fp;
return (*comfp)(h,"e sample.zip",dummy,32767);
}
0291デフォルトの名無しさん
2006/01/31(火) 18:13:330292デフォルトの名無しさん
2006/01/31(火) 18:33:570293290
2006/01/31(火) 19:47:02それってこういうことか?
alias extern(C)int function(HWND,LPCSTR,LPSTR,DWORD) Com_fp;//Command
やってみたけど、同じだったorz
0294デフォルトの名無しさん
2006/01/31(火) 20:14:18もしかして:
extern(C)alias int function(HWND,LPCSTR,LPSTR,DWORD) Com_fp;//Command
0296デフォルトの名無しさん
2006/01/31(火) 21:24:490297デフォルトの名無しさん
2006/01/31(火) 21:57:180298デフォルトの名無しさん
2006/01/31(火) 23:28:110299デフォルトの名無しさん
2006/01/31(火) 23:46:250300デフォルトの名無しさん
2006/02/01(水) 00:04:33話はそれからだ。
0301デフォルトの名無しさん
2006/02/01(水) 00:12:11D-JVMは相当言語機能削らんと無理っぽいような。
0302デフォルトの名無しさん
2006/02/01(水) 00:17:050303デフォルトの名無しさん
2006/02/01(水) 00:22:16現在D.NETのサイトは消失中
0304デフォルトの名無しさん
2006/02/01(水) 01:01:330305デフォルトの名無しさん
2006/02/01(水) 01:19:32ネーティブでやるのはきついかもしれんけど、C++/CLIに負けちゃうんじゃないかとちょっと不安。
0306デフォルトの名無しさん
2006/02/01(水) 01:47:160307290
2006/02/01(水) 10:27:19extern(Windows){
alias int function(HWND,LPCSTR,LPSTR,DWORD) Com_fp;
}
って変えてみたけど、結果は一緒だった。
0308デフォルトの名無しさん
2006/02/01(水) 11:13:24ひょっとしたら、こうかもしれない。とりあえずaliasは無しで、
extern(Windows) export int function(HWND,LPCSTR,LPSTR,DWORD) fp;
これが上手く行ったらalias版でやってみてはどうでしょうか?
0309308
2006/02/01(水) 11:18:270310デフォルトの名無しさん
2006/02/01(水) 11:42:06あれ?書き換えてみたけどコンパイルすら通らないorz
>>309
そうなんだけど…
ツールみたいなのを作ってるので一つのDLLがないだけで
他の機能が使えないって状況はちょっとまずいかなって思ってる。
だからなるべくLoadLibrary使いたい。
0311296
2006/02/01(水) 12:22:06てか良く見たら、extern(Windows)以前の問題で
>LPSTR dummy;
>...
>return (*comfp)(h,"e sample.zip",dummy,32767);
ほんとにこう書いてるならそらAccess Violationだわ。
dummy用にメモリ確保するか最後の32767を0にするかしないと。
あとこの場合は大丈夫だけど、Dの文字列"e sample.zip"を
toStringzせずにCの関数に渡すのはお勧めできない。
0313デフォルトの名無しさん
2006/02/01(水) 13:56:02import std.c.windows.windows;
import std.string;
int main()
{
try
{
auto ExeModule dll = new ExeModule("7-zip32.dll");
void* symbol = dll.getSymbol("SevenZip");
if (null == symbol) throw new ExeModuleException(ExeModule_Error());
int function(HWND,LPCSTR,LPSTR,DWORD) SevenZip;
*(cast(void**)&SevenZip) = symbol;
return SevenZip(null, toStringz("e sample.zip"), null, 0);
}
catch (ExeModuleException e)
{
e.print();
}
return 0;
}
ぬるぽ
0314デフォルトの名無しさん
2006/02/01(水) 15:51:41Visual C# for Win64API
Visual C# for JVM
つまり.NETはいらない。
ネイティブとジャヴァヴァーチャルマシーンで動くC#が最高。
そういうこと。
0316デフォルトの名無しさん
2006/02/02(木) 00:26:290317デフォルトの名無しさん
2006/02/02(木) 16:23:09言いだしっぺ乙
というのは半分冗談として、libxmlなりparsifalなり使えば?
0318デフォルトの名無しさん
2006/02/02(木) 17:29:360319デフォルトの名無しさん
2006/02/02(木) 18:08:020320デフォルトの名無しさん
2006/02/02(木) 18:11:34SEL型の定義がうざい。
0321デフォルトの名無しさん
2006/02/02(木) 18:47:34char[] randomstring(char[] table, int length){
char[] s; s.length = length;
for( int i ; i < length ; i++ )
s[i] = table[rand()%table.length];
return s;
}
0322デフォルトの名無しさん
2006/02/02(木) 18:52:56char[] randomstring(char[] table, int length){
auto s = new char[length];
foreach(inout char ch;s)
ch = table[rand%$];
return s;
}
0323デフォルトの名無しさん
2006/02/02(木) 18:56:45void randomstring(char[] table,inout char[] s){
foreach(inout char ch;s)
ch = table[rand%$];
}
0324デフォルトの名無しさん
2006/02/02(木) 18:58:09sはinoutじゃなくても良くね?
0325デフォルトの名無しさん
2006/02/02(木) 18:59:430326デフォルトの名無しさん
2006/02/02(木) 19:02:48何も付けなくても大丈夫
void randomstring(char[] table, char[]s){
foreach(inout char ch;s)
ch = table[rand%$];
}
0327デフォルトの名無しさん
2006/02/02(木) 19:04:42すっかり忘れてたorz
0328デフォルトの名無しさん
2006/02/02(木) 19:14:520329デフォルトの名無しさん
2006/02/02(木) 19:57:41Dはリフレクションが無いので、コールバックの所で詰まるぞ.
0330デフォルトの名無しさん
2006/02/02(木) 19:59:41そうなのか・・・
0331デフォルトの名無しさん
2006/02/02(木) 22:33:100332デフォルトの名無しさん
2006/02/02(木) 22:38:370333デフォルトの名無しさん
2006/02/03(金) 10:08:590334デフォルトの名無しさん
2006/02/04(土) 01:24:29日本のD関連サイトは全く更新されていないし、今後される気配もない。
phobosの充実も全く見られないのは深刻。
0335デフォルトの名無しさん
2006/02/04(土) 01:37:30選択肢:
-C/C++からD言語へのトランスレーターを作る
-DelphiからD言語へのトランスレーターを作る
-JavaからD言語へのトランスレーターを作る(libjavaはGPLだけど)
-C#からD言語へのトランスレーターを作る
0336デフォルトの名無しさん
2006/02/04(土) 01:50:17Entice Designer
良さげだが、動かないorz
0337デフォルトの名無しさん
2006/02/04(土) 01:53:420338デフォルトの名無しさん
2006/02/04(土) 02:10:300339デフォルトの名無しさん
2006/02/04(土) 02:39:130340デフォルトの名無しさん
2006/02/04(土) 02:49:050341デフォルトの名無しさん
2006/02/04(土) 03:19:560342デフォルトの名無しさん
2006/02/04(土) 07:25:21みんなD言語に注目はしてると思うけど。
0343デフォルトの名無しさん
2006/02/04(土) 08:15:230344デフォルトの名無しさん
2006/02/04(土) 09:16:420345デフォルトの名無しさん
2006/02/04(土) 10:39:230346デフォルトの名無しさん
2006/02/04(土) 10:55:320347デフォルトの名無しさん
2006/02/04(土) 11:51:430348デフォルトの名無しさん
2006/02/04(土) 14:37:05Obj-Cのイベントとデリゲートの類いは、文字列からメソッドを検索して、あれば呼び出し、無ければデフォルトの動作をする。
Javaはリフレクション、C#はリフレクションとアノテーションを併用して、ブリッジを実装している。
0349デフォルトの名無しさん
2006/02/04(土) 17:29:050350デフォルトの名無しさん
2006/02/04(土) 18:42:180351デフォルトの名無しさん
2006/02/04(土) 20:52:49そのくらい自分でかけないとDをやっていけないのが現状。
http://www.wikiroom.com/sakurai/?D%B8%C0%B8%EC%A4%C7CGI は参考になりそう。
0352デフォルトの名無しさん
2006/02/04(土) 21:34:29ないのですか。
そのサイトも全く更新されてませんね。
0353デフォルトの名無しさん
2006/02/04(土) 21:48:15標準入出力をどうにかすればいいだけ。
dsourceにあったような気がするけど自分で書いた方が気が楽だ罠
0354290
2006/02/04(土) 23:39:34一部のzipがエラーが出て解凍がうまくいかない。
>>313を参考にして
char[16 * 1024] output;
SevenZip(null,toStringz("e " ~ filepath),output,output.sizeof);
と書き換えて呼び出しているんだが、通常に解凍できるのとできないのがある。
(書き換えない前も同じ)
できないのは
ERROR: Can't allocate required memory!
ってエラーが出てくる。
0355290
2006/02/04(土) 23:40:230356デフォルトの名無しさん
2006/02/05(日) 01:28:58そのエラーそのまんまメモリ不足ってことはないの?
>一部のzipがエラー
その一部ってのは特別大きいファイルってわけじゃない?
0357デフォルトの名無しさん
2006/02/05(日) 01:30:26安心して使えるようにphobosでだしてもらいたい。
でも、本格的なlistをだすことになるとSTLみたいな大仕事になる
から当分先の話かな。
DTLってのがあるけど更新が止まっているので使いづらいってのが
ある。
やはり公式なサポートがないとなあ。
0358356
2006/02/05(日) 01:35:10SevenZipってのを知らないので、一般的なことしかいえないけど、
メモリ関係では、DLL側とDがでちがうallocator使っていたりすると
メモリの受け渡しでまずいことになるから、そのあたり調べて見たらどうでそ。
D側で取得したメモリを、DLL側で開放しようとしたとか、reallocに渡そうとしたとか。
その逆とか。
0359デフォルトの名無しさん
2006/02/05(日) 12:35:11基幹的なライブラリは更新が止まって枯れてない方が怖いだろ。
0360デフォルトの名無しさん
2006/02/05(日) 17:07:45Dの仕様が変化している状況だから直す部分はあるはず。
それにDTLはどう見てもまだ中途。
0361290
2006/02/05(日) 23:46:03一部とは別に特別大きいファイルじゃない。
50〜80MBぐらいので試してるんだけど、大きくても正常に解凍できたり、逆に小さくても正常に解凍できなかったりとまちまち。
358で言ってるメモリについてはちょっとまだわからない。
もしかしたらGCが悪いのかとも思いdisableで止めてみたりしたけど、変わらなかった。
あと7-zip32.dllのAPIを読み返してみたら
int WINAPI SevenZip(const HWND _hwnd, LPCSTR _szCmdLine, LPSTR _szOutput, const DWORD _dwSize)
って書いてあった。
WINAPIはDで定義してもがコンパイル通らないから無視してたんだが、これが原因ってこともあるのか?
0362デフォルトの名無しさん
2006/02/05(日) 23:54:21hoge WINAPI huga(...)
はDでは
extern(Windows) hoge huga(...)
となる。
D言語の標準はextern(D)なので呼び出し規約が異なるのが原因だろうなぁ
#なんだがDの呼び出し規約はFAQに入れたいほど頻出する話題だなぁ
0364デフォルトの名無しさん
2006/02/06(月) 02:13:44C++使ってはどうか?
0365デフォルトの名無しさん
2006/02/06(月) 02:20:05C++側から同じ関数で同じファイル解凍できるかできないか試してみるのがいいかも。
0366デフォルトの名無しさん
2006/02/06(月) 02:22:24しかしx64が次の時代を担うのかといえば違うんだな、これが。
Intelはどう見ても失敗した。
これからしばらくはAMDの時代さ。
おもえらゲイツを舐めすぎ。
.NETはJavaに対抗したというのもあるけど、実はPentiam対策でもある。
様子見ですよ。
勝敗が決するまではネイティブ言語には力を入れない。
.NETで様子を見るのだ。
0367デフォルトの名無しさん
2006/02/06(月) 02:23:36DWTって現状使いもになるの?
0368デフォルトの名無しさん
2006/02/06(月) 02:29:17コピペ荒らしかよorz
0369デフォルトの名無しさん
2006/02/06(月) 02:35:10商用で使うのはまだ怖い。
0370290
2006/02/06(月) 08:29:45C++側(というより普通の圧縮解凍ツールでC++で作られているのを確認したものいくつか)
やってみたが何も問題なかった。
やっぱりD側の原因かな。
0371デフォルトの名無しさん
2006/02/06(月) 09:37:46toStringz("e " ~ filepath)
output
output.sizeof);
output.lengthとか?
0373デフォルトの名無しさん
2006/02/06(月) 11:08:52アホか。
それだったら、x86なんかより遙かに優れたアーキテクチャを持っている
Itanium2(EPIC)の失敗はどう説明すんだよ。
過去のソフトウェア資産の価値を甘く見過ぎ。
0374デフォルトの名無しさん
2006/02/06(月) 12:02:05今漏れも触ってみてるのだが、機能面ではSWTの機能はほぼ完全に
移植されてて、まあ使える感じ。バグとか安定度はどうだろね。
0375デフォルトの名無しさん
2006/02/06(月) 13:57:34BOOL WINAPI SevenZipGetRunning(VOID)を呼んでいないのでは?
もし呼んでいないのなら、7-zipAPI.txtを100回熟読して反省してください。
0376290
2006/02/06(月) 14:54:10呼び出してるよ。SevenZipGetRunningやSevenZipCheckArchiveなんかはちゃんと動くんだ。
ただSevenZipだけができない…というより解凍のコマンド(e)がうまくいかない。
ちなみに圧縮(a)や更新(u)は正常に動作するようだ。
0377デフォルトの名無しさん
2006/02/06(月) 15:55:28これからはPowerPCの時代だと思わんかね?
0378375
2006/02/06(月) 15:56:45これは失礼しました。
となると、原因の切り分けが必要かと。
(1)>>364-365の言う通りに(実績のある)C/C++で作ってみる
(2)別のDLL(UnLHa32.dllなど)で試してみる
(1)の場合は>>370の様な誰かが作ったものではなくて、自分で
作ったコードで確認するべきだと思います。
0379デフォルトの名無しさん
2006/02/06(月) 16:43:31メルセンヌ・ツイスターを移植してみた。
0380デフォルトの名無しさん
2006/02/07(火) 00:01:22そうなら、俺も次から使おうかな。
標準に期待して。
0381デフォルトの名無しさん
2006/02/07(火) 14:15:01ソース http://www.dsource.org/projects/dwt/
buildツール http://www.dsource.org/projects/build/
dmdにimport, lib, packages, del-intermediate.batをコピー
・\dmd\bin\sc.ini の書き換え
DFLAGS="-I%@P%\..\src\phobos" から
DFLAGS="-I%@P%\..\src\phobos;c:\dmd\import"
・コンパイル
\dmd\import\ の
make-dwt-lib.bat
make-dwtextra-lib.bat
・サンプル
packages\dwt\examples
適当なフォルダの.batで
0382デフォルトの名無しさん
2006/02/07(火) 18:46:12サンクス。コンパイル通らなくて悩んでた。(テキスト読めよ
ライブラリ作成の際に、buildコマンドに-version=ANSIを付ければwin9xで動作する模様。
ただし、WNDPROC<->WNDPROC_Iで暗黙のキャストができない様なので、修正(十数カ所)。
例)widgets/group.d:80
!GroupProc = cast(WNDPROC_I)lpWndClass.lpfnWndProc;
widgets/display.d:1949
!lpWndClass.lpfnWndProc = cast(WNDPROC)windowProc_var;
サンプルの大半とposeidonをビルド、動作確認。ちょっと感動。
0383デフォルトの名無しさん
2006/02/07(火) 19:41:53これでコントロールサンプルがとりあえず動く。
0384デフォルトの名無しさん
2006/02/09(木) 00:59:50scintillaも日本語フォントとコードページ与えてやればいい感じ。
0385デフォルトの名無しさん
2006/02/10(金) 03:00:020386デフォルトの名無しさん
2006/02/10(金) 06:05:13何に使うん?それ
0387デフォルトの名無しさん
2006/02/10(金) 07:53:44static constでもconstでも内容を書き換えることができてしまいます。
0388デフォルトの名無しさん
2006/02/10(金) 08:21:42gccならprivateメンバとなっている配列が書き換えられる
ようなコードを見つけた場合コンパイルエラーをだしてく
れてたのになあ。確か。
0389デフォルトの名無しさん
2006/02/10(金) 20:06:030390デフォルトの名無しさん
2006/02/10(金) 21:13:11っていってもshebangが使い難くて…orz
もっとスマートな方法あったらよろ
#!/usr/bin/perl -e exec(dmd,'test.d','-run')
private import std.stdio;
int main(){
writef("Hello World\n");
return 0;
}
0391デフォルトの名無しさん
2006/02/10(金) 21:43:25Newsgroupでも同じようなこと言ってる人がいるな。
http://www.digitalmars.com/drn-bin/wwwnews?digitalmars.D.announce/2636
これは仕様バグだと思うので0.147で改善されるんじゃないかなあ。
0392デフォルトの名無しさん
2006/02/10(金) 22:19:56http://dream.my-sv.net/upload/src/up0134.d
#!./rdmd
private import std.stdio;
int main(){
writef("Hello World\n");
return 0;
}
とすればok。キャッシュも効くはず。
0393デフォルトの名無しさん
2006/02/10(金) 23:23:47std.cstreamがlibphobos.aに入ってない?
main.o(.data+0x90): undefined reference to `_ModuleInfo_7cstream'
collect2: ld はステータス 1 で終了しました
--- errorlevel 1
私だけ?
0394デフォルトの名無しさん
2006/02/10(金) 23:44:55>Added module statements to all std.typeinfo modules.
>This may require recompiling library code.
とりあえず前バージョンでコンパイルしたコードは
再コンパイルした方がよさげだが。
0395デフォルトの名無しさん
2006/02/10(金) 23:51:12std.cstreamをimportすると駄目みたいですね。
0396デフォルトの名無しさん
2006/02/10(金) 23:52:52ファイルパスにある「"」を消したいんだが
replace(toString(lpCmdLine),'"',"");//ちなみにwindowsAPIなのでlpComLineはchar *ファイル名が入ってると思ってくれ
じゃなんかcharはchar[]に変換できないので通らないのでうまくいかない。
0397デフォルトの名無しさん
2006/02/10(金) 23:59:49これで済む話ならヌッ殺す
0398デフォルトの名無しさん
2006/02/11(土) 00:03:080399デフォルトの名無しさん
2006/02/11(土) 00:17:370400デフォルトの名無しさん
2006/02/11(土) 06:42:30まずは落ち着け系のバグかよ.
0401デフォルトの名無しさん
2006/02/11(土) 09:44:17単なるポカミスだ。
0402デフォルトの名無しさん
2006/02/11(土) 23:32:42>GC管理下にあるオブジェクトへの参照をメンバとして持つオブジェクトのデストラクタを
> ガベージコレクタが呼び出すときには、それらの参照は既に無効です。
> これはつまり、 デストラクタからはメンバオブジェクトを参照できないことを意味しています。
> この規則は、 autoオブジェクトや DeleteExpression で削除されるオブジェクトには当てはまりません。
これは「autoオブジェクト」「DeleteExpression で削除されるオブジェクト」、
「それ以外(GC)」と使われ方によって、クラスのデストラクタ書き方を考えないとダメってことですか?
デストラクタからはメンバオブジェクトを参照できないって・・・。
0403デフォルトの名無しさん
2006/02/11(土) 23:33:380404デフォルトの名無しさん
2006/02/11(土) 23:39:16そりゃそういうルールにしないと循環参照のオブジェクトを殺せないからな。
とりあえずデストラクタでは常にメンバ変数は無効化されていると考えるのが妥当じゃないの
0405デフォルトの名無しさん
2006/02/11(土) 23:46:47クラスのデストラクタから、メンバオブジェクトのリソースを解放するようなコードを書いてはいけない、と。
0406デフォルトの名無しさん
2006/02/11(土) 23:48:18たとえば、DBを扱うクラスで、メンバにDBの接続を持っている場合、
デストラクタでclose()するなんてことは考えたらダメってことですか。
場所によってはautoで使いたいのですが、
そのクラス自体が別のクラスのメンバにいることがあるので
その場合はautoではないのです・・。
0407デフォルトの名無しさん
2006/02/11(土) 23:52:190408デフォルトの名無しさん
2006/02/11(土) 23:58:240409デフォルトの名無しさん
2006/02/12(日) 00:03:49オブジェクトの参照にアクセスできないだけだろ。
>>405
>たとえば、あるクラスのメンバオブジェクトで、リソースの解放などを行わなければならない場合は、
そのリソースを保持しているオブジェクト自身が解放すればいいだけだろ
0410デフォルトの名無しさん
2006/02/12(日) 00:16:30>デストラクタでclose()するなんてことは考えたらダメってことですか。
そのDBがDのオブジェクトで表現されていないなら、好きにcloseすればいい。
Dのオブジェクトで表現されている場合、ダメだ。
しかし、その場合、そのオブジェクトのデストラクタで大抵closeされるだろう。
ということで特に問題はないな。
0411406
2006/02/12(日) 00:35:14ハンドル(ID)やGC外のポインタならOKってことですね。
動的配列や連想配列もGC管理だと思うので、NGですよね。
どうもです。
0412デフォルトの名無しさん
2006/02/12(日) 00:49:23俺はVCを使っているんだがDクラスのメンバが見れなくて困ってる。
0413デフォルトの名無しさん
2006/02/16(木) 08:57:520414デフォルトの名無しさん
2006/02/16(木) 10:20:550415デフォルトの名無しさん
2006/02/16(木) 11:47:05どう変化したのがまったくわからないんだが・・・・・・
このchange logやっぱりだめぽ
0416デフォルトの名無しさん
2006/02/16(木) 11:53:45dmd source.d -run args...
が
dmd -run source.d args...
に変更されたってだけ。
0417デフォルトの名無しさん
2006/02/16(木) 23:59:320418デフォルトの名無しさん
2006/02/17(金) 08:33:07が呼ばれると思ったらvoid Teacher.command(Student)が呼ばれました。
これって正常なんですか?
int main()
{
Teacher teacher = new Teacher;
Student student = new Female;
teacher.command(student);
return 0;
}
class Teacher
{
void command(Student s);
void command(Female s);
}
class Student;
class Male : Student;
class Female : Student;
0419デフォルトの名無しさん
2006/02/17(金) 08:47:090420デフォルトの名無しさん
2006/02/17(金) 09:16:59javaではどうなんですか?
0421デフォルトの名無しさん
2006/02/17(金) 09:33:080422デフォルトの名無しさん
2006/02/17(金) 09:38:49これは確かにStudent型でもありますが。
Teacherはstudentの型に応じてcommandの内容変えたいのです。
0423デフォルトの名無しさん
2006/02/17(金) 09:44:15abstract void command(Teacher);
}
のくだりじゃ嫌か?
0424デフォルトの名無しさん
2006/02/17(金) 10:04:03class Rookie : Teacher;
class Expert : Teacher;
とかが現れて
class Student
{
abstract void command(Rookie);
abstract void command(Expert);
}
としたい場合、堂々巡りですね。
0425デフォルトの名無しさん
2006/02/17(金) 10:07:290426デフォルトの名無しさん
2006/02/17(金) 10:09:060427デフォルトの名無しさん
2006/02/17(金) 10:09:420428デフォルトの名無しさん
2006/02/17(金) 10:17:24void Teacher.command(Female) が呼ばれるらしいのですけど、
C++とかだとどうなんでしょうね。
0429デフォルトの名無しさん
2006/02/17(金) 10:25:17本当か?
javaでもC++でもStudent版が呼ばれるはずだが。
0430428
2006/02/17(金) 10:28:54ttp://www.techscore.com/tech/DesignPattern/Visitor.html
0431デフォルトの名無しさん
2006/02/17(金) 10:38:50public class main{
public static void main(String[] args){
Teacher t = new Teacher();
Student s = new Female();
t.command(s);
}
}
class Teacher{
public static void command(Student s){ System.out.println("student"); }
public static void command(Female s){ System.out.println("female"); }
}
class Student{
}
class Female extends Student{
}
0432デフォルトの名無しさん
2006/02/17(金) 10:42:43>>430
っていうか、そこにSuzukiHomeをHomeクラスへダウンキャストしてから突っ込んでも、
visit(SuzukiHome)が呼ばれるなんて一言も書かれて無いように見えるが。
0433デフォルトの名無しさん
2006/02/17(金) 10:44:52・・・この記事何やってるの?
0434428
2006/02/17(金) 10:53:50中のteacher.visit(this)ではRookieTeacher.visit(SuzukiHome)が
呼ばれないと意味がないように思うのですが。
間違ってます?
0435デフォルトの名無しさん
2006/02/17(金) 10:56:57public void accept(Teacher teacher){
teacher.visit(this);
}
teacher.visit(this);
visit(this);
this
お分かり?
0436デフォルトの名無しさん
2006/02/17(金) 10:57:24Teacherにvisit(TanakaHome)やvisit(SuzukiHome)を作り忘れている。
SuzukiHomeにタイプミスがあるし、一度も試して無いんだろうな。
0437428
2006/02/17(金) 11:06:41僕もそこは気が付きました。
けど、SuzukiHomeはHomeを継承しているから
RookieTeacher.visit(Home studentHome)でstudentHomeの実行時型から
判断してRookieTeacher.visit(SuzukiHome)をうまく呼んでくれるのが
標準なのかな思ったわけです。
つまり、Dのバグかな?と考えたのです。
0438デフォルトの名無しさん
2006/02/17(金) 11:09:49thisの型はそのクラスの型だから。
#継承元のメソッドを呼び出すにはcastする。
0439デフォルトの名無しさん
2006/02/17(金) 13:16:330440デフォルトの名無しさん
2006/02/17(金) 13:29:52C++は13年ぐらいかかったんでしたっけ?
Dなら足枷が無いぶんコンパクトに決まるように思えるけど。
0441デフォルトの名無しさん
2006/02/17(金) 15:48:14http://dsource.org/forums/viewtopic.php?t=1312&sid=9f81a9046761dd73ff6a298d67f697c4
Change dwt.internal.win32.wintypes.d line 1673 from:
Code:
{ BITS & 0xF0; BITS |= (val & 0x0F); }
to:
Code:
{ BITS &= 0xF0; BITS |= (val & 0x0F); }
そのうちコミットされると思うけど
0442デフォルトの名無しさん
2006/02/17(金) 16:18:570443デフォルトの名無しさん
2006/02/17(金) 17:20:26俺以外の誰かがDWTをLinuxで使いたいと思ったときに
コードが公開されれば使えるようになる
0444デフォルトの名無しさん
2006/02/17(金) 17:49:44ttp://www.digitalmars.com/d/phobos/std_recls.html
とだいぶ変わってるのか?
FileSearchは定義されてないとか出てくるんだが。
0445デフォルトの名無しさん
2006/02/17(金) 18:04:28たまにライブラリの方がこけてる場合がありますよ。
0446デフォルトの名無しさん
2006/02/17(金) 23:17:34dmdにマニュアルついているyo
0447デフォルトの名無しさん
2006/02/18(土) 01:24:48も古い罠。
0449デフォルトの名無しさん
2006/02/18(土) 04:50:13recls.d は DDOC 形式じゃないのでは?
0450デフォルトの名無しさん
2006/02/18(土) 09:31:04がでて開けない。
downloadしたzipファイルを展開してできるpluginsフォルダを
eclipseのpluginsフォルダにcopyしたのに。
なぜ?
0451デフォルトの名無しさん
2006/02/18(土) 11:01:11何でも自分の環境で動かなくなったから開発をやめたとか…
0452デフォルトの名無しさん
2006/02/18(土) 11:46:040453デフォルトの名無しさん
2006/02/18(土) 13:54:210454デフォルトの名無しさん
2006/02/18(土) 14:37:46#!を無視とか何に使うんだろ
0455デフォルトの名無しさん
2006/02/19(日) 11:40:14だとセグメンテーション違反で使えないね。
0456デフォルトの名無しさん
2006/02/19(日) 12:44:53と書いてあるけど仕様ではこれらは継承されるとのこと。
すると、下のBase.funcのような純粋仮想関数でも事前条件を書かないと
まずいのだろうか?
class Base
{
abstract int func();
}
class Derived
{
override int func()
in
{
...
}
body
{
...
}
}
「in 契約を持たない関数が継承階層の中にあると、 その関数をオーバー
ライドした関数の in 契約は何も効果を持たないことになります。」
と書いてあるけども。
0457デフォルトの名無しさん
2006/02/20(月) 21:07:36// i が 0 ならダメ
class A { int hoge(int i) { in { assert(i!=0); } body { return i; } }
// i が 0 ならダメ←(継承) || 条件なし
class B : A { int hoge(int i) { return i + 1; }
// i が 0 ならダメ←(継承) || 条件なし←(継承) || iが負の値だとダメ
class C : B { int hoge(int i) { in { assert(i>0); } body { return i; } }
というように、条件なしが継承されると、それ以後の派生では確かにinの意味がなくなるね。
abstractな場合は、確認した方が良さそうだけど、現時点では文法上、条件をつけることはできないかな。
0458デフォルトの名無しさん
2006/02/23(木) 11:20:57C++では無意味な別名のせいで、元の型を探し出すのに時間が取られることが多かったので。
Dでは型ごとのサイズが仕様で決まっているから、サイズ依存の部分を書き替えるためのtypedefは必要無いわけだ。
しばらくJavaを使っていたが、型の別名機能が無くても何の問題もなかった。
0459デフォルトの名無しさん
2006/02/23(木) 11:32:17C++だとstlなどのtemplateを使った物の扱いが面倒なのと長い名前空間から短い部分へのマップにtypedef使うからしょうがない。
本当に意味のない別名つけてるのはそのコード書いた奴殴ってでも修正させないとだめ。
0460デフォルトの名無しさん
2006/02/23(木) 13:36:28Hoge func1(){...}
void func2(Hoge hoge){...}
とやっとくと管理に貢献すると思う。値チェックが減らせるわけではなく、
単純にヒューマンエラーを減らすためのものに過ぎんけど。
元の型を探させないためにalias使うんじゃないのかなぁと思ってたけど違うの?
0461デフォルトの名無しさん
2006/02/23(木) 17:38:13aliasの廃止には賛成 (下に理由を書いてみた) 。
typedefは>>460のような使い方が出来るので判断を保留。
>>459
C++のことはよく分からんのだけど、
Templateは型名の部分をコンパイル時にプリプロセッサが
コード中で使われた型に合わせて書き換えてくれるのでは
なかったっけ? (typedefは使われているのかな?)
名前空間の問題は、型名のみで済むようusingすれば解消するのでは。
0462461
2006/02/23(木) 17:39:46aliasだと単に別名を定義するだけなので、
「int hoo = func1(); func2(hoo);」
のように書いてもコンパイラは撥ねてくれないはず。
ヒューマンエラー対策に使うとしたら、typedefの方かな。
ttp://www.kmonos.net/alang/d/declaration.html
> 元の型を探させないためにalias使う
元の型以前に、データ構造は把握しておきたいかもね。
元の型を調べて辿るのも、その方法の一つということでは。
0463デフォルトの名無しさん
2006/02/23(木) 17:40:19private{
import std.string;
import std.regexp;
}
alias std.string.find find;
alias std.string.split split;
0464461
2006/02/23(木) 17:41:09(C/C++の仕様に書かれていない)
gint16やGLfloatといった型を使えば、元の型とは無関係に
どの環境でコンパイルしても常にbit数が一定になるから、
これらの型を使用する限りはbit数を気にする必要は無いと。
(>>458の「サイズ依存」の話ね)
Dでは変数のbit数が仕様で決まっているため、
このようなプリミティブ型のデータ構造を保証するための
aliasは必要無い。
一方でクラス型はコードが一定である以上データ構造も一定だから、
そもそも環境依存を気にする必要は無い。
0465461
2006/02/23(木) 17:42:21(タイプ量を減らしたい, 型名を自分の美的感覚にあわせたい, etc...)
のみになるわけだが、
こうした目先の利点は、他者にとっての可読性を損ねてまでも
求める価値があるものなのだろうか、という話。
// ここに書いたところでaliasが廃止されるわけではないが (w
0466463
2006/02/23(木) 17:45:31}
alias test!(char[]) t;
int main(){
t=new t;
}
0467デフォルトの名無しさん
2006/02/23(木) 18:09:57つまり、構文短縮ですね。
0468デフォルトの名無しさん
2006/02/24(金) 00:05:35これを繰り重ねると見事にスパゲ(ry
0469デフォルトの名無しさん
2006/02/25(土) 20:24:48// recls を使っていることには特に意味はない
version = recls;
version (recls) {
import std.recls;
}
void main()
{
version (recls) {
// version 内で auto class を作ると落ちる。外なら動く。
Search search_list = new Search(".", "*",
RECLS_FLAG.RECLS_F_FILES);
}
/* ... */
version (recls) {
foreach(Entry entry; search_list) {
printf("%.*s\n", entry.Path());
}
}
}
なんで?
0470デフォルトの名無しさん
2006/02/25(土) 20:28:04auto Search search_list = new Search(".", "*",
こっち
0471デフォルトの名無しさん
2006/02/26(日) 01:24:49報告した方がよさそうですね。
0472デフォルトの名無しさん
2006/02/26(日) 09:24:25とりあえず問題再現の最小コードはこんな感じですかね。
どうやらversionのスコープの終了でautoが削除されているのが原因っぽい
void main(){
version(all){auto Object o=new Object;}
o.print();
}
0474471
2006/02/26(日) 10:57:42直にでるわけではないのか?
0475デフォルトの名無しさん
2006/02/26(日) 11:01:44投稿されてますよ。
0476デフォルトの名無しさん
2006/02/26(日) 11:02:30リストに出るのが遅れることがある。
俺はうっかり二重投稿したことあるorz
0478デフォルトの名無しさん
2006/02/26(日) 11:22:30DMD 0.148
New/Changed Features
* Removed MatchExpressions.
* foreach loops can now implicitly determine the types in the ForeachTypelist.
* IfStatements can now have an optional variable implicitly declared and assigned the value of the Expression.
* Removed bit basic type.
* Added bool basic type.
* Added BitArray.
* Added On Scope Statements.
0479デフォルトの名無しさん
2006/02/26(日) 11:28:41MatchExpressionが速攻で削除かw
迷走してるなー
0480デフォルトの名無しさん
2006/02/26(日) 11:36:27それが実装されたらBitArrayの価値なんて0だから
0481デフォルトの名無しさん
2006/02/26(日) 11:52:16やはり違和感があったから。
0482デフォルトの名無しさん
2006/02/26(日) 12:00:21* IfStatements can now have an optional variable implicitly declared and assigned the value of the Expression.
は今のところはできるけど将来はなくなる可能性が高いということ?
0483デフォルトの名無しさん
2006/02/26(日) 14:35:12ここにきて超基本的な組み込み型が変更かよ
個人的には今のboolの方が嬉しいが
bit1桁はあんまり使わないから代わりにBitArrayってことかぁ
まあ確かになー
on_scope_exit on_scope_failre on_scope_success の構文が異質な気がするが
例外処理がシンプルに書けるのかね
まだ俺には使う状況がよくわからんけども
とにかく大荒れですな
0484デフォルトの名無しさん
2006/02/26(日) 16:58:05alias bool bitがobject.dで定義されているから
コードそのものは殆ど変わらないのが救いだな
0485デフォルトの名無しさん
2006/02/26(日) 18:44:480486デフォルトの名無しさん
2006/02/26(日) 18:48:46ttp://www.digitalmars.com/d/exception-safe.html
ざっと読んだ感じでは、on_scope構文は、テクニックなしに例外安全なコードを書くための仕組みらしいが。
0487デフォルトの名無しさん
2006/02/26(日) 19:40:53悪くはないけど、処理が分かりにくくなりそうだなぁ…
0488デフォルトの名無しさん
2006/02/26(日) 20:14:10{
synchronized void f1() {...}
synchronized void f2() {...}
}
Test obj = new Test;
とした場合、
「obj.f1()があるスレッドで実行されていればobj.f2()は
他のスレッドで実行されることはできない。」
という理解で正しいでしょうか?
マルチスレッドは扱ったことがなくてjavaの解説文を参考にしたのですが。
0489デフォルトの名無しさん
2006/02/26(日) 21:57:30javaではそうだね。Dではどうなんだろ?
0490デフォルトの名無しさん
2006/02/26(日) 22:16:140491デフォルトの名無しさん
2006/02/26(日) 22:49:16import std.thread;
class Hoge {
synchronized void f1() { while(1) { printf("f1()\n"); /* 長い処理を仮定 */ } return; }
synchronized void f2() { printf("f2()\n"); return; }
}
class Test1 : Thread {
Hoge myHoge;
override int run() { for(int i=0;i<100000000;i++) { } // とりあえず適当に遅延
myHoge.f1(); return 0; }
}
class Test2 : Thread {
Hoge myHoge;
override int run() { while(1) { myHoge.f2(); } return 0;}
}
int main() {
Test1 t1 = new Test1();
Test2 t2 = new Test2();
t1.myHoge = t2.myHoge = new Hoge();
t2.start();
t1.start();
t1.wait(1000 * 10); // 10秒間待つ
return 0;
}
0492デフォルトの名無しさん
2006/02/26(日) 22:51:11f2() // Test1.run()から、f1()までの遅延時間
f2()
f2()
f1() // いったんf1()にはいると
f1()
f1()
f1()
f1()
...
f1()
f1() // f2は一切実行されていない
0493デフォルトの名無しさん
2006/02/26(日) 23:28:12ありがとうございます。
threadに関してはDMの説明が少ないので仕様が判りづらいですね。
0494デフォルトの名無しさん
2006/02/27(月) 04:54:10pauseがあるけどロックを持ったままスレッドが停止しちゃうしなあ。
synchronized (Expression) Statementの意味も全く判らないし。
詳しい方教えて下さい。
0495デフォルトの名無しさん
2006/02/27(月) 08:31:36waitは、指定秒数待ち?
std.Threadにないので、WindowsならSleep()、Linuxならnanosleep(2)でいいと思う。
0496デフォルトの名無しさん
2006/02/27(月) 08:35:580497デフォルトの名無しさん
2006/02/27(月) 17:21:04java.lang.Thread では wait なんて名前のメソッドは宣言されてないから(Object からの継承メソッドならあるけど)
0498デフォルトの名無しさん
2006/02/27(月) 18:08:07IDE使っていてスレッドインスタンスにwaitあるやんとか言ってはまったことある(w
0499デフォルトの名無しさん
2006/02/27(月) 18:33:10synchronizedの中でオーナーを放棄してpauseしたいということですか。
synchronizedの中でロック解除する方法はないようです。(あったら僕にも教えてください!!)
スレッドについての質問になってしまうのですが、
synchronizedから出てからpauseするのでは問題あるパターンってあります?
Dのstd.Threadは、Threadがpauseしているかをチェックする方法がないので、
そのあたりが関わってます?
0500デフォルトの名無しさん
2006/02/27(月) 19:22:10synchronized (Expression) Statement
たとえば、
synchronized (obj) { // このクリティカルセクションの間は、
obj.writeToFile(filename);
} // ほかのスレッドで、objを使えない
0501デフォルトの名無しさん
2006/02/28(火) 15:08:400502デフォルトの名無しさん
2006/02/28(火) 19:12:02配列なら.dupがありますけども。
構造体は値扱いなので=でできると思います。
0503デフォルトの名無しさん
2006/02/28(火) 19:38:36配列に習って、newobj = obj.dup;
とか。
GCあるから楽だとは思うけど。
0504デフォルトの名無しさん
2006/02/28(火) 20:57:10どうみても反則に近い気もするけど
Object copyObj(Object o){
return cast(Object)(cast(void*)o)[0..o.classinfo.init.length].dup.ptr;
}
0505デフォルトの名無しさん
2006/02/28(火) 21:47:190506504
2006/03/01(水) 10:19:35保守的なGCだからdupで複製した中身も確認する。
が、複製側のデストラクタが呼び出されないのと、
モニタ(synchronizedで使う奴)を共有してしまうという問題点がある。
上記二点の問題を解決してみた。
extern(C)Object _d_newclass(ClassInfo);
Object copyObj(Object o){
auto p = _d_newclass(o.classinfo);
auto osize = Object.classinfo.init.length;
auto csize = o.classinfo.init.length;
(cast(void*)p)[osize..csize] = (cast(void*)o)[osize..csize];
return p;
}
0507デフォルトの名無しさん
2006/03/02(木) 00:33:36なるほど。
メモリだけGCに確保させておいて、コンストラクタを飛ばして、
自前でメンバを(静的初期値でなく、コピー元の値で)初期化してやるのね。
0508デフォルトの名無しさん
2006/03/04(土) 15:35:33どちらが標準なのでしょうか?
0509デフォルトの名無しさん
2006/03/04(土) 15:50:330510デフォルトの名無しさん
2006/03/04(土) 16:39:180511デフォルトの名無しさん
2006/03/04(土) 17:24:04bitarray.dのmakeルールがなかったので入れました。
それでコンパイルは通って、unittestも通ったのですが、
実行すると_D6gcbits6GCBits3setFkZvでアクセス違反が発生して落ちます。
{
(cast(bit *)(data + 1))[i] = 1;
//data[1 + (i >> BITS_SHIFT)] |= (1 << (i & BITS_MASK));
}
↑このあたり。
これは、v0.148でbitがboolに変わったことと関係があるのでしょうか?
0512デフォルトの名無しさん
2006/03/04(土) 17:40:20bitだと通りませんよ。boolに変えれば通るかと。
敢えてphobosに入れてないってことは使わない方が無難な気がしますね。
0513511
2006/03/04(土) 17:44:37bitでもコンパイルは通っていましたが、実行時にアクセス違反で落ちていました。
どこかにaliasがあるとか?
結局、cast(bit *)の行をコメントアウトして、コメントアウトされている行を有効にして
コンパイルすると動くようにはなりました。
これでいいのは、よくわかりません。不安。
>>敢えてphobosに入れてないってことは使わない方が無難な気がしますね。
phobosは、毎回コンパイルできるように作られていないということでしょう?
makeファイルが更新されていないのでそんな気もしますが。
0514デフォルトの名無しさん
2006/03/04(土) 18:03:470515デフォルトの名無しさん
2006/03/04(土) 19:15:51入門サイトも糞もないと思うが。
DigitalMarsのサイト見て勉強しろ。
それができないのであれば、おまえにはまだDは早い。
N-88 BASICでもいじってあそんでなさい。
0516デフォルトの名無しさん
2006/03/04(土) 19:21:03D言語は出来るんですが、新しく入ってくる人の方を考えて・・・
0517デフォルトの名無しさん
2006/03/04(土) 19:29:35頑張って書いてください。
0518デフォルトの名無しさん
2006/03/04(土) 19:33:13つか>>1の本家和訳くらいで大体十分じゃね?
本当の入門者向けの言語じゃないのは明らかだし。
0519デフォルトの名無しさん
2006/03/04(土) 20:06:34>最初に学ぶプログラミング言語として。 Basic か Java が初心者には向いています。 D は、中級〜上級者プログラマが二番目に修得する言語として優れています。
本家でもこう書いてるしな
0520デフォルトの名無しさん
2006/03/04(土) 21:18:02もっともあれもC言語の理解が前提とはなってるけど。
0521デフォルトの名無しさん
2006/03/04(土) 21:34:58あれは古すぎるだろ
0522デフォルトの名無しさん
2006/03/04(土) 23:50:300523522
2006/03/04(土) 23:51:36の間違い。
0524デフォルトの名無しさん
2006/03/04(土) 23:56:38同意。
クラス型を処理するメソッド (あるいは関数) は
Object型を受け取るようにすれば書けるけれど、
プリミティブ型は暗黙のボクシングが必要になってパフォーマンスが落ちるよね。
だからプリミティブ型のみテンプレートを使い、
クラス型はObject型を受け取る関数で書くのが良いと思った。
(Java5.0のように型を制限できればなおいい)
0525デフォルトの名無しさん
2006/03/05(日) 00:22:130526デフォルトの名無しさん
2006/03/05(日) 12:19:02それを防ぐ方法が紹介されているけど、それを暗黙にやってくれるクラスを提
供するか言語レベルで実装して欲しい。
0527デフォルトの名無しさん
2006/03/05(日) 12:47:55初心者が使うような領域には、それ程バグは多くないと思う。
CやC++でプログラムの学習を始めるよりはDで始めた方がいい。
ただ入門者用にまとめた資料が少ないことと、中核の仕様まで
も頻繁に変更される可能性があることを考えると初心者にDは
合わないかもしれない。
0528デフォルトの名無しさん
2006/03/05(日) 13:08:20毎回コピーが発生されるって、どこの話し?
普通に追加する際に内部で確保したバッファのサイズに達するまでコピーは発生しないけど
0529デフォルトの名無しさん
2006/03/05(日) 14:01:350530526
2006/03/05(日) 14:04:06配列にデータを詰めるときに毎回リサイズして詰めていかず、大きくリサイズ
して詰め終わってから実質のサイズにリサイズし直すって奴です。
配列の~結合でバッファが不足したときにバッファを再確保する際の確保容量
を指定したいということです。
0531デフォルトの名無しさん
2006/03/05(日) 14:19:43Vector List等。
0532デフォルトの名無しさん
2006/03/05(日) 14:26:35言語レベルで?
ライブラリの不足は結構言われてるけど。
0533デフォルトの名無しさん
2006/03/05(日) 14:55:38ただライブラリがないのなら、Dの配列の機能を強化して欲しいってことですね。
せめてデータの追加は欲しい。
いちいち自前でリサイズしてからってのが使いづらい。
~はあくまで配列の結合でしかありませんから。
0534デフォルトの名無しさん
2006/03/05(日) 15:05:440535デフォルトの名無しさん
2006/03/05(日) 15:39:52~を使って配列にデータを追加するならBoxArrayを使うか
Data[] base;
Data newData;
Data[] temp = new Data[1];
temp[0] = newData;
base ~= temp;
のように値を配列にしてからでないといけないのでは?
0536デフォルトの名無しさん
2006/03/05(日) 15:47:36Data[] base;
Data newData;
base~=newData;
0537デフォルトの名無しさん
2006/03/05(日) 15:51:34越えなければ配列のコピーは起こりません。
つまり、リサイズ時にバッファを確保するサイズなりアルゴリズムなり
をカスタマイズできればいいことになるかと。
0538デフォルトの名無しさん
2006/03/06(月) 18:27:00uint resizeArray(uint now){
return cast(uint)(now*1.2+2);
}
…
Data[] base;
base.fpresize = &resizeArray;
……暗黙のテンプレート実体化まだー?
0539デフォルトの名無しさん
2006/03/06(月) 20:06:090540デフォルトの名無しさん
2006/03/07(火) 14:52:54o.print();
こんなコードを実行すると"Error: ぬるぽ"って表示されないかなー
0541デフォルトの名無しさん
2006/03/07(火) 16:27:32/.: : : : : : : .ヽ
R: : : :. : pq: :i}
|:.i} : : : :_{: :.レ′
ノr┴-<」: :j|
/:r仁ニ= ノ:.ノ|! _
/:/ = /: :/ }! |〕) ガッ
{;ハ__,イ: :f | /´
/ }rヘ ├--r─y/
/ r'‐-| ├-┴〆 _, 、_ '⌒ ☆
仁二ニ_‐-イ | | ∩`Д´)
| l i 厂  ̄ニニ¬ ノ ⊂ノ >>540
,ゝ、 \ \ __厂`ヽ (__ ̄) )
/ /\_i⌒ト、_ ノrr- } し'し′
└-' ̄. | |_二二._」」__ノ
"Error: ぬるぽ(__LINE__)"さらに行番号が出れば言うことなし
0542デフォルトの名無しさん
2006/03/08(水) 00:50:57一度大きなメモリを使うとずーと持ちっぱなしになるんだけど
ここいつ実装されそうなのか知っています?される予定がない?
0543デフォルトの名無しさん
2006/03/08(水) 09:14:20dmd0.149でキタ━━━━(゚∀゚)━━━━!!!!
0544デフォルトの名無しさん
2006/03/08(水) 09:18:05最近リファレンス読み返してみたら、また魅力的に思えてきた。
0545デフォルトの名無しさん
2006/03/08(水) 09:26:34暗黙のテンプレート関数実体化サポートされたのか。
うわ、いいかも。 D 言語。
0546デフォルトの名無しさん
2006/03/08(水) 09:28:420547デフォルトの名無しさん
2006/03/08(水) 09:45:11U fold(T array,U init,Fn fn){
//foreach(v;array) にするとdmdが落ちる つД`)
foreach(U v;array)init = fn(init,v);
return init;
}
}
template array(T){T[]array(T[]x...){return x.dup;}}
void main(){
int sum = fold(array!(int)(2,3,4),0,function int(int x,int y){return x+y;});
printf("%d\n",sum);
}
おお、なかなか良い感じに動くな
0548デフォルトの名無しさん
2006/03/08(水) 09:47:49Mar 7, 2006
New/Changed Features
* Changed on_scope_exit to scope(exit)
* Changed on_scope_success to scope(success)
* Changed on_scope_failure to scope(failure)
* Changed IfStatement to allow: (auto v = expression), and (type v = expression) forms.
* & | ^ &= |= ^= ! && || ?: are now only operators allowed on bools
* opSliceAssign now overloads assignment to a slice.
* Added std.c.fenv.
* Added limited support for implicit function template instantiation.
0549デフォルトの名無しさん
2006/03/08(水) 10:15:530550デフォルトの名無しさん
2006/03/08(水) 13:08:210551デフォルトの名無しさん
2006/03/08(水) 14:18:25これってまさか整数同士のビット演算が禁止されたってこと?
0552デフォルトの名無しさん
2006/03/08(水) 14:28:56bool同士の整数演算(+ - * / など)が禁止されたってことのように読めるが。
0553デフォルトの名無しさん
2006/03/08(水) 14:30:26>>552の解釈で正しい。(コンパイラに適当なソース食わせれば分る)
0554551
2006/03/08(水) 14:31:240555デフォルトの名無しさん
2006/03/08(水) 20:18:27条件
1.テンプレートが「関数テンプレート」であること。
2.特殊化してたらダメ
3.暗黙の推論に使用*されない*テンプレート引数はデフォルト値をもてる
関数テンプレートとは、
template Hoge(T) {
T Hoge(T t) { return -t; }
}
テンプレートのメンバが一つだけで、テンプレートと同じ名前で、関数である場合。
0556デフォルトの名無しさん
2006/03/08(水) 21:58:23template max(T){
T max(T[]a){
T max=a[0];
foreach(inout T val;a)
if(val > max)max = val;
return max;
}
}
int main(){
const int[]x=[2,3,4,5,6];
printf("%d\n",x.max());
return 0;
}
色々と組み方の幅が広がりそう
0557デフォルトの名無しさん
2006/03/09(木) 00:56:46template opAdd(T){
T opAdd(T a,T b){
T c=a.dup;
for(uint i=0;i<array!(uint)(c.length,b.length).max();i++)
if(b.length>i&&c.length>i)c[i]+=b[i];
else if(b.length>i)c~=b[i];
return c;
}
}
writef("%s\n",x.opAdd(x));
0558デフォルトの名無しさん
2006/03/09(木) 01:01:07template opAdd(T){
T opAdd(T a,T b){
T c=a.dup;
c.length=array!(uint)(c.length,b.length).max();
for(uint i=0;i<c.length;i++)
if(b.length>i)c[i]+=b[i];
return c;
}
}
0559デフォルトの名無しさん
2006/03/09(木) 01:19:43template opAdd(T){
T[] opAdd(T[] a, T[] b) {
if( a.length < b.length )
{auto t=a; a=b; b=t;} //swap
auto c = a.dup;
foreach(uint i,T bi; b) c[i]+=bi;
return c;
}
}
とか。でもさすがにx+xとは書けないのか…
0560デフォルトの名無しさん
2006/03/09(木) 01:26:420561デフォルトの名無しさん
2006/03/09(木) 01:48:27型推論でcの型を決めてください、というautoになるはず。
0562デフォルトの名無しさん
2006/03/09(木) 01:55:42> クラス参照に対する暗黙の型推論は、 たとえauto記憶
> クラスが使用されていたとしても、auto宣言にはなりません:
マニュアル和訳からの引用。
0563デフォルトの名無しさん
2006/03/09(木) 02:35:50その箇所は
auto x = ...; //暗黙型推論してねという意味。
auto Class x = new Class; //スコープ終わりに~this呼べという意味。似て非なるもの
auto x = new Class; //暗黙型推論してねという意味。「↑の意味ではないよ」
と言ってるだけ。>>561が正しい。
0564デフォルトの名無しさん
2006/03/09(木) 03:45:340565デフォルトの名無しさん
2006/03/09(木) 04:50:25ほんとだ、そうなった。
staticのほうはstaticになった。
auto int x = 5;とかやるとauto扱いになった。
クラスに限らずautoにはならんのか。
0566デフォルトの名無しさん
2006/03/09(木) 10:29:31新しいキーワード入れてくれないのかな。
0567デフォルトの名無しさん
2006/03/09(木) 12:39:17いいアイディアなんだけどな
0568デフォルトの名無しさん
2006/03/09(木) 12:57:55全部template関数で代用できる
private import std.c.stdlib;
template dup(T){T[]dup(T[]array){
T[]x;x~=array;
return x;
}}
template sort(T){T[]sort(T[]array){
static extern(C)int cmp(void*a,void*b){return typeid(T).compare(a,b);}
qsort(array.ptr,array.length,T.sizeof,&cmp);
return array;
}}
void main() {
char[]r="Hello World";
printf=r.dup().sort();
}
0569デフォルトの名無しさん
2006/03/09(木) 13:01:00C/C++のautoはほとんど使われてないから
次期C++で型推論の意味で使うようにするのは問題ないと思うけど、
DのautoはRAIIと型推論,両方の意味で頻繁に使いそう。
0570デフォルトの名無しさん
2006/03/09(木) 17:06:39複数の意味を同じワードに割り当てるのは、C/C++系の悪しき習慣。
別の言葉に割り当てるべきだろ。
constとか、staticにどれだけ悩まされたか。
0571デフォルトの名無しさん
2006/03/09(木) 17:34:54もしD言語が標準になったりしたらC++の書籍にかけた金が全部無駄
になるんですが。。。
0572デフォルトの名無しさん
2006/03/09(木) 17:37:07Dが標準になるにしても、いくら早くても5年以上は掛かるだろうし。
0573デフォルトの名無しさん
2006/03/09(木) 17:49:22まだ、広まるには10年くらいかかるから安心して
0574デフォルトの名無しさん
2006/03/09(木) 20:53:57言語仕様が確定して、標準化されるのはいったいいつになるやら
0575デフォルトの名無しさん
2006/03/09(木) 21:31:010576デフォルトの名無しさん
2006/03/09(木) 21:34:190577デフォルトの名無しさん
2006/03/09(木) 21:56:34C++をベターCとして使う人みたいな感覚かもしれないけど
お気楽オブジェクト生成〜な言語としてネイティブコード吐くjavaみたいな位置づけなんだよね。
できたらちゃんと標準として確率してほしいけど、1960年代生まれの言語たちのその後を見てると
まだまだ生まれたてのほやほやってかんじだしね。
0578デフォルトの名無しさん
2006/03/10(金) 01:09:160579デフォルトの名無しさん
2006/03/10(金) 01:10:290580デフォルトの名無しさん
2006/03/10(金) 01:19:16前に使ったとき、
不正アクセスで落ちてもどこで落ちたのかわかんなかったんだけど・・・どうしてる?
あと、デバッガは何使えば良かったんだろ
0581デフォルトの名無しさん
2006/03/10(金) 01:25:430582デフォルトの名無しさん
2006/03/10(金) 01:47:01perl、rubyマンドクセって時
>>580
インスタンスに存在しないmethodを呼び出すとセグフォする(この表現が正しいかは不明。インスタンスが存在しない場合でもキャストでも)
#デバッガはgdbで十分
0583デフォルトの名無しさん
2006/03/10(金) 21:33:150584デフォルトの名無しさん
2006/03/10(金) 21:52:11C++のヘッダーファイルにはインスタンスを置かないとかウザイ規則が多過ぎ。
0585デフォルトの名無しさん
2006/03/10(金) 22:05:420586デフォルトの名無しさん
2006/03/10(金) 22:26:14あるヘッダーファイルで他のヘッダーファイルで宣言された型を使う
とその型の実装ファイルが変更されただけで、そのヘッダーファイル
の実装ファイルもコンパイルし直さないといけない。
だから他のヘッダーで宣言された型を使う場合はポインタで扱う。
#include "******.hpp" // Tempが宣言されているヘッダーファイル
class Temp;
class X { Temp* member; }
わざわざ上のようにしないといけない。
0587デフォルトの名無しさん
2006/03/10(金) 22:28:54多重にincludeされると駄目っていう問題もうっとうしかったりする。
0588デフォルトの名無しさん
2006/03/10(金) 23:38:320589デフォルトの名無しさん
2006/03/10(金) 23:53:36>class Temp;
この行いらんだろ
>>587-588
・・・・
ゆとり世代?
0590デフォルトの名無しさん
2006/03/10(金) 23:55:32求めるのはパワーと安定感。
ウザさも安定してるからね。
0592デフォルトの名無しさん
2006/03/11(土) 00:10:20がいらないのでした。
0593デフォルトの名無しさん
2006/03/11(土) 01:05:40これはもしかして、もしかするかも知れんね
テンプレートが強力になるとライブラリもゴバっと増えるし
さっさと1.0にして普及に移って欲しい
0594デフォルトの名無しさん
2006/03/11(土) 03:24:370595デフォルトの名無しさん
2006/03/11(土) 09:23:55頭が古い団塊世代?
0596デフォルトの名無しさん
2006/03/11(土) 11:46:02配列を第一引数に持つ関数とtemplate関数の組み合わせはかなり強力だなー。
引数とインスタンス(配列)の構文が逆転してるみたいだけど,
この辺のコードはどの辺の仕様でそうなるの?
0597デフォルトの名無しさん
2006/03/11(土) 12:04:42getterとsetterの代わり
class Test{
char[] test="test";
}
が
class Test{
char[] _test="test";
char[] test(){
return _test;
}
void test(char[] val){
_test=val;
}
}
とできるって事。
0598デフォルトの名無しさん
2006/03/11(土) 12:39:15リファレンスには未だに書かれてないけど、昔から
配列.kansuu( ... )
は
kansuu( 配列, ... )
として処理されるようになってるぽ。
0599デフォルトの名無しさん
2006/03/11(土) 12:41:29method(anObject,arg1,arg2)にはならないの?
thisポインタの型でmangleしてるとかじゃないんだ。
0600デフォルトの名無しさん
2006/03/11(土) 13:12:21ただのシンタックスシュガーだったはず。
0601デフォルトの名無しさん
2006/03/11(土) 13:18:25あたりwwwwwww orz
0602デフォルトの名無しさん
2006/03/11(土) 14:22:440603デフォルトの名無しさん
2006/03/11(土) 14:49:350604デフォルトの名無しさん
2006/03/11(土) 15:31:260605デフォルトの名無しさん
2006/03/11(土) 21:29:16ありが�d
0606デフォルトの名無しさん
2006/03/11(土) 21:31:39戻り値が文字列じゃない時点で良くないよ
0607デフォルトの名無しさん
2006/03/11(土) 21:36:28conv(char[])Test
0608デフォルトの名無しさん
2006/03/12(日) 18:32:29考えの末、完全にプログラミングから手を引くみたい。
0609デフォルトの名無しさん
2006/03/12(日) 20:13:54/ 丶、
r'" _,,......_ \
l ,.ィr‐ァ-.、 `ヽ、 ヽ、 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〉" / /ト、 ミヽュ、ヽ、 i |
// l! /|l|ヾヽヽヽヽ `ヽ、 |< とんだ茶番ですね・・・・・・
レ! ! :l! lr=, `ヾ,rf==ミ ヽ \ ノ |
|!| l、 |' i::;;! l !: ;リ|ト、ヽ ヽ く \___________
|ハゞ;! `´, `~´ ;! | |l ヽ ヾミ;、
|l ト、ゝ、 ー ,,.ィ | |トl ヾ、 ヽ
ハ'; \ト` ーr‐ ",./''^!ノl l!\、!ヾヽ、
" ` ,レ((y'´ ,.イ' \
,rク´,.ィ~;V^ヽr'´ ,.==\
/ < "ノく: ミヽ ,:;'" ヽ
0610デフォルトの名無しさん
2006/03/12(日) 20:42:42何のキャラ?
0611デフォルトの名無しさん
2006/03/12(日) 21:31:56その程度のことに、新しい構文と予約語を導入するのは格好良くないな。
0612デフォルトの名無しさん
2006/03/12(日) 22:26:55関数の戻り値オーバーロードを追加して明示的に呼び出すときにも使うとか…
#でも普通にその関数を呼び出すときに衝突する罠
0613デフォルトの名無しさん
2006/03/12(日) 22:28:07厨独特のにおいがぷんぷんするよw
0614デフォルトの名無しさん
2006/03/15(水) 23:03:18http://anime.2ch.net/test/read.cgi/anime2/1100827414/
0615http://www.vector.co.jp/soft/win95/util/se072729.html
2006/03/18(土) 21:04:28もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
そういや64bitにネイティブ対応している2chブラウザてありましたっけ?
0616デフォルトの名無しさん
2006/03/18(土) 23:29:290617デフォルトの名無しさん
2006/03/19(日) 00:19:12ttp://www.tiobe.com/index.htm?tiobe_index
言語のランキングはこうらしいぞ
ただ人気のある言語が生き残る言語ではないだろうがな。
7年前の1位はVBなわけで、そいつらは今仕事ないわけで。
0618デフォルトの名無しさん
2006/03/19(日) 02:12:57Adaの↑↑↑↑↑すげえ、何があった一体!?
0619デフォルトの名無しさん
2006/03/19(日) 02:24:340620デフォルトの名無しさん
2006/03/19(日) 02:25:250621デフォルトの名無しさん
2006/03/19(日) 02:34:16大学教授の中には定年になるまで同じ授業を繰り返す人もいるんだよ。
0622デフォルトの名無しさん
2006/03/19(日) 11:53:11D想像以上にランキング上位じゃね?
Rubyより上って・・・
目指せ20以内
0623デフォルトの名無しさん
2006/03/19(日) 12:47:09むしろRubyは、欧米コミュニティのランキングに入っているだけで凄い気が。
さすがにHSPは無いみたいだな。
0624デフォルトの名無しさん
2006/03/19(日) 17:43:540625デフォルトの名無しさん
2006/03/19(日) 20:35:26だから人気はある。
ただ実用性がないだけ
0626デフォルトの名無しさん
2006/03/19(日) 20:59:48ライブラリは語るまでもないレベルだけど。
0627デフォルトの名無しさん
2006/03/19(日) 21:18:23Javaでいう
javaパッケージに相当するPhobosと
javaxパッケージに相当するDeimosといった感じで
標準ライブラリを増量していってもらいたい。
0628デフォルトの名無しさん
2006/03/19(日) 21:33:390629デフォルトの名無しさん
2006/03/19(日) 23:15:32CのABIをサポートしているメリットとしてはそこだな。
0630デフォルトの名無しさん
2006/03/19(日) 23:31:080631デフォルトの名無しさん
2006/03/20(月) 00:37:200632デフォルトの名無しさん
2006/03/20(月) 01:00:300633デフォルトの名無しさん
2006/03/20(月) 01:20:000634デフォルトの名無しさん
2006/03/20(月) 07:49:240635デフォルトの名無しさん
2006/03/20(月) 08:54:030636デフォルトの名無しさん
2006/03/20(月) 14:20:38New/Changed Features
* Implicit converstion of reals and imaginaries to complex is no longer allowed per Don Clugston's suggestion.
* Moved string.h functions from std.string to std.c.string.
* Now supports covariant interface method returns.
0637デフォルトの名無しさん
2006/03/20(月) 20:02:410638デフォルトの名無しさん
2006/03/21(火) 01:15:14DWTのコンパイルが通らなくなってるっぽいんだが・・。
0639デフォルトの名無しさん
2006/03/21(火) 15:05:530640デフォルトの名無しさん
2006/03/22(水) 10:04:270641デフォルトの名無しさん
2006/03/24(金) 10:22:21import std.math;
import std.stdio;
void main(char[][] args) {
writef("%f\n", PI);
printf("%f\n", PI);
}
を実行すると
3.141593
-88796093704934495491652487811874763193712640.000000
に、なるのはうちだけ?ちなみに linux
0642641
2006/03/24(金) 10:39:060643デフォルトの名無しさん
2006/03/26(日) 16:10:31http://www.famitsu.com/game/news/2006/03/26/103,1143302781,50589,0,0.html
0644デフォルトの名無しさん
2006/03/26(日) 16:34:290645デフォルトの名無しさん
2006/03/26(日) 16:59:440646デフォルトの名無しさん
2006/03/26(日) 17:27:540647デフォルトの名無しさん
2006/03/26(日) 18:25:11すべてをC#でって事はないだろうけどC#便利
0648デフォルトの名無しさん
2006/03/26(日) 18:54:07もっとがんばって宣伝しなよ
0649デフォルトの名無しさん
2006/03/26(日) 19:00:35そのバカなコードは当然直すつもりだが、
アサーションに引っかかったことは本家に報告すべきなんかな?
↓再現コード
template Foo()
{ static this(){} }
void main()
{ mixin Foo; }
出力:
Assertion failure: 'ad' on line 730 in file 'func.c'
abnormal program termination
0650デフォルトの名無しさん
2006/03/26(日) 22:02:38コンパイラの正常動作なんで、内部エラーとかassertionが出たら
本家に報告すべき。れっつごー。
0651デフォルトの名無しさん
2006/03/28(火) 06:17:54と書くであろうところを
import string;
と書いてあるソースを見かけます。
下のままではコンパイルを通らないですが、上のように直すと通ります。
これはどういうことなんでしょうか?
0652デフォルトの名無しさん
2006/03/28(火) 08:51:28現在のDMDでは上で書くことになってるからです.
0653デフォルトの名無しさん
2006/03/28(火) 10:55:01import string; // 古い
import std.string; // 現在
0654デフォルトの名無しさん
2006/03/28(火) 21:18:17D言語の62%は明太子で出来ています。
D言語の21%は毒電波で出来ています。
D言語の6%は知恵で出来ています。
D言語の4%は華麗さで出来ています。
D言語の3%は勢いで出来ています。
D言語の1%は成功の鍵で出来ています。
D言語の1%は欲望で出来ています。
D言語の1%は大人の都合で出来ています。
D言語の1%は白い何かで出来ています。
0655デフォルトの名無しさん
2006/03/28(火) 21:25:080656デフォルトの名無しさん
2006/03/28(火) 22:46:360657652
2006/03/29(水) 01:12:03訂正ども.
0658デフォルトの名無しさん
2006/03/31(金) 00:04:52この企画は…構造自体が不幸を孕んでいたのだ。
戦犯はいない。
理解できない、根源から違った存在がいただけだ。
誰にとっても。
本当なら決して出会うことのなかった、才能も、経験も、熱意も、人脈も、
何もかも違う人々に関わってしまった事自体がお互いに不幸だった。
つまり…関わった時点で無残な結末が予定されていたのだ。
今はもう…その不幸を呪い、やがて忘れらる時を待つしかない。
0659デフォルトの名無しさん
2006/03/31(金) 00:07:262chに帰れ
0660デフォルトの名無しさん
2006/03/31(金) 00:14:12今のこの盛り下がりは悲しいもんだな
0661デフォルトの名無しさん
2006/03/31(金) 00:20:05IGPXのことか?
0662デフォルトの名無しさん
2006/03/31(金) 01:15:35この盛り下がりは
いつまでたっても状況が変わらないことに飽きてしまった
というのが実際のところだろう
0663デフォルトの名無しさん
2006/03/32(土) 04:03:390664デフォルトの名無しさん
2006/03/32(土) 04:04:200665デフォルトの名無しさん
2006/03/32(土) 04:20:17Javaなら標準で強力だし、MS製品ならMS自家製ActiveXが強力。
言語仕様はこれでいく、もう変わらないとならないとDも拡充させられないのかも。
0666デフォルトの名無しさん
2006/03/32(土) 06:21:01仕様が固まらないと
ライブラリも作れないしね
0667デフォルトの名無しさん
2006/03/32(土) 06:32:32つ extern(C++)の対応
0668デフォルトの名無しさん
2006/03/32(土) 07:53:160669デフォルトの名無しさん
2006/03/32(土) 08:16:58そんな対応するの!?
0670デフォルトの名無しさん
2006/03/32(土) 10:52:43対応しない
0671デフォルトの名無しさん
2006/03/32(土) 11:16:00そんな環境依存なもの、個別にやってたらきりが無いだろ。
0672デフォルトの名無しさん
2006/03/32(土) 11:28:08周りの声に惑わされるな。お前ならやれる。
0673デフォルトの名無しさん
2006/03/32(土) 11:32:360674デフォルトの名無しさん
2006/03/32(土) 11:38:36やる気があるだけでも評価した。
0675デフォルトの名無しさん
2006/03/32(土) 14:00:190676デフォルトの名無しさん
2006/03/32(土) 14:01:260677デフォルトの名無しさん
2006/03/32(土) 14:02:000678デフォルトの名無しさん
2006/03/32(土) 14:07:080679デフォルトの名無しさん
2006/03/32(土) 14:18:330680デフォルトの名無しさん
2006/03/32(土) 14:20:380681デフォルトの名無しさん
2006/03/32(土) 16:15:090682デフォルトの名無しさん
2006/03/32(土) 17:15:470683デフォルトの名無しさん
2006/04/02(日) 01:49:540684デフォルトの名無しさん
2006/04/02(日) 05:24:12std.gc.disable()だったような。
0685デフォルトの名無しさん
2006/04/03(月) 17:56:39rubyより下になりしたよ。
0686デフォルトの名無しさん
2006/04/03(月) 18:29:14Apr 2, 2006
New/Changed Features
* Changed the hash type from uint to hash_t. This will make 64 bit implementations better.
0687デフォルトの名無しさん
2006/04/03(月) 19:24:55http://www.digitalmars.com/drn-bin/wwwnews?digitalmars.D/35845
http://www.digitalmars.com/drn-bin/wwwnews?digitalmars.D/36013
連想配列壊れるバグがひとつ直ったぽいのでこれは嬉しい
0688デフォルトの名無しさん
2006/04/04(火) 08:55:100689デフォルトの名無しさん
2006/04/04(火) 08:56:140690デフォルトの名無しさん
2006/04/04(火) 09:14:56なにそれ?
0691デフォルトの名無しさん
2006/04/04(火) 09:39:06http://dsource.org/projects/poseidon
0692デフォルトの名無しさん
2006/04/04(火) 11:20:200693デフォルトの名無しさん
2006/04/04(火) 12:25:520.12は大丈夫だったのに。
0694デフォルトの名無しさん
2006/04/04(火) 14:46:05進化したんだか退化したんだか。
0695デフォルトの名無しさん
2006/04/04(火) 23:56:41それよりmakeがdに対応してくれないかなぁ。
毎回.SUFFIXESを書くのが面倒だ。
0696デフォルトの名無しさん
2006/04/08(土) 11:12:130697デフォルトの名無しさん
2006/04/08(土) 12:34:370698デフォルトの名無しさん
2006/04/08(土) 14:05:360699デフォルトの名無しさん
2006/04/08(土) 14:24:17アセンブラは大丈夫です
0700デフォルトの名無しさん
2006/04/08(土) 14:28:02ぶっちゃけ、C言語の経験もないようじゃ勉強のしようがないんじゃかな・・・
ここにいるひとはみんなC++やjavaの経験あると思うし
とりあえずC言語の知識は絶対に無駄にならないので学んでおくといい
0701デフォルトの名無しさん
2006/04/08(土) 14:50:47問題はゼロからの入門ができるDサイトが無いことだが…。
0702デフォルトの名無しさん
2006/04/08(土) 14:53:570703デフォルトの名無しさん
2006/04/08(土) 14:56:500704デフォルトの名無しさん
2006/04/08(土) 15:00:00Javaを最初にやるのも悪くは無いな。
0705デフォルトの名無しさん
2006/04/08(土) 16:21:16javaからやってみます
初心者でもできるD言語の本とかないでしょうか?
0706デフォルトの名無しさん
2006/04/08(土) 16:46:06D言語パーフェクトガイド
ttp://www.gihyo.co.jp/books/4-7741-2208-4
一応言っとくと、別にパーフェクトではない
0707デフォルトの名無しさん
2006/04/08(土) 18:26:09文法が汚いのが嫌なら PASCAL もいいかも。
コンパイラの教科書読んですぐ D も愉快かも。
0708デフォルトの名無しさん
2006/04/08(土) 20:26:57D v1.0と同時に本書いて印税生活です。
0709デフォルトの名無しさん
2006/04/08(土) 21:32:54もし本当にできるならやって、D言語に貢献してほしい
0710デフォルトの名無しさん
2006/04/08(土) 21:58:01流石だ。お前らならできる
0711デフォルトの名無しさん
2006/04/08(土) 21:59:240712デフォルトの名無しさん
2006/04/08(土) 22:16:34ハードディスクの肥やしになりそうだ。
0713デフォルトの名無しさん
2006/04/08(土) 23:01:11公開キボン
マジメな話、6割できてるならwikiとかに置いとけば誰かメンテしてくれるのでは
0714デフォルトの名無しさん
2006/04/09(日) 00:52:37言語自体の話は偉大な先人たちのサイトがあるし、C++に比べても簡単な言語だから、
今の状態でもそれなりに大丈夫。
本家サイトの日本語訳サイトもあるしね。
むしろ、どうやってデバッグしたらいいかとか、Makefileをどのように書くかとか
そのへんのまとまった情報があれば、初心者にもとっつきやすくなると思う。
ちゃんと使える統合開発環境がない今、D言語をやってみたいと思う人にとって
そこが一番のネックなのでは?
0715デフォルトの名無しさん
2006/04/09(日) 01:50:27環境構築ってパス通すだけじゃん…
0716デフォルトの名無しさん
2006/04/09(日) 01:59:13コード断片の蓄積だろうな。
なんのサンプルを探すにしても
他言語(Cとか)のコードを訳すことになる
現状から、コードサンプルにD言語が
使われるようになる時代へ進むことが
できればよいね。
0717デフォルトの名無しさん
2006/04/09(日) 02:00:180718デフォルトの名無しさん
2006/04/09(日) 02:13:17漏れも716に一票。
デバッグやMakefileなんてD限定の知識ちゃうし。
D言語で一番困る事は、少し前のコードが簡単にコンパイル不能になること。
こまめに変更点読んでないと追従できないのは初心者にはつらい。
0719デフォルトの名無しさん
2006/04/09(日) 02:34:120720デフォルトの名無しさん
2006/04/09(日) 02:35:280721デフォルトの名無しさん
2006/04/09(日) 02:39:370722デフォルトの名無しさん
2006/04/09(日) 02:47:46SQLとかも未だに92が業界基準だからなぁ
0723デフォルトの名無しさん
2006/04/09(日) 02:50:52統合開発環境って……
お前のような低能はおとなしくVBでも使ってろ
0724デフォルトの名無しさん
2006/04/09(日) 02:52:230725デフォルトの名無しさん
2006/04/09(日) 03:06:41競合相手の数が違うので、
比較できる話にはならない。
0726デフォルトの名無しさん
2006/04/09(日) 03:07:15と釣ってみるてすつ
0727デフォルトの名無しさん
2006/04/09(日) 03:10:51めずらしくもりあがってるなー
0728デフォルトの名無しさん
2006/04/09(日) 03:11:36誰もANSIなんて言ってない
0729デフォルトの名無しさん
2006/04/09(日) 03:47:44システム毎に独自にCコンパイラを積んでて
実用で使われててもコンパイラ毎に互換性がなくて
後から標準化が策定されたという経緯を説明してるのでは。
0730デフォルトの名無しさん
2006/04/09(日) 04:03:21728はお馬鹿チャンなので勘弁してあげてください
0731デフォルトの名無しさん
2006/04/09(日) 04:05:320732デフォルトの名無しさん
2006/04/09(日) 04:18:320733デフォルトの名無しさん
2006/04/09(日) 04:29:09700 あたりからまとめ。
1. IDEがないと環境設定とデバッグとMakeが困る。
2. サンプルコードの蓄積が大事。
3. v1.0と同時に本書いて印税生活。
4. >>699-709流石だ。お前らならできる。
5. やっぱJava さいこー。
0734デフォルトの名無しさん
2006/04/09(日) 04:43:331. VBをどうぞ。
2. 大事だな。
3. 普通に働いた方がきっと儲かる。
4. 天才!お前ならできる。
5. C#の方が近くないか?
0735デフォルトの名無しさん
2006/04/09(日) 07:11:310736デフォルトの名無しさん
2006/04/09(日) 07:22:10当たり前だ。C++の開発に掛かった人手、時間、議論の多さを考えれば当然。
D言語なぞ、好き勝手に拡張しているだけじゃないか。
0737デフォルトの名無しさん
2006/04/09(日) 07:24:250738デフォルトの名無しさん
2006/04/09(日) 10:00:59最も駄目で最下位の言語ということにしておこう。
C#やJavaやC++はあまりにも上位過ぎて恐れ多くて使う気になれない
駄目人間の私にはDがぴったりだ
0739デフォルトの名無しさん
2006/04/09(日) 10:22:40方向性が定まりきっているのかと思ったらそうでもないからなあ。
整理されたC++を「D」、その上を目指すのを「D++」と分けてほしい。
そうすればみんなDに手を出しやすいと思うよ
0740デフォルトの名無しさん
2006/04/09(日) 10:30:38金儲けしなきゃいけない事情とかで、言語仕様を規格団体に預けられる状態に至っていない
0741デフォルトの名無しさん
2006/04/09(日) 13:12:59そういうこと
0742デフォルトの名無しさん
2006/04/09(日) 13:18:140743デフォルトの名無しさん
2006/04/09(日) 13:26:410744デフォルトの名無しさん
2006/04/09(日) 13:31:20Javaのネイティブ版って事にしとけばいいんじゃない?
複数の目標を追うのはやっぱ厳しいよ。
言語に関する部分はSunに研究してもらってその成果をDのネイティブコンパイラにフィードバックすればいいじゃん。
どの道ライブラリがそろってきてあれこれ継承しているうちにJava並に重くなるから。
0745デフォルトの名無しさん
2006/04/09(日) 13:34:500746デフォルトの名無しさん
2006/04/09(日) 13:35:50それをネイティブな英語で言えたら考えてやってもいいよ。
0747デフォルトの名無しさん
2006/04/09(日) 13:38:07D is Ass.
0748デフォルトの名無しさん
2006/04/09(日) 13:39:130749デフォルトの名無しさん
2006/04/09(日) 14:00:470750デフォルトの名無しさん
2006/04/09(日) 14:17:51gcjと被る
0751デフォルトの名無しさん
2006/04/09(日) 14:35:100752デフォルトの名無しさん
2006/04/09(日) 14:40:18D>C#>Java
D>C++
D>ECMAScript/Ruby
Haskell>>>>>>>>>>>>>>>>>>>>>D
0753デフォルトの名無しさん
2006/04/09(日) 14:41:10つ Java < 整理されたC++
0754デフォルトの名無しさん
2006/04/09(日) 14:47:080755デフォルトの名無しさん
2006/04/09(日) 14:49:12つまりJavaはC++よりも絶対値の大きい負数ですね。
0756デフォルトの名無しさん
2006/04/09(日) 14:50:540757デフォルトの名無しさん
2006/04/09(日) 15:07:170758デフォルトの名無しさん
2006/04/09(日) 15:28:27Apr 7, 2006
New/Changed Features
* Changed parameter types for std.date.MakeDate and std.date.MakeTime so they won't overflow.
* Changed arraycat per suggestion D.announce/3400 .
* Added -nofloat compiler switch to suppress generation of __fltused reference by library code (Windows only).
* dmd for Linux now adds --gc-sections switch to the link step to enable smart linking.
* Nested functions now are placed in their own distinct code sections to facilitate smart linking.
0759デフォルトの名無しさん
2006/04/09(日) 15:52:340760デフォルトの名無しさん
2006/04/09(日) 17:07:320761デフォルトの名無しさん
2006/04/09(日) 17:29:35あるモジュール(B)でprivate importしたモジュール(A)にある宣言の一部をそのモジュールの外に伝播させる…
つまり、そのモジュール(B)をimportしたモジュール(C)に公開するような方法ってありませんか?
module A;
typedef void* Hoge;
module B;
private import A;
module C;
import B;
// ここでHogeがimportされて欲しい。
今、LuaをDからObjectiveに使えるようにしようと試みているのですが、
どうしてもコールバックの関係で一部の宣言を見えるようにする必要が出ていまして、
しかしAの全体をimportしてしまうのはちょっとな、という状況です。
再定義やalias Hoge Hoge;では競合していると怒られてしまいました。
Aの必要な部分だけ別のモジュールに追い出すしかないですかね…
0762デフォルトの名無しさん
2006/04/09(日) 18:09:29module B;
private import A;
alias A.Hoge Hoge;
0763デフォルトの名無しさん
2006/04/09(日) 18:16:34"scope"を置換する
0764デフォルトの名無しさん
2006/04/09(日) 18:34:200765デフォルトの名無しさん
2006/04/09(日) 19:01:180.149では大丈夫。
0766デフォルトの名無しさん
2006/04/09(日) 19:13:03なるほど、ありがとうございます。
aliasを貼りなおすにはモジュールを明示してやればよかったのですね。
しかし、761のコードではConflictは再現しませんねorz
原因の切り分けを間違えておりました。申し訳ありませんが質問を訂正させてください。
競合のエラーが出るのはさらにもう一つモジュールがあって、
それとBが相互にimportしている場合でした。
module A; typedef void* Hoge;
module B1; private import A, B2; Hoge hoge; // B1内でHogeを使用
module B2; private import A, B1; alias A.Hoge Hoge; // B2にHogeを取り込み
module C; import B2;
また、761の例でCからAをimportした場合にも同じ状況になりますね。
A.d(1): typedef A.Hoge conflicts with B2.Hoge at B2.d(1)
となるとB1でHogeを使用するときにモジュール名を明示してやる必要があると…
名前変えてalias貼ったほうが早いですか…
0767デフォルトの名無しさん
2006/04/09(日) 19:48:33ああ、今試したらdwt自体のコンパイルがダメだった。
作ってあるlibを使う分にはokだった。
TVectorがエラーになっているけど、templateかmoduleが何か変わった?
0768デフォルトの名無しさん
2006/04/09(日) 22:11:291,dmd古いのにしてlibのコンパイルを通す。
2,dmd新しくする。
3,scopeを適当な名前と置き換える
で、イケるって事かな。
0769デフォルトの名無しさん
2006/04/09(日) 23:57:48俺の場合は、
1. コンパイルが通らなかったのでscopeを_scopeへ置き換えてコンパイルした(0.148か9あたり?)
2. dmdを新しくした(v0.151)
3. 普通に使えていた
ただ、テンプレートの扱いが変わっていたりするなら危なかったりする?
どう変わったのか分からないですが、今のバージョンでコンパイルできるように直したほうがよさげ。
少しの修正なら。
こんなことが多発するから、開発停止するライブラリプロジェクトが多いのかな。
0770デフォルトの名無しさん
2006/04/10(月) 01:05:53Walterも考えを改めるのかのう
0771デフォルトの名無しさん
2006/04/10(月) 01:21:50日本と同じで嗜好は好きだが期待してねぇって人ばっかかと思ってた
0772デフォルトの名無しさん
2006/04/10(月) 02:02:32C#が俺を呼んでいる
0773デフォルトの名無しさん
2006/04/10(月) 02:15:23まぁそこまで行かなくても、C++でもJavaでもなく、
D言語だからこそ簡単に実装できる、って処理が
無いからなぁ。
寧ろ苦労の方が多いんじゃ意味無いし。
0774デフォルトの名無しさん
2006/04/10(月) 07:51:44やばいとこついてる
0775デフォルトの名無しさん
2006/04/10(月) 10:11:360776デフォルトの名無しさん
2006/04/10(月) 13:55:43とりあえず、自分自身のC++への不満を書いてみるよ。
クラス型変数がデフォルトで (参照ではなく) 値であり
スタックに置かれるため、オブジェクトを関数内で生成して
返す場合などに、オブジェクトがコピーされる。
そのためいちいちコピーコンストラクタと代入演算子を書く必要がある。
// 他の人がどういう使い方をするか分からないので、
// 使われないかもしれない関数を書く必要があると。
リソースを管理するクラス等、コピー不可能なオブジェクトは
ヒープに作成してポインタ返しすることになる。
値を返す場合とポインタを返す場合が混在するので、
どうもコードがすっきりしない。
ガベージコレクションが無いので、Exceptional C++に書いてあるように
例外安全にするための努力が多く必要になる。
(可能か不可能かの問題ではなく、目的の処理以外に手間がかかる)
一番の不満は、このあたりかな。
(慣れで無意識に回避してはいるけど、出来ればこういう手間は省きたい)
最後に、JavaだとネイティブAPIを使えない (JNIに隔離されている) し、
C#もJavaも速度の問題があるので、C++の代わりにはならないかと。
0777デフォルトの名無しさん
2006/04/10(月) 14:05:59Dでどうなっているのか知らないで書くのだけど、
後置インクリメント (or デクリメント) は
前置ので実装するのが定石だから、
const ClassName operator ++(int ignored) {
ClassName temp(*this);
++(*this);
return temp;
}
↑こういうコードは自動生成してもらいたい。
(前置形式のみの定義で済ませたい)
0778デフォルトの名無しさん
2006/04/10(月) 16:36:290779デフォルトの名無しさん
2006/04/10(月) 17:08:02Dにはプリインクリメントの演算子のオーバーロードは存在しない。
0780777
2006/04/10(月) 17:25:21通りすがりに見て、面白そうな話をしていたので、
ついレスしてしまった。
規格が固まったらすぐにDを覚えようと思っているので、
勘弁しておくれ。
>>779
レスさんくす。
後置のみだと常に返り値の一時オブジェクトを
生成することになって気軽に使えない気がするけど、
Dでは書式は後置で効果は前置、というのが普通なのかな?
少し自分で調べてみます。
0781デフォルトの名無しさん
2006/04/10(月) 17:35:09Dでは++hogeは(hoge+=1)と同値。
0782デフォルトの名無しさん
2006/04/10(月) 17:35:58++xってぶっちゃけ(x+=1)と意味的に一緒だよね。
だから前置インクリメントは暗黙的に(x+=1)として扱うよ。
という方式(ついでに --xは(x-=1)として扱う)。
そういうわけでDでは+=の演算子を定義すれば自動で前置も定義したことになる。
なので前置の演算子はオーバーロード出来ない。
0783デフォルトの名無しさん
2006/04/10(月) 17:38:44>780
>後置のみだと常に返り値の一時オブジェクトを
>生成することになって気軽に使えない気がするけど、
>Dでは書式は後置で効果は前置、というのが普通なのかな?
まるで見当違い。
0784デフォルトの名無しさん
2006/04/10(月) 18:01:1520点
0785デフォルトの名無しさん
2006/04/10(月) 18:31:02ま、文句はないんだけど、イテレータを作るときに、
iter += 1;
とかできてしまうのが気持ち悪い。
0786デフォルトの名無しさん
2006/04/10(月) 18:42:150787デフォルトの名無しさん
2006/04/10(月) 18:44:510788デフォルトの名無しさん
2006/04/10(月) 18:58:33いわゆるSTLのイテレータしか前提にないの?
0789デフォルトの名無しさん
2006/04/10(月) 19:07:52前置の記述ができないのではなく。演算子のオーバーロードの扱いが += 1だというはなし。
0790786
2006/04/10(月) 19:11:03あーそういう前提を持って書いてたな。俺
別にSTLと完全に同じインターフェイスにしなくても問題ないのか。
そういうことも考えると>>785みたいなのは確かに少し嫌な感じだなぁ。
+=が可能だとそのイテレータがランダムアクセスできると勘違いしそうだし。
0791777=780
2006/04/10(月) 20:24:48なるほど、分かりやすいです。
>>784
コメントについてであればいいのですが、
コードについての話であれば
どのあたりがまずいのか指摘していただけると助かります。
(微妙にスレ違い気味ではありますが…)
0792デフォルトの名無しさん
2006/04/10(月) 21:35:48{
int matrix[10][10];
for (int i = 0; i < 10; i++)
matrix[i][] = i;
}
を DMD v0.151 でコンパイルすると
Internal error: ../ztc/type.c 308
0.151 より前のDMD/GDCだとコンパイルできる。
0793デフォルトの名無しさん
2006/04/10(月) 22:28:58なんかアレだなぁ・・・・・
痛々しい。
あえて釣られるのも面白いけど、なんか読んでて痛々しい。
0794デフォルトの名無しさん
2006/04/10(月) 22:49:00どこがどう頓珍漢なのか指摘してやれば面白いと思うのだが、
内容を書かずにいると、どちらが頓珍漢なのか分からない。
使いながら覚えたのではない人の教養を、見せてみれ。
0795デフォルトの名無しさん
2006/04/10(月) 22:57:150796デフォルトの名無しさん
2006/04/11(火) 15:05:050.153 正式リリース。
そして >792 の内部エラーもなおってた。
0797760
2006/04/12(水) 02:05:451.scopeを置換する。
これは既出。
2.「このステートメントは実行されない」というウォーニングを修正する。
「テンプレートが解決できない」というエラーメッセージの方を注目してしまいがちだが、
実はこれは偽者で、その上の「このステートメントは実行されない」というウォーニングを
修正すれば消える。
具体的には、return nullとかをコメントアウトする。
3.リリースビルドの-inlineを取り除く。
インライン展開するようにすると、エラーがいっぱい出る。
インライン展開ありでビルドできれば完璧なんだが、俺の力じゃちょっと無理そう。
0798769
2006/04/12(水) 16:51:51エラーが原因でテンプレート云々出ることは知っていたけど、
警告が原因ででるとは知らなかった・・。というか、最近そうなった?
とりあえず、socpeを置換して、コンパイルオプション「-w」を削ったら、-inlineはついたままでいけた。
1. さまざまなscopeを_scopeへ置換
2. make-dwt-lib.batのbuildについていている「-w」引数を削る
>>dmd v0.153
0799760
2006/04/12(水) 20:33:250800デフォルトの名無しさん
2006/04/13(木) 03:26:47Apr 11, 2006
New/Changed Features
* Numeric suffix 'l' now deprecated, use 'L' instead.
* Floating point suffix 'I' now deprecated, use 'i' instead.
Bugs Fixed
* Removed --gc_sections, it causes exception handling to fail.
0801デフォルトの名無しさん
2006/04/13(木) 17:37:140802デフォルトの名無しさん
2006/04/13(木) 20:08:16I l 1 とか O 0 の区別がしやすいフォント使うはずだが
0803デフォルトの名無しさん
2006/04/13(木) 20:26:190804デフォルトの名無しさん
2006/04/13(木) 22:16:36もちろん崩れないのもあるが
0805デフォルトの名無しさん
2006/04/14(金) 17:56:060806デフォルトの名無しさん
2006/04/14(金) 18:12:45配列は参照渡しなので仕様です。
0807デフォルトの名無しさん
2006/04/14(金) 18:38:22つ.dup
0808デフォルトの名無しさん
2006/04/14(金) 19:29:51ありがと、dupで解決した。
0809デフォルトの名無しさん
2006/04/15(土) 13:21:29それと他の所がエラーになってると釣られてテンプレートもエラーになる件に付いて
0810デフォルトの名無しさん
2006/04/15(土) 15:01:08軽視されて後回しになっているんじゃないかなと邪推してみる。
0811デフォルトの名無しさん
2006/04/16(日) 22:31:18gdcの方も一緒ですか?使った方教えてください。
0812デフォルトの名無しさん
2006/04/17(月) 00:23:21-L--strip-all
0813デフォルトの名無しさん
2006/04/18(火) 20:56:25日本語入力すると落ちるのは直ったっぽい。
www.dsource.org が内部サーバーエラーになってて辿れんのでリンク針
ttp://svn.dsource.org/projects/poseidon/downloads/bin/win32/poseidon_v0.21-bin.rar
セットアップ版
ttp://svn.dsource.org/projects/poseidon/downloads/bin/win32/setup-v0.21.exe
0814デフォルトの名無しさん
2006/04/18(火) 21:55:530815デフォルトの名無しさん
2006/04/18(火) 23:00:24ttp://dstress.kuehne.cn/www/dstress.html
からGDC-0.18.1ってのにリンクが貼ってあるけど、これは何だろ?
0816デフォルトの名無しさん
2006/04/19(水) 01:04:080817デフォルトの名無しさん
2006/04/19(水) 14:34:11http://www.puremagic.com/~braddr/d/gdc/
0818デフォルトの名無しさん
2006/04/21(金) 17:36:38文字列周りがちょっと鬱陶しいけど.
0819デフォルトの名無しさん
2006/04/22(土) 01:13:26「Unicodeはやるが、他は任せた!」的な
0820デフォルトの名無しさん
2006/04/22(土) 15:34:27あると勘違いした房が作ってるオナニー言語だろ?
C++の欠点を見つけただけでC++の良いところもみずに
C++の全てを超えてしまったような勘違いをしてるんだろ。
相対性理論にちょこちょこっと何か付け加えて「アインシュタインを超えた!」
とか言ってるアホ研究者と同じだ
0821デフォルトの名無しさん
2006/04/22(土) 16:04:290822デフォルトの名無しさん
2006/04/22(土) 16:26:58貶す論拠がレッテル張りと思い込みと宗教観だけだから。
0823デフォルトの名無しさん
2006/04/22(土) 16:28:220824デフォルトの名無しさん
2006/04/22(土) 17:10:320825デフォルトの名無しさん
2006/04/22(土) 18:05:160826デフォルトの名無しさん
2006/04/22(土) 18:39:19> C++の欠点を見つけただけでC++の良いところもみずに
> C++の全てを超えてしまったような勘違いをしてるんだろ。
Dのよいところを見ずにけなしている時点でお前はお前が軽蔑する存在以下だな。
> 相対性理論にちょこちょこっと何か付け加えて「アインシュタインを超えた!」
> とか言ってるアホ研究者と同じだ
おまえは相対性理論が何かも理解しないで「アインシュタインなんかたいしたことない」
と吹聴するうつけ者だな。
0827デフォルトの名無しさん
2006/04/22(土) 18:46:46それに問題があるとはいえ、ちゃんとした知識のある者にとっては使い勝手の良い言語であることに変わりはない
そこにこんなDなんてのが出てきても誰も使わんだろ
0828デフォルトの名無しさん
2006/04/22(土) 19:00:430829デフォルトの名無しさん
2006/04/22(土) 19:00:57これから過去の資源を積み上げていけばよい。
馬車があるからといって蒸気機関車の存在価値を否定する類の人間かい?
0830デフォルトの名無しさん
2006/04/22(土) 19:14:090831デフォルトの名無しさん
2006/04/22(土) 19:20:19Dは言語として目指す場所は決まりつつあるけど完成まではまだ道半ば。
どんな言語もできたばっかりの時点でライブラリが少ないのはあたりまえ。
だからといって新興の言語が発展しない理由にはならない。
PerlやPythonがあるからってRubyが誰にも使われてないか?
PerlにはCPANという膨大な資産があるわけだがRubyは誰にも使われてないか?
C/C++とD,排他なのではなくそれぞれが好きなものを好きなように
適材適所で利用すればいいんでないの?
0832デフォルトの名無しさん
2006/04/22(土) 19:24:140833デフォルトの名無しさん
2006/04/22(土) 19:42:31>いま他人のプログラムをデバッグしている。時間がもったいないので目視のみだ。
>私の場合、小さなクラスならば、目視のみでほぼ100%デバッグできる。
「100%バグが取れた」と無邪気に確信でき、平気で吹聴できる辺りが痛杉。
0834デフォルトの名無しさん
2006/04/22(土) 19:43:550835デフォルトの名無しさん
2006/04/22(土) 19:52:400836デフォルトの名無しさん
2006/04/22(土) 19:54:370837デフォルトの名無しさん
2006/04/22(土) 21:01:27ガンガレ。
ライブラリが充実してないのは当たり前だからokで、新興の言語は発展しない理由はアナタの中には無いのでノープロです。
俺はライブラリが充実して、新興の言語じゃなくなったころに使います。よろしく。
0838デフォルトの名無しさん
2006/04/22(土) 22:11:010839デフォルトの名無しさん
2006/04/22(土) 22:13:310840デフォルトの名無しさん
2006/04/22(土) 22:44:25D言語でオナニーしました、俺はアインシュタインを超えた
0841デフォルトの名無しさん
2006/04/23(日) 11:41:330842デフォルトの名無しさん
2006/04/23(日) 11:51:37いきなりそーゆうのが出てくると閉じた世界になっちゃうから、
まずは、glibとX11とGtkをD言語で書き直してよ。
それから、参戦するから。
0843デフォルトの名無しさん
2006/04/23(日) 12:03:20その3つを使ったことないけどX11だけは勉強しようかな・・・
0844デフォルトの名無しさん
2006/04/23(日) 12:21:38わかった俺が書き直すまで待ってろ
千年ほど
0845デフォルトの名無しさん
2006/04/23(日) 13:28:230846デフォルトの名無しさん
2006/04/23(日) 13:31:23Trolltechを説得しろ。
0847デフォルトの名無しさん
2006/04/23(日) 13:33:440848デフォルトの名無しさん
2006/04/23(日) 13:40:52なんでまだD言語なんてシェアウェア厨のオナニー言語にアインシュタインを超えてるの
MONOでネイティブコードも作れるのになんで欠陥だらけのガベコレを使ってるんだ
お前らのやっていることの意味がわからない
0849デフォルトの名無しさん
2006/04/23(日) 13:51:50アンチが多いんじゃなくて煽りにマジレスするからつきまとわれるんだと思うな。
0850デフォルトの名無しさん
2006/04/23(日) 13:53:020851デフォルトの名無しさん
2006/04/23(日) 14:05:40日本語でOK
0852デフォルトの名無しさん
2006/04/23(日) 15:10:210853デフォルトの名無しさん
2006/04/23(日) 15:12:23日本語読解できる?
0854デフォルトの名無しさん
2006/04/23(日) 15:16:030855デフォルトの名無しさん
2006/04/23(日) 17:29:57日本語記述できないの?
0856デフォルトの名無しさん
2006/04/23(日) 17:50:06スレタイ読める?
0857デフォルトの名無しさん
2006/04/23(日) 17:56:460858デフォルトの名無しさん
2006/04/23(日) 18:03:190859デフォルトの名無しさん
2006/04/23(日) 18:11:20欠陥ガベコレが車輪好きの生産性がない大人気なの
0860デフォルトの名無しさん
2006/04/23(日) 18:36:100861デフォルトの名無しさん
2006/04/23(日) 18:46:250862デフォルトの名無しさん
2006/04/23(日) 20:48:13その通り。現時点ではDは言語デザインについて語り合ったり
hackするのが好きな人のみがいじるべきもの。
そこにスキルないくせに「ただ新しい物好き」や
他人に「俺はこんなのも知ってるんだぜ」と自慢したがる奴や、
現状を知らないで開発中のものに完成度を求める
ライブラリ厨やIDE厨が駆除してもしてもわいてくるからウザイ。
そんな奴らにはまだDは早い。
大人しく枯れてきているC/C++,Javaを触っててDに近づくな。
Dはまだまだ言語デザインが変わることもありうる不安定なものだから
ライブラリの充実はまだまだ先の話しだし、
自作したアプリがコンパイラのバージョンが上がったとたんにSyntax errorになることなんて
日常茶飯事なんだから。
0863デフォルトの名無しさん
2006/04/23(日) 20:50:16Boost::spiritが無理くさいのははなはだ残念だ
MPLも大半アウトっぽいな
0864デフォルトの名無しさん
2006/04/23(日) 20:53:500865デフォルトの名無しさん
2006/04/23(日) 20:56:270866デフォルトの名無しさん
2006/04/23(日) 21:32:00ワロタ
>言語デザインについて語り合ったりhackする
なら、今だったら普通Haskell選ぶだろ
中途半端なDで何を語るの?
0867デフォルトの名無しさん
2006/04/23(日) 21:35:04これつけると静的束縛から動的束縛になるってのはどう?
0868デフォルトの名無しさん
2006/04/23(日) 21:42:050869デフォルトの名無しさん
2006/04/23(日) 21:42:11そういったことは本家に投げればいいんでないかい?
0870デフォルトの名無しさん
2006/04/23(日) 21:43:05fixed char[] test(char[] a){
char[] r;
foreach(char c;a){
r~=a~",";
}
return r;
}
pragma(msg, test("test"));
0871デフォルトの名無しさん
2006/04/23(日) 21:45:50メソッドが存在してなくても呼び出しが可能にしたいときとか
0872デフォルトの名無しさん
2006/04/23(日) 21:46:520873デフォルトの名無しさん
2006/04/23(日) 21:48:45自分で定義すればおk
0874デフォルトの名無しさん
2006/04/23(日) 21:51:080875デフォルトの名無しさん
2006/04/23(日) 22:07:04なら、なんで君はDのスレにいるの?
君はDに何を求めてこのスレに寄生してるの?
そもそもDとHaskellの目指す方向性が全然違うから比べるのがおかしくね?
そこらへんを理解できてない時点で君にはまだはやんじゃね?
多分君が求めているものはDにはないし君にはまだ早すぎるからからさっさとこのスレから消えれば?
0876デフォルトの名無しさん
2006/04/23(日) 22:11:07fixed char[] test(char[] a){
char[] r;
foreach(char c;a){
r~=a~",";
}
return r;
}
↓
char[] test(char[] a){
char[][char[]] r;
if(!(a in r)){
foreach(char c;a){
r[a]~=a~",";
}
}
return r[a];
}
そういえば!inって無いんだっけか…
0877デフォルトの名無しさん
2006/04/23(日) 22:15:57template test(char[]a,int i=0){
static if (i == a.length)
const char[]test = "";
else
const char[]test = a~","~ .test!(a,i+1) ;
}
pragma(msg, test!("test"));
0878デフォルトの名無しさん
2006/04/23(日) 22:19:27| 危 険 !. |
| .|
! 釣り針の投げ合い中 !
 ̄ ̄ ̄ ̄ ̄TT ̄ ̄ ̄ ̄ ̄ ̄
0879デフォルトの名無しさん
2006/04/23(日) 22:22:30Dは実用性重視で設計されてんだから、Dで言語デザインを語ろうというのは
ちょっと違うような気がする。
0880デフォルトの名無しさん
2006/04/23(日) 22:30:59存在自体無意味じゃね
ってことで
C++ >>>>>>> (越えられない壁)>>>>>>>>>>>> D
0881デフォルトの名無しさん
2006/04/23(日) 22:38:47ひがみっぽいなー。
Haskellは一例。
中途半端なDで言語デザインについて何を語るのか興味があっただけ。
で、何?
何を語ってくれるの?
0882デフォルトの名無しさん
2006/04/23(日) 22:40:50862と875に書いてあるけどそう思うんだったらなんでこのスレにいるんだろ
0883デフォルトの名無しさん
2006/04/23(日) 22:43:440884デフォルトの名無しさん
2006/04/23(日) 22:49:21(゚、 。 7 ハァ? Haskellが一例? 全然例になっとらんぞヴォケナス
l、 ~ヽ
じしf_, )ノ
0885デフォルトの名無しさん
2006/04/23(日) 22:49:540886デフォルトの名無しさん
2006/04/23(日) 22:53:050887デフォルトの名無しさん
2006/04/23(日) 23:02:23かなり勘違いしてるようだけど実用性重視ってのはDの目指す方向性であって現時点で達成しているものではないぞ。
即仕事に使える、アプリ/ミドルウェアを開発するってなら既存の枯れているもの使いなさい。
地雷を踏んでも楽しめてディスカッションできてDに興味ある人だけがいじる方がいい。
862にはそのように書かれてるけど880には読解できなかったみたいだなw
0888デフォルトの名無しさん
2006/04/23(日) 23:08:28これをダメダメと言う
0889デフォルトの名無しさん
2006/04/23(日) 23:11:48おお、伸びてるなーと思ったさ、思ったともorz
0890デフォルトの名無しさん
2006/04/23(日) 23:20:22なして?アカデミックに新しいパラダイムシフトがない言語については言語デザインについて語ることはないってこと?
実用性を向上させるために
つぎはぎで仕様を拡張された部分を可読性をあげたり一貫性をもたせるように変更したり
言語レベルでサポートされてなかったけどよく使われる機能を取り入れたり
逆にバグを埋め込みやすいバッドノウハウを代換えを用意して削ったり
C/C++を土台にいろいろあると思うぞ
0891デフォルトの名無しさん
2006/04/23(日) 23:26:22とりあえず888はあきらめとけ
どんなに噛み砕いて優しく解釈してあげても
奴の頭には1行分のバッファサイズしかアロケートできないから
理解できないんだ。 かわいそうな人間だからながしてやれw
0892デフォルトの名無しさん
2006/04/23(日) 23:28:020893デフォルトの名無しさん
2006/04/23(日) 23:33:520894デフォルトの名無しさん
2006/04/23(日) 23:37:490895818
2006/04/23(日) 23:39:070896デフォルトの名無しさん
2006/04/24(月) 00:25:15あとID非表示板で数字コテなど無意味
0898897
2006/04/24(月) 00:54:36頭にひまわり咲いてたんだ
ところで連想配列の性的初期化ってどうやるんだ?
0899デフォルトの名無しさん
2006/04/24(月) 01:47:570900デフォルトの名無しさん
2006/04/24(月) 01:49:56long l=1L;
printf("%02d,%lld\n", l, l.max);
このプログラムの挙動が
01,-4294967296
このようになるのですがどうしてですか。書式に問題がありですか?
0901900
2006/04/24(月) 01:56:54最初の%dで32bitで解釈されたから次の%lldの挙動がおかしくなったみたいです。
何でだか分からんけどしょせんCのprintfってことですね。
0902デフォルトの名無しさん
2006/04/24(月) 02:04:00所詮Cとはこれいかに
0903デフォルトの名無しさん
NGNGそういう意味ではprintfは所詮C、だよな。
>>901
Cの可変長引数には型情報を渡すメカニズムが無いから、
引数として何がどんなサイズのデータがスタックに詰まれたか
printfはフォーマット文字列でしか知る術が無いわけ。
で、そのフォーマット文字列を間違えて8byte積んであるところを
4byteしか取り出さなかったもんだから、後の引数がずれてしまいこうなる。
そして、ややスレ違いな説明スマソ
0904デフォルトの名無しさん
2006/04/24(月) 07:04:01ワタシニッポンゴウマイヨ
0905904
2006/04/24(月) 08:20:460906デフォルトの名無しさん
2006/04/24(月) 09:26:17'C:\Tool\D\dmd\bin\lib' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
……とか出て原因がよく分からん。
make-dwt-lib.batもmake-dwtextra-lib.batも同じエラー出る。
dmdをCドライブ直下に入れ直したりbin\libフォルダを作ったりしてみたけど駄目だった。
バージョンは0.154
何がマズいんだろうか。出来た奴居たら教えて欲しい。
0907デフォルトの名無しさん
2006/04/24(月) 13:03:58が無いって言われてるのになぜにフォルダ?
0908デフォルトの名無しさん
2006/04/24(月) 13:27:05特に問題なかった
build, libのパスが通ってないかsc.ini書き換えてないか
ぐらいしか原因が思いつかん
0909デフォルトの名無しさん
2006/04/24(月) 13:56:01俺馬鹿だーーーーー!
忘れて。ほんと忘れて。
>>907見て五秒くらい固まったよ。
0910デフォルトの名無しさん
2006/04/24(月) 13:59:530911デフォルトの名無しさん
2006/04/24(月) 15:03:08のhtml help必要だと思う?
0912デフォルトの名無しさん
2006/04/24(月) 16:17:200913デフォルトの名無しさん
2006/04/24(月) 19:10:01ネットがない環境では使えないから
ポケットリファレンス的な印刷物が欲しいなあ.
0914デフォルトの名無しさん
2006/04/24(月) 20:42:080915デフォルトの名無しさん
2006/04/24(月) 21:03:300916デフォルトの名無しさん
2006/04/24(月) 21:22:22ローカルで開くとstyle.cssへのリンクが切れてたから
/phobosと/techtipsにもコピーしてやって
整形されたものが見られるようになりました.
どうもです.
0917デフォルトの名無しさん
2006/04/25(火) 19:19:380918917
2006/04/25(火) 20:04:340919デフォルトの名無しさん
2006/04/25(火) 22:04:440920デフォルトの名無しさん
2006/04/25(火) 22:10:200922デフォルトの名無しさん
2006/04/25(火) 22:27:10粘着しても、君が望むものは何もありませんよ
さっさとこのスレから出て行ってくださいな
0923デフォルトの名無しさん
2006/04/25(火) 22:38:12そもそもの住人数が少なすぎるD言語スレ。
0924デフォルトの名無しさん
2006/04/25(火) 22:38:37間抜けはほっといてDについて語るべ。
テンプレートで文字列リテラルをSJISに変換するようなの作れば
実行時での変換コストが無くなって(・∀・)イイ!!と思うんだがこの考えは浅はかかな?
0925デフォルトの名無しさん
2006/04/25(火) 22:53:29突然の一人二役。釣れるには釣れるが
そもそもの住人数が少なすぎるD言語スレ。
0926925
2006/04/25(火) 22:58:20そろそろ包茎を水虫を治療しないと。
0928デフォルトの名無しさん
2006/04/25(火) 23:07:41再帰処理だけで変換するのは大変そう
というかstatic else ifがないと無理か
0931デフォルトの名無しさん
2006/04/25(火) 23:15:51テーブル必須だからなあ。
0932デフォルトの名無しさん
2006/04/25(火) 23:32:47else static if が使えた。
(今は別の方法を使ってるけど)
目標はUTF8->SJISなんだが、UTF8の日本語は1文字3バイト使うからテーブル使うのは却下。
UNICODE->SJISの変換テーブルは実現できて文字リテラルにはもう対応した。
ttp://www.kmonos.net/alang/d/templates-revisited.html
を参考にしてシコシコ頑張ってる。
0933デフォルトの名無しさん
2006/04/25(火) 23:33:15ワタシニッポンゴウマイヨ
0934デフォルトの名無しさん
2006/04/25(火) 23:44:300935928
2006/04/25(火) 23:45:07>else static if が使えた。
ああ、そうか、そうだよな。
というか「テンプレートで構文解析」なんて記事あったんだね。
知らなかった。勉強せねば。
0936デフォルトの名無しさん
2006/04/26(水) 21:59:29GCが完全に抑止できて、glibに依存しないように出来るなら可能なきがするんで興味がわいています。
0937デフォルトの名無しさん
2006/04/26(水) 23:14:19for (int i = 0; i < 20; ++i) writef("%X ", i);
[結果]0 1 2 3 4 5 6 7 8 9 : ; < = > ? 10 11 12 13
: ; < = > ? って何?
0938937
2006/04/26(水) 23:29:06これはバグか。
変なとこで悩まされた。
0939937
2006/04/26(水) 23:32:450940デフォルトの名無しさん
2006/04/26(水) 23:45:48最新のdmdとdmcを落として上書きしなおしてもダメポ
0941デフォルトの名無しさん
2006/04/26(水) 23:55:300942デフォルトの名無しさん
2006/04/26(水) 23:55:39イカみたいだ。
0943937
2006/04/27(木) 00:14:03それは正常でした。
0944デフォルトの名無しさん
2006/04/27(木) 03:52:45//再現コード
void main()
{ char[] c = cast (char[])"" ~ "abcdf"w; }
//とか↓とか
//void main()
//{ char[] c = cast (char[])"" ~ "abcdf"d; }
出力:
Assertion failure: 'sz == es2->sz' on line 399 in file 'optimize.c'
0945デフォルトの名無しさん
2006/04/27(木) 13:24:01・作れる
・Cでできることは全てできる
・作りかけてる人もいる http://dkernel.kuehne.cn/PICOS2/
・GC自体Dで書かれたライブラリに過ぎないので制御したければいくらでも可能
0946デフォルトの名無しさん
2006/04/27(木) 20:22:190947デフォルトの名無しさん
2006/04/27(木) 22:04:04//再現コード
static this(){}
static this(){}
void main(){}
はコンパイラに叱られないのか。
コメントアウトの漏れでもう一つstatic thisが存在することに気づかずに
何でexeファイルの実行に失敗するのか悩んだ。
0948デフォルトの名無しさん
2006/04/27(木) 22:44:04Assertion failure: '0' on line 725 in file 'expression.c'
に引っかかった。
今回はスリムな再現コードを作れなくて原因はサパーリだが。
コンパイラがまだまだ完成には程遠いのか漏れのやってることが奇抜なのか。
0949デフォルトの名無しさん
2006/04/28(金) 18:44:230950デフォルトの名無しさん
2006/04/28(金) 18:45:460951デフォルトの名無しさん
2006/04/28(金) 18:45:570.155
0952デフォルトの名無しさん
2006/04/29(土) 14:11:260.156 な件
0953デフォルトの名無しさん
2006/04/29(土) 14:52:440954デフォルトの名無しさん
2006/04/29(土) 14:54:340955デフォルトの名無しさん
2006/04/29(土) 15:21:12New/Changed Features
* Added Microsoft windbg.exe Win32 debugger.
* Removed std.recls, instead use http://synesis.com.au/software/recls/.
* Incorporated Dave Fladebo's changes:
o std.regexp speedups.
o Fixed a bug in pauseHandler whereby the stackTop was being overwritten by subsequently
resumed threads causing a crash in gcx.mark(). (The fix was to just move sem_post(&flagSuspend);
to right before the sigsuspend loop).
o Moved linux semaphore declarations to std/c/linux/linux.d
o Changed void wait(uint milliseconds){} to be a timed wait function instead of just a stub for void wait() {}
on linux (it is comparable to the Win32 Thread method now). This is implemented with pthread mutexes
and conditions and the extra overhead to initialize phobos Threads does not result in slower executables
(Threads, GC and startup time are not effected).
o Changed the allThreads static array size to the same as Windows. This in conjunction w/ the stack size
change will allow the creation of more than 100 threads on linux for better compatibility w/ the Win32 version.
o Added optional stack size parameter to constructors. Since the stackBottom is static when the threads
are created and the stackTop is dynamic based on the stack pointer (or context for Win32), allowing the threads
to be created with a non-default stack size shouldn't interfere with the GC. This adds little overhead to either
the Win32 or Linux Thread implementations.
0956デフォルトの名無しさん
2006/04/29(土) 15:23:540957デフォルトの名無しさん
2006/04/29(土) 15:35:58ない。
まだコンパイラも安定してない状況で求めるのが以下略
0958デフォルトの名無しさん
2006/04/29(土) 16:36:44どこがいけないんでしょう?
import std.string;
typedef void* iconv_t;
extern (C) iconv_t iconv_open(char* tocode, char* fromcode);
extern (C) size_t iconv(iconv_t cd, char** inbuf, size_t* inbytesleft, char** outbuf, size_t* outbytesleft);
extern (C) int iconv_close(iconv_t cd);
void main()
{
char[] str = "テスト文字列";
char* src = toStringz(str);
size_t srcSize = 19;
char* dst = new char[1024];
size_t dstSize = 1024;
for (size_t i = 0; i < dstSize; ++i) dst[i] = 0;
iconv_t ic = iconv_open("EUC-JP", "UTF-8");
iconv(ic, &src, &srcSize, &dst, &dstSize);
iconv_close(ic);
printf("%s\n", dst);
}
0959デフォルトの名無しさん
2006/04/29(土) 19:56:36環境もわからない。
0960958
2006/04/29(土) 20:17:17症状:dstが全く書き換えられていない。
どうもポインタのポインタの内容がCの関数側でおかしくなっているみたいですね。
これから詳しく調べてみます。
0961デフォルトの名無しさん
2006/04/29(土) 20:37:300962デフォルトの名無しさん
2006/04/29(土) 20:39:45iconv()の第4引数は変更されるらしいから、呼び出し前に退避させておかないといけないはず。
iconv_t ic = iconv_open("EUC-JP", "UTF-8");
iconv(ic, &src, &srcSize, &dst, &dstSize);
iconv_close(ic);
printf("%s\n", dst);
↓
iconv_t ic = iconv_open("EUC-JP", "UTF-8");
char* dst_buf = dst;
iconv(ic, &src, &srcSize, &dst_buf, &dstSize);
iconv_close(ic);
printf("%s\n", dst);
こうだと思う。
0964デフォルトの名無しさん
2006/04/29(土) 23:54:490965デフォルトの名無しさん
2006/04/30(日) 14:46:26http://www.dprogramming.com/~gregorr/gdc.php
The 'gdc-Ego' branch of GDC is a highly experimental branch of GDC with patches by Gregor Richards,
using the the DMD 0.156 frontend. Furthermore, it has fixes to several bugs that were in GDC 0.17 which
caused inconsistencies between DMD and GDC. It's experimental and has known bugs, but should allow
you to compile D software that is only compatible with the latest DMD.
http://www.dprogramming.com/~gregorr/GDC-d-Ego-0.156.1.tar.bz2
0966デフォルトの名無しさん
2006/04/30(日) 15:24:07DMD 0.156のフロントエンドを利用しています。
さらに、GDC0.17にあったDMDとGDCの間の矛盾を引き起こしていたいくつかのバグを修正しています。
実験的で存知のバグも存在していますが、最新のDMDとしか互換性がないD言語で書かれたソフトウェアをコンパイルできるべきです。
0967デフォルトの名無しさん
2006/04/30(日) 19:47:32The front end of DMD 0.156 is used.
In addition, the bug of shoes that want to cause the contradiction between DMD and GDC that exists in GDC0.17 is corrected.
The software written in only latest DMD and an incompatible D language should be able to be compiled though the bug of knowing exists experimentally, too.
0968デフォルトの名無しさん
2006/04/30(日) 22:59:370969デフォルトの名無しさん
2006/04/30(日) 23:12:57Mac OS X 10.3.9
/usr/include/mach/ppc/vm_types.h:86: error: conflicting types for `typedef int integer_t'
../../gcc/d/dmd/mars.h:146: error: previous declaration as `typedef long long unsigned int integer_t'
0970デフォルトの名無しさん
2006/04/30(日) 23:18:46> Ran into some kind of error with "gcc/d/dmd/expression.c":
> {standard input}:26:FATAL:Symbol __ZN10IntegerExp1tE already defined.
Looks like it was a botched macro integration from upstream...
Will bugreport the "mars.h" header file from DMD to Bugzilla,
but here's the trivial patch needed for the gdc-Ego snapshot:
--- gcc/d/dmd/mars.h.orig Sat Apr 29 04:56:03 2006
+++ gcc/d/dmd/mars.h Sun Apr 30 00:45:13 2006
@@ -131,7 +131,6 @@
#ifdef __DMC__
typedef _Complex long double complex_t;
-#elif IN_GCC
#else
#ifndef IN_GCC
#include "complex_t.h"
It wasn't defining the "integer_t" type properly on __APPLE__
(integer_t is a system type, so it uses dmd_integer_t instead)
--anders
かな?
0971デフォルトの名無しさん
2006/04/30(日) 23:36:51それだ。コンパイルは通った
0972デフォルトの名無しさん
2006/04/30(日) 23:48:54直接関係ないのだが、DMD 0.156 ってもうでてたっけ?
>>968
char[]だと、ポインタだけじゃなくて配列の長さも管理されてる。
(なので32bitマシンだとchar[]は大抵8Byte)
0973デフォルトの名無しさん
2006/05/01(月) 00:02:37――えっ、まだしてないの?あんた、SOS団の一員としての自覚あるの?
――何、「曲のほうは?」って?それなら心配いらないわ!
なんったって、団長のあたしが保証するんだから間違いないわ!
一度聴いたら、ぜ〜〜ったい踊りたくなるんだから!
涼宮ハルヒの憂鬱ED「ハレ晴レユカイ」5月10日発売!
絶対買いなさい!!
0974デフォルトの名無しさん
2006/05/01(月) 00:14:52>>952-955
0975デフォルトの名無しさん
2006/05/01(月) 01:02:380976デフォルトの名無しさん
2006/05/01(月) 06:34:37実際は、当然ながら実装依存なわけだが。
0977デフォルトの名無しさん
2006/05/01(月) 18:51:070978デフォルトの名無しさん
2006/05/01(月) 19:00:58呼び出しの際の扱いに苦労しないか、それ?
0979デフォルトの名無しさん
2006/05/01(月) 19:08:33適当にスタックにプッシュするだけでオーケーだよお兄さん。
0980デフォルトの名無しさん
2006/05/01(月) 20:06:35変換テーブルをstatic ifにしようが巨大文字列リテラルの一部参照にしようが
static ifを上位ビットからの分木構造にしようが使い物にならない。
多分コンパイラの字句解析が時間を食ってるんだろう。
分木で別のモジュールをimportするようなものなら字句解析時間をごっそり削れると思うけど
漏れはモウダメポなんであとはこのスレの住人にまかせる。
変換テーブルを生成するために作ったもの
ttp://www.uploda.org/uporg378043.zip
変換テンプレートとstatic if変換テーブル
ttp://www.uploda.org/uporg378045.zip
(utf8形式のソースでコンパイルして
windowsのchcp932のコンソールで実行した環境しか試してないが)
テンプレート名もシンボル名も自由に変えてOK。
色々変更加えてOK。
0981デフォルトの名無しさん
2006/05/01(月) 20:45:110982デフォルトの名無しさん
2006/05/01(月) 20:47:10ttp://www.kmonos.net/alang/d/declaration.html
暗黙の型推論とRAIIのためにautoキーワードが使われているわけだけど,
何か両立させたくない理由あるのかな.
何もないなら普通に別のキーワードを使って可能にして欲しいんだけど.
type a = new C(); // 暗黙の型推論
auto C b = new C(); // RAII
auto type c = new C(); // 暗黙の型推論とRAII
こんな感じにすればいいだけなんじゃないのかと.
0983デフォルトの名無しさん
2006/05/01(月) 20:50:38なんか既出だったみたいですね
次スレ近づけてすまん
0984デフォルトの名無しさん
2006/05/02(火) 07:34:39dwtじゃないの?
0985デフォルトの名無しさん
2006/05/02(火) 13:01:49そういう話が出てたのは知ってるが、決定なの?
あ、俺は>>957じゃないが。
0986デフォルトの名無しさん
2006/05/02(火) 13:20:430987デフォルトの名無しさん
2006/05/02(火) 14:55:15portable, top quality GUI given our limited resources.
だそうです。
http://www.digitalmars.com/drn-bin/wwwnews?digitalmars.D/32633
0988デフォルトの名無しさん
2006/05/02(火) 14:59:44特にTable廻りとか。
0989デフォルトの名無しさん
2006/05/02(火) 18:49:04Linux版ほしい。
>>988
そんなあなたのおすすめはなんでしょうか。
0990デフォルトの名無しさん
2006/05/03(水) 20:39:44http://pc8.2ch.net/test/read.cgi/tech/1146656260/l50
0991デフォルトの名無しさん
2006/05/05(金) 01:19:12ニュースグループで「とりあえず今はdwtがよさそうだし、もっと良いのができたら後から変更すればいい」みたいなことを
walterタソが言ってたような気がする。
digitalmars.D.dwtもあるし。
0992デフォルトの名無しさん
2006/05/06(土) 14:53:380993デフォルトの名無しさん
2006/05/06(土) 16:47:54ガッ
>>990
おつりんこ
0994デフォルトの名無しさん
2006/05/06(土) 18:18:20もう、埋めようぜ
0995デフォルトの名無しさん
2006/05/06(土) 18:18:580996デフォルトの名無しさん
2006/05/06(土) 18:19:590997デフォルトの名無しさん
2006/05/06(土) 18:20:340998デフォルトの名無しさん
2006/05/06(土) 18:21:050999デフォルトの名無しさん
2006/05/06(土) 18:24:471000デフォルトの名無しさん
2006/05/06(土) 18:26:13http://pc8.2ch.net/test/read.cgi/tech/1146656260/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。