【char[] str】 D言語 Part7 【str ~= "nullpo"】
1 :
デフォルトの名無しさん :
2005/08/02(火) 01:12:13
2get
3ゲト
>>1 乙です
前スレ急に落ちたけれど何かあったの?
もっと流れの遅いスレ読んでるけど落ちて無いし
5 :
デフォルトの名無しさん :2005/08/02(火) 05:31:48
D言語にはJavaのように様々なプラットフォームで共有に使えるGUIライブラリはありますか? それともCのようにOSベンダーがプラットフォームごとに用意したAPIを使うのでしょうか
>>5 CだってクロスプラットフォームなGUIライブラリは存在するし使えるが…
標準ライブラリにって意味か?
前スレ980で落ちてる、ってことでFA?
8 :
デフォルトの名無しさん :2005/08/02(火) 11:31:07
まだやってんのか、こんな糞言語
>>3 Wikipediaによるとレス数980以上の場合
即死判定が有効になるらしい
>>7 981で落ちてる、と思う
> 981 名前: デフォルトの名無しさん [sage] 投稿日: 2005/07/31(日) 15:06:56
>
>>980 >
> Newsgroupsの提案記事で読んだ記憶があるのは、例えば、
> a[] = [1,2,3,4]とか、b[3..6]=[i,j,k]とかそんな感じのものだった。
>>9 そう言う事だったか。なるほどね。
しかし980越えても即死判定が行なわれるというのは初耳ですた
おまいらぶっちゃけ今の所、D言語 気に入ってる? 理由も書いておくれ 中間報告てことで。
まずお前から
俺からか、しかし俺はHelloWorldくらいしか書いたこともねーのよ 俺はダイエットしたC++、ネイティブなJava/C#ってだけで満足なんで 安定したらメインで使おうと思っております。 けちつけるなら シンタックスシュガーな雰囲気のスライシングとか char a[10]とかint*[]*[2] pのようなCっぽい宣言を許してる点なんかが 時代にそぐわないような気もしないではないなぁくらい。
ああ、あとプロパティがごちゃごちゃしてる気もするなぁ ああ、、、 そのうち慣れるつぅもんかな
>>11 printf("abc
def
ghi\n");
とかかくと
abc
def
ghi
と表示してくれるのが最近気に入ってる。
16 :
デフォルトの名無しさん :2005/08/03(水) 00:59:17
マルチスレッドなどでSegmentationFault相当のエラーが発生した時に親が それを検知して対処し、強制停止などを食らわなくてすむ方法が欲しい。
ポインタが使えるのは短所だが長所でもあると、 個々の機能は単純だから 使いたい機能だけ使う人にはいいと思ってる
糞言語
糞はプログラマーの芽を育てる
まあ昔から糞は肥料として使われてるからな。
D言語でXMLが扱えるライブラリって無い?
>>17 仕様じゃなかったっけ?
CGI作るとき楽でいいなと思ってるんだけどね。
HTMLは<br>で改行する罠
>>24 HTMLのソースを記述するところが楽っつー話。
>>25 HTMLはプログラムの外にだした方がいいよ。
ところでDにもJavaでいう所のプロパティファイルが欲しくない?
Phobosで採用してくれないかな。
> HTMLはプログラムの外にだした方がいいよ。 そんなこと指示される筋合いはない
moduleって、ディレクトリ構造と完全に一致してないとダメなの?
>>27 指示はしてないよ。提案しただけ。
おまえ要件定義とかできない人でしょ。
仕事みたいなこという人だなあ
スルーというか誰もcatchしてくれなかったんでもう一度。 D言語でXMLが扱えるライブラリって無いですか? D言語研究のリンク集にあるxmldは一応見てみようとしましたが、 リンクが切れているので困っています。
34 :
32 :2005/08/05(金) 14:18:16
わたしのために喧嘩はやめて!
std.c.stringがない…
いつのまにやら0.129だな
Added postfixes c, w, d to string literals to denote type. ↑これって "foo"wとか"bar"cとかいうことであってる?
だね。 あってるっぽい。 foo( r"w\r"w ); とかなるともはや暗号かと
DMD 0.129リリース
アフォ
ソース見てみたけど、C言語形式のキャストを使っている、古いソースみたいだね。 (Hoge *)という形式でキャストしている部分をcast(Hoge *)というD言語形式のキャスト変更して.sizeを.sizeof に書き直したらコンパイルは通った。
46 :
44 :2005/08/08(月) 11:29:14
エラー書き忘れてたorz jcode.d(6574): unsupported char 0xef jcode.d(13124): Hex digit expected, not '・ jcode.d(13124): unsupported char 0xef jcode.d(13124): comma expected separating field initializers
gcc version 3.4.5 20050719 (prerelease) (gdc 0.15, using dmd 0.128) [FreeBSD] でcastと.sizeを直せばサンプル?のmainはちゃんと動いたよ。
こっちはそのエラーは発生しなかったな。 エラーの文章から推測すると文字コード関係のエラーかな? ファイルのエンコードはちゃんとUTF-8で保存した?
49 :
44 :2005/08/08(月) 13:00:53
>>48 文字コードはUTF-8(秀丸にて確認)
ちなみに
環境はWinXP
dmd 0.128
ちなみにjcode_ahiru.zipの方だから…勘違いしている人いたらすまんm(_ _)m
そっちはcastはD言語形式だからsizeofだけ修正したけど、それで動きましたよ。 ちなみに俺もWinXPで環境はdmd 0.128
以前文字コード変換を探していて、これを見付けたんですが、
The Artistic License ってのがよく分からなかったので使わなかった。
ttp://www.gnu.org/licenses/license-list.ja.html の辺には、
「私たちは、これをフリーソフトウェアのライセンスということはできません。
なぜなら、あまりにも曖昧過ぎるからです。
いくつかの節はそれらに期待される目的の割りには手が込みすぎていて、
また意味も不明瞭です。」
とあるが。
個人的にはGPLで充分だが、
それでは困る場合もあるだろうし……。
>>46 もう解決した?一応手元のjcode.dの該当行
6573: {0x7246, 0xe0af},
6574: {0x7247, 0xcad2},
6575: {0x7248, 0xc8c7},
13123: {0xff0a, 0xa1f6},
13124: {0xff0b, 0xa1dc},
13125: {0xff0c, 0xa1a4},
53 :
44 :2005/08/09(火) 13:37:47
>>52 それを見て解決した。サンクス。(謎の空白があった。orz)
akIDE 0.297が出てるね。
static libも楽に扱えるようになってる。 あとはエディタで日本語コメントが化けなくなり、 コードコンプリートが実装されてくれればelephantを使う理由がなくなる。
誤解を招きそうなので自己レス。 >elephantを使う理由がなくなる。 「漏れが」elephantを使う理由がなくなる、ってことね。
どうやってakIDEにコンパイラのパスを教えてあげるのかが分からん…
環境変数PATHに追加する
0.297、インポートパスを複数指定しても最初のパスしか認識しないみたい。 トップページで告知してないのはそういう理由?
>>58 トンクス。
明らかに違うと思いつつもakIDEと同じフォルダにある
programs.xmlを弄くって今までコンパイル通してた。
akIDE超気に入った。すげー柔軟性w xml弄くればメニューを日本語化できるし、キーアクセラレータも変えられるし、 エディタのフォント周りはstyle.xmlで変更可能。 style.xmlのcharset="204をcharset="128"に置換すると エディタ上で日本語が文字化けしなくなる。(ただキャレットの移動がorz)
ストリームのwriteメソッドで引数がchar[]なやつ、なんか出力に ゴミ(文字列の長さ)が入るんだけどこれって既出?
自己解決。writeStringを使うのね。
読みだけならsdl swigかwxWidgets辺りも使えると思う
>>65 thx
SDLとか大げさな気がしてその辺避けてた。調べてくる。
>>61 はtypoしてるからそのまんまじゃねー罠。
×charset="204をcharset="128"に置換すると
○charset="204"をcharset="128"に置換すると
204とか128の数値は下図を参考。
enum {
ANSI_CHARSET =0,
DEFAULT_CHARSET =1,
SYMBOL_CHARSET =2,
SHIFTJIS_CHARSET =128,
HANGEUL_CHARSET =129,
GB2312_CHARSET =134,
CHINESEBIG5_CHARSET =136,
OEM_CHARSET =255,
JOHAB_CHARSET =130,
HEBREW_CHARSET =177,
ARABIC_CHARSET =178,
GREEK_CHARSET =161,
TURKISH_CHARSET =162,
VIETNAMESE_CHARSET =163,
THAI_CHARSET =222,
EASTEUROPE_CHARSET =238,
RUSSIAN_CHARSET =204,
MAC_CHARSET =77,
BALTIC_CHARSET =186
}
>>68 ものすごい説明不足ですね・・・
すいません
style.xmlのcharset="204をcharset="128"に置換してから
menu_main.xmlのitem name="File"をitem name="ファイル"にすると文字化けします
何か足りない設定等はあるんでせうか?
>>70 どう文字化けする?
@繝輔ぃ繧、繝ォ
A$B%U%!%$%k(B
B・ユ・。・、・・
C+MNUwoTCkMOs-
>>70 こちらこそ説明不足スマソ。
charset="128"は文字セットがshift-jisだから
menu.main.xmlもshift-jisコードで保存しなきゃ文字化けする筈。
>>69 の「下図」も図じゃないし…
書き込めば書き込むほど恥を上塗ってるorz
皆さん(?)わざわざスイマセン OTL
>>71 1番目の繝輔ぃ繧、繝ォです
>>72 encoding="Shift-JIS"にすれば宜しいのでしょうか?
しかし、これにすると.xmlファイルの中の文字も文字化けします・・・
解決しました 一度encoding="Shift-JIS"に変えて.xmlファイルを保存し、 再度ファイルを開いてから、日本語に設定すれば良かったんですねorz こんな質問にわざわざ答えてくれて、ありがとう
日本語化の情報見てすぐにakIDE入れてみた。 すげえ快適。 でも次からまたテキストエディタ+makefileの漏れがいる。 慣れって恐ろしいな。
むしろvi+makeが最強だと思っている
D触り始めました。 static関数が別ソースファイルから見えるのだが、これって仕様? -- mod1.d import mod2; void func() { static_function(); } -- mod2.d static void static_function() { }
private じゃ無いんだから見えるのは正常だろ?
static 属性は関数もしくはデータに適用されます。 これは、その宣言が特定のインスタンスに関するものではなく、 ある型に関するものである、という意味になります。 言い方を変えると、this を参照しない、ということです。 static がその他の宣言についた場合は無視されます。 アクセス保護属性は、 private, package, protected, public, export, のいずれか一つです。 private は、同じクラスのメンバのみが参照できる、 あるいは同じモジュールのクラス/関数のみが参照できることを示します。 private メンバをオーバーライドすることはできません。 モジュールのメンバを private と宣言するのは、 C での static 宣言と同等です。
>static がその他の宣言についた場合は無視されます。 今思ったがこれってすごい仕様だな
82 :
77 :2005/08/16(火) 10:55:12
みなさんありがとです。 staticはだめで、privateにすればいいんですね。 ・・・でも、不親切な仕様だなぁ。 C/C++とは互換性ないと考えた方がよさそうだ。
ファイルの一行読みかできない。 import std.stream; void main() { File src = new File("tmp.txt"); char[] len; src.read(len); } 実行結果:Error: Access Violation 環境: Windows2000 Digital Mars D Compiler v0.128
一行読みたいなら len = src.readLine(); こうじゃない?わからんけど
多分len.lengthが0だからじゃない? わからんけど
import std.stream; void main() { File src = new File("tmp.txt"); char[1000] len; src.read(len); } にしたら test.d(7): cast(char[])(len) is not an lvalue 終了コード: -1073741819 でdmdが落ちた。 len = src.readLine(); の方試して見ます。
87 :
デフォルトの名無しさん :2005/08/16(火) 13:01:00
import std.stream; void main() { File src = new File("tmp.txt"); char[] len = src.readLine(); printf(len); } で行けました。 くだらないことでm(。・ε・。)mスイマソ-ン
>>81 Dの設計思想から言えば、エラーになるべきだよね。
でも、とりあえずCから適当に変換しても通るようになってるみたいではある。
moduleの宣言やインポートでいちいちtemplateとかobjectとかの キーワードに反応してエラーを出すのが大変不愉快なんだがどうか。
>>89 ハゲドウ
バグ報告したいところだが、バグじゃなかったら赤っ恥だしチキンな漏れは突撃出来ん。
つーかバグだよな?
関数名にpublicとかclassとかを使えないのと同じ理屈で moduleのそれらが通らないのかも。 とりあえず質問投げてみる。
よく考えたらinterface.d内の識別子にアクセスしたいときに interface.識別子って記述になっちゃってヤバイよな。 int.dの識別子initにスコープを使ったアクセスとかムリポ
93 :
91 :2005/08/16(火) 23:17:55
う。そいつは盲点だった。 思ったより根の深い問題だったのね。
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::。:::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::。::::::...... ... --─- :::::::::::::::::::: ..::::: . ..::::::::
:::::::::::::::::...... ....:::::::゜::::::::::.. (___ )(___ ) ::::。::::::::::::::::: ゜.::::::::::::
:. .:::::。:::........ . .::::::::::::::::: _ i/ = =ヽi :::::::::::::。::::::::::: . . . ..::::
:::: :::::::::.....:☆彡:::: //[|| 」 ||] ::::::::::゜:::::::::: ...:: :::::
:::::::::::::::::: . . . ..: :::: / ヘ | | ____,ヽ | | :::::::::::.... .... .. .::::::::::::::
::::::...゜ . .::::::::: /ヽ ノ ヽ__/ ....... . .::::::::::::........ ..::::
:.... .... .. . く / 三三三∠⌒>:.... .... .. .:.... .... ..
:.... .... ..:.... .... ..... .... .. .:.... .... .. ..... .... .. ..... ............. .. . ........ ......
:.... . ∧∧ ∧∧ ∧∧ ∧∧ .... .... .. .:.... .... ..... .... .. .
... ..:( )ゝ ( )ゝ( )ゝ( )ゝ無茶しやがって… ..........
.... i⌒ / i⌒ / i⌒ / i⌒ / .. ..... ................... .. . ...
.. 三 | 三 | 三 | 三 | ... ............. ........... . .....
... ∪ ∪ ∪ ∪ ∪ ∪ ∪ ∪ ............. ............. .. ........ ...
三三 三三 三三 三三
三三 三三 三三 三三
つーか
>>92 の考えに至るのが遅かったり、バグバグ連呼したり、
漏れがバグ報告を扇動したみたいな形になったな。スマソ。
解決案。 module(int).init とか cast(module)int.init とか。
ところでcast(*)って関数呼び出しみたいで紛らわしくないか?
if()とか、while()とかもそう思うわけ?
完全に慣れの問題だな。 右側に演算子が来ないから問題ないと思う。 …けどこういう書き方もできるんだよな。 real f; : int i = cast(int)-f;
>>97 いや、castは値を返すから他の式の中に潜む性質を持つ訳で…。
まあ実際慣れの問題なんですがね…。
Dで、自分のファイル名をとるのってどうやるの? mainの引数に入ってこないんだが。
int main(char[][] args) { char[] name = args[0]; とかでいけないか?
パスに日本語入ってるとまずいから char* name = args[0]; で受けてからUTF8に変換した方がいいと思う
103 :
100 :2005/08/19(金) 01:28:50
>>101 ,
>>102 ありがと。
writef("usage: %s <dns server>", argv[0]);
で、できました。昨日はなぜかできなかった(そんわけないけど)。
でも、
foreach (char []s; argv) {
writef("\n%s\n", s);
}
や
foreach (char []s; argv) {
printf("\n%s\n", std.string.toStringz(s));
}
としたら、argv[0]が表示されないのはなんでですか?
>hoge 2
とすると
2
と、0番目は空行が表示されます。
(`Document and Setting' のスペースと関係が?)
>>103 とりあえず試してみたらちゃんとatgv[0]は表示されたぞ?
後、空行が入るのは当たり前じゃないか、\n二つ入ってるんだから。
int main(char[][] args) { foreach(char[] s; args){ printf("%s\n", cast(char*)s); } return 0; } とやってみたところ、実行ファイルのフルパスと引数がちゃんと表示されたよ。 WinXP SP2、DMD0.129で。
printf("%.*s\n", s); でいいと思うんだが。
107 :
100 :2005/08/19(金) 22:07:23
ほんまスマン。 C:\Documents and Settings\def\My Documents\Dev\dtest>dtest 23 C:\Documents and Settings\def\My Documents\Dev\dtest\dtest.exe 23 C:\Documents and Settings\def\My Documents\Dev\dtest> と表示されていて、『23』だけが表示されて、その上はプロンプトとかと思っていた.. なにか、ただ、文字を表示するだけでも、いろいろありますね。 標準の出力ライブラリってどれです?個人的にwritefじゃないかとおもったのですが。 これが、マルチバイトの日本語を使えないので、char*にキャストしてprintfを使うのですか?
普段stdout使ってるけど、標準って言われると良くわからんなぁ……。
109 :
100 :2005/08/19(金) 23:03:42
実現する方法が1つじゃないってのは、Perlみたいに自由な言語だとは思うのですが、 文字の出力関数くらい『これをつかえ!』ってのを決めてもらわないと、 みんな自分の方法で、printf(数通り)やらstreamやらwritefやらで、 わけわかなになりそうです!
小難しいこと考えたくない→printf (入・)出力先を選択可能にしたい→stream 小難しいこと考えたい→writef これでどうだ。
111 :
100 :2005/08/19(金) 23:45:49
関数引数のconstについての質問です。 void [] toPacket(header *hdr,void [] data) { ubyte [] pack = (cast(ubyte *)hdr)[0 .. header.sizeof].dup; pack ~= cast(ubyte [])data; return cast(void [])pack; } という関数の引数をconst宣言したいのですが、 void [] toPacket(const header *hdr, const void [] data) とすると、 dtest.d(5): basic type expected, not const dtest.d(5): found 'const' when expecting ')' とエラーが出ます。 Cのように引数を変更しないことを宣言するには、Dではどうするのでしょうか?
112 :
100 :2005/08/19(金) 23:52:03
>>110 なるほど。用途ごとにわけるわけですね。
個人的には、
writef-> Dのデータ型用
printf-> Cのデータ型用
のような気もしています。
>>106 まぁそれでいいんだけどさ。
はじめわからんで
>>105 みたいな書き方してたから
そのまま慣れちゃって。
>>112 > writef-> Dのデータ型用
> printf-> Cのデータ型用
なるほど。
派生して使うケースも import std.cstream; int main() { StdOutEx soe = new StdOutEx(); soe.hoge(); return 0; } class StdOutEx : CFile { this() { super(std.c.stdio.stdout, FileMode.Out); } void hoge() { writeLine("hoge"); } }
標準出力に書き込む方法が色々あるのはいいんだが、 文字列操作関数がほとんどchar[]用なのがなんだかなあ。 いちいちtoUTF8呼ばされて幻滅しちゃう。
>>116 言わんとするところがわからないので言語化してください。
ひょっとしてもしかしてオーバーロードのこと?
文字列を言語レベルでサポートとか言ってるけどどうやって使うの? string型とか見当たらないんだけど
121 :
デフォルトの名無しさん :2005/08/21(日) 09:38:40
以下のコードで、変数nの値が1回目のprintfでは正常に出力されるのですが、 2回目のprintfでは0と表示されます。 これはバグだと思われるのですが、どうなのでしょうか。 int main() { int n = 10; printf( "%d\n", n ); printf( "%d,%d\n", __LINE__, n ); return 0; }
__LINE__が32bitではないとかそういう話だったりする?
>122 (略) printf( "%d,%d\n", cast(int)__LINE__, n ); (略) にしてみたら 10 5,10 になった
__LINE__ は 64bit だな printf("%d\n", __LINE__.sizeof);
>>124 字句解析の__LINE__の処理を見ても
> dmd\src\dmd\lexer.c
> 468: else if (id == Id::LINE)
> 469: {
> 470: t->value = TOKint64v;
> 471: t->uns64value = loc.linnum;
> 472: }
__LINE__は64ビット扱いだね。
>>121 ソースをそのままコピペしたけど
10
5,10
と普通に出力された。
当方WinXP SP2 dmd 0.129
出力値が異なったのは0x0000000000000005の
上位32ビットを出力したのか下位32ビットを出力したのかの違いによるものかな?
>121です。 簡単にバグとか言って恥ずかしいです。 すばやい回答をありがとうございました。
static assert(8 == __LINE__.sizeof); static assert(long.max == __LINE__.max); 8バイトでlong型で間違いないな
>>121 のソースを見て「C言語スレ池」と言いそうになったのは秘密
D言語の文字列の末尾に\0が入らないバグは直った?
130 :
デフォルトの名無しさん :2005/08/21(日) 18:00:56
>>129 それってバグなの?
文字配列に長さの概念があるのにどうしてNull終端する必要があるの?
131 :
デフォルトの名無しさん :2005/08/21(日) 18:19:05
Dのテンプレート機能はどう? あとMixin
138 :
131 :2005/08/22(月) 01:08:10
教えてください。 ある昔のソースを拾ってきて SerialMemoryStream messageStream = messageTable[hWnd]; ↓ SerialMemoryStream messageStream = cast(SerialMemoryStream)(hWnd in messageTable); と修正し、 その部分は動くようになったのですが、 他の箇所でエラーになります。 修正方法として間違ってますか? (それともこの修正とは別の問題?)
どこで拾った何のソースだかわからないけど、 messageTable[hWnd] -> SerialMemoryStream hWnd in messageTable -> SerialMemoryStreamのポインタ in 演算子を使うと要素へのポインタが帰ってくる。 messageTable[hWnd]で動かないなら他の部分に問題あるんじゃないかな。
本家の言語仕様のページが更新されてまつ。
SerialMemoryStream messageStream; try{ messageStream = messageTable[hWnd]; }catch(ArrayBoundsError e){ return DefWindowProcW(hWnd, uMsg, wParam, lParam); } にしたらうまくいきました。 ありがとう。
if (hWnd in messageTable) { messageStream = messageTable[hWnd]; } else { return DefWindowProc(hWnd, uMsg, wParam, lParam); } とする方がよいではないかと思うんだが。
>>144 (>Д<)ゝ”了解!
ありがとうです。
DMD 0.130sage
ウォルター氏 real 好きだな、 double double 言いまくってた癖が抜けない
realって何がリアルなんだろうな
real number以外に何があるんだ
モジュール内で、 class A { private real a; } class B : A { public real get() { return a; } } と、B の関数から a にアクセスできるのに激しく違和感が 確かに 「private は、同じクラスのメンバのみが参照できる、 あるいは *同じモジュール* のクラス/関数のみが参照できることを示します」 なんだが
ver0.130ってどこにあるんだ?
>>146 の告知後から何度も確認してるけど、changelogは更新されてるけど
/dmd.130.zipは存在しないし/dmd.zipの中身はdmd.129,zipなんだが
changelogが0.129までしかない。
>152 digitalmarsの方を見れ
154 :
153 :2005/08/24(水) 12:25:04
と思ったら消えてる・・・・・・? 何個かバグフィックスが載ってたはずなんだが。
155 :
153 :2005/08/24(水) 12:27:24
156 :
152 :2005/08/24(水) 13:00:46
>>153-155 いや、本家のchangelogから0.130が消えたから
>>152 を書き込んだんだが。
changelogはwikiの翻訳版が残ってるし…
誤解させるようなレスでスマンカッタ。
Walter曰く、 0.130 is a work in progress and I accidentally uploaded the changelog for it.
>>150 同じファイル内のクラスぐらいは同時には一人が管理するはず、という前提にたてば、
そういう例外を認めることで融通が利くのは良いことだと思う。
違和感を感じさせるような不統一が仕様にあっても、現実的に利点があれば
それでいいしそうすべきだと思う。上回る欠点があれば別だけど。
ver1マダー?
D言語でcursesかそれに類する機能を持つライブラリを使うことはできるのでしょうか。
お願いがあります。 std.socketを使った簡単なサーバとクライアントの プログラム書いてもらえないでしょうか? 使い方がよくわからず、サンプルプログラムとか 探しても見つからず。 探し方悪いんですかね?それともサンプル自体が少ないとか。 その辺もうちょっと充実して欲しいなぁと思うところ。
なんか日本語とかマルチバイト文字がちゃんと表示されないのですがどうすればいいのですか?
>164 自分の環境くらい晒してくれんか。
166 :
100 :2005/08/27(土) 20:53:59
>>163 普通のbsd socketを使ったことがあれば分かると思うので、
Dにこだわらず、LinuxやUnixの説明サイト見たらいいと思う。
それがすでに分かってるなら、dmd\src\phobos\std\socket.d見れば分かるよ。
--
C++でいうthisは、Dではなんですか?
ない?クラスのメソッドから状態によって、自分のリファレンスを返したいのですが。
Dのsockedはmemcpyでディープコピー出来ないから糞なんじゃなかったっけ? Apacheみたいな鯖は一生出てこない気がする
169 :
100 :2005/08/27(土) 21:29:27
>>167 ありがと。
>>168 >memcpyでディープコピー出来ない
くわしく。
socketをmemcopyとか普通しなくないです?
ディスクリプタのdup()のこと?
170 :
100 :2005/08/27(土) 21:36:36
>>163 dmd\samples\d\htmlget.d
dmd\samples\d\listener.d
サンプルにありました。
>>169 memcpy(&fds, &readfds, sizeof(fd_set));
Dの翻訳みてみたらSocketSetってのでうまいことやってるみたいだけど。 なんでfd_setを使うの?
174 :
デフォルトの名無しさん :2005/08/28(日) 12:56:15
sset.reset(); sset.add(listener); foreach(Socket each; reads) { sset.add(each); } この処理が冗長なんだよ。 selectってのは配列なりコレクションなりを引数にとって 勝手にremoveして返すから。
質問です。 main.dとhoge.dが同一ディレクトリ内にあって、それぞれの内容が ----- main.d ----- import hoge; int main(){ hoge hg = new hoge; return 0; } ----- hoge.d ----- class hoge { } ----------------- となっています。それをdmd main.dとコンパイルした際に main.obj(main) Error 42: Symbol Undefined __Class_4hoge4hoge errorlevel 1 のようにリンカエラーが出てしまいます。 これはimport宣言の使い方が間違っているのでしょうか。 コンパイラのバージョンはdmd ver0.129です。
>>174 冗長なことが気になるなら、
void addSocketArray(SocketSet socketset, Socket [] socketarray)
{
socketset.reaset();
foreach (Socket each; socketarray) {
set.add(each);
}
}
とかつくっておけばいいことないですか。
速度云々言われると、そもそもD使えないし。
あと、sizeof(fd_set))って大丈夫です?
fd_setって、(OSがポーリングできる最大ソケット数*(ソケットハンドルサイズ + α))分の
サイズを固定長でとってますか?
ポインタメンバをもって、そこに使う分だけ確保していると思っていたんだけど。
>>175 hoge.dの先頭に
module hoge;
と書く必要があります。
>>176 変数名間違えた>set.add
178 :
175 :2005/08/28(日) 15:45:14
>177 module hoge;をhoge.dの先頭に追加しても同様の結果になります。 それに、kmonos.netの和訳版マニュアルには >もし宣言が存在しなければ、 ソースファイル名と同じ名前(パスと拡張子は除かれる)が使用されます。 と載っているのですが・・・
>>176 fd_setは固定要素数を持った整数配列をひとつメンバにもった構造体だよ
最大数はカーネル依存だけどFreeBSDなら1024個だったかな
>>175 > dmd main.d hoge.d
でいけたよ。
181 :
175 :2005/08/28(日) 16:37:16
>180 回答ありがとうございます。手元でもうまく動作するのを確認しました。 しかしそうすると、ローカルに存在する自作のモジュールを読み込む際には 全てのモジュールを列挙する必要があるのですか? どうにも煩雑なように思えるのですが。
>>181 てか、Cで dmc main.c hoge.c hage.c とか
やるのと同じ感じじゃないのかな。
コンパイルだけやりたいって事なのか?
makefileの使い方を覚えよう! DMのmakeはスペースを受け付けないらしいけど
185 :
175 :2005/08/28(日) 17:15:23
>182 まあそうかもしれませんが、モジュールと(C/C++における)ヘッダファイルに対応付けて考えていたので 今ひとつしっくりきませんでした。 >184 cygwinのmake使ってみます。 ABA GAMESの中の人はAnt使ってるみたいですが・・・
186 :
175 :2005/08/28(日) 17:16:19
訂正 ×モジュールと ○モジュールを
ドキュメンテーションコメントが策定中みたいね。 個人的には、@paramと書くjavadocよりは好み。
>>185 Cでも #include "hoge.h" とやったときに、
gcc main.c hoge.o ってやんないと実行バイナリを生成できんと思う。
#include <stdio.h> とやって gcc main.c で実行バイナリが生成できるのは、
暗黙に標準ライブラリがリンクされるから(のようなもの)じゃないかな。
>>188 Dのモジュールは、Cでいうヘッダーファイルもかねているから、
.hの中に関数の実体書いているようなものと思ったんじゃないの。
テンプレートライブラリのヘッダーファイルみたいな。
UTF-8は深刻なんだな…
ふーむ D便利っすね
>188 >Cでも #include "hoge.h" とやったときに、 >gcc main.c hoge.o ってやんないと実行バイナリを生成できんと思う。 ちょっとまて
わろす
Dって何が便利なの?
wxDも出たことだし、後はwx-devcppのような感じの開発環境が出てくれば・・・
>>195 出たことだし、ってもっと前から無かったっけ?>wxD
もちろん pragma (lib, "ws2_32.lib"); は大前提だけど。
wxDってポーティング終わったの? 鬼畜米兵とジャップがそれぞれ作ってたよね
200
DからCの関数の呼び出しってどうやるんだ?
>>202 つ extern(C)
extern(C){
int strlen(char*);
int printf(char*,...);
}
void main(){
printf("%d",strlen("Hello World"));
}
204 :
192 :2005/08/31(水) 16:51:35
>201 なんかどうも勘違いしてたっぽい。 俺は Dの場合:main.d hoge.d ↓ ↓ Cの場合:main.c hoge.h という風に対応させて思ってたけど 188は多分 Dの場合:main.d hoge.d ↓ ↓ Cの場合:main.c (hoge.h + hoge.c) という風に考えてたんだと思う。 すいません。
>>199 鬼畜米兵のほうが公開済み
ジャップのほうは挫折済み
本家で十分な気がしないでもない。
それよりphobosでwcharに対応したstd.stringを入れておいてホスィ なんでwcharとdcharだけ対応してないのかねえ?
面倒だからだろう
マルチバイト文字にはdcharを使うことを推奨ってことで、 charはアルファベット以外の文字を見たことのない人用 wcharはwindowsAPIにアクセスするときぐらいしか使わない
というかchar型決め打ちのライブラリよりも、 templateを使った汎用的な配列操作用のライブラリを標準で作って欲しい。
>214 まあぶっちゃけ微妙といわざるを得ない
>>214 立ち読みしただけだけど、そのソースは単純にDと比較するだけの物であって、
他言語を知ってる人のための物。
>>214 ぶっちゃけ、買わないほうがいいと思う。
サンプルプログラム最新のコンパイラでコンパイル
出来ないのあるし。
それなりに仕様変わったからなぁ。
まぁ記念に一冊なw
218 :
209 :2005/09/03(土) 13:51:11
>>211 どこにそんなの書いてあった?
つかWin環境で使うことが多いから俺はwcharよく使うんだけど。
>>212 それ知らんかった。昔ニュースグループに流れてたやつかな?
何はともあれthx
>>213 ここで作ってwalterタンにphobosに入れてもらう…無理そうだな('A`)
英語が出来れば無理ではないよ 外部有志のライブラリをDeimosとして纏めてくれんかな Javaでいうところのjavaxみたいな位置づけでさ 有用そうなら積極的に採用してライブラリの肥大化を進めて欲しい 下手にGPLなライブラリとかが優勢になると身動きが取れなくなる
220 :
209 :2005/09/03(土) 14:16:11
いや無理かなって言ったのは"ここで作って"の部分。 まとめられないだろうし、何より俺がなんの貢献も出来ないだろうって いうのがでかい自虐的意味だったスマソ。
試しにSTLを真似て書いてみたけど、 関数templateが無いから少し使いにくい。 template find(T,InIt=T*){ InIt find(InIt begin,InIt end,T value){ for(;begin != end;++begin) if(begin[0] == value)return begin; return end; } }
>>215-217 お返事どうも有難うござました。
あまり期待しないほうがよさそうですね。とりあえず、やめときます。
>>221 ん、それってstd.string.findと仕様違うぽくね?
いやわざとなら別にいいけど。
C++のstd::findに似せて書いたからstd.string.findとは仕様が違う。 std.string.findと同じ形で書くならこんな感じ。 template find(T,Container=T[]){ int find(Container container,T value){ foreach(int index,inout T it ; container) if(it == value)return index; return -1; } } でも、整数で返したら配列 or opIndexが定義されてる物 以外で使いにくくなるのが少し嫌。 ま、配列決め打ちでも全然問題ないけどね。Dの配列は便利だし。
配列スライスって速い?
スライスしても中身のコピーはしないから高速。
int[] aryFull = new int[ary1.length+ary2.length]; aryFull[0 .. ary1.length]; aryFull[ary1.length .. ary2.length]; こんな感じで使われるなら楽でいいね
ごめ、すっごいボケかましたw もちろん代入値はary1とary2です。
スライスしても中身のコピーはしないが、 スライスする元のものと、してできたものが同じものをさす保障はない点に注意 int[] a1 = new int[10]; int[] a2 = a1[2..5]; a2[0] = 100; //a1も書き換わる a1.length = 100; a2[1] = 200; //a1は書き換わらない
なるほど。オフィシャルの翻訳の配列の項をみると目からうろこだな。 これがネイティブで出来るのか…鯖でも作ろう
232 :
デフォルトの名無しさん :2005/09/05(月) 16:20:31
さすが糞言語だ。
>230 int[] a1 = new int[10]; int[] a2 = a1[2..5]; a2[0] = 100; printf("a1[0]:%d, a2[0]:%d\n", a1[0],a2[0]); a1.length = 100; a2[1] = 200; printf("a1[1]:%d, a2[1]:%d\n", a1[1],a2[1]); この結果は a1[0]:0, a2[0]:100 a1[1]:0, a2[1]:200 となったんだが(@dmd0.129)。 書き換えるときにコピーするという認識で大丈夫だと思うのだけど。
>>233 あのさあ、、、
スライスで、a1[2]をa2[0]ととってるのに、a1[0]とか、a1[1]を表示してどうすんのよ?
int main()
{
int[] a1 = new int[10];
int[] a2 = a1[2..5];
a2[0] = 100;
printf("a1[2]:%d, a2[0]:%d\n", a1[2],a2[0]);
a1.length = 100;
a2[0] = 200;
printf("a1[2]:%d, a2[0]:%d\n", a1[2],a2[0]);
return 0;
}
結果:
a1[2]:100, a2[0]:100 // a1も書き換わる
a1[2]:100, a2[0]:200 // a1には反映されてない
236 :
233 :2005/09/07(水) 00:02:32
スマン。寝ぼけてた。吊ってくる
質問です。 import std.string; class hoge{ public char[] test(){ return toString(1000); } } int main(){ hoge hg = new hoge; printf("%.*s\n", hg.test()); return 0; } ↑のようなコードをdmdでコンパイルしようとすると hoge.d(5): function object.Object.toString () does not match argument types (int) hoge.d(5): Error: expected 0 arguments, not 1 のようにエラーが出てしまいます。 何らかの記述ミスがあるのでしょうか。 hogeクラスを削ってmainの中身をprintf("%.*s\n", toString(1000));だけにしてコンパイルし、 実行すると期待したように1000という文字列が出力されます。
>>237 return .toString(1000);
にすると幸せになれるかもしれない。
ヒントは暗黙のtoString。
239 :
237 :2005/09/07(水) 01:27:08
>238 ありがとうございます。解決しました なんだかC++を念頭に入れて書くと戸惑うことばっかりな気がする・・・・・・
DMD 0.130リリース DL出来ることも確認。
>changed size parameters to ulong instead of size_t size_t を uint から ulong に変更って Cのライブラリのポーティングの際とかに問題にならない?
242 :
デフォルトの名無しさん :2005/09/07(水) 17:33:21
どんなにバージョンが上がっても、絶対にメジャーになる可能性はゼロ。
予言者乙
>>241 それは、std.mmfileの引数に関する変更点だよ。
確かに size_t.sizeof==4 だ‥ 勘違いスマソ
64bitコードをはいてくれればなぁ・・・
2年後だな
コンパイラのためのOOPっていう謡は伊達じゃないってか
>>249 まぁ、全部の言語のMissingがきえてからだな
252 :
デフォルトの名無しさん :2005/09/09(金) 11:20:14
ver 1.0マァァァダアッァアァー?
DMD 0.131リリース
バグフィックスだけか。 暗黙の関数テンプレート実体化まだー?
akIDE 0.298が出てるね。
Ver1.0が出てみんなが本格的に何かを作る段階になったら、 char*をchar[]を置き換える手間が問題になってくると思う。 char[] str = std.string.toString(pStr); が char[] str = pStr.toString(); ぐらいまで簡単になれば作業速度の向上でグッと利用者増加やツール充実が みこめるはず。 せっかく「コンパイラの為の言語仕様」みたいな話のわかる設計してるんだし。 「実際に”使える”」にも注力して欲しい。 最新の言語仕様ではC++やJavaに対するアドバンテージが低下してしまってる。 この辺の勝手が(まるでPHPのように)良くなればヘタすりゃデファクトにもなりうるって。
258 :
256 :2005/09/10(土) 11:36:40
char[] str = pStr.toString(); ……今でも使えなかったっけ?
>>258 char[] str = .toString(pStr);
でOKだろ。
>>259 それはできんけど、
"%s".printf(pStr);
とか
"abc".split("b");
とかできるという不思議があるね。
>260 そういうのが中途半端にできるのは戸惑うな。 Ruby感覚で100.toString()とかできるかなと思ったができないし。
まあ、D言語の場合、大体の仕様は「コンパイラありきですから」で 納得のし様(筋の通され様?)があるからいいんだけどな。
Dの高速さを維持するために必要なのかもしれないしな
264 :
デフォルトの名無しさん :2005/09/12(月) 17:26:38
int h = "hello, world."; main() { printf("%s\n", h); } dmcで -Jmオプション付けてもこのコードが通らないんですが、 これを許可する方法ないですか? 困りました。 >sc -Jm hello.c int h = "hello, world."; ^ hello.c(3) : Error: need explicit cast to convert from: char * to : int こいつが出ます。 VC6は警告ありで通るのに・・ int をchar *にでも変えればよいのはわかってますが、 やりたくありません。 ちなみにgccでも通りました。
>264 いやここD言語のスレなんだけど。
>>264 やりたくないって駄々こねる方が悪いだけでしょw
所詮どっちも4バイトやん
>>264 キャストすればいいだけだろ。CでもDでも
DでQtは使えないのかな?
wxDがあるってことは間接的に使ってるってことでは? GTK?
>>264 古いスタイルを受け付けない、dmcのバグだな。
>>264 ある日、マホメットは「自分はあの山をこちら側に引き寄せてみせる」と公言した。
この奇跡を見ようと集まった群衆の前で、マホメットは山に向かって叫ぶ。
「おーい、山よ。こっちへ来い!」しかし山は動かず。
再び彼は山に叫ぶが動かない。3度目を叫んだ時、群集は失望と軽蔑。
しかしマホメットは言う。
「諸君!ご覧のとおり私は山に向かって3度呼びかけたが、山は動かなかった。
このうえは、私が山に向かって歩いていくよりほかはないだろう」
そして彼は山に向かってスタスタと歩き始めた
# 暗いと不平を言うよりも すすんで明かりをつけましょう。
別に264もそのままhello.cを動かしたいわけじゃないだろ。
昔のソースをコンパイルできないってことじゃないか?
>>271 がもの凄い駄文に見える。
これアドレスが入るって事だよね? だとしたら通らない方がよくない? この書き方で実用的な例があるなら見てみたい。
>>272 そんなのいざとなればプリプロセッサでも通せばいいだけじゃん?
バカ?
>>274 それってソースコード全部直すのと変わらんじゃん。何の解決になるんだ?
「dmc使うな」っていうなら分かるけど。
>>274 型書き換えとかキャスト挿入で済むならとっくにやってるだろ。
おまえ馬鹿じゃないのか?
キャスト挿入ですまない理由が知りたい。 というか、もういい加減にスレ違い。
で、結論はdmcは通らないということか
基地外警報が発令されました。 スルーをお願いします。
ポインタってuint32じゃないの? int32へキャストしたらコストが発生するのでは? 適当なこと言ってすまん
>>280 そんなことはないと思う
MarsのHPに載ってたんだけど、
ハンガリアン記法がダメな理由を誰か教えてくれ〜
char *からintのキャストでは(双方32bitだとすれば)、何もやることはないですね。
>>281 デメリットのほうを強く感じているだけじゃねーかな?
変数名を見ただけで型がわかるっつーけど、そんなの俺らが気にする事
じゃなくてコンパイラが間違ってるぜーって教えてくれるし、わざわざ
醜い命名規則使う必要ないって感じ?
よくはwalterタンに聞かなきゃワカンネと思う。
ただ、winapiとか使ってるといつの間にかハンガリアン使ってる俺ガイル。
HRESULT onCreate(HWND hWnd, LPCREATESTRUCT lpcs)とか。
昔は長い変数名は嫌われてた 今みたいに20〜30文字当たり前の状況では ハンガリアンは受け入れられるのではないか まぁ、命名ルール覚えるのが面倒っつーのが大きいわな IDE支援があればともかく
するってーと、ハンガリアンのように一文字に省略するのは流行らないから const char * const constCharConstPointerTentative; とかになるのかな? #あ、Dじゃないや(ぉぃ
ちゅーか普通に const char* foo; ってすれって意味じゃないのか?w
>個人的には型に対するコンパイラのチェックが貧弱な言語のためのもので、strong typedefが使えるならいらないと思う。 俺もそー思うYO
>>282 型チェックとかで違ってくるだけだろうね
でもDとしてはそういう、ポインタを整数として直接いじるようなことは
言語仕様としてやめたいはずで、だから通らないのはむしろ本来的なんじゃね
if (hoge in {1,3,5}) { //statements } こういうの希望
if (hoge in {1,2,3} union bar.values()) うはっ、夢がひろがりんぐw
いいかげん暗黙のテンプレート実体化をくれ。
bit[int]とかvoid[int]とかのハッシュの定数ってまだ書けないんだっけ。
日本語扱うのマンドクセ
295 :
デフォルトの名無しさん :2005/09/19(月) 19:21:02
dmdでコンパイルしてるとき class Foo is forward referenced when looking for 'KEY_CODE' ってな感じのエラー出たんだけど、forward referenceはどうやって回避したら良いの? ちなみに'KEY_CODE'は public class Foo { public static enum KEY_CODE { ... }; } て言う風に定義してるんだが… C言語のヘッダーファイルでこんがらがったときと同じようなものなのか?
DからC++の関数を呼び出したいんだがクラスとか絡んできたらどうするの?
マングリングでぐぐった後途方に暮れて諦める
>>297 マングリング名のままのシンボルでデバッグする羽目になったこと有るのですげぇその気持ちよく分かる。
↑ブレークポイントしかけるのも頭痛かった。
マングリングとはまんぐり返しをしている状態だと思ったのは俺のほかに何人いるだろう
違うとわかっていても本当はそうなんだと信じたい俺を0.5人として数えておいてくれ('A`)
303 :
295 :2005/09/20(火) 00:02:27
サンプル "forward_decl.d" ------------------------------------------ import std.cstream; void f1(Class.SOME_ENUM value) { dout.writeLine("do nothing"); dout.flush(); } class Class { public static enum SOME_ENUM { VAL1, VAL2 }; } void main() { f1(Class.SOME_ENUM.VAL1); }
304 :
295 :2005/09/20(火) 00:03:05
コンパイル dmd forward_decl.d ------------------------------------------ 出力 forward_decl.d(3): identifier 'SOME_ENUM' is not defined forward_decl.d(3): SOME_ENUM is used as a type forward_decl.d(3): cannot have parameter of type void C:\home\work_private\code\D\forward_decl>dmd forward_decl.d forward_decl.d(9): class forward_decl.Class is forward referenced when looking f or 'SOME_ENUM' forward_decl.d(9): class forward_decl.Class is forward referenced when looking f or 'SOME_ENUM' forward_decl.d(3): no property 'SOME_ENUM' for type 'forward_decl.Class' forward_decl.d(3): Class.SOME_ENUM is used as a type forward_decl.d(3): cannot have parameter of type void ------------------------------------------ てなかんじ。
305 :
295 :2005/09/20(火) 00:04:20
すまそ、さっきのちょと変 ------------------------------------------ 出力 C:\home\work_private\code\D\forward_decl>dmd forward_decl.d forward_decl.d(9): class forward_decl.Class is forward referenced when looking f or 'SOME_ENUM' forward_decl.d(9): class forward_decl.Class is forward referenced when looking f or 'SOME_ENUM' forward_decl.d(3): no property 'SOME_ENUM' for type 'forward_decl.Class' forward_decl.d(3): Class.SOME_ENUM is used as a type forward_decl.d(3): cannot have parameter of type void ------------------------------------------
問題の最小コードはこんな感じか。 Class.Enum f(); class Class{enum Enum{e}} で、自分が困ったときは class Class{enum Enum{e}} Class.Enum f(); と定義順を変更して回避した。(importが絡むとさらにメンドイ) でもDって前方参照しても良いはずじゃなかったっけ?
のはず。
DMD 0.132リリース
Ddocね。 ネーミングが・・・
[[ ┴  ̄l
DDocでもいい
合間を取ってdogsで手を打たないか?
Newsgroupsで一時期候補に挙がっていた、Docterとか良さそうだったんだけどな。
ブラックボックステスターみたいなイメージがする <どくたー
D Oxygenって名前にして元の奴乗っ取る
惑星探査機とかそういうのから名づければいいのに・・・
なんだろう。 DocPathFinderとか?
Microsoftを見習ってDocument 説明翻訳されるとよいなぁ。 和訳マニュアルは本家のデザイン変更に追従するのかどうだか。
NetBeansみたいにソースやJavaDocにサクッと飛べる関連付けを意識して頑張って欲しい。
DeepDocsとか #HTMLにDを埋め込めるよ! っての忘れられてる希ガス
>>321 わざわざHTML書くか?っていう問題にぶち当たったんだと思うw
HTMLは検証コードをコンパイルするためのものでしょ ベンチマークとか良くネットに晒されてるじゃん。あれをお手軽コンパイルするのが目的。
そんなんどうでもいいからコンパイラを先に完成させろといいたい。 ソースの最初にenumを書いてるので前方参照ではありえないのに forward referenceの警告と一緒にぬるぽ吐いて止まるので ものすごく困ってるんだが。
325 :
295 :2005/09/21(水) 00:44:11
>306 私も同様に定義順を並び替えて回避した。 しかし、前方参照を許可するはずのD言語なのに…
wikiにDdocの情報を追記してくれた人ありがとう。
質問です。 Win32API の GetWindowText 関数を使用したいのですが、 int len = GetWindowTextLengthA(m_hwnd); char[] str = new char[len + 1]; GetWindowTextA(m_hwnd, str, len); printf(str ~ "nullpo"); printf("aho"); 上のコードを "title" というタイトルのウインドウに適用すると 出力が以下のようになります。 titlaho これはどうすればよいのでしょうか。
>>327 そもそもGetWindowTextはヌル文字も含めたバッファサイズを指定するのだからGetWindowTextA(m_hwnd, str, len + 1);だろ。
んで、str ~ "nullpo"がnullpoを表示しないのは、 strの中にnul文字があるから、そこで文字列の終了と勘違いするから。 str[0..$-1] ~ "nullpo"とすればこの場合は大丈夫
330 :
327 :2005/09/22(木) 21:17:41
DのNULL終端なしは大失敗な設計に終わるかも
Cとのインターフェイスで気をつければいいだけだろ。
Dだけでやってる分には特に問題ないし
D以外に触ろうとすると問題。 ま、自分はD言語の外はあまり触らんから問題ないけど
Dも仕様見てる分には楽しそうなんだけどな JavaはGUI周りがしっかりしてきて実用しても楽しい段階だし Dも早くその領域に追いついて欲しい
Javaはどうも好きになれなかった・・・・・・ なんでテンプレート無くてコンテナから出してもObject扱いなんだよーとか(当時) なんで演算子オーバーロード無いくせにStringだけ特別扱いなんだよーとか なんで組み込み型はクラスじゃないんだとか 標準ライブラリのクラス群の名前の長さに辟易したりとか 趣味でプログラム書く分にはどうも気に触る点ばっかりだったように思う。 当時既にC++信者だったし。 今改めてやってみたらまた別かもしれんけど。
インクリメンタルサーチやインテリセンス(これは製品名か、俗称知らね)が普及してるからなぁ 逆に公開メソッドは略さない用に気を使うほどになったよ。(内部はガリガリだけど) NetBeansってIDE使えば、VC++とVB6.0の間くらいの手間でアプリが作れるしね。 言語や環境の成長を見届けるのは楽しくもあり、もどかしくもあるw
>>336 それで合ってるよ。
個人の趣味レベルの規模であれば、
とにかく言語仕様がシンプルであることに尽きる。
それには膨大なライブラリやオブジェクト指向はお荷物となる。
つまり、JavaやC++は個人で使うには向かない。
OOPが企業向け?なんか違うような…
ネイティブで動かない言語は 余計なところで、気を使わないといけないから いいんじゃないの?
341 :
327 :2005/09/23(金) 00:29:10
もう一つ質問してよろしいでしょうか。 ウインドウを作成してウインドウプロシージャに自前の関数を指定したいのですが、 非 static なクラスメンバ関数を指定するにはどうしたらよいでしょうか。 extern (Windows) private LRESULT WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { ... } として宣言した WndProc に対して WNDCLASS で wc.lpfnWndProc = &WndProc; とすると、コンパイル時に cannot implicitly convert expression (&this.WndProc) of type \ int delegate(HANDLE hwnd,uint msg,uint wParam,int lParam) to \ int(Windows*)(HANDLE,uint,uint,int) というエラーが出力されます。 static 修飾子をつけると問題なくコンパイルされます。
OS決めうちならC++を倒せる唯一の言語かもね FortranやPascalと互角に戦える実行力、短いコードで書けるOOPらしさ delegateや真typedef、string switch、速いGCなど意味もなく使いたくなる機能目白押し
まぁ、CPUがDのソースを直に理解してくれるようになればなんの苦労もないんだがね。
1バイト文字圏の香具師らに取っては速いかもしれないが、 毎度変換しなきゃいけないからマルチバイト文字圏な漏れらにとっては これでエディタとか書いたら遅そう
>>338 > 膨大なライブラリやオブジェクト指向はお荷物となる。
ちょwwwっをまwwww
>>338 それじゃbrainf*ckなんか最高だね!
だって言語仕様は極めてシンプルだし、ライブラリなんて存在しないもの
エスペラント語
文字列比較に関数つかわないから好き
文字列比較なんて頻繁に起こらない
>>249 そこのベンチは不正があった。
最低なサイト。
浮動少数の余剰を求めるのに関数つかわないから好き。
〜なんて頻繁に使わない
文字列の連結に関数つか(r
それよりも他の言語のNo programが多すぎてD言語がトップに見える現象が気になる ベンチの意味あるのかね
fortranやpascalが速すぎて投稿できないんじゃない? my favorite languageが恥を各のは嫌でしょ
こういうプログラミング言語ってどうやって作るの
それより頑張って実装してみる
>>361 それはコンパイラを作る時にする事だろ?
まずテキストから実行できる何かに変換する何かをどうにかするのが先
いや、先ではないだろ
なんか printf("こんにちわ"); が文字化けするんだけどどうすればちゃんと表示されるの?
>>365 コンソールがUTF対応じゃないだけだろ。
printf("こんにちわ" ~ 0); とか char[] a = "こんにちわ"; printf(a); とかじゃね?
char* toMBSz(char[] s) { foreach (char c; s) { if (c >= 0x80) { char[] result; int i; wchar* ws = std.utf.toUTF16z(s); result.length = WideCharToMultiByte(0, 0, ws, -1, null, 0, null, null); i = WideCharToMultiByte(0, 0, ws, -1, result, result.length, null, null); assert(i == result.length); return result; } } return std.string.toStringz(s); }
std.file.toMBSzを呼ぶのが楽。
373 :
371 :2005/09/23(金) 22:17:47
でも
>>370 ではどこで定義されてるか書いてない。
だから、知らん人は下手したら自分で定義して使いそうな気がした。
一応ここで定義されてるのを使うと良いよーと言ってみたかった
D言語研究のリンクからjcode.d引っ張ってきて printf(utf8_sjis("ほげほげ")); とか。
Java並みの強力なコレクションフレームワークはDにも存在しますか?
Javaのコレクションフレームワークって強力だったっけか
うん、強力。配列かノードリストか丸で考慮する必要なし。ソートも楽チン。
D言語は素の配列が多機能だったり連想配列を組み込みでサポートしたりして、 ライブラリじゃなくて言語としてデータ構造をサポートしてる。 だから、その手のライブラリは残念ながら標準にはない。 #queueとlist構造が無いのが少し難点
結局効率とのトレードオフだから よく考えて使わないとヘタクソ加減は変わらんと思う
std.algorithmみたいなのがあるだけでぐっと強力になるね。 クラスなりdelegateなり関数ポインタなりを std.algorithm.mergesort(array, compare)って渡すだけでソート出来て欲しい。
言語使用を拡張して、 array.sort(algorithm,comparer); ってのがかっこいい。
というかarray.sortに比較関数渡せない現状って腐ってるんで早くどうにかして欲しいよね
ソートくらい自分で書けばいいじゃない。
データ構造とアルゴリズムってのはセットで覚える最適化技術だからねぇ 標準で実装してて欲しい分野じゃないかな
比較関数渡せるようにするためだけにソート書くのって正直不毛な気がしてならん。 あと暗黙的関数テンプレートがないから微妙に使い勝手悪いし
>>385 >あと暗黙的関数テンプレートがないから微妙に使い勝手悪いし
言われてみればその通りだな。
しかし配列に.sortあるとは知らなかった。これ正直気持ち悪いんだけどさ。
なんで
>>380 みたいになってないんだろう?
って、まさに暗黙的関数テンプレートがないからだったりして・・・
忘れるな D言語はシェアウェア厨のオナニーの成果物だということを
暗黙的関数テンプレートがあれば、適当にSTLからコードを真似てalgorithm相当の部分が書けるんだけどねぇ。 現状phobosにもtemplateを使ったライブラリが殆ど無いからな。 あんまりtemplateに対するサポートは期待できそうにないなぁ。
.sortに渡す(ようにしたい)比較関数は opCmpをオーバーライドすればいいんでない?
>>390 構造体ソートとかどうするの?昇順、降順、カラムの優先順などなど。
Comparatorなるクラスを放り込めれれば
それをセッタで指定して、比較関数の内容を更新できる。
ところで正式リリースの予定とか何も考えてないのかなぁ。 せめてMono以上には注目を集めてほしいもんだが。
暗黙的関数テンプレートって何? 非スタティックメンバにテンプレートは使えないってのとは違う?
C++でいうところの template<typename T>void f(T t){} のような物。templateのパラメータを暗黙的に推論してくれる関数。 D言語ではtemplateのパラメータを自分で明示的に指定しなくてはならない。
#defineが健在だったら #define func(x) func!(typeof(x))(x) みたいなことも出来たんだが。まあ無理矢理すぎるな。 #defineを復活させる理由にはならんし。
やっぱ#defineって便利だよな
便利なだけだったらいいんだけどな
Linuxな話ですが、 Dで作った.soファイルってCからダイナミックリンクできますか? インターフェースになる部分は - test.d - extern(C){ int interface_c_to_d(char *data) { ... } } dmd -c test.d gcc -shared -o libtest.so test.o って感じを考えてます。
DWTでDisplay.asyncExec()を使うとwin32exceptionがおきるんだけど 原因がわかりません。 どのように書けばいいのか教えてください。 以下Win32Exceptionがおきるコード
401 :
400 :2005/09/25(日) 17:13:47
import swt.all; import std.thread; class Hello { private Shell shell; public Shell open(Display display) { shell = new Shell(display); shell.open(); return shell; } public static void run() { Display display = Display.getDefault(); Hello hello = new Hello(); Shell shell = hello.open(display); // スレッド作成 Thread th = new Thread(&foo, null); th.start(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); } }
//続き class Huga : Runnable { public void run() { } } int foo(void *nullpo) { Display.getDefault().asyncExec(new Huga()); //Win32Exception発生 return 0; } void main(char[][] args) { try{ Hello.run(); }catch(Object o){ MessageBox.showMsg(String.fromChar(o.toString())); } } //以上
いつのまにやら0.133だな。
仕様変更は落ち着いたっていう認識でいいのかな? やっと本格的に何か作る価値が出てきたのかな?
いや、落ち着いたと思ったら一気に仕様が変わった事が何度もあるから、 明示的に仕様変更がフリーズされたことが発表されない限りは安心できない。
関数テンプレートあたりが変わってくれるといいね
早速Ddocの仕様が変わってるしw
387 名前:デフォルトの名無しさん 投稿日:2005/09/24(土) 00:17:48 忘れるな D言語はシェアウェア厨のオナニーの成果物だということを
( ゚д゚)σ)Д`)オナニースキナクセニ
オナニーじゃ子供はできんのですよ。 子供ができちゃった以上オナニーじゃないのですよ。
じゃ、クローン。 D IS FOR DOLLY.
質問です。
http://hp.vector.co.jp/authors/VA028375/d/windows.h.html のサイトのライブラリを使用して LOGFONT 構造体を使いたいんですが、
リンク時にエラーが出ます:
Symbol Undefined __init_5win326wingdi11tagLOGFONTW
そこで関数のインポート方法にならって *.def に次のように書いて *.lib を構築し、
リンクするとリンクエラーは出なくなります:
LIBRARY 'gdi32.dll'
EXPORTS
__init_5win326wingdi11tagLOGFONTW = LOGFONTW
ところがこの方法では実行時に次のようなメッセージボックスが出ます:
プロシージャエントリポイント LOGFONTW がダイナミックリンクライブラリ gdi32.dll から見つかりませんでした。
これはどのような方法で回避すればよいのでしょうか?
一緒についてるwin32.libをリンカに渡すの忘れてるだけじゃね?
414 :
412 :2005/09/27(火) 17:32:14
>>413 その通りでした・・・orz
スレ汚しすいませんでした。
D言語のプロパティってキャピタライズしない方がいいのかな? visibleとかsizeとか、ローカル変数と衝突しそうで気持ち悪いんだが。 本家のスタイルガイドにはプロパティに関する記述はないし。
ところでEclipseDってどうなっってんの?
DIDEってもう公開してないんですか?
象さんになったってことでしょ 個人的にはThebeがもうちょっと拡張されてくれればな、と思ってるんだけど
DMD 0.134リリース いつも報告してた人はどないしたの?
Ddocばっかだな どうでもいいとまでは言わないけど なんかまたリリース版が遠のいた感じが
typedef class Hoge{} って書くとtypedefが無視されてHogeが宣言されたかのように扱われるんだが これってバグでいいのか?
ぽいね。
std.dateを試しに使ってみたのですがいまいち思ったような動作をしてくれません private: import std.date; int main(){ d_time tm1 = getUTCtime(); d_time tm2 = UTCtoLocalTime(tm1); // JSTに変換? printf("%.*s\n", .toString(tm1)); printf("%.*s\n", .toString(tm2)); // JSTで表示されてほしい return 0; } 実行結果: Sun Oct 02 08:27:00 GMT+0000 2005 Sun Oct 02 08:27:00 GMT+0000 2005 ローカルタイムに変換したつもりが同じ結果になってしまいます。 JSTが表示されるようにするにはどうしたらよいのでしょうか。 dmdのバージョンは0.134 OSはWindows2000 SP4です
バグじゃねーの? 半年以上前にバグ報告されてるみたいだけど。
多分、バグですね。 自分は諦めてstd.c.timeでお茶を濁してる。
Win32版だとgetLocalTZAを弄れば直りそうな希ガス
TIME_ZONE_ID_UNKNOWNを無視しちゃってるのね。 std.date.LocalTZAを上書きするって荒業はどうよ
428 :
423 :2005/10/02(日) 18:44:09
バグなんですか・・・・・・まあ仕事で使ってるわけじゃないので放置することにします。 回答ありがとうございました。
以下のコードですが、1.を有効にするか2.を有効にするかで実行結果が変わってしまいます。 具体的には、1.を有効にすると出力は Welcome to C Welcome to D Welcome to D 2. を有効にすると Welcome to C Welcome to C Welcome to D となります。 一体何が起きているんでしょうか。
import std.stdio; const char[] g_str = "Welcome to D"; char[] getHello() { return g_str; } int main() { char[] hello; hello = g_str; // 1. // hello = getHello(); // 2. hello[$-1] = 'C'; writef("%s"\n, hello); writef("%s"\n, getHello()); writef("%s"\n, g_str); return 0; }
constを書き換えようという根性に乾杯。 まぁ書き換えたいならconst外せっていう話は置いといて、 constはそこに直接定数を書くのと同じって扱いみたいだな。 hello = g_str; が hello = "Welcome to D" という風に解釈されて別の文字列とメモリを共有しないと。 まぁ同じ文字列ならメモリの無駄ですから書き換えを完全に禁止にして、 メモリを共有して欲しいですな。
ああ、なるほど・・・納得しました。どうもサンクスです。 const char[] hoge() {...} っていうコードがエラーになるのでいろいろやってるうちにこんな変なコードを 書くに至ったんですが、D では書き換え不可な配列ってないんですかね。 関数内外で書き換えられていないことを保障するためにあった方がいいと思うんですがねえ。
これ単なるバグでしょ?仕様だったらすこし引いちゃうかも。 gdcだとconstがあってもなくても hello[$-1] = 'C'; のとこで Bus error (core dumped) になるのが悲しい。
constはDでは定数であることを宣言する。 つまり、コンパイル時に値が確定しているということですね。 Walter氏は値が不変という意味のconstは大嫌いみたいですが。
正直、char[][char[]]等という連想配列の宣言がどうも気持ち悪い。
>>435 var[文字列]が文字列要素を返す連想配列の事?
可変長の変換テーブル作るのに便利じゃん。
Dはcharが神聖化されすぎている。 int[][int[]]じゃ駄目なのか
439 :
435 :2005/10/03(月) 21:51:30
>436 そういうことじゃなくて、型の宣言のしかたがいまいち慣れなくて違和感を覚えるというか。 まあ437の言うように、慣れればOKなのかもしれないけど。
>>438 ダメなのか・・・って。
そういう使い方もできるけど、用途はあんまり思いつかないなあ。
int main()
{
int[][int[]] iiaa;
int[] ia1,ia2,ia3;
ia1 ~= 1;
ia2 ~= 2;
ia3 ~= 3;
ia3 ~= 4;
iiaa[ia1]=ia3;
iiaa[ia2]=ia1;
iiaa[ia3]=ia2;
printf("%d\n",iiaa[iiaa[iiaa[ia3]]][1]);
return 0;
}
せめてint[][int]なら使いでがありそうだったのに
charは文字にだけ使えって意味でしょ。wcharやdchar然り。
int[int[int[][int][]]]
aliasを使えばOK alias char[] string; string[string] a;
DMD 0.135 release (Ddoc update)
Another extensive update of Ddoc, www.digitalmars.com/d/ddoc.html
This one adds color syntax highlighting of D code, and the ability to
process any document, not just D modules. A big chunk of the D documentation
was converted to using Ddoc, you can see it in the color syntax
hightlighting!
I hope to get back to regular bug fixing after this.
http://www.digitalmars.com/d/changelog.html
ディーエムディーって響きがカッコイイよな
カラーの履歴なんて初めて見たよ。これはもう正式版かもわからんね。
version0.128で止まってる俺はついていけない・・・ orz
最新版を入れろ、それも今すぐにだ!
ttp://gba.imou.to/gcc.html を参考にarm-agb-elf用のgcc環境を作成し、
同時にgdc-0.15も作成しようとしてるのですが、
phobosのconfigureで"ハネられてしまいます。
どなたか成功された方がおられたら、ご教授
よろしくお願いします。
news.digitalmars.com って落ちてる? 俺だけ?
落ちてるぽいですな
D言語でライブラリ作りたいんだがなんか特殊な作法とかあるの? OSはWin以外って事で
まだ、復旧してないですな
JavaでいうArrayListを配列スライスで表現しようと思ったけど 同じ領域のコピーはダメなんだったっけか。 新しいの作ったほうがいいのかな?
>>459 ArrayListとスライスの関連がよくわからん。くわしく。
list.remove(i); で切り詰めコピーができない
removeの中身を自分で書くのなら、スライスにこだわらず、いくらでも書きようがあるだろう。 しかし、リストはリストであって配列とは異なるデータ構造ではあるな。
代入演算子のオーバーロードが無いんだから、素直にmemmove呼ぶのが良いんじゃないの
構造体を一度、配列に確保してからforで各構造体のメンバに値を代入していくってできないのか?
すいません。教えてください。 コンパイルしようとすると以下のメッセージがでて失敗します。 object.d: module object cannot read file 'object.d' dmd\src\phobosにobject.dがあったのでそれをソースのある場所と 同じところにおいたらコンパイルできました。 いちいちobject.dをソースのある場所に置くのは馬鹿らしいと思うのですが、 なんかpassみたいな環境変数があってそれを設定すればobject.dをソースと 同じ場所に置かなくてもすむようになるのでしょうか。 環境はWinXP+Cygwinです。
環境変数てpathですか? pathじゃだめだったんですが。 なにかほかの変数があるのでしょうか。
sc.iniはどうなってるんだろう?
こんな感じでした。 dmd/sc.ini [Version] version=7.51 Build 020 [Environment] LIB="%@P%\..\lib";\dm\lib DFLAGS="-I%@P%\..\src\phobos" LINKCMD=%@P%\..\..\dm\bin\link.exe dm/sc.ini [Version] version=7.51 Build 020 [Environment] PATH=%PATH%;"%@P%\..\bin" BIN="%@P%\..\bin" INCLUDE="%@P%\..\include";"%@P%\..\mfc\include";%INCLUDE% LIB="%@P%\..\lib";"%@P%\..\mfc\lib";%LIB% HELP="%@P%\..\help" これをいじれば良いんですか。
>pathじゃだめだったんですが。 無駄口グダグダ抜かす前にやったことを正確に書け
半角スペースが入ってる名前のフォルダにdmd入れるとダメ、 とかじゃなったっけ、それ
>>471 本当だ。
DFLAGS="-I\"%@P%\..\src\phobos\""
にすれば動くね
akIDEを使ってるんだけど、同様の問題でソースパスに
スペースが入ってるケースでも駄目なんだよね。
dmdがリンカに渡す際に二つに分かれてしまう
これはリンカのラッパを書けばok
473 :
465 :2005/10/12(水) 22:55:53
>>471 おっしゃるとおりProgram Filesにdmd入れてました。
解決しました。
ありがとうございます。
474 :
デフォルトの名無しさん :2005/10/13(木) 00:29:29
ちょっと怖いのでageときますね
dmdはwin32とlinux版以外に作る予定はないのかしら?
dmcを見れば答えはわかるだろ
とりあえず、その二つだけで、ユーザー層の90%以上には対応するでしょうから、 dmdはそれだけでしょうね。
>>477 じゃあ俺はユーザー層の10%以下の中にいるってことか・・・
WinもLinuxも使ってない開発者となると、それこそ1%じゃ済まないんじゃない?
C or Objective-Cぐらいしか選択肢がないんで
macですか
>>481 そうです。今はgdc使ってますがやっぱりね〜
あれ、macって消滅したんじゃなかったっけ?
SUNが採用してるんだからUNIXにも対応するだろ
>>484 SUNが使ってるのは同名だけど全然別の物
>>485 Hexadecimal:
0x HexDigits
0X HexDigits
としか書いてないから、文章の誤りですね。
単純に考えれば、FFhと書いてあったら、識別子と区別がつかないので、
そんな仕様にするわけがないのに、何でそんなミスをやってるんだろう。。。
ソース見てみたけどその部分を処理するパスは一応書かれてるな。 マクロ"ZEROH"が定義されてないからコメントアウトされてるが。
iftypeはいつドキュメントから消えるのだろう(あるいはobsoleteと明記されるのだろう)
D 0.136 でたよ
だから何
0.136カワイソス(´・ω・`)
elephant 0.30リリース
だから何
〃∩ ∧_∧ ⊂⌒( ´・ω・) はいはいカワイソスカワイソス `ヽ_っ⌒/⌒c ⌒ ⌒ ∧_∧ ⊂(#・ω・) カワイソスって言ってんだろ!! / ノ∪ し―-J |l| | 人ペシッ!! __ \ \
どうよっていわれても開けんからなぁ
こっちの環境じゃエスケープシーケンス使えんから評価できん。 まぁ適当にソースだけ読むと、ファイル名以外、 特に突っ込むとこもない、普通の書き方だな
カワウソス
gdcでextern (C)で関数の宣言したらシンボル名のアンダースコアが削られるんだけどなんでかな? おれが書いたアセンブリ側のソースがおかしいかな?
C言語のexitに対応する関数って何ですか? std.c.stdlib.exit()しかないの?
適当に終了用クラス作って、それを例外で投げれば?
正常終了の時にも例外投げるってのはあんまり気持ちが良くないと思う
>>503 制御構造における例外の便利さを知らないという発言に聞こえる
>>503 同意
次にSTLあたりを挙げて反論が来るんだろうがw
>>504 例外を単なる制御構造としてしか見ていないという発言に聞こえる。
最初のところでつまづいてるんだが stdoutがデファインされとらんとか言われて てっきり、ライブラリにパスが通ってないとかかと思ってさんざん悩んだ挙句 さっき公式で検索かけたらstdoutがD0.126で非推奨になりましたーとか書いてあるしOTL もしかして、stdoutって、もう使えない?
printfが特別に残されているんだしvoid exit(int)も組み込みで用意して欲しい。 でないとちょっとしたツールとかでメンドクサイ。 メンドクサイという事は創作意欲を損ねてしまい、結果Dで作る必要性もなくなる。
>507 import std.cstreamしてdout使えばいいんじゃない >508 import std.c.stdlibはそんなにめんどくさいか?
>>506 はあ?504がそんな主張に見えるお前は
プログラム言語より日本語勉強しろよ(藁
exitが単に_exit呼ぶだけならいいんだけどな
514 :
513 :2005/10/23(日) 22:18:54
お、ぜんぜん関係なかったです。すまそん
0.137
バグリストってどこかにある? DWikiに載ってないのかな?
なんだよcnドメインって中国かよ
>>517 公式なのは、ないのか・・・
昔からのバグとか、ステータス状態みたかったんだが
D言語って、オリジナルのソースがないとimportできないものなの? 生成されたバイナリからシンボルをimportすることできないの? Javaだったら、コンパイルされてできた.classファイルからシンボルをimportできるよね。 Dだと、元のソースが必須になってしまってかっこわるい。
別に元のソースは必須じゃないけどな、、、インポート用に中身のない宣言だけのソースを別に作れば、、、 ま、旧来のobjファイルを使ってるが故の制限ではある。
522 :
520 :2005/10/25(火) 22:42:41
>>521 ほうほう、宣言だけのソース作ればいいっと… って、C/C++のヘッダファイルと変わんないじゃん!
importするだけでリンクまでできちゃえばいいのに。
わざわざ、importを書いて、またコンパイラに各モジュールをパラメータとして書いてやるのがめんどい。
せっかくJavaの使いやすさとC/C++の小回りの良さを持ってるんだから、あとちょっとなのになぁ
.NETにおけるDLLはソースなくても宣言がひっぱり出せるからそれでライブラリのインポートできるんだがなぁ。 GCCがこれに対応してくれりゃ問題ないんだが。
524 :
520 :2005/10/25(火) 23:02:57
そうそう、そんな感じの実装がほしい。
>>524 news.digitalmars.com
へリクエストするんだ!
って、また落ちてる?
一応、pragmaでライブラリのリンクはできたと思うんで、 インポートされるファイル中に入れておけば自動リンクできたりしないかな。 普通のソースから宣言のみのソースを生成するのは難しくはないよね。 DMD本体に持って欲しいな。
だから宣言(ry
>515 added implicitまで読んでついにテンプレートの暗黙実体化が来たかと喜んだ。 違った。
>>515 型推論のautoとRAIIのautoで2重の意味でautoが使われてるのが少しキモイなぁ。
RAIIのほうは別の予約語導入したほうがいいんちゃう? とか思ってしまう。
俺のものは俺のもの。 お前のものは俺のもの。
俺の物は俺の物。 お前は俺の物。
>>532 ちょっと待った!
今のは聞き捨てならないぞ!!
D言語で8進数の値の表現はどうしたらいいの?
C/C++と同じく数値リテラルの先頭に0をつける 010が10進数で8になる
Cで読めるものはCで動く が一応のコンセプトだしね ところどころ違ってるだろうけど
540 :
デフォルトの名無しさん :2005/10/29(土) 04:10:47
<⌒/ヽ-、___ /<_/____/
やっぱD言語は間違った方向に行ってるな。 設計してる奴相当のアホだわ。
じゃあ、お前が作り直せ
いちいちSJISに変換しなきゃいけないのが面倒くつすぎて日本人には使えない言語ですな
お、かな入力か
UNICODE?
一週間カキコ無しage
いまさら作りたいものなんて無いんだよな もう言語仕様じゃなくてライブラリの時代だからめんどいだけ
まともなIDEがあればなぁ。
dmd 0.138
〃∩ ∧_∧ ⊂⌒( ´・ω・) はいはいカワイソスカワイソス `ヽ_っ⌒/⌒c ⌒ ⌒
0.138の"string"[constant]が定数になるのを利用すると、 こういうtemplateを作れるのか。 template ULtoString(ulong n,int b:0){ const ULtoString = .ULtoString!(n/10,n/10 < 10) ~ "0123456789"[n%10..n%10+1]; } template ULtoString(ulong n,int b){ const ULtoString = "0123456789"[n%10..n%10+1]; } template ULtoString(ulong n){ alias .ULtoString!(n,n<10) ULtoString; } int main(){ printf("%.*s",ULtoString!(1002)); return 0; } これ以外にもオモロイ使い方ありそうな気がするけど思いつかない......
>>555 そういうコードがNewsgroupsに投稿されてたよ。
で、
template digittostr(int n) {
const char [] digittostr="0123456789"[n]; // これがうごかねー
}
という話があったかと。
ちなみに、こんなコード。
template inttostr(int n)
{
static if (n<0) const char [] inttostr = "-" ~ .inttostr!(-n);
else static if (n<10) const char [] inttostr = digittostr!(n);
else const char [] inttostr = .inttostr!(n/10) ~ digittostr!(n%10);
}
static ifの使用例だね。
557 :
555 :2005/11/08(火) 01:33:50
>>556 残念。同じネタを既に出してる人いたのか。
その人になんとなく負けた気がするので、対抗意識燃やして文字列をパースして数値型に変換するのを書いてみた。
template SubString(T,int s,int e){
typedef char[] SubString = T.init[s..e];
}
template Str2L_(T){
static if(T.init.length == 0){
const r = 0l;
}else static if(T.init[0]=='-'){
const r = -.Str2L_!(SubString!(T,1,T.init.length)).r;
}else{
const r = T.init[T.init.length-1]-'0' + 10 * .Str2L_!(SubString!(T,0,T.init.length-1)).r;
}
}
template Str2L(T){
alias Str2L_!(T).r Str2L;
}
int main(){
typedef char[]str ="-232";
printf("%lld",Str2L!(str));
return 0;
}
0.139
gdc0.16にアップデートしてみた・・・ やっとDdoc使えるや
MessageBoxAはあるけどMessageBoxWは無いんだよなあ 日本語でメッセージを出すにはどうしたらいいんだろう
std.fileのtoMBSzを使ってA系のAPIに渡すのが一番楽だと思う。 W系のAPI使いたいなら、どこかから まともなwindows.hのポーティング拾ってくる必要が。
> toMBSz おお、そんなのあったんだ ありがとう、dクス
MessageBoxWぐらいなら、自分で引いて宣言してもいいんだけど、 あれもこれもとなると面倒くさくなるんだよな。 機械的に変換できるのが最良だけど、SDKのヘッダファイルはめちゃくちゃだからなあ。
どこかにD言語のマルチスレッドのサンプルプログラムありませんか。
Dでアプリを作っているんだが、 GCが動くとそれまで2MBだったメモリ使用量が一気に300MBまで 上がったりするんだけど、そういうことってありえる?(GC使うの初めて・・・) アプリが悪いってのは分かっているんだが、 どういうことをしたらそうなるのか分からないたすけて。 アプリはマルチスレッドでスレッド間でメッセージのやり取りしまくりで ソケットも使いまくってる。
CgとかGLSLみたいに、4次元までのベクトルと行列を言語でサポートして欲しいなぁ。
問題点は、たとえば、単なる多次元配列との区別かな。
>>569 バグとして報告したほうがいいんじゃない?
俺はそんな経験なかったし、気になるね
最近ちょっとさわり始めたけど、better C、light C++としてはかなり便利で手軽だと言う印象。 コンパイル早いのがいい。
>>569 D言語のマルチスレッドはまだまともに実装されてないって聞いたよ
せっかくPowerPC G5なのにreal型は64bitしかないよ・・・ AltiVecがあるのに・・・
D言語からLunaを使う情報とか、どこかにないすっか?
何も考えなくてもいいと思うのだが。
Lunaって
ttp://www.twin-tail.jp/ のアレだよね?
だったら、これくらいしか思いつかないな
1 ライブラリのソースをDに書き直す (Direct Xはどうするんだろう)
2 VCとかでライブラリのソースを無理やりC言語ライクにラッピングしてDLL化した後、
そのDLLをナントカして組み込む
579 :
576 :2005/11/21(月) 22:46:20
D言語でDirectX触れないんだっけ?
DBuilderが出るまでオレは待つ
.NET対応のネイティブコンパイルできないVisualD++が先に出る
そういえば、D.NETって誰か作りかけてたけど、もう完全に消えちゃったのかな?
585 :
デフォルトの名無しさん :2005/11/24(木) 10:40:55
eclipseDは?
要望が多そうだと思われる事。 ・IDE ・RAD ・GCをオプションに
↑追加 ・早急にver1.0をリリース
所詮シェアウェア厨のオナニー言語だから
>>588 ('A`)?
痛々しい発言だな (´゚c_,゚` )プッ
590 :
デフォルトの名無しさん :2005/11/24(木) 20:52:10
誰か作ってくれよん。
何を?
D言語ってシェアウェアなの?
あのさ、char を(一文字の)char[]にしたい時って 「cast (char[]) c」ではうまくいかないから 俺は「"" ~ c」ってやってるんだけど これってどうなのかね? もっとうまいというか、一般的な方法があったら 教えてもらえると勉強になるんだけど
>>592 588は頭の弱い子だから同情の眼差しでほっといてあげてください。
dmd 0.140 リリース ダカラナニ? ハイハイカワイソスカワイソス
>593 俺は「c[0 .. 1]」を使っている。
599 :
597 :2005/11/25(金) 22:34:05
> (&c)[0 .. 1]じゃなくて? すまん、適当に書いてた。それで合ってる。
なるほど。こういうときに、配列リテラルがあれば役に立つんだね。
>>592 D言語が完成したらシェアウェア化されるはず。
いまはまだ試作段階。
>>597 なんと。そんな手があったか
つーか char* から char[1] へ
そんなふうに変換できるのも心得てなかったわ
勉強になりますた
>>602 過去の実績からみてもシェアウェア化は確実。
GDC(GCCのD言語版)があるから気になるところではないけどな。
606 :
デフォルトの名無しさん :2005/11/26(土) 05:09:05
ちょっと教えてほしいことがあるのですが シャアウェアをインストロールしたらレジスターが 書き換えられてディスクトップがぐちゃぐちゃになって、 エキスプローラでホルダーをクィックしても動かなく なってしまいました。どうすればレジスターを修復で きますか? ソフトはWindous95で機種はBMWの アクティバです。接続環境はフレッシュISBNです。 ヤッホーやゴーグルなどの検索で調べても解らないので ツーチャンネルの皆様、ご指導よろしくお願いします。
はいはい
わろすわろす
シャア専用板行け。
いちいち全部間違えているのでネタだとわかる好例。
ひとをだますときは本物の中に嘘を入れると良いってNASAの人も逝ってた
というかもともとそういうネタだろ! マジレスカコワルイ
GDCがあるからきにしないでいいよって おかあさんがゆってた
しかしGNUも有料化 ソフトウェアをタダで使う精神が間違ってたとRMSも猛省
プププー、GNUは昔から「金は取らない」なんて言ってませんよ?
>>616 だがやらなかった。
何故か?
所詮同じ穴のムジナだからだ。
でもこれからは違う。
そんときはそんとき
タダだからこそバザールが機能したんだよ 金を取るならまた違うOSSに流れていってそっちにに駆逐されるだけ
Dスクリプt…いや、何でもない。
バザールとか言われても、バザールでござーるしかわかんねーよバカ
JavaにはGUIアプリ開発が可能なNetBeansがある。 DMも最低限それくらい用意して1.0と同時に発表するんだろ?
Javaは伽藍?
EclipseのJDTを八苦してD用に作り変えるのって逆に遠回りかな?
>>624 有償か
ものにもよるけど、4万くらいまでならいいかな。
Flashとかに比べたら屁でもない値段だ。
問題はDの案件が来るのかどうかだが。
物を作って証明してけばいいんだよ。 「早いJavaです。メモリをアホみたいに食うバグを改善しました」 みたいな
>>628 じゃ、Mac版お願いとかいわれたらどうすんの?w
gdcでごまかすか。
でもDで業務システム作ったらJavaと比べて CPUは半分、メモリは1/3くらいで作れないかな? まぁ開発コストが倍になってマシン代のが安いじゃんってなるんだが
性能向上でがんばってハードウェアの数が減らす事ができるならTCO削減を言い訳にDを実業務で採用できなくもないけど。
>>626 VisualAge for Java位ぶっ飛んでいてDelphi並に軽かったら10万でもいいんだけどなぁ
適当なObject型に入ってるインスタンスが、 直接クラス「Hoge」かどうかを判定したいんだけど、そう云う事ってできる? メンバ変数に埋め込まなきゃ駄目かなぁ?
assert(Hoge.classinfo == (new Hoge()).classinfo); かな
636 :
634 :2005/12/01(木) 16:54:19
おお、行けたよ、classinfoなんてあったのか。サンクス。 あと、staticな物体みたいで、 "(new Hoge()).classinfo" じゃ無くても、 "Hoge.classinfo" でも取得できたよ。
一応、typeidとtypeofを使って、 typeid(typeof(obj)) is typeid(Hoge) と比較するのが本流。
instanceofと比べるとちょっと冗長だね 手間だけど高速化の一環で何かしてるのかな?
>>637 残念ながら、それだとこういうとき事したときうまくいかないんだよな……
Object o = new Hoge;
assert (typeid(typeof(o)) is typeid(Hoge)); // assertion failur
cast(Hoge)obj で何が不満なの?
こういうとき事したとき?
642 :
639 :2005/12/02(金) 23:20:22
誤: こういうとき事したとき 正: こういう事したとき
cast(Hoge)obj で何が不満なの?
関数のオーバーライドで何が不満なの? …std.mathが使いにくいけどね。
インタフェースが一緒じゃないときの分配処理で使うんだろ 設計ミスといえば設計ミスだが、 その後の処理がプリミティブ中心だったり オブジェクト中心だったりと変化するならやる価値はある。
cast(Hoge)obj で何が不満なの?
違いが分からないお前のレベルの低さについていけない
cast(Hoge)obj で何が不満なの?
つまんねー荒らしが湧いてるな・・・ 例外おこして判断しろってか?おめでたいやつ
おめでたいのはお前の結婚10周年だアホ
652 :
640 :2005/12/03(土) 18:16:45
なんで俺の発言のコピペ張ってるのかイマイチ理解できない......
>>650 cast出来ないときは例外は発生せずにnullが返るから問題ないです。
cast(Hoge)obj
で何が不満なのか、俺も知りたかったから。
>>650 おめでたいのはお前だ。
なんで例外が起きないんだ?バグじゃね?
>>654 C++もポインタに対するdynamic_castは同じ仕様(失敗時にNULL)
だし別に普通と思いますけど。
>>654 アホか。言語仕様でそうなってるからとしか言いようがない。
> オブジェクト o がクラス B のインスタンスであることを判定するためには、キャストを使います:
>
>if (cast(B) o)
>{
> // o は B のインスタンス
>}
>else
>{
> // o は B のインスタンスでない
>}
「どうして作者がそういう仕様にしたのか」が問われているんだと思う
いちおうJavaも(Foo)nullをメソッドに放り込んでfoo instanceof Fooってやってもfalseだったような気がする nullはFooではないというルールが大前提であるのであれば、どっちの仕様でもいいかな。
コメントなしでソース見たらわかりにくいなそれ
なぜ明示的な用法として Foo foo = new Foo(); if(Foo == foo.getClass()) { printf("foo is class Foo."); } みたいな仕様にしなかったんだ。 この点ではJava劣る。
そのコードは、fooにサブクラスのインスタンスを入れただけで 動かなくなる糞コードだから、劣っているのはお前の頭。
クラスを厳密にしてたら多様性の否定じゃん。 サブクラスは弾いちゃだめ。
派生クラスをはじきたいことも無いとは言えない。
ヒント: 小回りが効くものを組み合わせて大回りさせることは出来るけど、大回りしか出来ないものでは工夫しても小回りは効かない
ヒントって馬鹿かお前。他の方法もあるだろ。
666 :
660 :2005/12/04(日) 00:45:55
>>661 一人で作ってる人には分かりにくいだろけど、
標準ライブラリでも無い限りはサブクラスもきっちり弾かないと飛んでもない事になる。
隙の多い設計/実装やってると揚げ足取ったような超低品質なコードを突っ込んでくるバカが多いからちゃんとしにゃきゃダメ。
特に組み込み上がりの派遣PGとか業務系上がりのPGはヤバい。
なのでDを実業務に使えるようにするにはまず最初にバカを一掃する事ができる言語/ライブラリ設計が必要になる。
>>666 だから、一掃されるのはおまえ自身だって
マクロが欲しくなるな。
671 :
デフォルトの名無しさん :2005/12/04(日) 02:52:23
ところでAKIDEの作者が泣いてる件について
悪いsage忘れたのでsage
といいつつageたかったんだろ?憎い奴
dmd 0.141 リリース ダカラナニ? ハイハイカワイソスカワイソス
コードカバレッジねえ、、、びみょーだな
真に可哀想なのは反応すらしてもらえなかった0.139
1) This includes a new code coverage analyzer for dmd (I think gcov should work for gdc users). I've been wanting to add this for 20 years, I finally realized it was a piece of cake. Took me 3 hours to write, 3 hours to tweak. I shoulda done it a long time ago. I can't believe some third party tools to do this cost $800+. 2) The submissions for bug reports on complex numbers has risen a lot lately, and I never get them for the C compiler. This means that nobody uses complex numbers in C, but they do in D. Interesting! 3) This incorporates a new 'header' generator capability, written by Dave Fladebo. I goofed it up merging it in, so it is disabled at the moment (just the source for it is included). I hope to get it working by the next update. を要約してー
1) これは、dmd(私は、gcovはgdcユーザのために働くべきであると思います)のための新しいコード報道アナライザーを含んでいます。 私は20年間これを加えていたかった。私は、それが容易な仕事であることを最後に理解しました。 私は、書くべき3時間(ぐいとひねるべき3時間)かかりました。 それにずっと前にもたらされたIのshoulda。 私は、これをするいくつかの第三者ツールが800ドルの+を要したと信じることができません。 2) 複素数に関するバグ・レポートのためのサブミッション、最近非常に上昇した、また、私はCコンパイラ用にそれらを得ません。 これは、誰もCで複素数を使用しないことを意味します。しかし、それらは面白いD.の中で行います! 3) これはデイブFladeboによって書かれて、新しい「ヘッダー」ジェネレーター能力を組込みます。 私はそれを中へ合併することを上へそれをへまで台無しにしました。したがって、それはちょうど今(単なるそのための出所が含まれています)無効になります。 私は、それを次の最新版によって働かせることを望みます。
1) これには新しい dmd 用のコードカバレッジ解析器が含まれてるよ (gdc ユーザ向けには gcov が動くはず)。 20 年もこれの追加を待ち続けてきたけど、結局これはこんとんじょのいこって気付いたんだ。 書くのに 3 時間、ちょっと調整するのに 3 時間かかったよ。 もっと前にやっておくべきだったね。 800 ドル以上もするこれをするサードパーティのツールがあるのがアホくさいね。 2) 複素数についてのバグレポートが最近増えてきたけど、C のコンパイラについての そういうのは受けたことがないね。てことは、C では誰も複素数を使わないけど、 D では使うってことか。おもすれー! 3) これには新しい「ヘッダ」ジェネレータ機能を組み込んだよ。デーブ君が書いたんだ。 それをマージするのにへまをやらかしてしまって、現時点ではそれは無効になってるよ (それ用のソースが含まれてるだけ)。次のアップデートまでには動くようになってるといいな。
3) これは新しいヘッダ生成能力を盛りこみます(written by Dave Fladebo)。 しかし私はマージに失敗してしまい現在無効にしてあります。(ソースは含まれてます) 次のアップデートには機能を有効にしたいなーと思ってます。
681 :
677 :2005/12/06(火) 15:05:49
* + 巛 ヽ 〒 ! + 。 + 。 * 。 + 。 | | * + / / イヤッッホォォォオオォオウ! ∧_∧ / / (´∀` / / + 。 + 。 * 。 ,- f / ュヘ | * + 。 + 。 + 〈_} ) | / ! + 。 + + * ./ ,ヘ | ガタン ||| j / | | ||| ―――――――――――― liboggとlibvorbisの一部をDにポーティング出来た
lzoのポーティングが( ゚Д゚)ホスィ…
コードカバレッジってなんだか流行をはずれてるような気がしないでもない。
素人的な考えかもしれない(というか素人)のだが、複素数型より多倍長型をコンパイラ憎みこんで欲しいなぁ
憎みこむ・・・w
つーか、いまどき最低限でもJavaで実装されているライブラリ群と同等のものは用意しないと。 言語仕様もさる事ながらライブラリがしょぼいとどうにも普及せんよ。 たとえば異なる分野に目を向けるとWeb用途のスクリプト言語であるPHPだって、 Perlとさして変わらん言語仕様、しかも貧弱な組み込み機能で合っても 豊富なライブラリ群やデータベースとの親和性で大成功した。 まぁ、いまどきWebを無視してるようじゃちょっと先が心配だな。 日本サイドでDのWeb特化を進めてみたらどうなんだろう。
やろう
Web弱い?epollやkqueueを上手くラップしたライブラリとか作ってくれ
libeventをラップしる! つーか俺、libeventの存在を知ったのつい最近なんだけど どっかに簡単な解説くらいないかな。 selectは知ってるんで、サンプルみりゃ分かる気もするけど。
>>688 Webが得意な言語はいくらでもあるんだから、それつかえばいいじゃない。
過渡競争に混じって車輪の再発明しまくって、
そっちにマンパワー使うのも馬鹿らしいしな。
DはDの良いところを伸ばせばよいと思われ。
Dの用途って10KLくらいのシステム管理・監視用のデーモンだろ?
Dの用途はphpの斜め上、Javaの横、C++の裏辺りかな
>>694 なんとなく解ったような、どこだかな〜みたいな
せっかくDなんだからDのつく開発に使えばいいんじゃないかな? DriverとかDemonとか
s/Demon/Daemon/
DNS Server
DBMS
Doraemon
この辺をフヨフヨしてる ↓ PHP D)) Perl Java C# Ada Ruby Python C++ VB ObjectiveC C
704 :
デフォルトの名無しさん :2005/12/07(水) 16:18:07
:D ||| ドピ──ン ||| ||| PHP Perl Java C# Ada Ruby Python C++ VB ObjectiveC C
char**をchar[][]にしたいんだけどどうしたらいいんだ?
char** pp; char[][] aa = pp[][]; でどうか
vorbis.d:30: need upper and lower bound to slice pointer vorbis.d:30: cannot implicitly convert expression (*(this.vc + 0)[][]) of type char*[] to char[] エラー出た
char[][]をchar*[]にキャストしてヌル終端考慮しながら全コピ、その後char**にキャストしてはどうか
>>708 いやそっちじゃない
char[][] を char** にするのは問題ないはず
>>709 char** charaa2charpp(char[][] charaa)
{
char*[] charpa = new char*[charaa.length];
for(int i = 0; i < charaa.length; i++)
charpa[i] = charaa[i]~"\0";
return cast(char**)charpa;
}
力業すぎて汚えけどこれで一応動いたお
dmain2.dのやり方を抜粋(char** argvをchar[][]argsに変換) extern (C) int main(int argc,char **argv) { char[] *am; char[][] args; int result; version(linux) { am = cast(char[] *) malloc(argc * (char[]).sizeof); } version(Windows) { am = cast(char[] *) alloca(argc * (char[]).sizeof); } for (i = 0; i < argc; i++) { int len = strlen(argv[i]); am[i] = argv[i][0 .. len]; } args = am[0 .. argc]; result = main(args); return result; }
SQLiteとのマッピングフレームワークを作ったら使いやすいだろうか ロギングツールとしてうまく機能してくれたらうれしいが・・
DAOって事かな? 非常に有用だろうね。 interfaceを元に作ってRDBMSにも流用できるように作って。
D言語の出力バイナリってどれぐらい小さくなりますか? 例えば1KBのexe作れますか?
>>715 それはDが目指す方向性と違うだろ…。
そゆことしたい人はCなりassemblerをやれ
717 :
デフォルトの名無しさん :2005/12/09(金) 06:19:03
Ruby書くようなノリでバカみたいに開発・テストが進み 既存のライブラリがリンクし放題で ELFやOMFを吐く嘘の様に速いコンパイラ そんな出来すぎた言語それがD 敢えて愚痴を言うならソースレベルデバッガが欲しい所
>>715 1KBはPEヘッダに入れるセクションの影響でまず無理。
スタートアップがどれくらいの大きさかによるけど、
GC積んでるD言語で小さくするのは難しい。
象さん 0.31 開放
像さん 0.32 & source 開放
>>717 >敢えて愚痴を言うならソースレベルデバッガが欲しい所
VisuatlStudioなりWinDbgなり使うよろし
VC2005 Expressでもちゃんとデバッグできる? 試してみたけど、ブレークポイントで止まってくれないんだが…
>>715 自前でスタートアップ定義して、
標準ライブラリ等(含むGC)を使わずに書いたらHello Worldで4KB程度になります。
でも正直、辛過ぎるので実用上はGC込みの最低でも80KBにしか出来ないかと。
あれ?DOMやSAXは標準で付いてこないの?
>>725 君が作って著作権フリーでDigitalMarsにポストすれば、標準でついてくるようになるよ。
>>725 それと、当然ながらシェアウェアだから金払わないとできないよ。
文字列の連想配列って使えないの?
>>728 使えますよ。
char[][char[]]map;
>>729 そう宣言するのか。今までchar[char[]][]にしてた
象さんのCompiler Settingsが毎回リセットされるんですが私だけですか?
>>723 phobosを抜けばコンパイルに成功した。
ただインラインアセンブラが使えねorz
しかもphobosの移植は依存箇所が非常に分かり難いorz
Cすらない環境にDを持ってくのは無茶だよな・・・
734 :
732 :2005/12/10(土) 16:39:56
>>733 無茶では無いと思うけど、標準ライブラリが結構混沌としてるからね。(version{}else version{}else{static assert(0);}ってなってない所とかあったりとかversion(GNU)の部分とかインラインアセンブラの部分とか)
>>686 多倍長欲しいねぇ(特に暗号化とかに)
まぁadd(uchar[] a,uchar[] b)とかを作れば十分だとは思うけど標準ライブラリにキボン
>>734 phobos自体Cライブラリ依存だよね。あとスタートアップルーチンも書かなきゃ行けないのか<#`Д´>
>>736 C言語用のスタートアップルーチンがあれば十分だとおも
emacsでd-modeを使おうと
http://home.comcast.net/~benhinkle/d-mode.zip を試してみました。
READMEの通りにcc-engine.elでbyte-compile-fileを実行すると
cc-bytecomp.elがオープンできないというエラーがでます。
cc-bytecomp.elcはあるのですけどelがどこにもないのです。
同じ経験をされた方、解決方法がわかる方いらっしゃいませんでしょうか?
emacs22だと動かなかった。ショボーン
phobosのDLLとかないんですか?
ないんじゃないですか 見たことないです
象さん 0.33 開放
akIDEでexe出力したいんだけど、どうやってもobjしか出力できないorz どうすればいいの?
どうすればいいかなんて分からんよ。 エスパーじゃあるまいし。 情報が少な杉。 リンカが無いとか、phobos.libやsnn.libみたいな必要なlibを指定してないとか、 単なるコンパイルエラーやリンク時エラーでexeを出力してないとか。
>>744 すまん。リンカはあるし、コンパイルエラーもない。
よくよく調べてみるとこんなエラーがあった
C:\Documents.obj
Error 2: File Not Found C:\Documents.obj
--- errorlevel 1
>>745 >>472 で呟いたのだけど、akIDEはdmdにソースを渡すときにフルパスを使うんだけど、
dmdがlinkerに渡す際に、それを二つに分けてしまうバグがあるらしいんだよね。
漏れはsc.iniを弄ってLINKCMDを自前のものに変えてワンクッション挟んで使ってる。
必要ならうpろうか?
747 :
745 :2005/12/14(水) 17:57:22
>>746 そうしてくれるとありがたいです。m(_ _)m
749 :
745 :2005/12/14(水) 18:32:47
>>748 解決しました。ありがとうございますm(_ _)m
DもSwing実装してくれないかなぁ
Swing重いから嫌
752 :
デフォルトの名無しさん :2005/12/16(金) 06:34:06
つか、D言語向けのGUI作れる統合環境はよ出てくれい MSが作ってくれるといいんだが
C++/C#あるからイラネ
C#じゃ遅い C++じゃ醜い つまり、ここで救世主の登場ってわけだ。
ver1.0マダー?
>>732 >phobosを抜けばコンパイルに成功した。
お!マジすげーな。
よかったら、コンパイラ手順とか書いてくれると参考になります。
ver1.0はともかく テンプレートの暗黙のインスタンス化 をはやく実装して欲しい
ずっと実装されねーよばか
761 :
デフォルトの名無しさん :2005/12/17(土) 05:46:41
std.stream全般コンパイルエラー。 stdout.writeLineすらエラー。 std.stdio使えばいいんだけど気持が悪い。 どなたか原因わかりませんか?
てかたま姉が怖いよ
>>758 gdcでd/config-lang.inのtarget_libs="target-libphobos"をコメントアウトするだけでいいはず。
phobosも適当にgcc/config.dを作って個別にコンパイル&リンクすれば使うことはできる。(Monaのgdcのページも参考に)
#ただインラインアセンブラやらstabやらがうまくいかなくってスレッドの作成で引っかかってる。(gcが使えない)
764 :
761 :2005/12/17(土) 19:49:26
どうやらstdoutは非推奨になっていたようですね。 標準出力はstd.stdioを使うようです。
>>764 std.cstream を import すれば
din (標準入力)、 dout (標準出力)、 derr (標準エラー)が使えるお
stdioでいいならいいんだけど
>>761 obsoleteになってた希ガス
std.cstream.dout.writeLineを使ってみ
約1日もラグった吊ってくるsage
Dで数値の符号反転をやるにはどうしたらいいんですか?
d*=-1;
d=-d
772 :
770 :2005/12/18(日) 15:47:27
>>771 え? 符号反転ってビット反転のこと?
それなら d= ~d で良いじゃん。
>>772 ごめん、ビットだったね。間違えた・・・
>>750 swingはないけど、swtは実装されてるじゃん。dwtとして。
あれ、SWTあるの? ちょっと使いにくいが、フル機能そろってるのであれば使ってみようかな。
776 :
デフォルトの名無しさん :2005/12/19(月) 00:34:01
std.boxerのbox/unbox使っているプログラムをデバッグモードでコンパイルすると Error 42: Symbol Undefined _assert_3std5boxer --- errorlevel 1 とかリンクエラーが出るんだが、これなんなのさ。 releaseモードだとでない。
777 :
776 :2005/12/19(月) 00:48:43
> Following the exact example as was posted in the D forum recently, the new > std.boxer.d is giving the below link error when the unbox functions are being > used. Is this a bug, or have I done something wrong in the code? Wow, this is a flash-back, I haven't seen that link error in years. This is caused because it's the first template in Phobos designed to be used by a client, so it's just exposed a code generation problem in templates when the -release flags are mismatched (Phobos is now compiled with -release). 自己解決したが、こいつら腐ってる。 なんで、リリースモード以外でコンパイルできないようなコードを標準ライブラリに入れるんだよ…。
未完成の言語に文句たれる方がどうかしてる
公開してる物なんだし、文句位はいいんじゃない?
ただ文句たれるのではなく本家にフィードバックされればの話だろう。
781 :
776 :2005/12/19(月) 03:19:12
じゃあ使わなければいいじゃない
m9(`д´)オギャーッ m9(`д´)オギャーッ m9(`д´)オギャーッ
786 :
776 :2005/12/19(月) 21:59:40
ごめんなさい。 D言語には本当に感謝しています。 ライブラリの気に入らない部分は自分で作ります。
いつになったらCに逆リンクできるよになるんだ。
787が動くまで。
うちでは出来てる
akIDE GTK+ port source リリース(?)
793 :
ネ申 :2005/12/22(木) 04:59:17
/* d_dll.d \dmd\bin\dmd -ofd_dll.dll d_dll.d d_dll.def */ import std.c.windows.windows; HINSTANCE g_hInst; extern (C) { void gc_init(); void gc_term(); void _minit(); void _moduleCtor(); void _moduleUnitTests(); } extern (Windows) BOOL DllMain(HINSTANCE hInstance, ULONG ulReason, LPVOID pvReserved) { switch(ulReason){ case DLL_PROCESS_ATTACH: gc_init(); // initialize GC _minit(); // initialize module list _moduleCtor(); // run module constructors _moduleUnitTests(); // run module unit tests break;
794 :
ネ申 :2005/12/22(木) 05:00:02
case DLL_PROCESS_DETACH: gc_term(); // shut down GC break; case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: // Multiple threads not supported yet return false; } g_hInst = hInstance; return true; } export void dllprint() { printf("Hello D!\n"); } export int dllintval(int i) { return i << 2; }
795 :
ネ申 :2005/12/22(木) 05:00:54
/* call_dll.c call functions in dll which is written by D */ #include <windows.h> #include <stdio.h> // #pragma comment(lib, "d_dll.lib") #define S_library "d_dll.dll" #define S_dllprint "D5d_dll8dllprintFZv" #define S_dllintval "D5d_dll9dllintvalFiZi" int main(void) { HINSTANCE hLibrary; void (WINAPI *dllprint)(void); int (WINAPI *dllintval)(int);
796 :
ネ申 :2005/12/22(木) 05:01:51
hLibrary = LoadLibrary(S_library); if(!hLibrary){ fprintf(stderr, "Can't load library ["S_library"].\n"); return -1; } dllprint = (void (WINAPI *)(void))GetProcAddress(hLibrary, S_dllprint); if(!dllprint){ fprintf(stderr, "Can't load function ["S_dllprint"].\n"); return -2; } dllintval = (int (WINAPI *)(int))GetProcAddress(hLibrary, S_dllintval); if(!dllintval){ fprintf(stderr, "Can't load function ["S_dllintval"].\n"); return -2; } dllprint(); fprintf(stdout, "%d\n", dllintval(3)); FreeLibrary(hLibrary); return 0; }
797 :
ネ申 :2005/12/22(木) 05:08:36
Digital Mars D Compiler v0.106 でテスト dmd.exe の方で dll を生成するときにインポートライブラリを 同時に作る方法が分からなかったので c 側で LoadLibrary を使用してみた。 d_dll.obj は独自のフォーマットらしく VC 用の lib を使って dll は作れなかった。 関数名は void dllprint() が D5d_dll8dllprintFZv int dllintval(int) が D5d_dll9dllintvalFiZi になっているらしいので F?Z? で型名を挟んでるようです。 8 とか 9 は謎。1 個だけだと 8 だったので 8 から始まる通し番号かな? この辺は dmd のソース見れば詳細分かりそう。 実行すると int の方は計算結果が合わないのと、 終了時にアプリケーションエラーが出るので、w パラメータ受け渡しにもう一段スタックに何か積んでる可能性があるね。 たぶんオブジェクトに関わる部分だと思うので今回の場合空読みすると治る鴨試練。
その数字は文字数と関係があるんじゃないかと思う
ってDLLをLoadLibraryかよwww
>>797 dmdが吐くobjはOMF、VCのは新COFFと呼ばれる形式のもの
まあダイナミックリンクすりゃCだろうがDだろうが問題ない罠
内容はどうあれ乙彼讃
801 :
ネ申 :2005/12/22(木) 05:37:57
dll じゃない方 (obj を直接 link) も試してみたが、 関数名が _D5[objファイル名]5[関数名]F[引数]Z[戻り値] になるらしい。(例によって 5 は謎) ただしこちらはリンク時に __d_assert という関数が見つからないと言われるので別途用意してやらないといけない。 多分 C 側で D のスタートアップやその他もろもろ作っておいて 調整しないとうまく動かないと思う。 src/dmd/mtype.c とか src/dmd/func.c あたり見るともう少し突っ込めるかな。
802 :
ネ申 :2005/12/22(木) 05:39:22
>>797 引数や戻り値がintでもcのintがそのままやりとりされる訳じゃなくて
オブジェクトが使われているからcから使うにはDに合わせた構造体が必要
JNIのようにまともに実装するのはかなり大変だけどやり始めたんならがんがれwww
D言語の標準の関数呼び出し規約は、 __cdeclや__stdcallと違うからCからまともに呼び出せるわけ無いだろ。 (ちなみにDの関数コールは関数の引数のひとつをEAXで渡す) extern(C)かextern(Windows)に修飾してC言語と同じ呼び出し規約にしろよ。
805 :
804 :2005/12/22(木) 07:55:41
あ、そうそう(現在の)Dの関数の呼び出し方を書いたけど、一応TBDだから、
多言語から呼び出しがあるなら素直にextern(C)にしとけよ
>>803 んなわけねーだろ。大嘘書くな
単に呼び出し規約が違うだけ。
当然のことながら、extern(C)やextern(Windows)なら、manglingも互換性のあるものになる。 mangle名も、いまやプロパティで取れるし、demangleもライブラリにある。
俺もextern(C)で十分だと思うが。 それよりもデバッガで、Dのクラスをみたいんだけど。 これは当分我慢するしかないの?
標準入出力のstd.stdioに出力しかないのはなんで? 標準入力はどうやるの?
private import std.cstream; int readf(...){ return din.vreadf(_arguments,_argptr); } 自分で上みたいに定義するか、std.cstream.dinを使う
そのうちstd.stdioに入力用の関数が追加されるんでしょうか? ところでcstreamのcってC言語のcだと思っていたんですけど実 際どうなんでしょうか? もし、そうならcstreamってかっこ悪いですね。
consoleのc
コンソールのcですか。なるほど。
今、一部の日本語を表示できなくて困っています。 import std.cstream; int main() { dout.writeLine("あ"); return 0; } がコンパイルエラーになってしまうのです。 表示できる文字もあるのですが、一部の文字はこうなってしまいます。 ソースの文字コードも色々試してみましたけど駄目でした。 表示できた方いらっしゃいますか?
文字コードは? エディタで保存する文字コードをUTF-8にすると通る メモ帳とか使ってるなら捨てろ 実行したときの表示もUTF-8になるけど気にするな
linuxなんでemacsです。 文字コード変換してutf-8で保存してコンパイルというのも試しました。 結局同じエラーになってしまいます。
"あいうえお"の各文字でなぜか"あ"だけが駄目なんです。 それと"唖"も駄目でした。"亜"は大丈夫だったんですけど。 なんだろ?
コンパイラの出すエラーがこれです。 main.d(5): unsupported char 0x1b main.d(8): unterminated string constant starting at main.d(5) main.d(8): found '' when expecting ',' main.d(8): expression expected, not 'EOF' main.d(8): found 'EOF' when expecting ',' main.d(8): expression expected, not 'EOF' main.d(8): found 'EOF' when expecting ',' main.d(8): expression expected, not 'EOF' main.d(8): found 'EOF' when expecting ',' main.d(8): expression expected, not 'EOF' main.d(8): found 'EOF' when expecting ',' main.d(8): expression expected, not 'EOF' main.d(8): found 'EOF' when expecting ',' main.d(8): expression expected, not 'EOF' main.d(8): found 'EOF' when expecting ',' main.d(8): expression expected, not 'EOF' main.d(8): found 'EOF' when expecting ',' main.d(8): expression expected, not 'EOF' main.d(8): found 'EOF' when expecting ',' main.d(8): expression expected, not 'EOF' main.d(8): found 'EOF' when expecting ','
あれ?この書き込み以前も見たようなwww
すみません。emacsでutf-8を扱うにはmule-ucsが必要なんですが、それが 自分の環境に入ってなかったのが原因でした。 確かにソースをutf-8で書けばコンパイルできました。
でも、ソース自体の文字コードに依存するコンパイルって嫌な感じがしますが わたしだけでしょうか?
>>820 逆に、文字コードなんか関係ないというコンパイラを挙げてみて欲しいぐらいだ。
D(or dmd)の今後のスケジュールってどうなってるんですか? 英語苦手なもので、、
1. 関数テンプレートの暗黙のインスタンス化 2. Templateの継承 3. 配列リテラル
配列リテラルって中身もconstってことか
>821 javacはオプション付加すれば文字コードなんでも大丈夫だけどね
なかでユニコードに変換してるんでしょ? そういう意味ではDだってユニコードに変換できればなんでも大丈夫だ。
>826 DMDってその手のオプションあったけ? nkf でとかで無しに
>>827 それはコンパイラじゃなくて、エディタの責任じゃないの。
とにかく開発環境が整わないのと正式リリースをもったいつけてるのが大問題だ。 この一年はDに注目してきたが根本的な進歩がない。 微妙な言語使用は変化しているが開発者が置かれている状況は何も変わっていないじゃないか。
もっとDのプロジェクトが増えてくればいいんだろうけどね
まあ言語自体は間違いなく最強な訳だし
仕様が固まりさえすれば参入も増えるでしょ
最終的にはコンパイラ屋が飛びつくかどうかが普及のキーだろうな
本気で普及させたいなら
>>829 が高品質なcpp2dコンバータ作れば全ておk
831 :
デフォルトの名無しさん :2005/12/26(月) 16:43:06
Dの宿題スレってありますか?
俺は言語指定の無い宿題は基本的にDでやってたけどね
今のところファイルロックの機能はD言語でサポートしていないのでしょうか?
assert(!file.isdir(LOCKDIRNAME)); file.mkdir(LOCKDIRNAME);
UNIX系のシグナルって扱えるだっけ?
私が言っているのは完全なファイルロックのことです。 linuxのflockのような。
flockって完全なファイルロックなんですか?
>>837 linuxのflockのような関数を作れば良いと思います。
私が言っているのはみんな釣られ杉のことです。 ピラニア軍団のような。
>>834 俺もそれ気にしてて、ぐちったりもしたんだけど。
んで、個人的な結論としては、ファイルロックなんてのものは言語でサポートするものではなく、
OSでサポートするものなので、ファイル操作関連の中に
>>839 さんのいうように
OSのファイルロック機能(linuxならflockなど)を組み込めばいいだけだと思います。
ただ、標準(File:Stream)などがそう作られていないので、気にするなら自分で作る必要があるかなと。
(未だにそう実装されてないってことはこれからもサポートされないんじゃないかなとか思ってる)
Apache信者な俺は、APRをDに移植したら最高なポータブルライブラリになるなーと考えています。
(ただし、メモリプール(apr_pool)は必要ないので移植というより参考にして作るという感じ)
843 :
842 :2005/12/27(火) 21:54:39
んでね、一番気になるのはDのFileクラスの挙動がWindowsとLinuxで違うってこと。 Windowsだと書き込みオープンしたファイルは書き込みロックされるが、linuxではされない。
ところでソケットまわりってもっと充実しないのかなぁ。 SSLのサポートはまだか?
とりあえず1.0で出してみないかい?ってな段階だな Delphiよりポテンシャルあるのに注目度がここまで低いのは宣伝が弱いからだよ
お前らライブラリでも作ろうぜ。 俺もやるからさ。 と言っても俺は途中で投げ出しそうだけど。 ライブラリが充実していけば本当に強力になると思うんだけどなぁ。
フレームワークがいろいろあった方が楽ね。 Ruby on Railsとか見てるとすごく爆発力がある。
xmldを使ってxmlを読み込んで処理したいんだけど、サンプル見てもまったくわからないorz 誰か教えてくれ…
馬鹿が集まってきて阿呆な仕様が追加される位なら 門外不出でいいよ
assert(is門外不出(
>>849 ));
馬鹿[] a;
a ~= new 阿呆な仕様();
assert(is門外不出(a));
俺のコンパイラでは一行目は通ったけど、五行目で落ちた。
> assert(is門外不出(
>>849 )); # 1行
> 馬鹿[] a; # 2行
> a ~= new 阿呆な仕様(); # 3行
> assert(is門外不出(a)); # 4行
>
> 俺のコンパイラでは一行目は通ったけど、五行目で落ちた。 # 5行
そりゃ落ちるわ
>>850 ぶっちゃけ一行目からコンパイラ通らないと思うんですよね。
シフト演算子に左項がないから。
逆に残りはウニコード使えるから通ると思うけど。(dmd v0.141)
">>"はレスアンカー演算子だよ
門外不出の意味を分かってない香具師が混ざってるように思うのは気のせいか?
フレームワークが欲しい今日この頃。
ああ、「今度はフレームワークの意味分かってないだろ」って突っ込ませるジョークか。 帰っていいよ。
XML(DOM, SAX, StAX)は標準で装備して欲しいな
XMLがないと満足な設定ファイルの仕組みが用意できんしなぁ。
漏れXMLのメリット未だに分からん
0.142がリリースされてるね
>D interface file support kwsk
Windowsの画像とFaxビューワの脆弱性を利用したウィルスが猛威を振るっているらしい。 んでノートン先生はまだそのウィルスに対応してないとかかんとか。 シマンテックはやる気なしウィルスにでも感染してるのだろうか・・・
DMC++はシマンテックC++だったつながりだよ
>>859 設定ファイルや通信プロトコルとかが標準化しやすいだろ?
A社のB社のソフトを連携させるとして通信内容がXMLだと話が早い。
あと設定ファイルなんかも取り扱いがシンプルになる。
通信にXMLって微妙じゃねーか?
確かに通信プロトコルにXMLを採用はみねぇなw 普通は適当な通信プロトコルにXMLを載せて流すもんな
SOAPとかってプロトコルなのかデータなのかどっちの部類に入るんだろ。
ちらっと見たけどプロトコルっぽいねえ。 正直ウンコだとおもいますた。
871 :
870 :2005/12/31(土) 02:02:41
とおもったけど、ちゃうみたいね。 HTTPの亜種か。
ファイアウォールを抜けることが前提のプロトコルなんだから糞とか関係ない
通信プロトコルと一口に言っても属するレイヤーは様々だから、
868とか言うと869のように突っ込まれるわけだな。
>>871 > HTTPの亜種か。
俺もちらっと見ただけだけど、それは違うだろ。
オブジェクトをHTTPとかSMTPでやり取りするプロトコルみたいだね。 相当誤解してたわ。
SGML
gcc -dynamiclib -undefined error -install_name libgphobos.dylib -o libgphobos.dylib *.o libgphobos.aの中身を取り出したディレクトリでこんなコマンド打ってみたけど ld: Undefined symbols: __Dmain vtable for __cxxabiv1::__class_type_info vtable for __cxxabiv1::__si_class_type_info operator delete(void*) operator new(unsigned long) ___cxa_pure_virtual __D3crc10init_crc32FZk __D3crc12update_crc32FhkZk _deflateInit _inflateInit _inflateInit2 /usr/bin/libtool: internal link edit command failed エラーがでちゃう・・・orz
char[] str = "ABCDEFG"; str[3] = 0x40; とするとセグメンテーション違反でプログラムが落ちます。 なんででしょう?
>>877 上のコードは下のコードと同義です
"ABCDEFG"[3] = 0x40
C/C++と異なり、配列を文字列で初期化しても、
スタックに確保するのではなく、静的に一つの文字列を指します。
(C/C++ で char*str = "ABCDEFG"; と書いたときと同じ )
そして、文字列定数はconst扱いなので、書きかえるとエラーになる環境も存在します。
char[] str = "ABCDEFG".dup;
str[3] = 0x40;
のように明示的にコピーする等をしてください。
はい
なるほど。 ありがとうございました。
新年もD言語と共に、 あけましておめでとう #今年こそ暗黙の関数テンプレート実体化
たとえば、 auto b = 30; // int みたいな構文が出来てきてると言うことは、 そういう感じでうまい具合に実装できる構文があるのかもしれない。
SDLのポーティング?してるd言語のなかに LGPLのライセンスファイルがあるんだけど、 これって使ったら強制オープンソースってことだよね?
>>882 は暗黙の関数テンプレートの話の
つもりで型推論について話しているのかな
インスタンス化構文の話かもしれない。 たぶん、Dの仕様上、テンプレートであるということが構文上明示できなければならないと言う意見か?
LGPLはソースレベルでラッピングしないかぎりはクローズドでよかったと思う
SDLの中にSDL.dllとSDL_d.dllがあって、この両方を外に出せば安全だと思うんだけど、 普通にimport SDLしてコンパイルするとSDL_d.dllがなくても動いてしまう。 (サイズ的にSDL_d.dllがデバッグようにもみえない) で、LGPLのSDL.d部分がexeに含んでるから強制オープンソースなるんじゃないかなと・・・ 普通のライブラリならsdl.dからソース部分を取り除いてヘッダ化するんだろうけど、 既にソースコードがない状態だからぬきようがない。 ようはヘッダにLGPLがついているような感じに見えるんだけど・・・なんか勘違いしてるかな・・・。
SDLってのはmain()がライブラリの中にあるの?
>>889 >もしそのようなオブジェクトファイルが、(LGPLな著作物から取られた)数字のパラメタや
>データ構造のレイアウト、アクセス機構または小さなマクロや小さなインライン関数(長さが
>10 行かそれ以下)のみ利用するならば、そのオブジェクトファイルの利用は、それが法的に
>派生物とみなされようとみなされまいと制限されない。
なので、実装のない.dのソースやらヘッダファイルやら.diなら、
LGPLに制限されずに他から参照して使っておk。心配いらんよ。
149 名前:デフォルトの名無しさん[sage] 投稿日:04/08/07(土) 21:50 あのさ、D で SDL を使ってて、LGPL の話。 SDL.dll の LGPL は、動的リンクにすれば、本体に影響を及ぼさない、 というのはいいんだけど SDL.d が LGPL だったら、それを import してる本体は大丈夫? C の #include と違って、ソースが入ってくるわけじゃないけど…。 150 名前:shinichiro.h[] 投稿日:04/08/08(日) 00:09 あ、はい、私もそれ、問題だと思ってました。 LGPL についてきちんと理解できてるわけでは無いのですけど、 結論から言うと今のままでは多分マズいと思います。 たぶん import と #include は LGPL の話とは関係無くて、 問題になるのは C のマクロを関数で書き直している部分があって、 (例えば SDL_LoadBMP など) そこがシンボルを持っているのですが、 それをリンク時にスタティックリンクしていることです。 実際 SDL でもスタティックリンクしなければならない SDL_main なんかは Public Domain に置かれていたりします。 まあ SDL の ML の雰囲気なんかを考えると 実際にこの件について文句が来ることはまず無いと思いますが、 気持ち悪いと言えば気持ち悪いので対処を考えますです。 たぶん、 SDL_d.dll みたいなのを配るか、マクロの部分を 非 LGPL に置く許可を得るか、あとひょっとしたら LGPL に そういうラッパの際の配慮もあったような無かったような 気がするのでそのへんも調べてみます。
LGPLはヘッダにまで影響されないよ。 安心しる!
じゃあelがLGPLでも安心だね
>>894 あれは、ヘッダーに実装しか書いてないから駄目だろw
std.uriのdecodeを見たのですが、uriを一度UTF-32にしてから UTF-8にしているように思ったんですが、何か理由があるのでし ょうか? それと、decodeはエスケープシーケンスを置換しないとあるの ですが置換してしまいます。何故でしょう?
>>896 1.UTF-8だと1文字ごとの処理がマンドクセ
2.君は何か勘違いをしている
UTF-8は可変長だからということでしょうか。 uriのエスケープシーケンスというのは、漢字などを%と数字で表して いる部分のことだと理解していますが違いましたか?
例えば、 kanji desu=あ(UTF-8) をuriエンコードすると kanji+desu=%E3%81%82になると思いますが、これをdecodeでは kanji desu=%E3%81%82 となりdecodeComponentでは kanji desu=あ になるのかなと思ったのですが。
リファレンスを自力で翻訳してるのか?
>>1 の「プログラム言語 D」からstd.uriのリファレンス見てみ?
もちろん日本語リファレンスを見ています。たまにソースも見ますが。 もしかしてutf-8の漢字コードをuriエンコードしたものも、有効なエス ケープシーケンスということなんでしょうか?
おいおい。何のためにURIのエンコード/デコードをやってるとおもってんだ。
903 :
902 :2006/01/02(月) 20:32:19
今見てみたら、日本語版は誤訳してるね。英語版しか見てないから気づかなかったよ。 原文は"Escape sequences that resolve to valid URI characters are not replaced." なので、 「URIで正当な文字になるエスケープシーケンスは置換されません。」 だね。
あ、ほんとだ間違ってるごめん。明日直します。
>>903 decode("%41%42%43")=="ABC" になるので、実装と(たぶん)意図した仕様に
従うと正確には「decodeComponentと違って ";/?:@&=+$," や "#" になる
エスケープシーケンスは置換されない」ということみたいです。
ということは%..は置換されるわけなのですね。 ところで、apacheの環境変数など、uriエンコードされた文字列の文字コード は何なのでしょう。 shift-jisやeuc-jp、UTF-8などの場合は共通ですから気にすることはないの ですが、例えばUTF-16の文字列をuriエンコードした場合はどの文字コードに なるのかということです。
RFCを見てきなさい。
>>862 のやつはなんのことなのか誰かエロい人おながいします.
>>907 ようするに、Cでいうところのヘッダファイルみたいなもん。
>>907 Object型にInterfacesが追加された?
dmd -c -H hoge.d ってやったらなんかhoge.diってのができたがよく分からん。
ヘッダの自動生成か。
Walterタソ謹製 coffimplib tool (beta) tp://ftp.digitalmars.com/coffimplib.zip MicrosoftのCOFFインポートライブラリをDM linkで使用できる形に変換するもの。
interface fileなんて言うから、Interface関係の何かだと思ってたらヘッダ抜き出す事だったのか。 これでライブラリ配布が楽になりそうだな。 短い関数は実体が入っちゃってるっぽいけど。
作者きたこれ
>>910 なるほどと
// hello.d
int main(char[][] args)
{
return 0;
}
を dmd -c -H hello.d としてみたら
アクセス違反で落ちるんだけど・・・
なんでうちではできないのかなあ
>>917 うちだと問題なくhello.diが出るなあ。
インライン化できるサイズならそのまんまdiに関数の中身も入れるっぽくて
hello.dよりむしろデカいのが出来るけど。
dmdのバグ突きそうなパスで実行したりしてる?
919 :
917 :2006/01/06(金) 03:31:50
・Win32版 dmc.zip (リンカなどの小物ツール) コンパイラだけじゃなくてこっちも更新したらいけたっぽ. 一緒に更新しなきゃいけなかったのか. thx
>>915 いいよいいよー(・∀・)
もっと褒めてオーラ出してもいいよー
コンストラクタを含むクラスに対してinterface fileの生成を行うとクラッシュするね public class fuga { this() { } }
相変わらずバグだらけだな
>>922 おまえのシナプス結合よりはまともだがな
925 :
デフォルトの名無しさん :2006/01/08(日) 01:13:34
D言語は糞言語。すぐに消える。
Delphi>>>>>>
ちょっと聞きたいんですげど C言語の #include "自作ヘッダ.h" みたいのはどうやったらいいですか?
import
extern (C)
import std.string; import std.c.stdlib; char[] mygetenv(char[] name) { return toString(std.c.stdlib.getenv(toStringz(name))); } int main(char[][] args) { printf("%s\n", mygetenv("PATH")); return 0; } とかするとセグメンテーション違反で落ちる。 mygetenv()の戻り値を参照した瞬間に吹っ飛んでるようだ。 Linux DMD 0.142 なんだが、俺だけですか。orz
"%.*s\n" 以上。
933 :
931 :2006/01/08(日) 15:16:00
うぁ、できた…。 何故か "%s" と "%.s*" を逆に覚えてたっぽい。 吊ってくる。
printfなんか使うなよ、と言いかけてphobosの貧弱さを思い出して黙る俺
writefはそこそこ強力だぞ。あんまり使われてないが。
>>935 禿げしくgj!
オペランドにchar[]突っ込んでも使えるし
%sに数値入れても自動的に文字列に変換される
出力先ファイルディスクリプタも指定できる
全くドキュメントは隅まで読まんとな
プリント文は1つに統一して欲しい。 昔PHPでprint派とecho派とで激しい抗争があって大変だった。
暇な奴いたらちょっと助けて。 DのDLLをCからLoadLibraryして使おうとしてるんだけど Dでexportした、 extern(C) byte sum(byte v1, byte v2) { return v1+v2; } の関数ポインタをgetFunctionAddressしてbyte function(byte, byte)にキャストしたのを sum(1,2)みたいに呼んでるのね。 ところがこの関数、何故か常に変な値が返ってくる。 よく見るとv2は引数に何を入れて呼んでも内部では必ず0xC8が入ってる。 v1にはちゃんと適切な値が渡ってるのにも関わらず・・・ 引数を取らない関数、1個しか取らない関数は普通に動く。 詳査した所、第2引数以降は何もそれらしい物は渡ってないっぽい。 byteをintにしてデバッグアウトしたらv2には常に4264136が入ってる。 第2引数以降のバイト列は必ず0xC8 0x10 0x41... と続いてる事が判明。 変だ〜変だ〜ってんでポインタ取って後続バイト覗いたり色々してたんだけど 最終的にlong渡しなら2個目以降もなぜか適切に渡る事を発見。 でもlongしか渡せないなんて気持ち悪いし だいいちポインタが渡せないんで根本的に何の解決にもなってない。 ・なぜ第2引数以降は8オクテットで渡さないと狂うのか? ・ってか、なぜ第1引数は問題なく渡るのか? えろい人、なんか知ってたら教えてください。 全ソースうpれと言われたらうpるよ。
実はsum関数がすでにCで書かれた他の所にあってDのはマングリング的にスルーされたりして。
940 :
938 :2006/01/09(月) 01:55:10
00000000 <d_sum>: 0: 55 push %ebp 1: 8b ec mov %esp,%ebp 3: 0f be 45 08 movsbl 0x8(%ebp),%eax 7: 0f be 4d 0c movsbl 0xc(%ebp),%ecx b: 02 c1 add %cl,%al d: 5d pop %ebp e: c3 ret longでいいんじゃね?
今更サンプル見たけど、test.dのキャストのためのaliasってextern(C)しなくていいの? あとCから呼ぶならテストはCで書いた方がいいんじゃねーの? 関係ないけど酒がウメェ
CとDは呼び出し規約が違うので、extern(C)しているなら、 呼び側もそうしないといけないです。 /+ 関数型ども +/ extern(C) { alias void function() vF; alias byte function(byte) bFb; (略 }
944 :
デフォルトの名無しさん :2006/01/09(月) 04:55:14
>>>>>>D
糞
冫─' ~  ̄´^-、 / 丶 / ノ、 / /ヽ丿彡彡彡彡彡ヽヽ | 丿 ミ | 彡 ____ ____ ミ/ ゝ_//| |⌒| |ヽゞ |tゝ \__/_ \__/ | | <J#ツカエヨ、キミ! ヽノ /\_/\ |ノ ゝ /ヽ───‐ヽ / /|ヽ ヽ──' / / | \  ̄ / / ヽ ‐-
extern(C)の話題って間欠泉的に出てくる いっそのことDで書く関数全てにextern(C)付けようかと思っている
3次元配列の対応まだー?
次スレ立てる人はD言語研究のリンクを直してくれるとありがたい
次スレまだー?
まだ。
DMD 0.143
ん?3次元できへんの? 普通64次元までOKとか使わねーよってくらいの次元数サポートしてるもんなのに
ほかの言語で言うところの多次元配列なんて存在しなくて、 C/C++と同じく配列の配列などを多次元配列の代わりにするのがD 俺はそれで十分と思うんだけどね。 動的多次元配列を扱うのがチョイ面倒なだけだし。
面倒なのは要素数可変のときだけだよね
即落ち阻止
>>957 静的なサイズの二次元配列を生成すると連続したメモリ領域に
確保されるってやつの三次元版という話ではないのかなぁ、
とか思ったがそれは今対応してないのかすら俺は知らん。
char[][][]が文法エラーになるってことじゃね? テストしてないけど
int[] test=[2,3,4];ができないのどうにか欲しいなぁ… まぁ以下のようにすれば簡単にできるので必要ないけど #テンプレート? 何それ? おいしい? private import std.string; private import std.stdio; int main(){ int[] test=newArr(2,3,4,5); writef("%s\n",test); char[][] test2=newArr("test","test2","test3"); writef("%s\n",test2); return 0; } int[] newArr(int[] i...){ return i.dup; } char[][] newArr(char[][] i...){ return i.dup; }
char[][int][char[]]がいつのまにかコンパイル通るようになってるな
>>963 private import std.string;
private import std.stdio;
int main(){
int[] test=TArr!(int)._new(2,3,4,5);
writef("%s\n",test);
char[][] test2=TArr!(char[])._new("test","test2","test3");
writef("%s\n",test2);
char[][][] test3=TArr!(char[][])._new(TArr!(char[])._new("test","test2","test3"),TArr!(char[])._new("test","test2","test3"),TArr!(char[])._new("test","test2","test3"));
writef("%s\n",test3);
return 0;
}
template TArr(T){
T[] _new(T[] i...){
return i.dup;
}
}
int[] test = new int [2,3,4];
うほっ
>>965 長さ4の配列ができました。本当にありがとうございました。
唖然
変な仕様埋め込むくらいならコンパイルエラー出して欲しい好例
いや、それは式「 2, 3, 4 」の結果が 4 だから。 int[] test = new int[4]; とやってるに過ぎない。 コンパイルエラー出せないだろう。
おまいらエラーメッセージくらい嫁 static int[] test = [2, 3, 4];
>>970 http://www.digitalmars.com/d/expression.html 見たけど、仕様では
Expression:
AssignExpression
AssignExpression , Expression
NewExpression:
NewArguments Type [ AssignExpression ]
だから、仕様ではコンパイルエラーになるべきなのでは?
NewExpression:
NewArguments Type [ Expression ]
だったら仕様通りなんだろうけど。
いや、それはみんな分かってるし。w ネタにマジレス。w
こういう風に書ける訳だし問題ないと言えなくも無い static int[] test = [2, 3, 4]; test[1] = 5; int[] test2 = test.dup; writef("%s\n", test2);
要は慣れですかね。
もう少しPHOBOSが充実するかQtのようなGUIツールがでてくれば人気がでると 思います。 Cの関数との親和性の良さもポイントですね。 とにかく素人の僕にはC++よりもずっと扱い易いです。 メモリ管理をしなくてもいいし、ファイル、ディレクトリ関連のライブラリが 標準で用意されているのもうれしいですね。
ぶっちゃけ dmd と gdc どっち使うのが良いでしょうか?
今はdmdじゃないでしょうか。 gdcは使ったことない私が言っていいものかとも思いますが。
>>977 一番良いのはインターフェースと実装が同じソースに書けるってところだ。
>980 俺はプロトタイプ宣言でメンバの一覧が把握できるから分割*もできる*ほうが好み。 まあdoxygenとかその手のツール使えと言う話になるかも知れんけど。
分割できると2箇所直さないといけないからなあ。 自動的に作ってくれるのが理想的かな。
コンパイル時のオプションで宣言の一覧を吐くようになれば良し。 ドキュメントにしろインターフェイスファイルにしろ、 そういうのはバイナリと一緒に出てくるべきなんじゃないのかな。
クラスのメンバをポインタにする必要がないのもいいですね。
みなさんがこれまでに書いた実用的なDプログラムを晒してください
std::coutのように見える何か
みなさんがこれまでにDで書いた実用的なアプリケーションを晒してください
みなさんがこれまでにDで書いた実用的なアプリケーションを晒してください
みなさんがこれまでにかいた実用的なDカップのおっぱいを晒してください
みなさんがこれまでにDまで行った実用的な彼女を晒して下さい
酒井若菜
みなさんおいくつですか?
0.143歳です。
999 :
デフォルトの名無しさん :2006/01/14(土) 22:10:00
1000ならカノジョとD
1000なら3月に正式リリースされる。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。