1 :
デフォルトの名無しさん :
03/11/30 14:12
死ね
これが新スレ?
4 :
デフォルトの名無しさん :03/11/30 14:19
でさ、D言語って世間に認知されそう?
2スレ目か。数字いれなかった…。 むむ、やねうらおさんとこはリンクあるのか...
>>5 ごめん、書いてる途中でEnter押しちまった。
>>4 大手ベンダ(M$・Sun・IBM・Borland)がどう出るかだな。
言語仕様自体に不足はあまりないと思われるので、
あとは政治的な問題だろう。
ネイティブ系→C++ vs D
仮想マシン系→Java vs .NET(C#)
ユーザー側にとって見れば、C++よりも便利になって、
しかもC++での知識が無駄にならないので、良しだと思う。
虚数とかいいね
>>8 もうちょっと仕様が固まるまでは相手にされない?
bdc(Borland D Compiler ?w) とかは見てみたいが。
>10 微妙なところだねぇ・・・
>>12 のサンプルは ' から ` に変えなくちゃいけないんだよねぇ・・・w
>・今のところv1.0未満につき、未実装・バグはまだだいぶある。 この時点でとても実用重視とは言えない言語
>>14 バグや未実装があるのはコンパイラだと思うが?
17 :
デフォルトの名無しさん :03/11/30 15:42
in32アプリて。
やねうらおもたいしたことないな
>>19 わかんねーど!
>>18 は実はすごうでかもしれないぜ。まぁこんなとこで油売ってるようじゃ、期待できないけどなw
かなりレヴェルの低い俺がいえたことじゃねーなw
前スレ長持ちしたねえ。2年1ヶ月か。
D言語でSTLに相当するのって何?
Delphiの後継はD言語と見た。
あぁ、勝手に言ってていいよ。 ただ頭が悪い香具師だと思われるから気をつけてね
C#で十分
>>26 あなたは一生C#ですごしてください。
ではさようなら
>>26 もうこなくていいよ
>>23 無いよ。ライブラリは全部自作しなきゃ駄目。
なに言ってるの? 標準ライブラリがないってこと?
標準ライブラリはあるだろ。
DってSocket無いの?
>>33 あるわけ無いだろ。C++にも標準では無いんだから。
>>34 ん? C++に無いからというのは関係あるの?
そういうのを言語に含めて良いんだろうか Javaみたいに巨大になるんじゃないだろうか
>>36 httpクライアントまで含めろと言ってる訳じゃない。
Socket位は含めてくれないかなあと言ってるだけで。
GUIライブラリは含めないと明言されているが、 Socketくらいは標準に含まれて行きそうな気がする。
Javaの巨大なライブラリは素晴らしいですよ 言語仕様はまた別だけど
#line 使ってる人いる?あんまり利点を感じないんだが…。
>>40 アレはSource to Sourceトランスレータか何かを
書くための機能なので。。。
>>36 使用者はライブラリもひっくるめて評価の対象にするでしょ。
言語屋さんは構文だけで おなかいっぱい なのかもしれんが。
>>38 標準装備でなくても、配布時にはついてくるかも知れないね。
dmdには期待できないけどその他のコンパイラには装備される可能性はある
>>44 includeパスにないだけとか
バージョンも変わってるだろうし
import std.c.string;
とかでどうですか
Wikipediaに記事書いてみますた
47 :
デフォルトの名無しさん :03/12/01 20:30
switch のcase文は範囲指定できないのかなぁ switch(aaa){ case 1-5: case 6-9: break: } みたいなの
>>45 先っちょに「std.」付けたらなったのですが
今度は「random.d」がないと怒られてしまいますた。
探してみたらstdフォルダに入っていました(string.dも)
std.とつけてコンパイルしても無いぞ( ゚Д゚)ゴルァ!!と怒られてしまいますた。
もう一回dmdを解凍してみたらphobos.libが720KBで今あるのが280KBだったので上書きしてみたら動作しました。
お騒がせしてすみませんでした。
dmdと dmがあるからなぁ・・・
ごめん
やっべw かなり面白いw
>>52 まぁ、もう既に遊びまくってるわけだが(;´д`)<スゴイヨネ
面白すぎるわけだ、遊んでいくとどんどん機種が増えていくのが良い・・・アレみたいとは云わないけど
なにげに普及の兆しがあるな。腐れC++など滅んでしまえ。
LinuxでD言語をやっている人いますか? /に解凍してインストールしたのですがphobos.dが無いt言われてしまいます。 phobos.dを検索してもなかったのですが・・・・。 誰か助けてください。
ファイルは dmd と dm があるから両方解凍してね
61 :
デフォルトの名無しさん :03/12/03 00:11
>>59 import c.stdio;
int main( char[][] arg )
{
printf( "Hello, World.\n" );
return 0;
}
をコンパイルすると無いといわれてしまうんです。
Windowsではうまくいったのですが・・・・
> Win32版との違い > 文字列リテラルは読取専用です。 書き込もうとするとセグメント違反が発生します。 Dでは書き込み可能かどうかは環境にいぞんするんだ。 もちろんSEGVが発生するかどうかは環境に依存するけど。
>>61 >
>>59 > import c.stdio;
>
> int main( char[][] arg )
> {
> printf( "Hello, World.\n" );
> return 0;
> }
> をコンパイルすると無いといわれてしまうんです。
> Windowsではうまくいったのですが・・・・
% dmd hello.d
gcc hello.o -o hello -lphobos -lpthread -lm
libphobos.a を /usr/local/lib とかにコピってから
sudo /sbin/ldconfig したかい?
>>64 > % dmd hello.d
> gcc hello.o -o hello -lphobos -lpthread -lm
>
> libphobos.a を /usr/local/lib とかにコピってから
> sudo /sbin/ldconfig したかい?
すまん。hello.o とか残ったままだった。
% dmd -v hello.d
parse hello
semantic hello
semantic2 hello
semantic3 hello
code hello
generating code for function 'main'
gcc hello.o -o hello -lphobos -lpthread -lm
% ./hello
hello world
args.length = 1
args[0] = './hello'
良さそうな言語ではあるけど msとかborlandとかgnuとかが採用してくれないと流行りそうにないな。
流行らせる必要なんてあるのか?
流行らないよりは流行った方が便利だろ。 解説サイトも増えるだろうし 解説本も出るだろうし ライブラリも書かれるだろうし コンパイラも増えるだろうし 運が良ければIDEも作られるかも知れないじゃん。
>>68 ライブラリとIDEはほしいね。
特にIDEがほしい
モジュールを追加したときにソースを改造する手間が省けたりするからイイ
>>66 GNU Dはもう参戦してるよ
>>67 ぶっちゃけ、簡単な質問とかしやすいかなぁ・・・(^^ゞ
たくさん人が使えばそれなりに話し合いとかもできるし、相談とか質問とか(甘えはだめだよなぁ
結局現状だと仕様?リファレンス?あれを読めって言われるし。
一回全部呼んだけどテンプレートの使い方とかいまいちわからないし
とにかく流行れば本が出る、その中に入門書あればわかりやすい解説(゚д゚ウマー
>>61 >import c.stdio;
ではなくて
import std.c.stdio;
という話?
import std.c.stdio, std.math; ていう風につらねて書かせてくれ・・・
>>71 ん・・・まぁ確かに良いかも知れない
ただ、わかりにくくなりそう
いや、だって、10行とか20行 import が並ぶのは壮観だぜ(´д`;)
>>71 リファレンスだとできるようなことが書いてあるみたいだけど、できないですか?
ちょっと試せないので。
横に並べちゃ駄目なの? import a; import b; import c; なんの為にセミコロンで区切ってるんだよ。
>>76 なるほど、接写も早速読んでみたいでごわす
それより、 import std.*; とかできて欲しくない? 俺だけかな?
>>71 ごめんちゃい。
Dで書かれたゲームのソースを見て思っちゃっただけなんです。
ぁぅぁぅぁぅ
dmd.confが悪いのかなぁ? /に解凍したので DFLAGS=/dmd/src/phobos としたのですが・・・
>>83 …そりゃダメだろう…。
DFLAGS=-I/dmd/src/phobos
85 :
デフォルトの名無しさん :03/12/03 21:52
>>84 それにしたらなった。ありがとう!
Windowsで出来たからってLinuxでもやってみようとか背伸びするんじゃなかった_| ̄|○
いろいろ考えてくださった皆様本当にすいません。
ageてしまったすまそ
87 :
デフォルトの名無しさん :03/12/03 23:57
もしかして Dのreal型ってjava.math.igDeciamalみたいな型?
Dってbool無いの?
bit型はある。
しかも alias bit bool; されてる。
日本語訳リファレンス読んでたら > 列挙型は、Cの#defineマクロによる定数定義を置き換えるものです。 > 列挙型は無名にして単に整数定数を定義することも、 名前を付けて > 新しい型として使うこともできます。 とか書いてあった… 列挙型は独立した型を定義するモンだろ…とか思った。 #define による定数定義に問題があるなら、 より問題の少ない定数定義の手段を考えるべきかと… ってまぁここで言っててもしょうがないんだけど。 bit が bool なのも似たようなかんじなのかな?
普通にconstでもいいんだけどな。
>>93 > 列挙型は独立した型を定義するモンだろ…とか思った。
D言語の列挙型はそういう使いかたも出来ますが?
>> 名前を付けて新しい型として使うこともできます。
がそういう意味なんですけど。
>>93 #define による定数定義の何が問題なのかわかってる?
>>95 > D言語の列挙型はそういう使いかたも出来ますが?
そういう使い方しかできないべきだと思うだけ。
>>97 無名関数、無名namespace、無名クラス同様、列挙型も無名に出来るのが
自然だと思いますが..。
>>96 何が問題なのか教えてください。
defineを用意すると構文parseがしにくくなるからWalter氏はdefine自体を
排除したいのだと私は理解しています。構文解析のフェイズで意味解析したく
ないですもんね。
>>98 仮に無名 interface があったとして役に立つと思うか?
無名列挙型は基本的にその型の変数を持たない。
変数を持たない、という事は型を定義していない。
>>99 無名interfaceは役に立ちそうにないですけど、
無名列挙型はconst int代わりに使えるので便利だと思いますが。
>>100 無名列挙型が const int の代用以外に使えると思うか?
無名列挙型は定数を定義する時には役に立つが列挙型としては役にたたない。
無名列挙型は列挙型である必要性が無いので無名列挙型を廃止して、
必要なら const int の代わりに使えて便利な別の構文を用意すべきって思うだけ。
102 :
デフォルトの名無しさん :03/12/04 12:14
>>101 enumsを勝手に列挙“型”と呼んで、列挙“型”だから型の
定義をしなければならないっていうのはおかしな論理。
enumsはあくまでenumerations。
無名enumはenum { a,b,c }のようにまとめて定数を定義できるところが
enumたる所以なわけであって、これが型定義を兼ねるかどうかは全くの
別の問題。
>>102 enum は型ではないと。それなら納得。
でも言語仕様では型として扱われてるようだけど?
>>103 > でも言語仕様では型として扱われてるようだけど?
それどこ読んでるの?まさか稲葉さんところの日本語訳読んでないよね?
1.名前付きのenumsは、型を形成する
2.無名enumsは、単に整数定数を定義する
enumsに関して言語仕様が定めてるのは大まかに言えばその2点。
稲葉さんは、enumsを「列挙型」と訳しているけれど、厳密に言うなら型を
形成しない用法がある以上「列挙体」。ただ、最近の風潮からすれば
「列挙型」と訳すのは普通だから稲葉さんを責めるのは違うと思う。
だもんでもし日本語訳読んでいるなら「列挙型」は脳内で「enums」と
置換して読むといいのでは..
>>104 > 厳密に言うなら型を形成しない用法がある以上「列挙体」。
列挙体と列挙型って言語屋さんは別の意味で使うの?
個人的には enum が定数定義の列挙のためにあるなら
列挙型の定義は別の構文にしたほうが良いかと。
106 :
デフォルトの名無しさん :03/12/04 13:47
勝手に0から1つずつ値が増えてくれるってのは、 単なる定数定義をしたいだけでも便利だと思うのだが。
enumで型定義した変数は型定義された以外の数字が代入できないんですよね? だったら enum inputKey {KEY_LEFT = 1, KEY_UP, KEY_RIGHT, KEY_DOWN} inputKey key; ってかなり使えるね
なんか違うっぽ…今からコンパイラ入れて試してみます
>>107 > inputKey key = inputKey.KEY_LEFT;
で、右辺に int が使えないのは良いとして、
> key += 10;
> key = inputKey.KEY_RIGHT + inputKey.KEY_DOWN;
とかすると簡単に列挙されてる値以外になっちゃうのよね。
まぁ int enum だと大抵そーなるけど。
>>109 >> inputKey key = inputKey.KEY_LEFT;
>で、右辺に int が使えないのは良いとして、
なるほど、そういう風に使うんですね。
でも使えないのってかなり厳しいですよね
enum inputKey {1,2,3,4}ならいいのになぁ・・・と言って見たり^^;
int enumって何ですか?
int enum inputKey {...
と宣言してもできませんでした><
> > key += 10; > key = key + 10; これらが通るのはコンパイラのバグ? > key = 10 + key; だとエラー吐くのに。 key + 10 と 10 + key って両方とも int型になると思ったけど… 違うのかな?
>>110 int enum ってのは 整数型で実装された列挙型とか列挙体(?)の事。
int enum ... って構文があるわけじゃない。
>>11 >> > key += 10;
>> key = key + 10;
>これらが通るのはコンパイラのバグ?
マジだw
うけるなぁw
でも中身でキャストしてるんじゃないのかなぁ?
代入時は型エラーだけど、演算時に自動的に型変換してたりするんじゃないかなぁ^^;
って思ったら
>> key = 10 + key;
>だとエラー吐くのに。
不可思議ですね・・・
>>110 >enum inputKey {1,2,3,4};
何に使うんだ、こんなの。
int enumってのは、enumの内部表現がintってこと。
>>enum inputKey {1,2,3,4}; >何に使うんだ、こんなの。 inputKey は 1〜4 の値にしかならないって事です
同じスコープで > enum {VALUE = 0}; > enum {VALUE = 1}; みたいに同名の列挙子を持つ anonymous enum 定義できるんだけど これはコンパイル時にエラーにした方が…
>111 >116 よく見つけたな!news groupにレポートしとけ。レポート。
>>104 あー確かに、それはワシの翻訳ミスです。後で直します。C++みたいに
無名enumsも型を導入すると無条件に思いこんでました。言語屋が
その辺区別しないでどうする…。
あの訳、まだ怪しい部分も多いので責めまくってください。
--
ところで、言語仕様には載ってないぽいけど、
enum inputKey : char { LEFT='h', DOWN='j', UP='k', RIGHT='l' }
enumってベース型を指定できるみたい。
enum mathC : float { PI=3.14, E=2.72, GAMMA=0.58 }
なんか整数以外も指定できたり。これってWalterさんが将来的に
言語仕様を拡張するつもりなんだろうか。。。
>>118 >enum inputKey : char { LEFT='h', DOWN='j', UP='k', RIGHT='l' }
>enumってベース型を指定できるみたい。
うは。それは凄い。
>>118 >enumってベース型を指定できるみたい。
これってC#にもありますね。
ほんと、貪欲なまでに「良いとこ取り」ですな。
121 :
デフォルトの名無しさん :03/12/05 04:24
>>111 ポインタに整数をたしたり引いたりしてもポインタなのと同じノリかも
E.e+10だと、eの10個後、みたいな
>>118 enum math : float { PI=3.14 };
void function(float f){ printf("float::%f\n", (double)f); }
void function(int i){ printf("int::%d\n", i); }
で function(math.PI); すると怒られる…
enum ENUM { E }; と上記の二つの関数定義して function(ENUM.E) でも怒られた。
両方とも anonymous enum にするとそれぞれ float と int の関数選ぶんだけど。
っつか、関数呼び出しの際の変換とか関数の優先順位って
言語仕様のどこに書いてあるんだろ…
>>124 >>111 は意図した動作だけど言語仕様には書いてない(暫定仕様(?))のではないかと思う。
>>116 は単に考慮し忘れたんじゃないかと思ってるけど。
>>125 s/fucntion/func/
function 予約語だった。
>>125 あった。
> In D, function overloading is simple. It matches exactly,
> it matches with implicit conversions, or it does not match.
> If there is more than one match, it is an error.
enum の基底型定義できるようになったので
Integer Promotions で enum が int に昇格されるってところが変わるのかな?
typedef int tint; と
>>125 の二つの関数で、
func((tint)0); しても怒られるから、関数呼び出し時には
Integer Promotions と "Typedefs are converted to their underlying type." 以外の変換もしてるのか。
>>128 って事は、
例えば interface A と interface EA : A と EA の実装 class IEA : EA があって、
func(A a){} と func(EA ea){} があるときに
IEA iea = ...;
func(iea);
とすると怒られるので func((EA)iea); みたく明示的にキャストしなきゃいけないのか。
>>124 enum E { a, b, c, d, e }
E x = E.b;
で、ひとつ次の値(E.c)を得るには、++x; でいいわけだけど、変数を書き換えたくないときには
x + 1 と書くんじゃないかなあ、と。
Pascalで言うSuccの代わり。
132 :
デフォルトの名無しさん :03/12/06 00:19
Visual D#.NET
133 :
デフォルトの名無しさん :03/12/06 00:23
>>132 まずはD++だろ。
むしろD--の方がいいか。
こんなに多機能だとC++の二の舞。
大体ハッシュを言語事態で実装するのはどうかと。
言語使用を単純化してクラスライブラリで多機能にするのがOOPの肝だろ・
>>133 純粋なOOPが使いたければSmallTalkでも使ってなさい。
D言語はマルチパラダイム言語だ。
名前ネタはもう飽きたよ。つまらん。
136 :
デフォルトの名無しさん :03/12/06 00:43
>>134 DはOOPもできるけど必ずしもってことね。
スレタイどおり実用重視だな。
個人で使うにはいいかもね。
OOPはシステム設計とも深く関わるから、複数での開発には向いてないかも。
最も優れた人材には言語なんて関係ないだろうけど。
オレにはむりぽ・・・。
137 :
デフォルトの名無しさん :03/12/06 01:54
cost/volatileは、Dでは無くなったんですか? 無くなったとしたら、代替はどうすることができますか?
どんどん汚い言語になるってことですか
実重視とか言って行き当たりばったりに作られた言語の未来なんて高が知れてる
>>137 > cost/volatileは、Dでは無くなったんですか?
volatileが無くなる??ニュースソースはどこ?
costって何?castのこと?
>>137 const はあるし、in/out/inout なんてのも追加されたし、
Volatile 文 ってのもあるわけだが。
いろいろやってみましたが、パッケージの作り方がわからないです。 どなたか分かりませんか?
パッケージて何?Javaのpackageみたいなののこと?
ごめんなさい。できました。 Windows 用の D リンカでは ディレクトリの区切りに / が使えないのに、 / を使ってしまっていたことが原因で失敗していたようです。 D コンパイラでは / が使えるので盲点でした。 参考までに、どうやったかを書いておきます。 dmd -c a\fn.d dmd -c test.d dmd a\fn.d test.obj // test.d import std.c.stdio; import a.fn; // a がパッケージ int main(char[][] argv) { printf("%f\n", f(3)); return 0; } // a\fn.d module fn; double f(double x) { return x + 2; }
>>113 > でも中身でキャストしてるんじゃないのかなぁ?
言語仕様では、複号代入 a op= b と a = a op b は
同じ意味らしいからキャストされないのではないかと思う。
"〜 are semantically equivalent to 〜"
ってのが "〜は〜とだいたい同じ" なのか "〜は〜と全く同じ" なのか
良くわからんので断言はできないけど。
> 代入時は型エラーだけど、演算時に自動的に型変換してたりするんじゃないかなぁ^^;
いや、enum は暗黙の型変換で int になるはずなので
enumValue + intValue も intValue + enumValue も int になると思う。
で、enumValue = intValue; は暗黙には型変換されない
(キャストによる明示的な型変換が必要な)のでエラーになるはず。
>>131 D の enum の機能としては、EnumConstant の値が PrevEnumConstant + 1 と同等かは保証できんので
> Pascalで言うSuccの代わり。
にはならんと思う。
D言語用のWTLのようなウィンドウクラスラッパは無いのですか?
>>149 D言語はあなたがそれを作ることを妨げたりはしません。
>>148 いや、Pascal系のModulaやAdaだってenum値の指定はできるのでそんな保証はどこにもないw
ただ、type E = (a = 10, b = 20); とかやったら、aとbの間には9つの無名な値が存在する事になってて
Succやなんかで間接的にその値も使えることになってる。(余談ながらDelphi6でもできるようになった)
それと同じじゃないかなあって。
>>151 > いや、Pascal系のModulaやAdaだってenum値の指定はできるのでそんな保証はどこにもないw
Pascal でも指定できたっけか?
そもそもSuccとかって必要ある? enumを足したい場面というのは?
>>143 漏れはconst/mutableがホスィ。。。って何回か書いた気がするスマソ
C# の enum みたく列挙された定数値とかの配列を持っとけばいいのに…
>>153 Succというかiterateしたい時はよくある。
iteraterはいかにも順序があります、みたいで気持ち悪いから、eachでいいよ。
>>153 必要云々じゃなくて、ポインタ+整数が前後を指すポインタになるのなら、
列挙値+整数は前後の列挙値で正しいと思うんだけどね。
Succは、
>>156 同様ループで回す時か、配列や集合なんかの添え字に列挙型を使った時に
前後の要素を参照する時に使うか、それぐらい。要するに、大して使わないって事だけど、全く無いのは困る。
>>156 そいつを無名enumを使わずに実現する方法はないものか。
というか、コンテナに定数値を入れておくようなやり方はないものか?
>>159 下手にRTTIに頼る羽目になるよりは、今のでいいよ…
>>158 > 列挙値+整数は前後の列挙値で正しいと思うんだけどね。
ちなみに typedef int t; のときに
(t(0)) + 0 は t型、0 + (t(0)) は int型になったりする。
っつーか、enum が定数の列挙って話なら
enum で導入された型と int(もしくは基底型)を区別する必要って無いと思うんだけど…
>>153 enum hoge_flag{
hoge = 0x1,
foo = 0x2,
bar = 0x4,
};
hoge_func( hoge|foo );
>>162 微妙に違うような。今の話題はenum + intであってenum + enumじゃない。
ついでに、そーゆーのはDでは void[hoge_flag] とか bit[hoge_flag.max+1] とか使った方がいいかも
D言語でOpenGL使おうと思ったがウィンドウ表示などの資料が見つからない。 ウィンドウ表示のサンプルとかおいてあるとこ誰か知らない? あるいはウィンドウ表示の方法誰か教えてくれ
dig使おうと思ったら make intallでエラーが出まくります。 一応何カ所か自分で書き換えたのですが、 それでもエラーが出まくっています。 digc.obj(digc) Error 42: Symbol Undefined __init_7windows15WIN32_FIND_DATA digc.obj(digc) Error 42: Symbol Undefined _D6string7replaceFAaAaAaZAa digc.obj(digc) Error 42: Symbol Undefined _D6string4findFAaaZi digc.obj(digc) Error 42: Symbol Undefined _D6string9toStringzFAaZPa strip.obj(strip) Error 42: Symbol Undefined __ModuleInfo_5ctype (中略) --- errorlevel 26 どうすればよいでしょうか?
>>166 ありがとうございます。要するに壊れてて使い物になりませんって事ですね。
>>164 OpenGLでD言語を使うと言っても、CやC++から使うのとなんら変わりは無いから、
普通のOpenGLサイトを探しましょう。
(というか、glutとかSDLと組み合わせて使わない?楽だし)
169 :
デフォルトの名無しさん :03/12/07 18:06
>>168 //インポート
import opengl;
import openglu;
void main( int argc, char** argv)
{
//GLUT初期化
glutInit(&argc, argv);
//GLUTピクセルフォーマット
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
//ウィンドウの初期化と作成
glutInitWindowSize (WIDTH,HEIGHT);
glutInitWindowPosition (100, 100);
glutCreateWindow ("Simple GLUT");
//メインループ
glutMainLoop();
}
こんな感じで書いたのだがコンパイルがとうらない
test.d(8): undefined identifier glutInit
誰か助けてくれ。・゚・(ノД`)
む、glutインポートしてる人いないか…。
>>169 SDLじゃだめ?
>>170 SDLじゃ使え無い機能を使いたいので無理です。
import openglut; が必要なんじゃない? いや、glutのD版があるのかどうかは知らないけど。
消えてるなw
176 :
デフォルトの名無しさん :03/12/08 13:54
C++みたいに参照を返して obj.method(1, 2, 3) = 4; みたいなことできないかな
>>174 予告無しにいきなり落として失礼しました
wikiをアップデートしてたのですが、
ftp鯖との繋がりが悪くてファイル転送にハマってました
そのうち、wiki内の古くなった情報を整理したいと思います
なんとかコンパイルできたが Error 42: Symbol Undefined _glutInit とエラーが出てしまう 一応opengl.dとopenglu.dとglut.dをコンパイルのみしてobjファイルを吐き出させたんだが あとopengl32.libも同じフォルダに入れてあるんだが。 なんかたりないとこあるかな? (コンパイルのみなら通るので実行ファイルにする所でエラーになってるっぽいです)
コンパイル時のコマンドライン書いてみて
>>179 glut32.lib を作ってリンクさせないとダメかな?
作り方知らないけど…
>>181 >>182 出来ました。
EXEファイルが出来たのはいいがエラーが出てすぐに終了してしまう。(しかも早すぎてどんなエラーだか分からん)
http://user.ecc.u-tokyo.ac.jp/~s31552/wp/d/SDL_opengl_sample_glut.d これをコンパイルしたがエラーが出てしまうので
import opengl;
import openglu;
import glut;
int main( int argc, char* argv[] )
{
/* ウィンドウの寸法 */
int width = 0;
int height = 0;
/* ウィンドウの色のピクセル深度 */
int bpp = 0;
/* SDL_SetVideoMode に渡すフラグ */
int flags = 0;
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
width = 640;
height = 480;
glutInitWindowSize(width, height);
glutCreateWindow("SDL_opengl_sample_glut");
glutMainLoop();
/* ここには届かない */
return 0;
}
としたがやっぱりエラーで死ぬ
WinXPって最初からOpenGL入っているよね?
>>183 コマンドラインから実行すればエラー出るんじゃないかな。
185 :
デフォルトの名無しさん :03/12/08 20:45
>>184 コマンドラインからやってみました
C:\D>test.exe
Error: Access Violation
となりました。
エキサイトで翻訳してみると「エラー:アクセス妨害」だそうです。
ほかにそれを使っているアプリも無いみたいですしほかのパソコン(Win98)でも同じエラーが出ました。
何がアクセス妨害なのかまったく分かりません。
exeファイルまではエラー無しなので環境なのかな?でも
http://www.asahi-net.or.jp/~cs8k-cyu/ ここのゲームは問題なく動いている。
ソース付いてるから読んでみようかな・・・・・
>>185 class A { int b; };
A a;
a.b = 0; // <- Error: Access Violation
実体の無い配列やクラスとかにアクセスするとよく出る奴。
というか、
> int main( int argc, char* argv[] )
int main(char[][] arg)
じゃない?
あー、ごめん、 int main( int argc, char* argv[] ) ってできるんだね…
D の文字列は \0 で終わらないから それでエラー出てるんだと思うよ。
いや、何か argv を使うだけで落ちるな...。 やっぱ int main(int argc, char* argv[]) ってのが不正なのかな?
>>189 int main(int argc, char* argv[]) だと、
stdout.writeLine(std.string.toStringz(argv[0]));
で落ちるけど、
int main(int argc, char[]* argv) の場合は大丈夫なようだ。
もうだめぽ
だいたい見えてきた。 結論から言うと、int main(int,char**)は使うな、ってことじゃないかと。 リンカが、Dのスタートアップのmain関数を、 ユーザーのmain関数で上書きしてるんじゃないかと思った。 この場合、gcの初期化とか、そういう処理を全部すっ飛ばしてるわけで、 何が起こるかわからんよね。
ごめん、多分違うわ。 単純にDのスタートアップが、int main(int argc, char* argv[])だろうが、int main(int,char*[]argv)だろうが、 int main(char[][]argv)のメモリモデルで呼んでるだけのようだ。
>>193 そのようですね。
// main.d
import std.c.stdio;
void main(int a, int b, int c, int d, int e, int f, int g) {
printf("%08X\n", a);
printf("%08X\n", b);
printf("%08X\n", c);
printf("%08X\n", d);
printf("%08X\n", e);
printf("%08X\n", f);
printf("%08X\n", g);
}
dmd main.d
./main
00000001
0012FF30
0022E174
00000001
7FFDF000
00000031
003A02A4
ということは、これならいけるんやね。 というか、いけた。 import std.c.stdio; void main(int argc, char[]* argv) { for(int i = 0; i < argc; ++i) { printf("%.*s\n", argv[i]); } }
196 :
デフォルトの名無しさん :03/12/08 22:08
class hoge{ static int main(){ printf="Hello World"; return 0; } } main関数はクラスの関数にもできるみたいです。 ・・・なんかJavaのコードみたい。
ということは、
>>183 の場合、
C形式のint argc,char**argvに変換してやらなきゃいかんのかな。
あとは \0 もつけなきゃね。
src\phobos\internal\dmain2.d がスタートアップっぽい。
何か main は private でもいいみたいやね。
>>196 static なしでもコンパイル→リンクが通るみたい。
でも、実行すると落ちる(w
>>200 structなら落ちない(引数はめちゃくちゃだが)
戻り値が double でも通っちゃうね(w
>>201 確かに struct だと仮想関数にならないから落ちないな。
引数は、どうやら argv.length が this として扱われて、
&argv[0] からが引数になってるみたいだね。
今までの議論を纏めると...これがまともに動いちゃうということか(笑 struct Main { private /* static */ double main(char[]* argv) { int argc = (cast(int*)&argv)[-1]; for(int i = 0; i < argc; ++i) { printf("%.*s\n", argv[i]); } return 2.3; } } 凄いね!
よくよく考えて見りゃどんなmain()でも、構文上は間違っちゃいないわけで。。。 "D"リンケージのmainがあれば、それがスタートアップから単に呼ばれる・・・ってわけですね。 一応、スタートアップでは int main(char[][])を期待しているので、あとは知ったこっちゃないと、。
そんくらいコンパイラがエラー吐いてホスィ...。
static じゃないメンバ関数の main って、リンカから見ると フリー関数の main とは違う名前になってそうなもんだけど… Dリンケージってどうなってるんだろう。
何かオブジェクトファイル見ると、 メンバ関数にしても main だけは名前変わってないみたいね。
普通のクラス。 module hogetest; class hoge { int getHogehoge() { } } は、 _D8hogetest4hoge11getHogehogeFZi となってた。 そのファイルでは、int main(char[][] args)が、 __Dmain となってる。 mainを含むクラス class hoge { int main( char[][] arg ) { return arg.length;} } は、 __Dmain だめぽ。。。
コンパイラのソース追っかけてみたら、 名前がmainで、Dリンケージの関数は、変名規則をすっ飛ばして"_Dmain"に変換するみたい。
そんなことしてるなら、 フォーマットチェックくらいしてくれよな(w
class Args2Argv { private: char *m_argv[]; char[][] m_args; public: this(char[][] args) { m_args = args.dup; m_argv = new char *[args.length]; for(int i;i<args.length;i++) { m_args[i] ~= "\0"; m_argv[i] = cast(char *)m_args[i]; } } int argc() { return m_args.length; } char** argv() { return cast(char **)m_argv; } } こういうのでいいんだろうか。
わけわからん char** argv; char *argv[]; char[][] argv; char[]* argv; 誰か、これらの違い説明できる?
char** ポインタへのポインタ char *argv[]; ポインタの配列 char[][] argv; 配列の配列 char[]* argv; 配列へのポインタ 動的配列はサイズ+ポインタな点に注意。
>>216 >動的配列はサイズ+ポインタな点に注意。
この説明でなんとなくわかった。
Cと微妙に違うみたいね。
すると214の
> printf("%.*s\n", argv[i]);
これは間違いじゃなかったのか。へー
すると配列の引数の積まれ方は決まってるのかな
stacktop-0:"%.*s\n"
stacktop-1:argv[i]サイズ
stacktop-2:argv[i]文字列
214じゃなく204だった
>>214 だけど、Walter氏の書いたコードがNewsgroupsにあった。
char** argv = new char*[args.length];
int i = 0;
foreach (char[] p; args)
{
argv[i++] = cast(char*)p;
}
もうちょっと単純化して、
char** argv = new char*[args.length];
foreach (int i,char[] p; args)
{
argv[i++] = cast(char*)p;
}
これだけでOKなのかな。
>>219 > argv[i++] = cast(char*)p;
i++ する必要ある?
>>220 あ、ミスった。。。。。。
char** argv = new char*[args.length];
foreach (int i,char[] p; args)
{
argv[i] = cast(char*)p;
}
C/C++ で使うなら string.toCharz を使う必要があるね。
>>222 toCharzはdeprecatedらすぃ。。。現在はtoStringzだそうだ。
ところで、
>>221 のコードで、Cでコンパイルした.objとリンクさせてみたら、動いたんだけど、
正しいのかそうでないのかわからなくなってきた
Win2Kで import std.string; int main(char[][] args) { char[] str = "ほげ"; printf("%s\n", str.toStringz()); printf("length:%d\n", str.length); printf("size:%d\n", str.size); return 0; } を実行すると 縺サ縺・ length:6 size:8 と、なるのだがこれはバグってことで良いのかな? ソースをUTF-8で保存してるから表示が化けるのは良いとして lengthやsizeは全然合ってない ちなみに ”ほげ” はUTF-8では E3 81 BB E3 81 92
str = "hoge" だと hoge length:4 size:8 UTF-8だと半角英数字は1バイトだからこれもlengthの結果はおかしい・・・
???あってるんじゃないの? toStringzはコピーを返すんだと思ったけど。
sizeプロパティは、C/C++でいうところの、sizeofなわけなので、 「動的配列の参照」のサイズ=8バイトを返す。 lengthは動的配列の要素数を返すので、 "hoge"=4バイト、 "ほげ"="\xE381BBE38192" = 6バイト
>>224 では
length:2
size:6
とか期待してたんだけど・・・。ひょっとして俺どっか間違ってる?
230 :
デフォルトの名無しさん :03/12/10 19:32
リストって、D にはないの?
ま た や ね う ら お か
Phobosの拡充はいつの日になることやら・・・
コンパイルはなるんだけどEXEにする段階でエラーが出ます test.obj(test) Error 42: Symbol Undefined _gluPerspective@32 --- errorlevel 1 となってしまいます。 libファイルが最新でないのかな? これさえ出来れば出来そうなんだが
やねうらおさんってすごいね この前は誰だよって思ってたら BM98とか、 なんか順序おかしいけど ここでやねうらおさんを知る ↓ BM98で遊ぶ、すげーたのしー ↓ BM98はやねうらおさん作? いやぁ、でもすごい 尊敬します
この世界って結構狭いなーと思う。 ABAさんのページとか、全然関係無い話題で何度たどり着いてる事か……。
類友
>>234 ちゃんと調べてる?というかエラーメッセージを理解してくれ -_-;
openglu.d を import して glu32.lib リンクしないとダメよ。
(glu32.libは DIDE with D のを使うと吉)
>>239 glu32.libエラーがでて入れてなかった。(openglのライブラリに入ってきたやつ)
DIDE今から入れてみるよ
Thread 表示にすると、D forum の上の方が switch の話題だけで埋め尽くされてしまっている(笑)
DのNewsgroups、2万件超・・・ Walterたんの記事だけ抽出して読んだ方が早そうだ。
検索機能が欲しいなぁ。 > D forum
D使えね〜 ライブラリがショボすぎる
Phobosに対抗して、Deimosを誰かが作ってくれればOK
246 :
デフォルトの名無しさん :03/12/11 15:01
>やね氏の本の1と2買ったんですが、あれは酷いと思いました。 >真面目に理解しようと読んでるのに、すぐつまらない事言って茶化す。 >「何馬鹿な事言ってんだこいつ?」というのと、相手が実力者でこちらが教えを乞うているという立場にあるという葛藤。 >とてもイライラしました。馬鹿なDQNヲタにとってはすごく楽しいんでしょうね。嫌味でなく羨ましい。 > >ま、無能の負け惜しみです。くたばれシャーマンやねアンチ信者 >もう疲た ほんとひどいね。 他人の語尾を気にする前に、人として恥ずかしくない事を言ってくれよオッサンよ。 書籍で公然とM$叩きしてるし。日記か何かと勘違いしてんじゃねえの。 やねはD使う資格なし。火星に対する侮辱。恥を痴れ。
また、なんか変なのが沸いたな。
現実問題として、現状Dの付属のライブラリはしょぼすぎるっていうのはある。 SDLなりOpenGLなり自作のC++で書いたライブラリを呼び出すならば非常に 簡単に書けるから困りはしないのだが、せめて一般的なコンテナぐらい templateとして用意されていないと辛いよなぁ。
そのテンプレートも面倒っちぃんだよな。 明示的なインスタンス化は別にいいんだけど、 template THoge(T) { class ??? { // ← こいつの名前をどう付けるか悩むんだよな。 ... } } namespace template って感じの 二重構造になってるのは正直面倒い。 まぁ、namespace template ってのがあること自体は否定せんが、 class template, function template も作れるようにして欲しい...。
生まれたて、というか受精卵分裂中の言語なんだから なければ作らないと
でも、一度に沢山の要望を出すと 十分議論されないまま流れちゃうかもしれんしねぇ...。
まあこんなとこで騒いでても無駄ってことか。
無駄ってこたないだろ。 ここである程度煮詰めてから 向こうに提案するんなら。
こんなことならDなんて作らずにC#のWin32版でも作ってりゃよかったのに。
んー、俺としてはwebにある情報と同じものをごっそり本に使うっていう根性が気に入らないなぁ 「皆さんのゲームプログラミングの一助になれば幸いです」とか言って、結局こっちのご機嫌取りたいだけなのね でなきゃあんな不謹慎なこと延々と書けるわけがないよ 見損なったよ、金の亡者め
また、なんか変なのが沸いたな。
まあ元々このスレは変なの多いし。
巨人の功罪は、*巨人そのもの*でもなく、*巨人ファンを生んだこと*じゃない *アンチ巨人ファンを生んだ*ことだ。 それは果たして巨人のせいなのか?
どうでもいいけど最近スレ違いが多すぎるぞ。 私怨だか何だか知らないがD言語以外のことはよそでやってくれ。 ところでSDL.netは誰もportingしてない?
>>261 httpDのヒトのは違うの? SDLよく知らないんで違ったらスマソ
だれかニュースグループのswitch関連の議論を日本語でまとめて欲すぃ。
俺も全部読む気がしないな(笑 > switch 関連 C 的な switch はもう古いってことで よりよい形を議論してるんだと思うんだけど、 今のでいいよ派とか default ない時に例外投げるのやめて派とか 新しい文法が欲しいよ派とか 新しい文法と今までのと両方あっていいよ派とか そんな感じのが侃々諤々やってんだと思う。
>>265 まぁ、簡単に言うとム板やマ板で行われてる議論みたいな事べーやってるって事ね
たまに勝手に勝鬨を上げるのが出てきたりしても 結局賛否両論になったりすることとか?(笑
Walterタソの記事拾ってくだけで精一杯だ( *´д`*)ハァハァ
switch スレ乱立しすぎ(笑 まだいろんなスレが立ってるよ。
どんな結果になろうとも、素のC言語より悪くなることはあるまい… つーか、素のC言語のswitchって、考えうる最悪の構文じゃないか? 言うまでもないfall through AからZまでとかやりたければひたすら全部列挙 defaultのスペルミスが通る スコープが共通なので上の方のcaseで宣言した変数が下で見えてしまう 全体を中括弧で括るのでインデントをどう取るかで迷う ループでもないのにbreakの対象
Ruby の case 文が最強ってことでいいよね!
>>271 はぁ・・・
どういうもんか教えなされ
そして最強名乗って
case(value) when 2, 3 ほげほげ when 4 ほげほげ when 5..9 ほげほげ else ほげほげ end ・フォールスルーなし ・比較対象として、文字列、正規表現、型(継承関係も考慮)も OK ・複数マッチする場合は最初に引っかかるもののみ実行
うらやましー
先を越された!
純粋仮想関数作れない?
abstract class Hoge { void doHoge(); } または、 class Hoge2 { abstract void doHogehoge(); }
うーん。 そういう簡単なのはできるんだけどなぁ。
>>280 規模が大きくなるとできない、とかあるの?
そんなに複雑なつもりでもないんだけど、 なぜかリンクでエラーが出る。
エラーメッセージ mylib\format.obj(format) Error 42: Symbol Undefined _D6format6Format5writeFC3std6stream6StreamZv mylib\format.obj(format) Error 42: Symbol Undefined _D6format6Format8generateFZv Format.write(std.stream.Stream) と Format.generate() は純粋仮想関数にしてるのに 定義されてないとか文句言われる。
分かった。 純粋仮想関数を private にすると このエラーが出る。 private にすると final なくてもオーバーライドされないのかな? というか、普通こういう場合は private じゃなくて protected だな。 漏れが悪かたーよ。
final クラスにしても継承はできるってのはどうなんだろう。 オーバーライドはできないようになってるみたいだけど。 こっちの方が便利なのかな?
最近D言語に興味を持ってます。 そこで質問なのですが、D言語って政治的にはどういう状況にありますか?JavaやC#の ように特定のOS環境に排他的な風潮とかあるのでしょうか?
Windows と Linux にはやさしいと思う。 でも、Mac はどうなんだろうね?
いまとこWindowsとLinuxにそれなりに動くコンパイラがある。 SDLあたり使うと割とどっちでも動くモノができるっぽい。 本家の言い分によると ・ネイティブコードを吐くべし ・GUIのLook&Feelはその環境に倣うべし ・環境依存コードはversion文を使って切り分けるべし という感じらしい。 Macとかにはコンパイラなかったと思うけど、 別にそれは単に手が回ってないだけで "排他的"ってわけじゃないと思う。 誰かがコンパイラ作れば…
政治的ってことで言うと、Windowsアプリ開発言語としての期待は今後薄いかなぁ。 Longhornで.NETベースになることが発表されてるので、 ネイティブコードが吐けることがメリットになるかどうか・・・
低レベルな機能のクラスが全然ないけど これってシステムコール・Win32API直叩きしろってこと? そうなるとC++同様言語はポータブルだけどコードは全然ポータブルにならない。 ってことになるのかね。そこらへんの展望はどうなってるの?
高レベルな機能のライブラリも全然足りない罠。。。
リストがデフォでないってどうなのよ。
>>290 低レベルな機能って具体的にどういうもののことを言うの?
本気で低レベルな機能は共通ライブラリでラップできるようなもので
はないと思うし、ファイル/ディレクトリIO辺りは標準ライブラリに
用意されているし。スレッドなども言語機能としてある。
GUIライブラリはDIGとかDUIとか一応マルチプラットフォーム指向の
が開発されている最中。問題はネットワーク周りがどうなるか、だな。
>>289 んなこたーない。
MSがVC++残している理由は、単なる旧資産運用の救済措置でしかないのか?
>>294 ん?VC++残してるって今の話でしょ?
俺が言ってるのはLonghornの話。
そりゃLonghornが出てもVC++は残るだろうが、
メインはmanagedで、unmanagedをサポートしてても旧資産用やドライバ用などじゃない?
>>289 に書いたようにLonghorn時代のWindowsアプリの開発用としては期待薄いと思うよ。
>>295 そのころには managed D が出るのでまったく問題ありません。
現在の文法で足りないのは、
funciton/delegate の統合と、event くらいでしょ?
>>296 まぁ出るならそれはそれでいいんだけど
managed C++が標準C++と別物になってしまったように、
Dもmanaged用の独自拡張で「これならC#使った方がよくね?」みたくならないことを祈りたい。
つーかVMに頼らないのが売りなのに.NET Frameworkに頼るのが前提てのもなんかなぁ。
まぁLonghornではmanagedが"ネイティブ"なので、現在gdi32.dllを当たり前のように使ってるのと
同じ感覚になるのかもしれないけど。
Dのどこが好きかってことだよな。 ネイティブマンセーならVMに頼るようになるのは気に入らないだろうし、 文法が好きなだけならば、RTTIやライブラリ群が補われるという受け取り方もあるかと。 元々.NET言語を満足する部分が多いし、 managed C++ と違ってネイティブとマネージドでソースを共通化するのも夢ではない(?) まぁ、ライブラリまわりが問題になるとは思うが……。
ワロタ >Re: switch.... g-sus krist, ain't this over yet?
蒸し返すようで悪いけど、言語とそのライブラリにはそれぞれ得意不得意分野がある。 どこにでもこの言語というのはないので、適材適所で使い分けるほうがいいと思う。 まあ、こんなこと分かりきってることだろうけど一応。
で、Dを使うべき分野は何よ?
適所がどこなのかが問題なんだよな。 標準ライブラリにWindowsを入れてくるあたり、WindowsのGUIアプリもターゲットにしてるようだけど。
ゲームか科学計算?
Direct3Dもまともに使えないしLinuxとWindowsでしか動かないのにゲーム? 行列計算ライブラリさえもまともに揃ってないのに科学計算?
まぁ、現状の標準ライブラリじゃなんとも言えんよね。 これからどんなふうにライブラリを充実させていくのか。
ゲームって、それは単にSDLを使ったゲームが公開されてるからだろ?
行列計算くらいいくらでも流用できるだっしょ?
まぁ、何やってもいいんじゃない
>>307 でもゲーム作りやすいよ
1ヶ月とせずに頻繁にアップデートされて、言語仕様に変更があったりするし、まだライブラリもこれからだしね。 Dはこれから作っていく言語だと思う。 実用上はどこが強いとかいうのはまだ、気が早すぎる気がする。
2,3歳の幼児がどんな方面に進むのが向いているかと考えるみたいなもんか。
今なら仕様変更の要求がある程度通るかもよ。
だからこそ.NETの拡張やライブラリもある程度視野に入れて・・・
>>309 前スレの後半で居てほしかったよ...
なんかゲーム房とか言われていやだった・・・
がんがれ。
>>314 前スレ700くらいからかな(´_`
PARSEC47の人も「D言語はゲームを書く上では最高の使い心地」と言ってるよ
PARSEC47の人はC++知らないからだよ
ゲ製避難所で使ってる奴を結構見かけたな。
まあ、C++とくらべれば、GCがあるだけで天と地ほどの差があるわな。 それにSDLなり何なりを呼び出すのなら確かに最高の使い心地かも知れない。 そういう使いかたをするなら標準ライブラリが貧弱すぎるのも 何も気にはならないだろうしな。
C++よりかなりいいよ。Dは。
>>317 の人はD知らないからだよ
あ〜 なんかいいこと思いついちゃった default:でスペルミスしてもエラー返されないならさ case default: って構文にすればいいんじゃないかなぁ? ってすごい素人考えでごめんさい・・・ 今パッってホントなんとなく思いついた考えなんで、スルーしてもらってもかまわないです
俺、キーワードが色分けされるエディタ使ってるからdefaultバグ出したことないんだよな
>>322 最近の大体のエディタはそうなんですよねw
ほんと素人考えでスマソ(^^ゞ
>>321 int defualt = 1;
...
...
case defualt:
で同じことじゃん。
>>324 int default ができないんじゃないの?
>>321 そんなもん D forum でとっくに出てる。
何せあのレスの量だしな。
大抵の可能性は網羅されてるんじゃないかな?
>>326 へぇ、そうなんだ
それじゃあ、失礼しますた^^;
>>328 ・・・
はかったな!
ってか、ホンマスマソ
>>324 defualt という変数を作る事があるのかどうかだな。
ualt という何かの初期値とか?
でも、100% 安全じゃないというのは分かった。
ちょっと感動した。
こうなると、ラベルを使う事自体が
既に何かの間違いってことだよな。
typo は出来る限りエラーになるべきだ。
defaultはラベルにしないって方針か。 switch(hoge){ case 1: .... }default{ } とか?激しく違和感が…
>>331 それなら、
switch(hoge) {
case 1:
...
} else {
}
とか。defaultよりはマシかもしれないけど、意味無し。。。
個人的は、switchはswitchでいいじゃん、と。
今のswitchと異なる分岐を作るなら、違う構文にした方が見通しがいいとか思った。
・・・と、本家に書きたかったんだけどねえ。今さらだよね。
>>332 Perl の Switch.pm っぽいな。こんなん。
switch ($val) {
case 1 { print "number 1" }
case "a" { print "string a" }
case [1..10,42] { print "number in list" }
case (@array) { print "number in list" }
case /\w+/ { print "pattern" }
case qr/\w+/ { print "pattern" }
case (%hash) { print "entry in hash" }
case (\%hash) { print "entry in hash" }
case (\&sub) { print "arg to subroutine" }
else { print "previous case not true" }
}
334 :
デフォルトの名無しさん :03/12/15 18:12
OSは書けるのか?GC内蔵してるから無理か、、、
OSがGC付きであってはならない理由はないな。
GC くらい OS から提供してくれってなもんだな。
コンパイラオプションか何かでGC Offに出来なかった?
GCつきの言語で書いたほうがOSは書きやすいし、効率的なものが出来ると 思われ。
>>332 見てさ
switch (hoge) {
case 1:
else:
}
これでいんじゃね?
defaultで問題ない。 どうせおまえらエディタで色分けするんだろ。 変えるならswitchという名前は止めるべき。
>>339 switch (hoge) {
case 1: if (x) x++;
else: ...
}
このように書かれた場合elseがif〜elseなのかswitch〜elseなのか、
さらにトークンを先読みしないと確定しない。
>>339 は、LALR(1)のparsingから勉強しなおしたほうがいいと思われ。
>>342 switch のは「else:」で一つのトークンなんだよ。多分。
>>339 else を typo してもコンパイル可能。
>>343 「else:」が一つのトークンなら確かにLALR(1)だが、
「else :」がコンパイル通らなってのはどうよ。
elseがまずいならotherwiseにしようよ
>>346 default:のほうがはるかにマシだ
>>346 etherwise を typo してもコンパイル可能。
あ、素で typo してもうた(笑
いや、ラベルじゃなくて switch (hoge) { case 1: } otherwise{ }
>>350 無駄にキーワード増やすのもなんだかな。
というか、それなら default でええやん。
やっぱ case default: が一番いいよなぁ
以上、本家switchスレのダイジェストでした。
だからこれが一番だって! switch(value) { case(1) { ... } case(2, 3, 4) { ... } case(5..9) { ... } default { ... } }
ラベルはキモい。 なしてラベルにこだわる必要があるのか理解しかねる。 C/C++ の switch 文のやつはまさにラベルだったわけだが (ブロックの中に飛び込んだりもできるし!)、 D でまでそんな醜悪な性質を受け継ぐ必要は無い!
Windowsに特化したGUIライブラリってまだないよね?
gccみたいにラベルのアドレスを変数に代入できると便利なんだけど
>>359 そりゃWindows特有のGUIがあるからだろ?
GTK+なんてWindowsで使い物になるの?
スレ違い。
>>357 「特化」が薄いラッパという解釈でいいならば、WTL for D ってどうでしょう?
WTL ならそれほどヘンなことはしてないから、CWindowImpl<> だけDで書き直せば、
atlctrls.h まわりはほとんどそのまま使える気がする。
>>364 そうそう、まだ無いならそういうのもありかなって。
特化ってつまり楽に作れるとか、Cの構文をそのまま引き継いでいるみたいな感じじゃないの?
switchよりmixinが気になる罠。どうなるか…。
mixin と委任はサポートされてホスィ。
( ゚д゚)ホスィ
保水・・・
371 :
デフォルトの名無しさん :03/12/19 02:01
C++でのメンバ関数につけるconst class C { int foo() const;// ←これ }; と同じ意図を表すには、Dではどう書くんでしょうか?
オブジェクトのコピーはどうやるの clone見たいなメソッドがあるの。 それともC++のコピーコンストラクタみたいな扱いをするとか。 AClass a=new AClass(); AClass aa=a; //これはコピーではないでOK? int i=4; int ii=i; これはコピーでOKだよね? AClass a=new AClass(aa); // こんな感じ?
>>371 そもそもconstクラスが無かったような。。。
>>373 Thx
auto属性って便利そうなんだけど、
ちょっと制限がきついねぇ。
もうちょっと緩めてくれれば参照カウンタ式
ポインタっぽく使えて便利そうなんだけど。
(デストラクタがすぐ呼ばれてくれそうだから)
>>375 参照カウンタ代わりに使えるようにするためには、参照カウントを
同時に保持しておかなければいけない。
すべてのオブジェクトが参照カウントの分(おそらく4バイト)ずつ
増えることになる。そんな実装はGCつきの言語では非現実的だと思う。
あえてそれがやりたければ、自分でcount_ptrのテンプレートを書いて
自己責任で使えばいいんだが、参照カウンタ式のポインタの何が便利なんだ?
>>376 >>375 じゃないけど、スコープに縛られないautoがあったら便利だと思わない?
関数の戻り値として使えたり…。
>>377 何がどう便利なのかさっぱりわからない。
>>377 autoがスコープに縛られないとすれば、いつ解放されるんだ?
>>379 autoがスコープに縛られないっておかしな表現だけど、
>>376 が言ってるようにboost::shared_ptrみたいな感じに使えたらなと。
>>378 そうか。んじゃ、おまいさんには不要だな。
漏れはアフォだから具体的な例は出せない。スマソ。
強いて言うなら、RAIIの有効活用が出来るってか。
382 :
デフォルトの名無しさん :03/12/19 20:57
lpD3D = Direct3DCreate9( D3D_SDK_VERSION ) とか SDL_Surface* image = LoadBMP("sample.bmp") などといったAPI固有のインターフェースで確保されたメモリを ガーベジコレクションはゴミ拾いしてくれるのでしょうか? いちいち if(image) Free〜 なんてやる必要があるならガベコレの意味無いと思うのですが・・・ つまり、DirectXなりSDLなりに新たにD用のモジュールを作らなければだめということですか?
383 :
デフォルトの名無しさん :03/12/19 21:12
"D"から始めるってありでつか? Cちょこっとかじった程度なんだけど…
>>382 > などといったAPI固有のインターフェースで確保されたメモリを
> ガーベジコレクションはゴミ拾いしてくれるのでしょうか?
喪前様、あるメモリを渡されて、それがmallocかnewかallocaか
VirtualAllocか何で確保されたものか判別する手段があるとでも思ってるの?
外部allocatorで確保されたメモリなんかどうやって確保されたかもわからないのに
GCが解放できるはずないでしょうに。
> いちいち if(image) Free〜 なんてやる必要があるならガベコレの意味無いと思うのですが・・・
いちいちって、SDLのSurfaceを囲むクラス書いてデストラクタで1回書くだけの
話でしょ?何がいちいち?
このスレいちいち感じ悪い奴が常駐しとるな
>>385 興奮はしていない。あまりに常識知らずなので驚いただけ。
「メモリ管理」にある Mark/Release のサンプル (改造が必要だったながらも)実行してみたけど、 デストラクタ呼ばれないんだよな。 誰かあのサンプルまともに実行できた香具師いる?
>>384 俺の知識と経験が全然足りなかったわけですね
だからそんなに怒らないで(ノД`)
ありがとうそしてごめんなさいごめんさい(ノД`)
∧||∧
( ⌒ ヽ
∪ 。ノ
∪∪
あぁ、静的じゃない方のデストラクタね。
>>389 別に怒ってるんじゃない。気を悪くせんでくれ。
>>380 > boost::shared_ptrみたいな感じに使えたらなと。
仮に、auto2 というキーワードをつけると、boost::shared_ptrの意味に
なるとしよう。auto2 Hoge h; これをauto2のついていないメソッドに
引数として渡したとき、その参照カウントはおかしくなってしまう。
boost::shared_ptrでもこれと同じ問題に逢着することがある。
Hogeクラスを使うところすべてにauto2をつけてプログラムする気なら
それでもいいのだが、果たして、それの何が便利なんだい?そこまで
するならcount_ptrのテンプレート書いて、それ使えばいいんじゃ?
ただ、クラスメンバにautoを指定できれば便利だと思うことはある。
通常、クラスのデストラクタと、メンバのデストラクタとは呼び出される
タイミングが異なるからな。それを同期させたいと思うことはある。
現状、DMDコンパイラでは、クラスメンバのautoは、指定はできるが
無効のようだ。(コンパイラがバグなのかどうなのかは知らないが)
>>383 CからDか。まあ、悪くはないんじゃ?
参考書とかそろってるJavaとかを先にやったほうがいい気もするが。
>>388 > 「メモリ管理」にある Mark/Release のサンプル
それ、どこのサンプル?
>それ、どこのサンプル? もちろんDのサイトのやつ。
>>393 それはそうなんだけどね。だから新しいキーワードやクラス作るんじゃなくて、
(名前が相応しくないが)autoがそう言う動作してくれたら良いなと思ったわけさ。
もちろんそれによる副作用も大きいと思うから、無ければないで漏れは問題ない。
でも出来る事なら漏れは自分で明示的にCloseとかReleaseとかそう言った関数を
呼び出す手間を省きたい。いつデストラクタが呼び出されるか
分からない状況下だと、returnや例外投げたりする度にそれを書かないといけない。
autoを使えばその問題も解決出来るけど、スコープが関数内に限られてしまう。
そう言った所で使えたら良いなと思った訳さ。
つーか漏れも素直にそう言うクラス書くのが一番だとは思うんだけど、
テンプレートのimplicit instantiationが無いから手間が増えそうなんだよな…。
まぁWalterタソが、These restrictions may get relaxed
in the future if a compelling reason to appears.
って言ってる事だし、どの辺が緩和されるのかは分からないけど微妙に期待してみる。
長々とスマソ。
>>396 やっと意味がわかった。例外は確かにそうだな。autoをクラスメンバに
対して適用できるだとか、クラスまるごとautoにするだとか、なんとなく
その手の機能が必要な気もする。
大きなリソースを扱うときには何か工夫をしないといけないっぽいな。
>詳しくはやねうらお氏のところが詳しい。 詳しくは〜詳しいってなんだ。漏れの馬鹿野郎。
>>398 それ聞いて、色々考えて分かった。
何かあのサンプルを色々誤解していたようだ。
ありがとう。
もしかして、
>>371 のようなものって、Dには無いんですか?
途中で送信してしまった...。 >あと、それとは別の問題だが、カスタムnewで確保したメモリはdeallocatorも >~thisも呼び出されない。それが仕様なのかどうかは漏れに尋ねられても困るが、 >カスタムでnewしている以上、カスタムでdeleteしなさいということなのだろう。 うーん。確かに勝手に殺したらまずいこともありそうだなぁ...。 なるほど、これはしゃーないのかもねぇ...。
なんか微妙に荒らしちゃった? deleteも有るのね。ただ、以下のような場合ってどうなるの? AClass a=new AClass(); AClass aa=a; delete aa; // ここの時点でa/aaはどうなってるの? // もしかして両方ともnullになるの? 質問ばっかりですまん。
switch かぁ。enum で型が選択できるんだから、enum以外禁止にしてもいいような・・・ あ、コンパイラ入れてから出直します
>>403 なんだかんだ言っても結局ポインタなので、nullにはならん模様。
aaの方でインスタンス変数にアクセス -> AccessViolation
aの方でインスタンス変数にアクセス -> チェックされず、読み書き可能な場合がある。
メソッド呼び出し -> 両方AccessViolation
ということで、フィールドの直接アクセスは危険だからアクセッサを使え・・・と。
>>394 Cをやりたいなら一番最初にCをやればいいし、
JavaもDも同様だろ。
まあ、Dは書物がないからDの文法にある程度近い言語を学んでおくというのは
一つの考えだが、途中にJavaを噛ませて...とか考えるのは時間の無駄。
コンパイラがα版しか無いような言語を最初にやる事はお勧めしない
情報も少ないし謎仕様とかもある品
412 :
デフォルトの名無しさん :03/12/20 14:50
DをHelloWorldからコツコツやってきたんですが、 SDLを使用した実行ファイルの作成がわかりません。 どうすればいいのでしょうか。。。
>>410 それをいうなら経験者でも
>コンパイラがα版しか無いような言語
よりはC++,Javaを使うべきだと思うのだが。
要するにDみたいな「まだまだ準備段階」な言語を使うのは
個人の嗜好の問題だろ、ということだ。
D は、 新しい言語を作りたいけど、 自分で作るのは面倒だし、 コンパイラなんていちいち作ってられないから、 Walter さんにちょっかい出しつつ 共同製作する形で妥協しよう、 という人におすすめだね!
>>412 教えて欲しいのなら何をやったか位書け(コマンドラインetc)
向こうにもポインタに苦労してる人がいるんだねぇ。
>>408 >ということで、フィールドの直接アクセスは危険だからアクセッサを使え・・・と。
なんでそんな結論になるんだ?
デストラクタ呼び出したあとのオブジェクトはGCに回収命令が出されていて
メモリに残っているのは単なるゴミ。アクセスしていいはずがない。
JavaかC++から勉強しなおしてきたほうがいいんじゃね?
>>417 はぁ?
そのゴミにアクセスしたときに何も言わずに書き換えられるのと、
ちゃんと例外投げてくれるのと、どっちが良いんだよ。
デバッグしたことも無いような奴はスクリプト言語で十分。
というか、どういう状況であれ フィールドの直接アクセスはやめれ。
>>418 >そのゴミにアクセスしたときに何も言わずに書き換えられるのと、
>ちゃんと例外投げてくれるのと、どっちが良いんだよ。
両方良くない。GC付きの言語でdeleteする奴が馬鹿。
そもそも、例外投げるって、オブジェクトがdeleteされた
あとかどうかなんてどうやって検出するつもりなんだ?
>>420 誰もdelete推奨しとらん。日本語よめボケ。
とりあえず例外投げてもらってプログラムが止まればバグがすぐ見つかるだろうが。
Pointとかの例外を除いてフィールドを直接アクセスするような馬鹿は来るな。
>>421 398を嫁と言われても、398を書いたの漏れなんだがな。
まあ、それはいいが、カスタムでnew/deleteを実装して、
boost::weak_ptrのようなことをするって言いたいのか?
それなら意図はわからなくはないが、deleteを呼び出している時点で
負け組だな。
>>419 >>422 フィールド直接アクセスしても、あとからpropertyでどうとでもなる。
わざわざ無駄なaccessorを用意してるのは、馬鹿なハンガリアンと一緒。
古いC++スタイルのコーディングだな。
>>423 プロパティでアクセッサを実現するんだよ。
だれもget/setを書けなんて言っとらん。
フィールド直接アクセスは危ないからメソッドを通せと言ってるだけ。
>>420 は勝手に他人のレスを脳内補完しないように。
とりあえずおまえらもちつけよ。もうすぐ正月だぞ。
>>424 それなら意味わかった。すまなんだ。
>>425 正月だけにもちつきか..もちつきソフトでもDで作ろうか?
もちつきソフトってどんなの?
もちつきロボットではないのだろうな
さりげなく言ってるだけにどんなのか気になる……。 是非作って。>426
このスレは426にもちつきロボットを作らせるスレになりました。
いや、もちつきソフトだ。
今更蒸し返すようで悪いが(デスマ参加してたもんで…)、 こんなswitch〜case構文はダメだろうか。 switch( value ){ (デフォルト動作) } case( 1,2,3 ){ } case( 4 ){ } なんか皆「defaultは一番下」という固定概念に囚われてないか?
434 :
デフォルトの名無しさん :03/12/21 01:37
現在、『 猫でもわかるプログラミング 』その他などで Windows SDK をコツコツと学んでいる者です。 ところで、The D Programming Language(翻訳版)によると std.c.windows : Windows API 関数に対応するモジュールです。 と、あります。 これは、冒頭で得た Win32 APIの知識が、そっくり生かされる ということでしょうか。
437 :
デフォルトの名無しさん :03/12/21 07:06
>436 了解しました。どうもありがとう。 dmcとdmd、すでにダウンロードしてあるので これから早速、解凍インストールします。
438 :
デフォルトの名無しさん :03/12/21 09:09
個人的にVisualStdio Dを作っています。 協力者求む
>>438 「蜻蛉切り」の開発手伝ってやってくれ。
ワロタ
>>433 結局デフォルト動作は一番下に来るんだろ?
何もしなかった時に処理をするわけだし一番上に越させてもどうかと思う
Javaはなぜ成功したか?文法がCそっくりだったからよ というわけで意味も無く変えてるD言語はだめぽ
Dもそっくりやん( ゚Д゚)ポカーン
一番上でも別にいいんだけど (C/C++/D の switch 文でも別に default: を上に書いても構わないし)、 デフォルト動作が必要ない場合にも 書かなあかんのはどうなんだろうなぁ。 いや、面倒とかいうんじゃなくて、 デフォルトを略すと最後に break; default: assert(false); と書いたことになるという D の仕様(というかポリシー?)を受け継ぐことができないのがなんとも。
>>446 Java は C と文法そっくりっても、unsigned ないしねぇ…
演算の際の数値型の昇格とか全然違うよーな。
Javaが取り入れなかった部分で、C++から変更があったのはいくつもあるけど……。
結論を急ぐ事は無いが GCは時として厄介だという事だな つまりGCを使用したり使用しなかったりと切り替えられるDはすばらしいと ゲームなどではGCを使わない これでいいな(なんかおかしいな
.NetVC++もマネージ(GC)とアンマネージ(非GC)選択できるぞ
>>451 切り替えが出来ないといけないでしょ
ネタにマジレスおつかれ
固定ポインタ介して切り替えできるよ
>>445 デフォルト動作が不要ならこう書けば良いかと。
switch( value );
case( 1 ){
}
暗黙のassertに関しては漏れは反対だな。
>>454 それはきもいなぁ。
switch と case が別の文に分離されちゃってる。
>>454 if 〜 else みたいに もっとも近い switch の case とみなすって文法ですね。
switch のネストとか(めったにしないけど、たまに)やるときに面倒そうだね。
Windowsのウィンドウプロシージャじゃしょっちゅうネストします。
>>454 でも、いちいち break; default: assert(false); って書くのは
面倒っちぃんだよな。
nomore; とかそういうのがあれば
別にそれでもいいんだけど。
>>458 そういう時こそマクロ使うんだよ
あ、Dにはマクロないんだっけ(w
dig使おうと思ってるんですがしょっぱなgo.bat実行してもうまくいきませんでした。 どうしてこのライブラリー、import分にことごとくstd.がついてないんでしょう。 あとmulとかaddをopMul,opAddのように扱ってるように見えますますがなんで? 当然mul,addだと演算子オーバーロードできていないので、+,*を適用したところは コンパイルエラーになります。もう訳わからない。
>>462 演算子オーバーロードのメソッドは、一度変更されてる。
digは古いままなので、、、
>>463 そうだったんですか・・・ありがとうございました。
全部直さないとだめなんですね。ほかの部分は大丈夫なのかなぁ…
というかすでに直して使ってる人いると思うんですけど、公開してないのかしら…
俺はテストしてないから、ほんとにこれでOKかどうかは知らんよ。。。
467 :
デフォルトの名無しさん :03/12/23 22:50
D + SDL で初心者向けのサイトないかな?
468 :
デフォルトの名無しさん :03/12/23 23:38
>267 この言語自体まだテスト段階なんだから、初心者向けはねーだろ。
>>467 C + SDLのサイト見ながら作れるぞ? > D + SDL
まぁ・・・ そりゃそうだけど そこをみんなの知恵をあわせて何かつくろうぜYO
∧∧ ミ゚Д゚,,彡 <D言語(σ゜Д゜)σゲッツ!! D言語 ⊂ とミ ミ ミノ ミ ミつ し'´
そろそろD言語の情報もそろってきたな。 SDL呼び出すだけならC++から呼び出すよりはるかに使いやすいしな。 いっちょゲーム作ってやるか。 来年な。
期待しないでコタツでみかんくってっから頑張れよ
474 :
デフォルトの名無しさん :03/12/24 22:24
興味があったので、試しにSDLをこの言語でやってみたが ゲームのループで躓いた…業務アプリしか関わったことにない俺としては 意味不明だす。 tp://www.geocities.co.jp/Berkeley/2093/gmtrl.html ここ見てみたんだけどさ。なんかよくわかんね。ダメ人間です。
そういう話題は、ゲ製作技術板へ?
だね。Dがわからないんじゃなくてゲームの作り方がわからないんだから。
>>474 とりあえずCを少し勉強して、CでSDL呼び出して使えることが大前提。
>475,476,477 皆様ありがとうごぜーます。気合入れて精進いたします。。
FreeBSD 4.9 で D 動いたんで報告。 # GC など細かい動作は未確認 # 本家では既出かもしれないけど、、 FreeBSD 4.9 で D を使う方法 - 2003/12/25 1. ports を使って Linux エミュレータをインストール。 # emulators/linux_base # devel/linux_devtools-7 2. Linux バイナリが動くように適切に設定。 # FreeBSD ハンドブックの Linux バイナリ互換を参照 3. /compat/linux/usr/bin/gcc のシンボリックリンクを作成。 # path が通っている場所へ # 例: ln -s /compat/linux/usr/bin/gcc /usr/local/bin/lcc 4. dmd.zip を落してきて、Linux のインストール手順に従う。 5. dmd/bin に path を通す。 # bin/dmd を __dmd とかにコピー (バックアップ) 6. bin/dmd をバイナリエディタで開いて a.out を検索。 7. a.out の前の gcc の部分を lcc に書き換え。 # 先ほど作ったシンボリックリンクへ あとバイナリ書き換えで、文字列の長さを変えないこと。 # gcc を linux-gcc とはできない (コアダンプ) また問題としては、FreeBSD バイナリが作れないこと。 # でも普通に Linux バイナリが動くので大丈夫かと
あら、linux_base と linux_devtools インストールしたら バイナリ書き換えなくても動くみたいです、、、 >> 479 はなかったことにしてください。
まぁLinuxエミュレーション入れれば動くだろうな。 NetBSDでも動くし。
エミュで動いたとか喜んでる馬鹿は出て行ってください
ファイヤーエンブレムがGBAエミュでうごいt(Ry
実機で動いたとか喜んでるb(r
烈火の剣二十章ぐらいまで進めたけど飽きたからそのまんま
テンプレート関係で大きな動きがあるかもしれない。
新しいバージョンまだ〜(チーン)
>>486 前のだとインスタンス作成しないとだもんね
>>488 テンプレートの非明示的なインスタンス生成がサポートされるってこと?
そんなのMLにのってるっけ?情報ソースきぼん。
テンプレートで大きな変更って言われたら、
>>489 みたいなこと期待しちゃうよねぇ。
あとmixinもほすぃ・・・
493 :
デフォルトの名無しさん :03/12/30 22:32
∧_∧ (゚ Д゚ ,,) {Dの次にEとかはでるんだろうか?) (u u_)〜
なにこのスレ?
D言語スレ
506 :
デフォルトの名無しさん@カラアゲうまうま :04/01/01 15:57
からあげウマウマ
509 :
デフォルトの名無しさん :04/01/03 13:32
ExpressionList switch (i) { case 1: x = 3; case 2: x = 4; break; case 3,4,5: x = 5; break; }
連ねられるのにbreakまだあるの?
>>511 それどころか、
switch(i)
{
case 1:
x=3; /* FALLTHRU */
case 2:
x=4;
break;
case 3,4,5:
x=5;
if(a) goto case; /* transfer to the next case */
goto case 7; /* transfer to case 7: */
case 6:
x=6;
break;
case 7:
x=7;
if(a) goto default; /* transfer to default */
break;
default:
x=0;
}
うがーー
instance から ! にしたメリットって何? C# や Java も含めて、ジェネリクスが絡んだ文法は試行錯誤段階のような気がしてならないんだが……。
構文糖
defaultはラベルか?
>>515 ラベルじゃないけど、そういう構文が追加された、ということのようで。
あと、昼間にDLした人は、std.c.mathを補完した版が挙がってますんでチェック。
0.77にしたらSDLをimport するとエラーがでるようになった
>>517 どういうエラーか言わないといけないと思います
switch に範囲指定欲しいね
>517 同じく。エラーっていうかimportするとコンパイラが落ちる。
あれ、落ちた…。コードシンプルにしたら逆に落ちた(;´д`)
typeofキター!! 嬉しくて泣きそう。
>>523 禿同。
typeof はめっちゃ欲しかった。
テンプレートは随分スマートになったけど、
まだ何か変わりそうな気もしなくもない。
テンプレートメンバ関数が作れないという制限の解除とか。
テンプレート関数も一重ですぐに作れるようになるといいなぁ。
間違えた。 ×テンプレートメンバ関数、テンプレート関数 ○メンバ関数テンプレート、関数テンプレート
○追加・変更・修正事項 ・モジュール宣言で、モジュールの名前をパッケージを含めてフルで書かなくても問題なくなった。 ・std.file がユニコードのファイル名を受け付けるよう変更。 ・toUTF16z を std.utf に追加。 ・std.md5 を追加。 ・Hex string が偶数個の16進数字でなければエラー。 ・.alignof でアラインメントサイズを取得。 ・.size → .sizeof (まだ .size も使える模様) ・main は main() か main(char[][] args) のみ受け付ける。 ・エイリアス size_t と ptrdiff_t を追加。意味は C の時と同様。 .length, .size(of), .alignof で返される値の型は size_t 。 ・Win32 版では、dmd に渡すソースファイル名の / を自動的に \ に変換する。 ・typeof を追加。 ・プラグマの仕様変更。pragma を属性のように扱えるようにした。 ・case を列挙できるようにした。 ・goto default; goto case 3; などできるようにした。 goto case; で次の case へジャンプ。 ・template にエイリアス引数を追加。 ・template のインスタンス化の構文を変更。 instance を廃止し、! でインスタンス化するようになった。 ・クラステンプレート構文の追加。 ・テンプレートメンバに関するルールを追加(静的テンプレートメンバのみ許可)。 ・再帰的ファイルシステム探索モジュール std.recls(語源は多分 rec + ls) を追加。 ・パーサのエラー復帰を改善。 ・bit 配列のサイズが変だったのを修正。 ・std.intrinsic と std.math の間の名前衝突を修正。 ・std.regexp.match のリセット問題を修正。 ・std.string.rfind のバグを修正。 ・-inline の問題を修正。
3月にバージョン1を出したいとか言ってるけど、 まだまだ気が早いって気がするなぁ。
\ ==ヾ 孝之君、まだかな〜 JTT‖| v /_/_/__/__/ 走る!走る〜〜♪ ‖| /⌒⌒ヽ _/_/__/__/ -―――――- ─────── ‖| (∞((l l))/_/__/__/ /  ̄ ̄ ̄// ̄ ̄.|| | ‖| い ゚ -゚ノj _/__/__/ /ブレイク!// ブレイク! ──────── 〃 ‖| / (ヾソ)_/__/__/ [/_____ヾ(゚∀//[ ](゚∀゚ )シ|_______ ‖|/__ 口UU、 __/__/ .||_ ___|_| ̄ ̄ ̄|.| | 日本ブレイク工業 | ──────── ‖|::::::::::/__/_l_ヽ_/__/ .lO|--- |O゜.|____|.|_|ニニニニニニニl.| 〃 ‖|:::::::::::: しソ__/__/ |_∈∀∋ ̄_l_____l⌒ l.|_____ _| l⌒l_|| ───────── 二二二l_/__/__/  ̄ ̄゛--' ̄ ̄゛ー'  ̄ ̄ ̄゛--' ゛ー' 衝撃の新事実
>>524 typeof がどういうときに便利なのかいまいち分からないんで、サンプルきぼん
多多異による統一的操作をぶち壊したいとき
>>529 a = new typeof(a); とか a = cast(typeof(a)) b; とか。
a の型を変更したいときもこのコードを変更しなくてすむ。
import std.c.stdio; template TMax(T) { T max(T t1,T t2) { return (t1 > t2 ? t1 : t2); } } int main() { int i=30,j=40; printf("%d\n", TMax!(typeof(i)).max(i,j) ); return 0; }
template max(T) { T max(T a, T b) { return a > b ? a : b; } } int main() { printf("%d\n", max?(i, j)); // ? で関数の実引数を使ってマッチング return 0; } とかできればいいのにね。
>>534 いいアイデアだな。typeofを実装してあるぐらいだから、実装容易だろうしな。
news groupに投稿ヨロ。
implicit instantiationに一歩近づいたのかもしれない。
あとは待つのみ...か。
Stating the obvious is always a good idea, because often one misses the obvious. - Walter
何かもう template(T) T max(T a, T b) { return (a > b ? a : b); } とできるようにしたんでいいような気がひしひしと。 この提案が悉くスルーされてるのは まだレスがおっついてないのか、見落としてるのか、やる気ないのか。
無名templateとか嫌いなのか。。。
あと、言語的に実装されて欲しいものとして namespaces(名前空間) template implicit instantiations(暗黙の実体化) template partial specializations(部分特殊化) mix-ins local character codes(ローカル文字コード) user-defined pragma(ユーザ定義プラグマ。C99 の _Pragma 演算子みたいなの) 以外に何かある?
>>541 暗黙の実体化はもういらね。部分特殊化はいらね。
namespaceはmodule機構がもう少ししっかりしてればいらね。
mix inか委譲構文的なものは欲しい。ユーザー定義プラグマはいらね。
ちゃっちゃとdelegateとfunction統合して、yield的なものを
もっと強化して欲しい。
部分特殊化がいらない? 本当に? 行列クラスとかで 実数と複素数で処理を変えることなんて よくある話だぜ?
template THoge(T) { ... } template THoge(T : char) { ... } とかそういう話ではなくて?
yield 的なものの強化は (・∀・)イイ!! ね。 Ruby の yield のようなものは とりあえず内部関数か関数リテラルでいけるけど、 文法的にあまり綺麗に書けないのが困りもの。 opApply のようなものをもっと拡張して、 もっと何とかできないもんかね。 void times(int n; int) { for(int i = 0; i < n; ++i) { int res = yield(i); if(res != 0) return res; } return 0; } times(10; int i) { printf("%d\n", i); } とか。 opApply 実装できてるんだったら、 この手の処理の実装は可能だよね?
>>544 C++ の template partial specializations 。
要するに
template <typename T> class CT foo()+
あ、部分特殊化か。
途中で送信してもた。 template <typename T> class C { T foo(); }; template <typename T> T C<T>::foo() { return 0; } template <> int C<int>::foo() { return 1; } こんな感じ。
newsgroupでも気になったんだが…
>>546-548 それは少なくともC++では部分特殊化 ( 14.5.4 ) とは言わない。
単なるクラステンプレートのメンバ関数 ( 14.5.1.1/2 ) の明示特殊化だ。
template <typename T> int C<T*>::foo() { return 2; }
ならメンバ関数の部分特殊化と言えるだろうけど。
・部分特殊化( = partial specialzation )は D言語 に既にある。
※
http://www1.kcn.ne.jp/~robe/d/template.html > 特殊化 > #2
・D言語に無くてあなたが欲しいと言っているのは、テンプレートメンバの特殊化。
なるほど。 しかし、用語がややこしいね。
って、規格票読んだら、 14.5.1.1/2 にはそんなもんなくて、 14.5.4 の部分特殊化でいいじゃないか。 15.5.4.4 の例で template<class T> class A<int, T*, 5> { }; ってのがあるぞ。
>>551 だから、
> template<class T> class A<int, T*, 5> { };
これが部分特殊化だ。その通り。Dにもある。
template A(T: int, U: U*, int I: 5) { ... }
> template <typename T> class C { T foo(); };
> template <typename T> int C<T*>::foo() { return 2; }
この2行目のも部分特殊化だ。
> template <> int C<int>::foo() { return 1; }
これは違う。partial じゃない "explicit specialization" だ。
#つーかスレ違いスマソ。
うーん。 「部分」じゃないから「部分」をつけるなってことか。 確かにそうだな。
Dのテンプレートって、どこまでバイナリライブラリ化できるの? C++と同じく、ソースがないとどうしようもないような気がするんだけど。 そもそも、Dってどこまでバイナリ再利用ができるかが曖昧に思うのだが。 インライン化とかもソースがないと難しいだろうし……。
コンパイル早いからソースでOK?
otherwiseって。。。xsltじゃなかったっけ
557 :
デフォルトの名無しさん :04/01/06 19:00
おい!やね氏コラ! 未来の週刊少年誌とかやめれボケ!何のための更新履歴なんだよ! 久々にネット繋いでみたら、どこ更新されてんだかわかんねーじゃねーかよ! また一から読み直せってかコラ!こんなくだらねぇことやってっからソースにも平気でお寒いコメント書いちまうんだよ! 自慢か?自慢したいんだろ!?俺様はこんなにもD事情通なのだぞって!お?やんのかコラ!あぁん わるたんにスルーされてる分際で調子こいてんじゃねーぞコラ! つーわけで次俺様が閲覧するまでに更新履歴直しておけな!俺の倍は年端いっているであろう親愛なるやねボケェ!!!
ところで聞きたいんだが class hoge{ static int opSlice(){return 0;} } って書くと hoge[] みたいに演算子の形で呼び出せるけど、 これって仕様?
>>558 めちゃくちゃ仕様。リファレンスのOperator Overloading項の最後の方に明記されてる。
>>559 見当たらないので、該当箇所引用してくれます?
class hoge{
int opSlice(){return 0;}
}
hoge h = new hoge();
h[]
と書けることは確かに載ってるけど。
>>560 よーするに、staticクラスメンバ関数と同じ扱いということじゃないんか?
opSliceに限らんけど、演算子オーバーロードの関数を、staticにした場合、 型名に対する演算としても動作するね。 import std.c.stdio; class T1 { int opAdd(int i) { return i;} int opSlice() { return 1; } } class T2 { static int opAdd(int i) { return i;} static int opSlice() { return 2; } } int main() { T1 t1 = new T1(); printf("%d\n",t1 + 2); printf("%d\n",t1[]); printf("%d\n",T2 + 2); printf("%d\n",T2[]); return 0; }
phobos にて、Object.toString() の定義なんですが、 { return "Object"; } なのが解せません。 { return this.classinfo.name; } のほうが良くないですか?
abstract にしないためのダミー実装なんで、 別にどうでもいい気もする。
565 :
デフォルトの名無しさん :04/01/08 09:45
class A {} class B : A {} void delegate(A) fnA; とあるときに、 void delegate(B) fnB = fnA; // <= これ ができてもかまわないように思うのですが、 これで問題が起こることがありますか?
その場合は問題ないと思う。それとか B delegate() rtB; A delegate() rtA = rtB; これとかD言語にも確かに欲しい。 ただ、そのコードで class A{} の代わりに interface A {} にすると、 アップキャストの時にポインタずらさないといけなくなるんで delegateの単純な代入だけじゃ実装できない、という問題はなきにしもあらず。
>>567 オーバーライドでの共変の戻り値には対応しているんだから、
これらも有効にして欲しいですね。
>アップキャストの時にポインタずらさないといけなくなる
template Thunk(T)
{
class Delegate
{
T fn;
this(T fn) { this.fn = fn; }
void dummy(B b) { fn(b); } // 本当は、返値や引数もよきにはからって欲しい
}
}
fnB = &(new Thunk!(typeof(fnA)).Delegate(fnA)).dummy;
みたいなコードを自動生成してくれたらうれしいなぁと。
傍流スレより
301 :デフォルトの名無しさん :04/01/12 10:15
テンプレートがアレって事はlokiのTypeTraitsとかってDには作れない?
302 :デフォルトの名無しさん :04/01/12 14:48
>>301 テンプレートの特殊化は可能だから、ある程度はできるんじゃない?
あと、あるクラスについて特殊化すると、その派生クラスも
特殊化したバージョンが使われるみたいだけど、これって仕様だっけ?
(C++だと、そのクラスだけだったはず。)
303 :デフォルトの名無しさん :04/01/12 17:09
C++ の template にできて D の template にできないのは
1: 関数テンプレートの implicit instantiation
2: メンバ(関数|クラス)テンプレート
3: テンプレートメンバ毎の特殊化
だけど、1はtypeofで機能的には何とかなるし、3はメンバ毎じゃなくて
全メンバの特殊化を毎回書けば一応カバーできないことはないので、
問題になるのは2だけだと思う。
TypeTraitsとかTypeListには特にメンバテンプレートは必要ないんで、その辺
普通に使う部分なら問題ないはず。is_enum<> とか厳しそうなのも一部あるが。
こんな辺境にもスレストが来るとは。
メンバ(関数|クラス)テンプレートができないって 暗黙の型変換避けのprivateテンプレートコンストラクタとかも無理? あとimplicit instantiationをtypeofでなんとかするって 具体的には??
スレストかかったスレより下なのもなんなのでいったんageちゃいますね。 lokiをDに移植するとしたらどの程度できるんだろう? もうgenerativeのできない言語は考えられないんだけど。
>>572 max!(typeof(a))(a, b) とか。
面倒ではあるけど、できないことはない。
>>572 暗黙の型変換はDには存在しないような気がした。
Word 立ち上げるのマンドクセ
>>576 C#のテンプレートはgenerative可能?
>>578 C#のテンプレートは、関数テンプレートの implicit instantiation はあるものの、特殊化はないかも。
ただ、Anonymous methods や yield などが追加されて、言語自体の強力さは追いつかれそうだなーと思って。
>>576 凄いね。凄い。Dにも欲しい機能がちらほら。
とはいえ、Dに期待している人はC#とDを秤にかけるようなことはしないと思います。 C++/C vs Dで考えてる人が多いのでは。
いや、ただそれでもD公式にJavaやC#との比較表もあることだし、 Walterタン本人もそれなりに視野に入れてるってことじゃない? C/C++ vs Dで考えてる人は多いだろうけど、 JavaやC#も無視できるほど小さい勢力ではないと思う。 ま、もっともこの二つはネイティブコンパイラじゃないんで、 その点敬遠してる人は少なくなさげか。私もそうだし。
Native compiler というのが D の大きな売りだからね。
な、直ってないよ、、、import したファイル名と同じ名前の型の変数を宣言するときに クラッシュするバグ、、、
とりあえず致命的なのを直してリリース。 しかる後にもうちょいフィックスしたのをリリース。 という肚だと思われ。
Nステ矢野キタ━━━━━━(゚∀゚)━━━━━━ !!!!
コンパイル時に-O 付けて、 最上位Bitが立っている数を余剰すると値が変になるっぽい。 uint f(uint n){return n%10;} int main(){printf("%u",f(uint.max));return 0;}
>>590 何か符号付で計算されてるみたいだね。
報告しとくわ。
mix(・∀・)in!!
やねうらおの氏のMicroThreadは GCとか大丈夫なの? そうじゃなくてもコピー型だとスタック上のオブジェクトのアドレスだけでも 取ったら何が起こるかわからないよね?
エディタマクロのような組み込み用途としてはどうなの?>D
>>593 > やねうらおの氏のMicroThreadはGCとか大丈夫なの?
安全。それくらい自分で た め せ な い の か。
> そうじゃなくてもコピー型だとスタック上のオブジェクトのアドレスだけでも
コピー型って何をコピーする話?
>>595 >それくらい自分で た め せ な い の か。
まだD自体の環境も構築してないんでね。
試せないというより試す気がないんだが。
Dに何が出来て何が出来ないのかを色々調べてから
Dを使うかどうかを決めようと思っている所なのでね。
>コピー型って何をコピーする話?
コピー式って書いたほうがよかったかもね。何をってスタックを。
文体がなぜか偉そう
>>597 私のことですよね。
>>595 さんの返答にカチンときたので
わざときつくしました。
質問者だって(怒るのはお門違いだとして)不快感を表明したっていいと思うんです。
特にこの業界の(特にUNIXがなんとかとか言う人達の)文化は
新参者や初学者に対して *必要以上に* 冷酷だと思います。
自分で勉強したほうがいい事はたしかにある。
だけどそれを聞いてきた人間を高圧的な態度で馬鹿にするのは
果たして良い事でしょうか?
>>598 怒っても構わんと思うけど、関係ない人が読んで不快に思うことも考慮して欲しい。
やってることは595と同じ。
>>598 ==
>>593 ?
>>595 は本人なんだろ、たぶん。
> そうじゃなくてもコピー型だとスタック上のオブジェクトのアドレスだけでも
なんて意味不明な言葉遣いを平気でする=素人丸出し な
>>593 なんぞに
心配される筋合いはないってことじゃないかと。
後半の文章のせいで、「阿呆で高圧的な質問者」に見えるから、レスの雰囲気も悪くなったんだと思うよ。
だよな。相手の態度が悪いから自分の態度も悪くするって要するに相手と同レベルのことをしてるだけだ。 まぁ2chならそれも大目に見るけど、普通の技術系メーリングリストなどでそれやられるとうんざりするよなぁ。
俺もまだDいじり初めてから1月と経ってない人間だけどさ、 先行してる人たちは言語が不完全な段階で色々試行してたってことくらいわかってる。 おこぼれだけ攫おうとして温情もらえなかったら即キレるなんて おぼっちゃんに初学者を僭称して欲しくないよ。 こっちまで居づらくなる。 #つーか全然関係ないUNIXの批判とかは明らかに自分から火種振りまいてるし。
まー、コミュニケーションの話はその辺にしときましょうや。
すご、3時間ぶりのレスがかぶった。
やねうらお氏の頭は 大 丈 夫 なの?
天才と○○は紙一重って言うしな。
Dmacsつくれ
609 :
デフォルトの名無しさん :04/01/18 14:48
天オ
天オと幼女は紙一重
>>611 お前みたいなカスを遠ざけるためにUNIX界は鉄の掟を敷いている。
二度と来るなよ、基地外。
いや、UNIX界に限らずカスはお断りだ。
>>611 とりあえずinstallして触ってみましょう
C++で以下のようなマクロを使ってるんですが #define StopForDebug(enabled) \ { \ static bool bEnabled = enabled; \ volatile bool continueLoop = true; \ \ while (bEnabled && continueLoop) \ { \ } \ } わざわざ設定しなおさなくてもよいブレイクポイントのように使っています。 Dではどうすればいいでしょうか? static bool bEnabled が一つしか定義されないと意図と違う事になってしまうんです。
>>595 安全でない。それくらい自分で わ か ら な い の か。
だいたいスレッド周りのバグって再現率低い(ことが多い)から
「ためして動いたから」
じゃ安全な理由にならん
安全と言い切る根拠のない自信はどっから湧いてくるんだ
くだらん煽りはもう充分です。
>>616 __FILE__ と __LINE__ をキーにして、boolを拾ってくる連想配列をグローバル変数として用意するとか。
でも、この方法だと毎回 StopForDebug(__FILE__, __LINE__) って書かないといけないなぁ……。
620 :
デフォルトの名無しさん :04/01/18 22:28
違う人だったのか 617と593すまん。勘違いしてた
>>617 > だいたいスレッド周りのバグって再現率低い(ことが多い)から
MicroThreadって、結局はシングルスレッドだろ?
GCはマルチスレッドかもしれんが、それはMicroThreadとは関係のない問題だし。
>>619 試してみたけど
__FILE__や__LINE__って定義されてなかった。
>>624 ごめんなさい。#line はあるけど、__FILE__, __LINE__ は無いね。
しかも、#line もぜんぜん意味が違うし。
DbC で何とかするのが筋なのかも。
626 :
デフォルトの名無しさん :04/01/18 23:17
やねさーん、頼むから更新履歴普通に書いてくださいよー、お願いしますよー マジ分かりづらいんだってばー これから書く予定を見せびらかしたいのはわかったから別に分けれ いい年こいてよー恥ずかしくねーの?って厨房に言われんなって とか言っても絶対直さないんだろうな・・・くそ!マジで腹立つんですけどw なんであいつのアンチが多いかわかった気がするよ つーかもう俺アンチね、よろしく^^
つーか主観(常識だとは思うんだがなぁ)を押し付けちゃだめだよな、反省 つーか板違いでした、反省 これからは私怨で逆恨みしていきまつ
628 :
デフォルトの名無しさん :04/01/18 23:30
基地外キタ─wwヘ√レvv〜(゚∀゚)─wwヘ√レvv〜─ !!
>>623 >MicroThreadって、結局はシングルスレッドだろ?
え??
>>626 これから書く予定じゃなくて、あれは全部もう書いてあることでちゃんとした更新履歴だよ。
日付が滅茶苦茶なだけ。ああいう日付のつけかたの日記サイトが昔あったね。
更新しすぎて実時間より何ヶ月も進んじゃったから2月の次に閏2月とかやってた。
や(ry氏の話はどこか他のところで頼みます。もうお腹いっぱい。
このスレって何人ぐらいで回してるんだ? なんか頭の悪そうなのが時々いるんだが、同一人物か? もうそいつは放置しとけよ。 そろそろDで何か作ろうぜ。
>>633 同一人物ということにしたいんですね。
俺もしたいです(あーゆーのに山ほど居られちゃかなわん)。
ハゲドゥ
>>631 >全部もう書いてあることでちゃんとした更新履歴だよ。
>日付が滅茶苦茶なだけ。
>更新しすぎて実時間より何ヶ月も進んじゃった
それがオカシイんだっつーの。それ更新履歴じゃねーよ。
更新履歴って更新した日に記すもんじゃねーの?
>>633 上二行で絡んでおいて、捨て台詞で「放置しる」。
放置できない厨房の典型的パターンですね。
みんなもうDで作ってるよ?君だけじゃないの?いつもそう言って自分から動けない人。
>>634 同一人物ということにしてください。:)
ほんと、あーゆーのに山ほど居られちゃかなわん。
| | ぱくっ| /V\ /◎;;;,;,,,,ヽ そんなエサで _ ム::::(,,゚Д゚)::| 俺様が釣られると思ってんのか!! ヽツ.(ノ:::::::::.:::::::.:..|) ヾソ:::::::::::::::::.:ノ ` ー U'"U'
>636 (・∀・)カエレ!
>>636 もう良いって言ってんだろヴォケが氏ね。
続きは他の所でおながいします。
正直、俺も直して欲しいとは思っとる>更新履歴 まぁ彼があのページを書いているのは、人のためじゃなくて自己満足の為なんだと思えばいい くだらんギャグとおべんちゃらさえ振り撒いてれば人望がついてくるとでも思ってるんだろ 少なくとも俺はそう感じた よくあれで経営者が務まるもんだ、もったいねぇ
物珍しいものに基地外が湧くのはありふれてるし、それくらい認知されたってことだろうね。 もっとも教祖からして基地外で取り巻きも全部基地外なRubyやOSASKは問題外だが。
ていうか奴には絶対伝わらないと思われ。何が悪いのかがわかっていないから。 そういう人に限って他人の粗を探すのは得意だったりする。 人間ってやつは、言われるだけじゃなく、身を持って体感しないとだめなんだよなぁ。
正直、前から増えてるところだけ分かれば十分なので、 俺は日付はあまり気にしないな。 大体、前に見た日とかいちいち覚えてる?
やねうらの話は他所でやれやボケ キチガイに言っても無駄か?
/. : : : : : : : : : \ )'ーーノ( /.: : : : : : : : : : : : : : ヽ |ー‐''"l / 表 | ,!::: : : :,-…-…-ミ: : : : :' , l 表 ヽ l ・ i´ {:: : : : :i '⌒' '⌒' i: : : : :} / ・ / | 出 l __{:: : : : | ェェ ェェ |: : : : :}_ | 出 | | ・ | / { : : : :| ,.、 |:: : : :;! ヽl ・ | | ろ | ヾ: :: :i r‐-ニ-┐ | : : :ノ l ろ | | !! | / ゞイ! ヽ 二゙ノ イゞ‐′ | !! | ノー‐---、,| / \ ` ー一'´ ノハ、_ノヽ / / ノ⌒ヾ、 ヽ ノハ, | ,/ ,イーf'´ /´ \ | ,/´ |ヽl | /-ト、| ┼―- 、_ヽメr' , -=l''"ハ | l ,/ | ヽ \ _,ノーf' ´ ノノ ヽ | | 、_ _ ‐''l `ー‐―''" ⌒'ー--‐'´`ヽ、_ _,ノ ノ  ̄ ̄ | /
他人を悪く言うとスキルが上がる装置があればなあ。
や(ry氏に言いたいことがあれば、直接伝えろ。
―┼― \/ ヽ |_|_゙ ‐┼‐ヽ ―┼― ヽ ヽ _|_ 、 ―フ / ̄\ .┼┼ /― /  ̄/ . | | | .―┼―  ̄/ |_ / / ヾ ―‐フ .| | | .-┴┴- ・ ・ ・ / ー ヽ_ /´ヽ_ |,(ニlヽ (ニl ̄) .(ニlヽ、 /´ヽ_ 、_) ./ 、/ (_ \| _/ |三| / /_/_ -┼- -┬- ヽ/ / / -┼- ヒ |三| ・ ・ ・ ム 、/ ヽ_ └┘ ´ ` ┼/\ ___ ヽ _|_ ___ -┼- ヽ __ .―フ / フ ―┼―ヽ ┼ ┼ .土 / |_ |/―┐ / ヽ .田  ̄/ / ∠_ /|―┼- /\ h/ .、| 口 \ 、_) /|. 〈_、 \ //|\ /´ヽ_ \ o_) | 、_| / \ (_ |二|_/_ | _|_ ―┼― ―┼― _|_、 -┼― ―フ \/ | ├ ヽ |―| / /. | | /― lニ|コ / / ヾ |/ ∠_ / | | -―ヽ . ┴┴ 、/ |, / / ー- .-ヨヨ- ./ 、/ (フ ̄) .o_) ヽ_ ヽ_ノ (ニlヽ _ノ 、| ______ ヽヽ | ________ | / ――┼―― / | . .―┼‐フ / | /__ | |/ / .――┼―― / /.|-―‐. /|/ ̄ ̄ ̄\ |. .| / \ / | //| | ヽ. | / ./ | | | \_ \__ノ ノ ヽ__」 | (二X
_.. ,,.-'ヽ ヽ "゙ー-、、 / : :! i 、 :. ヽヽ_,,.....、,,,....._;/ ,;' ;,.! i., ..;;;ヽ ヾ ,,;_ , / ヾ_:::,:' -,ノ ヾ;. , , 、;, ;; ● , ... 、,● ;: やんのかてめぇー `;. C) ,; ' ,;' '.、 -‐-ノ ,;'、 ;' ;: ;: ';;
しかしこんなところでosaskなんて名前がさりげなく出るようになったか。 あの既知外も有名になったもんだ。 それとも類友って奴で、osaskもDもどっちもある意味アレだから 興味持つのもみんなアレな奴って事なのか。
いっそのことやね(ryスレを立てたらどうか
webなんて嫌なら見なきゃいいわけだけじゃ? 誰も見てくれなんて頼んでないんだし。
言ってみりゃwalterだってlinusだってみんな基地外だわなあ AdaもTuringもNeumanもかなりイカレてると思うしなあ。 諦めろ諦めろ、踊るアホゥになれ。
じゃあ我々は基地外にむらがるそれ以上の基地外ということで? しかし喪前様、ノイマンを正しく綴れるとはなかなかやるな。
正しく綴れてるようには見えないが……
von Neumann
全言語のページからvon Neumanを検索しました。 約42,200件中1 - 50件目 ・検索にかかった時間0.22秒 予想される検索キーワード: von Neumann
間違っているのに4万件ヒットするっていうのも珍しいな
間違ってるというか、ドイツ人でもユダヤ系だとnが二重になるんじゃなかったかなあ。 だからその4万件には本当にneumanな人も含まれてるんじゃないか。 まあ自分は653なわけだが。んじゃ、逝ってくる。
>>653-661 ノイマンの話はどこか他のところで頼みます。もうお腹いっぱい。
もう良いって言ってんだろヴォケが氏ね。
続きは他の所でおながいします。
ノイマンの話は他所でやれやボケ
キチガイに言っても無駄か?
ノイマンに言いたいことがあれば、直接伝えろ。
いっそのことノイマンスレを立てたらどうか
>>653 C言語の製作者なんてアンデッドだからな
ストールマンとか確実にイカれてるよな。 でもGNUのソフトは便利に使わせてもらってるから感謝してる。 でもやっぱり奴はイカれてると思う。
スキルと人間性は別物ってこった
>>665 両方ダメなやつも多いけどな。
俺トカナー
なんだ、結局自分の好きな話題ならスレ違いでも板違いでも構わないんだな おまえらこれからは人にスレ違いだの板違いだの言うなよ
ワラタ
0.79!!
>>669 や氏のギャグほど笑えない
・・・同類か
「彼」のギャグだって笑えないよ。つまんないもん。 foreachでUTF変換ができるようになったっつっても、あまり嬉しくないなあ。
mixinマダー?
extern(Windows): alias void* LONG_PTR; LONG_PTR GetWindowLongPtrW(HWND hWnd, int nIndex); LONG_PTR SetWindowLongPtrW(HWND hWnd, int nIndex, LONG_PTR dwNewLong); として、使おうとすると、 app.obj(app) Error 42: Symbol Undefined _SetWindowLongPtrW@12 app.obj(app) Error 42: Symbol Undefined _GetWindowLongPtrW@8 って出るんだけど、何で? user32.lib はデフォでリンクされるだろうし、 user32.lib を追加してリンクしてもこれ出るし。
あぁ、分かった。 WIN64 環境じゃないと SetWindowLongW が使われるんだな。 でも、D だとポインタと整数の間でのキャストはできないんだよな。 これ、どうしてる?
unionを使え、とリファレンスでは言ってるが。
理解した。そして、実装した。ありがとう。
共用体なんてできれば使いたくないなあ あれは奥の手だろう
wWinMain って使える?
>>681 LONG と LONG_PTR は Win64 ではサイズが違うだろ。
Win9x, WinNT って version 識別子が欲しくない?
やっぱり、version=UNICODEかねえ。 ライブラリの方をそのように作れば良さそうだけど、正直面倒くさすぎ。
UNICODE は色々と紛らわしいので、 Windows_UNICODE かな。 でもよく考えたらこれ、自分でスイッチングした方がいいかもしれんなぁ。
MSがUNICODEなんて名前に決めたのが悪いw
>>685 確かに、UTF文字列とマルチバイト文字列の扱いとかあるから、手動でやった方が良いかも。
wWinMain って使える?
Windows でウィンドウを表示させてみてるんだけど、 WS_THICKFRAME つけないとウィンドウの端が立体化しないという現象が発生。 VC++ でやってると WS_VISIBLE だけでも立体化してるんだけど、 この違いってどこから来てるの?
ほんとだね。
ちなみに、WinXP Prof. ね。
前スレで同じ話題があった。
おーすげー世界はてんでポルノだぜ (16族 枠、ついたついた。 リンカのヘルプ読んで、 Win32s が仮定されるんだなということまでは分かってたけど、 解決策は結局分からなかった。 リンカの設定だけではどうにもならなさげ。 A0 を 04 に、03 00 0A を 04 00 00 に変えるフィルタでも作るかね...。
8+7=15って少なくね? 6+9=15とかは普通じゃん? 5+10=15とか4+11=15とかそのまんまじゃん? 7+8=15って少なくね?おかしくね? 7って結構でかくね?8なんて更にでかいじゃん。 7でさえでかいのに8って更にでかいじゃん? 確かに15って凄いけどこの二人が力を合わせたら16ぐらい行きそうな気がしね? 二人とも強豪なんだからもっといってもよさそうじゃね?なんかおかしくね? どう考えてもおかしくね? 7ってかなり強くね?世間は7を甘くみすぎじゃね? 8なんて更に強いじゃん?ドラゴンボールで言えば7はピッコロじゃん? 8は悟空じゃん?15はラディッツじゃないね。ラディッツは16ぐらいだね。 悟飯の一撃分1引いて15として勝ったのどっちよ? ピッコロなんて戦い終わった後全然平気そうだったじゃん? って事は7+8はもっといくだろ。絶対おかしくね?15ってありえなくね? なんか変じゃね?これ俺達の知らない所でなんか起こってるっつー知らせじゃね?
このコピペらしきもの、はじめて見たな。 検索しても引っかからないし。 初出はどこだろ? 9進法なら 5+10=15, 4+11=15, 7+8=16 になるね、 とか言ってみたりするのがプログラマ的回答か?
俺も初めて見た。なんかおもろいね。
んで
>>695 、頭いいね。
>>697 おお、それっぽいね。
元のだと 6+9=15 が含まれてるから
9 進法では説明できないなぁ。
よく見たらコピペの方にも 6+9=15 が含まれてる! 俺の目は節穴だ……。
SMIL?
こんなところにもニョキニョキが!
>>1 にあるDedicateDのWinsock2 API import moduleのhttpget.dをコンパイル
できた人いますか?
もしくはD Socket libraryのhttpget.dでもいいのですが。
D Streams module
Winsock2 API import module
D Socket Library
の3つをもってきて同一ディレクトリに置き、string等importが違っているのをstd.〜
に修正したんですがコンパイルエラーが…。
コンパイラはDMD0.79です。
どこを修正すればいいのかどなたかご教授下さい。
前スレでもhttpget.dの話が出てるけど普通にスルーされてた orz
>>706 ありがとうございます、早速読んでみます。
とりあえず前スレを参考に->を全て.に置換して
dmd httpget.d ws2_32.lib
とやってみたところ
httpget.obf(httpget)
Error 42: Symbol Undefined __init__7winsock11sockaddr_in
というエラーを吐いてくれました…もう少し?
708 :
デフォルトの名無しさん :04/01/28 23:30
誰かもっとちゃんとしたD言語用Eclipseプラグイン作らない? (Eclipseのビルダプラグイン機構はD言語のコンパイルにぴったりなんだけど)
>>708 作りたい。というか欲しい。
シンボルデバッグが出来てインテリセンスっぽい機能があれば最高。
Visual Studio.NETでC#やればできるよ。 いまどき先に言語選んで開発環境を後から望むなんてナンセンスだよね。
確かに、開発環境も言語のうちみたいになってきちゃってるからなぁ……。
>>712 それを打ち崩すのがEclipseではないのか。
よく知らないんだけど、Eclipse って
>>709 まで実現可能なの?
>>714 Eclipse側は対応できるらしい。
plug-inさえ誰かが作れば、マンセーな開発環境ができあがるはず。
シンボルのdemangleがウザそう perlでちょこっと作りかけてみたけど
Eclipseって時点で重さ的にマンセーはむつかしそうだが・・・
完成するころには漏れのマシンはPentium5の4GHzになってるだろうから無問題。
>>718 でも、他のアプリと比べて相対的に重く感じるからやっぱ駄目だよ(w
ハハハ
>>719 今時メモ帳と他のアプリの重さの差が気にならない環境があるのだから、
そのうち他のアプリとEclipseの重さの差が気にならない環境も出てくるんじゃないの?
そうだな。漏れのマシンは、そのころにはPentium6の7GHzだな。
ネイティブアプリを、マネージドな開発環境で作る。 ……うーん。
>>724 組み込み機器向けプログラムだってPCの上で作るでしょ。
PC向けプログラムをメインフレームで作る
727 :
デファルトの名無しさん :04/01/30 03:08
>>708 キーワードのコードアシスト(はもう既存のものであるけど)、
保存で自動コンパイルでエラー箇所に×つけるぐらいなら比較的簡単そう。
コードアシストで、宣言した変数やメソッドをひっぱってきたり、
デバッガを作るとなると、D言語のネイティブ部分に詳しくないと
むずかしそうだにゃぁ。
ちなみに、ビルドってmakeファイル登録しといて、
保存時にそれ実行って感じが普通?
あ、ここってsageる決まり?
そのころには、OSは糞重いLonghornに変わっているから安心しろ。結局速度は変わらん。 証拠に、VCはいつまでたっても重いままだ。
730 :
デフォルトの名無しさん :04/01/30 17:37
2GのCPUで足らないほどコーディングが早いのか? 藻前ら
いいからmicro emacsを使えブルーな気分になれるぞ。
linuxでshared objectを読み出すことって出来るんでしょうか? 誰か試した方はいらっしゃいますか?
×読み出す ○呼び出す
んなローカルなこと自分で調べろ
>>731 そんなルールはない
agesage言い出すと荒れるから黙ってろ
>>736 激しく同意、と。
これ言うの久し振りだな。
ちょいと触り始めたんだけど stdout.writeって生データそのまま吐き出すのね。 そのくせwriteLineはstringに変換して吐くのね。 ちょっと違和感が。 write以外に文字列として吐くための関数が用意されてるのかな? じゃなきゃいちいちtoString呼び出し? あまりにも面倒だから何か見落としている予感。
>>738 同意。
しかも、Object#toString() があるから、
メンバ関数内でtoString()を使おうとすると、std. から全部書かないといけないような?
あまりにも面倒だから何か見落としている予感その2.
stdout.writeStringのことでせうか?
writeStringはchar[]しか渡せなくないですか? int i = 77; stdout.write( toString(i) ); しかないのかなぁ。 Javaのノリで "" ~ iが文字列に変換されたほうが楽なような...
>>738 writeLine も char[] しか渡せないと思ったんだけど勘違い?
そもそも血筋からいって write/read 類はローレベルなもの目指してるものでないのか。
俺の感覚では write なんかで勝手に文字列に変換してから
出力するなんて方がよっぽどおかしな振る舞いに思えるんだけどな。
まあ、そういうのが欲しけりゃ自分で勝手にラッパー作ればいい話では。
toString くらいならテンプレート使えばいいし。メンバ関数にはできないけどね。
>>742 >writeLine も char[] しか渡せないと思ったんだけど勘違い?
そのようです。 738は何かの勘違いが混入したようです。スマソ。
>そもそも血筋からいって write/read 類はローレベルなもの目指してるものでないのか。
fwriteという名前にして欲しい(ぉ
ローレベルならwriteLineは要らない気がしますし、スタンスが微妙に謎です。
C/C++/Java/Delphi/C#との対比を考えると、writeは文字列変換してしまっていいと思うんですが
Walter氏の感覚は異なるのでしょうかね。
文字列を文字の配列と割り切っているので美しいけれどもJavaほど文字列が扱いやすくない気がしますです。
単にまだ発展途上だから準備されていないだけだと思いたい。
こんなとこで「同意」とか書いてても無駄。 気持ち悪いなら、そう作者に伝えろよ。
ライブラリは自分で作ってdonateしれ。 いいものならば取り入れてもらえる。
つーかD言語パクってもっとE言語作れ
>>743 何を言ってるのやら。
C で fwrite はローレベル、
C++ で ostream::write はローレベル、
こいつらとの対比から行くと write はローレベルでしょ。
char[] を write で出力する場合も、
ローレベルだから文字数も一緒に吐き出される。
これに対して writeString は文字数は吐かないし、
writeLine はさらに改行する。
String や Line という言葉の中に
文字列を出力するよという意味合いが含まれてるので、
これをローレベルと思うことはないっしょ。
あと、stream.printf の存在、誰も知らないの?
>>746 >>494-503
>>747 746の言うE言語って言うのは、
E言語ではなくて、(・∀・)イイ!!言語のことだと思う。誰か作って!
長文失礼。
>>747 DelphiとC#にゃWrite, WriteLineという高レベル関数があるんですよぅ。。。
>こいつらとの対比から行くと write はローレベルでしょ
ostream::writeなんか使わないからfwriteにして欲しい。そのほうがCの後継っぽい。
(というのは単なる好みの問題だけど)
> Line という言葉の中に
>文字列を出力するよという意味合いが含まれてる
えー? 確かに言葉の意味には含まれているけど、JavaのprintlnもC#のwriteLineも
改行文字を付加するだけで動作は変わんないような。変えてる例ってありますか?
そしてwriteStringでもtoStringが面倒くさいことは解決しないような。
このような頻繁に使う関数はタイプ数が少なくあって欲しい。
>stream.printf の存在
おお、こんなものが。しかしprintfの代替ですよね。
現在のところは C++のcout&<<, Javaのprint, C#のWriteみたいに何も考えずに文字列出力
する関数はなさげということですかね。自分で用意すりゃいいんですが。
というかこんなとこでつぶやいてないで要望出せってコトですね。ハイ。
そういや、operator <<, >> も再定義できるから、C++ iostream 互換も作ろうと思えば可能なんだな。 まぁ、決してiostreamが最良の設計ではないが。
<<,>>演算子は異質すぎてどうかと思ふ。 でも完全互換なら慣れてる人は使いそう。
だいぶ前にWalterタンが、Balloon Formattingはどうよ?と言って、 hoge("Hello")(i)(123)(str); みたいなライブラリがどっかにあった。
>決してiostreamが最良の設計ではないが。 最良どころか過去最低の設計だろ。 結局どの言語にもパクられなかったし。
>>752 ( ) のチェーンはキモイんだよなぁ。
連結演算子 ~ とかは自然な気もするけど、
優先順位が中途半端なんだよなぁ...。
演算子オーバーロードはクラス/構造体のメンバでなければならないんだな。。。
蜻蛉切りに.dpjファイル(ワークスペース)を関連付けたいのですが うまくいきません(.dと同じように.dpjがエディタで開かれてしまう) 皆様のお知恵をお貸し下さい
すっげー今さらだけどさ、defualtを予約語にしちゃえば問題の98%くらいは解決するんでね?
defualt ?
deaflut は?
おまえら頭使えよ defaultをエディタで色分け大賞にすればいいだけだろ
賞金いくらよ
deafault
dephaulte
deforuto
おまいらtypo好きだよなあ。。。
即座に気づいて修正したのはノーカウントとすれば、 一回も default の typo したことないけどな。
熱かなんかで胡乱な頭でコーディングしてるんでもなきゃ、 実際そんなtypoしないよなぁ。
>>770 そんなこと言うと、漏れみたいなtypoしまくりなヤシが必死になりますよ?
typoの話が盛んですが、質問させて頂きます。 dmdでコンパイルしたファイルをwindbgでソースレベルデバッグする方法がよくわかりません。 ブレイクポイントの設定はできますが変数のウォッチが出来ないです。 どうしたらいいんでしょうか・・・。VSなら出来るんでしょうか?
>>772 変数のwatchはVCなら出来ています。windbgでも出来るはずです。
コンパイルするときに-gオプションを指定し忘れているとか?
>>773 付けてたはずなんですけどね。今手元に環境が無いもんで・・・。
-gつけてないとソースレベルでブレイクポイントも設定できないと思うから、
つけてたと思います。
でもVCでできるならwindbgでも出来そうですよね。
Dの公式ページにもwindbg使えってのってますし。
単にwindbgの使い方間違ってるだけだったりして・・・。
>>774 あー。ソースは出ているわけですか。
言われてまればVC++でもときどき変数はwatch出来ないことがあります。
正確な条件まではわかりませんけども。教えてエロイ人!
776 :
デフォルトの名無しさん :04/02/11 17:38
dmdについてくるソースがあるんで、COFFを吐くDコンパイラ作ってみたいんだけど、 COFFの仕様の日本語訳ってどっかにある?
777 :
デフォルトの名無しさん :04/02/12 02:38
778 :
デフォルトの名無しさん :04/02/12 11:08
これ、実用レベルに達してるのか?
ない。
以下のコードをwin2k上でDMD0.79でコンパイルリンクして実行 import std.stream; alias int delegate(int) Procedure; Procedure procedure; void setProcedure() { int local = 10; procedure = delegate int(int i) { return local+=i; }; } int main(char[][] argv) { setProcedure(); printf( "%d\n", procedure(1) ); printf( "%d\n", procedure(1) ); printf( "%d\n", procedure(1) ); return 0; } ----------------------------- 1244985 2 3 --------------------------- 結果が意味不明。多分不正アクセス。 こういう使い方は仕様に反してる? 既出だったらスマソ。
>>780 D言語の仕様書の関数のところに
> しかしながらスタック変数は、宣言されている関数が終了すると
> 無効になります。
と書いてあります。読み返してみることをお勧めします。
static にすればいい。 でも、そのままでは MT safe になんないんで synchronized 文にする必要がある...んだけど、 やってみたらプログラムが終わらなくなってしまった。 なんじゃこりゃー。
いろいろ見ていたが、見送り決定 一般人の俺は、言語屋さんがもうちっとこねくり回すのを 待つことにしる。
private import std.c.stdio; int[2][3] nya=[ [3,3], [5,2], [3,1], ]; int[2][3] nuc=[ [3,3], [5,5], [3,1], ]; int main(){ if(nya == nuc){ printf("nya == nuc\n"); }else{ printf("nya != nuc\n"); } return 0; } で比較の所で落ちる。
>>781 ぐへ。おもいっくそ載ってるね。
読み返したつもりが読み飛ばしてしまっていた漏れは逝ってきます_| ̄|○
RubyやJavaScriptならOKなのに・・・。
>>780 closureは実装されていないということでOK?
delegateだもん
C++ と同じく、そういう時は opCall を使うしかないな。
>>790 D は一切の警告を出さない。
ナニソレ
>>780 やってみた
--------
alias int delegate(int) dg1;
union dg2 {
dg1 dg;
uint bp;
}
dg1 addx(int x)
{
int add(int y) { return x+y;}
dg2 dg;
dg.dg = &add;
uint sp;
asm { mov sp[EBP],ESP; }
uint* frame = ((uint*)sp)[0..(dg.bp - sp)/4].dup;
dg.bp = cast(uint)frame + dg.bp - sp;
return dg.dg;
}
int main() { dg1 add1 = addx(1); dg1 add2 = addx(2); printf("1+1=%d\n",add1(1)); printf("1+2=%d\n",add1(2)); printf("2+1=%d\n",add2(1)); printf("2+2=%d\n",add2(2)); return 0; }
>>793 お手製のclosureだね。すごくいいと思う。
delegateとは別の構文で提供されてるといい感じだと思う。
それ、news groupで投稿してきてよ。
そういやgc持ってるくせにclosure使えないのはもったいないな
>>793 ,794
激しくhackな方法に見えるのは気のせい?
環境依存とかOK?
環境というか、インテル依存でしょ
799 :
デフォルトの名無しさん :04/02/13 11:42
closureってよくわからんよう。 template< int x > int add( int y){ return x + y;} 例えば、このテンプレート関数のポインタが採れる みたいなメリットがあるの?
いまんとこ実装1つしかないし phobosからして激しくintel依存だし (little endianかつunaligned access可能つーのはintelのみっしょ) 要はstack frameのサイズが取得できてコピーができりゃいいわけだが コンパイラが内部で生成してくれるとううれしいが
今後も実装は1つだと思うけど
deimos ってーのはあるの?
テンプレートライブラリの deimos っての作ってる人はいたけど、 今もメンテナンスしてるのかな?
>>801 gccのfrontend作ってる人がいるみたいよ
しばらく進んでなかったけど
最近別の人が進めてる
805 :
デフォルトの名無しさん :04/02/13 17:30
dmd0.79が下のコードで落ちるのはガイシュツ? --- hoge.d import std.c.stdio; class hoge { } --- main.d import hoge; int main(){ hoge h; } モジュール名とクラス名はかぶっちゃいけないんでしたっけ?
>>805 既出で、Newsgroupsにも報告されてるけど、Walter氏の環境では再現しないとか・・・
報告済みなのね。了解。 しかし触りたての人が気づくバグが作者の環境で起きないのは悲しいね・・・。
Doxygenマンセー
810 :
デフォルトの名無しさん :04/02/13 20:12
ドキュシゲン
オキシジェンデストロイヤーの略称ですか? ってネタはさんざん既出なんだろうね
DでDirectX9やってる人いませんか?
>>805 落ちた、でもクラス名と構造体名の最初の一文字が大文字なら落ちなかったので
Walterさんが気づく問題じゃなかった。
>>812 いませんこともありませんがなにか?
変な日本語だな
D組のD
816 :
デフォルトの名無しさん :04/02/15 21:01
だれかSWTのD言語へのportingやりませんか?
WindowsのCOM周りのほうが先に必要じゃねーの?
関数内のstaticなローカル変数は関数の評価では初期化できないんでしょうか? void f(){ static int i = g(); } int g(){ return 10; }
関数外でもできなくない?
ModuleInfoという名前のクラスがかけないという密かな仕様を発見。 ガイシュツ?
>>820 すでに同名のクラスがあるに一票。moduleinit.d
使えるGUIクラスライブラリが出て 初めて土俵に上がれるって性格の言語でしょ。 Windows環境では出る幕ないだろう。 オープンソース界では、JavaやC#に匹敵するものがないから GNU D がそうなることを期待したい。 GNOMEをObjective-Cで作ってれば、古さを感じずに済んだと 思うんだが。
>GNOMEをObjective-Cで作ってれば、古さを感じずに済んだと 必要なのは言語非依存のクラスライブラリの仕様だと思うが。
>>822 いくらなんでもObjective-CでつくるくらいならC++で作ってると思う
C++はバイナリ互換性を保ちながら拡張するのが難しいのが問題だと思う。 Dもやっぱりクラスの構成が変わったら動かなくなるよな? まぁ、side-by-side でいいんだけどさ。
書き込みないけどD言語ブームは終わったの?
ブームなんて始まってません
まだ完成もしてないのに
二年前のC#スレよりまし
class A { this() { b = new B; b.dg = delegate void() { b.print(); }; //b.dg = &b.print // こっちはOK } void dg() { b.dg(); } B b; } class B { void print() { printf("hello\n"); } void delegate() dg; } int main( char[][] argv ) { A a = new A; a.dg();// Error: Access Violation return 0; } 上のもだめなの?なぜか-Oオプションつけると成功するんだけど。 Dのdelegateはしょぼいな・・・。
上のスレにはいたるところにD&dmdへの愚痴が書かれている。
834 :
デフォルトの名無しさん :04/02/25 23:13
wxWindows 移植して。 そしたらD最強。
wxWindows って、IDベースのイベントディスパッチじゃなかったっけ? せっかくなら、delegateを使えるライブラリが良いのだが……。
おんなじよーなプログラムを、 Java と D と C++ で組みました。 組みやすさ D>Java>>>>C++ 動作速度 D = C++ > Java Debugしやすさ Java >>>>>>>> D >>> C++ SDL とかも試したけど、なんかまんまCのSDLでちょっと萎えた。 Pygame とか Ruby/SDL みたいに言語の機能を生かしてラップして欲しかった。
>>836 まんまCでSDLも一応メリットでは。Cのコードが(ほぼ)そのまま使える。
dmdは"駄目だ"の略みたい 使っていていやだ
dmdには不満だ 何が不満なのかはよくわからないがとにかく不満だ
なんだかα版のregnessemに2chのスレで文句を言ってるソフトウェア板の住人を思い出した。
regnessem って何だ?
843 :
デフォルトの名無しさん :04/02/27 16:08
秀丸のD言語強調表示定義ファイルを公開してるところってないの?
C++とJava混ぜるだけなんだkら自分で作れ。
/+このコメントアウトがなぁ…+/
/+
+/
やばいよやばいよ、秀丸使いほんとやばい。 同じシェアウェアならPeggyはどうですか?とか薦められても、 使い慣れてるほうががいいとかいってまじ保守的。 Peggyなら秀丸ライクなキーバーインドも積んでるのに見向きもしない。まじやばい。 特に秀丸、強調定義がちょーショボイ。C形式のコメントしか判断できない。 まじやばすぎ。PeggyならCRECで余裕なのに、 やばいぐらい行末で強調が途切れちゃう。秀丸ほんとやばい。 俺なんか/** */とか /// のDocコメントも余裕で色分け。 超ソース読みやすい。やばいぐらい仕事はかどる。 しかもスクリプトから色分け状態判断できるから、速度きにしなければ ちょっとしたソース解析や変換にもつかえるし、やばいぐらい便利。 おまけにそのスクリプトもECMAScript互換。やばすぎて超鼻血。 そんな俺、実はPeggy Proにまだ未レジスト。
>>848 Peggyいいな。
今までTeraPAD派だったんだが、
早速のりかえた。
秀丸みたくフリーソフト開発者には無料で使わせてくれるとかあれば
PeggyのD言語用CRECはすでに作成した。
↓Peggyの作者
ごめんうそ
オブジェクト指向が好き。 変数は型付が好き。 ガベコレが好き。 今までJavaでした。 これからはDです。
dmdと何度もキーボードで打っていると、 でぃーえむでぃー ↓ でむで ↓ だめだ と読むようになってしまっている自分がいて 嫌なんだよなぁ。 といいたかった。 みなさんは、dmdをなんとよんでいますか?
ドンマイだ
858 :
デフォルトの名無しさん :04/03/01 04:00
”D言語”って検索しづらくてダメだよな。 Java とか Delphi とか、検索しやすくてグー。
それは単に情報が存在しないだけ
「D言語」と書いてあるペイジはおすすめできません :-)
プログラミング言語D
google でさ、「D言語」で検索すると上から5個目ぐらいに digitalmars のが出てくるんだけど、 これってどーゆー仕組みなんだろ?
"D言語"と書かれたページから多くリンクされてるんじゃないか?
864 :
デフォルトの名無しさん :04/03/02 22:25
visual C++6.0を使おうと思うんですが、ネットで使い方載ってるサイトあります? 初心者レベルで、本当に1からみたいなやつで。
なんでstructは継承でけねーんだ! 構造体から構造体には派生できても良さそうなのに・・・。
「Digitalmars言語」でいいよ もう
>>864 買った箱の中見てみろ。取説と一緒にチュートリアルが入ってる。
サンプルソースのblendの仕方までちゃんと載ってるから、
明日の朝食は自作ソースでサラダでも食え。
class f { public: int x; int y( int p ){ x = x + p }; int y(){ return x + 1 }; } foo; foo.x = 1; foo.y = 2; cout << foo.x << endl; cout << foo.y << endl; 実行結果: 3 4 プロパティってやばくないか?
>>868 class Hoge {
void create(); // オブジェクトを「破棄」する。
}
名前の付け方っていうより、もっと根本的な問題だろう。 代入文の意味が、あとからすごく簡単に変えられちゃうんだぞ。しかも変数ごとに。 intとかの単純型への代入が、全てデバッグのチェック対象になるんだぞ?
別にそれは問題じゃない
>>870 カプセル化の手法わかっている?
代入文の意味が変わるのは当然。むしろそれを目的にしている。
だいたいその問題は getX, setX のようなアクセサにも言えること。
ていうかそれいったらC++のオペレーターオーバーロードの方がやばいわけで。
本当に問題の焦点になるのは構文に対する注意深さだが、
これは言語に対する習熟度で上下するものでしょう。
言語仕様見てみたんだけどrubyのmodule/includeみたいな事って出来ないんだよね? 便利だと思うんだけどな。 それ以外はさすがといった感じ。組み込みGCも実装内容が確認できるなら問題ないし。 CPU依存コードのライブラリがあるって言うのもアツイ。インラインアセンブラ関連に関する考え方もかなり好み。 あとは最高のデバッガが出てくれれば。IDEはイラネ。 つか、最大の問題はGCについて同僚を説得する自信が無いってことだな。C++のテンプレートすら理解してもらえないしなぁ。 #そもそもコンシューマーゲーム界にDコンパイラがでるのは、可能性があったとしても当分先だろうけど・・・ まぁ個人で使う分にはかなり良い。ミーハーだしな俺。 というわけでpeggyのCRECだれかうぷきぼんぬ。
>>868 でやってる事って、
class f {
private:
int x;
public:
void setX(int x) { this.x = x };
int getX() { return this.x };
void setY(int y) { this.x += y };
int getY() { return this.x + 1 };
}
ってやってるのと同じじゃん。詭弁だよ。
>>868 同意。
要するにプロパティはカプセル化をもう一段階進んで支援するための言語機能に過ぎないわけで
整合性をもたらすも混乱をもたらすもプログラマ次第ってこった。
C++ な人ならプロキシオブジェクトを使ったことがあれば必要性な局面が想像できないかと思うんだけどね。
>>874 だよなぁ。
「プロパティ"であるがゆえに"これはやばい」っていう例には
なってないような。
property 特有の問題だというなら、 とっくにDelphiやC++Builderで散々問題になってるはずだぜ
>>868 絶対にバグの出ないプログラム言語使っとけ。
SIMPLEとか。
個人的にはプロパティの構文は C# みたいなんが良かった。
>>880 というかDの方が字面的によい構文って見当たらないような・・・
DBCとかはC#にないんで比べようがないけど
>>882 スレ読んできたよ。期待していいんだろうか。
歴史的にはDの方が後発なんだから、もうひとふんばりしてほしいなぁ。
Mixinありなしだと設計のしやすさがかなり変わるし。人によるかもしれんけど。
ちょっと質問。 やねうらお氏のところの copy on write の項目読んでいて疑問に思ったんだけど s = t ~ s; じゃ s が空だったときバッファが共有されるから s = t.dup ~ s; にしろってあるけれど これはこれで s が空じゃないときに無駄な一時配列が出来てしまわない? char[] u = t.dup; s = u ~= s; とかしてあればわかるんだけど……。 解釈間違ってる?
普通のCoWな実装なら、バッファに対する参照が一つなら書き込んだときに コピーは発生しないと思うけど? というわけで上の例は両方ともコピーは一回だと思われ。
char[] u = t.dup; s = u ~= s; こっちは2回コピーが発生する。かもしれない。自信なし。
>>884 >解釈間違ってる?
解釈はそれで合ってると思います。
結合演算子(~)を用いた場合、常にCopyされるというのは仕様書に
そう書かれているのですが、実際にそうは実装されていないのです。
(おそらくバグだと思います) 私のページの記事は、
仕様書ではなく実装をひとつひとつ確認しながら書いていたので、
「結合演算子はcopy on writeである」というような結論になってます。
あと、この件に関しては、ずいぶん前に私がnews groupに
投稿したのですが..見事にスルーされてます。とほほ。
ところでpeggy用のCREC作った人いませんか〜?
888ですがCREC自分で作りました。 んでとりあえずglutを使ったコンパイルまで出来た。(このスレが無かったら無理だった。特にgult32.lib。感謝) ここまで問題無しと思ったが、、、 微妙に仕事でD使いたくなってきた、、、 だれかPS3で動くD作っておいてください。
>>885-887 レスどうも。
そもそも解釈を云々する以前に
実装が異なったものであるとの認識が足りていなかったようで。
確かにドキュメントには
>Concatenation always creates a copy of its operands,
>even if one of the operands is a 0 length array(後略)
とある。
しかし確かに実際には未初期化の配列だけでなく
null でない長さ 0 の配列(= "")でもコピーされない。
copy on write かそうでないかより仕様と実装が異なる方が大問題じゃん……
ちょっと触ってみた。 お手軽だねぇ・・・小品ツールにはもってこい
>>891 小品ツールならruby perl python だろおい。一般的に。
>>892 客先など、実行環境がないところで動かすのよw
スクリプト言語のメリットってなんじゃろ
無茶が効く。 だから Perl が一番好き。
好きとか嫌いとかはいい rubyを使うんだ
無茶って何よ 正規表現がリテラルじゃなかったら何もできんだろperlは
スクリプト言語は
・書きやすい
・準備が要らない(make|projectとか)
・保守しにくい
個人的にはソースファイル一つかつ自分で全体が把握できるものは perl or ruby
それ以外はD(C++)って感じだな
>>896 賛成。ruby&Dが一番ロック。
個人的にDはそれなりのマルチプラットフォームなGUIライブラリができるかポートされるまで待ち
>>899 3番目の条件は当て嵌まるとは限らないと思うが。
ほんのちょっとした集計処理などはawkで充分実用的で保守しやすいものが書ける。
スクリプト言語の一番の特徴は、適材適所を見誤ると途端に破綻を来たすことかな。
rubyは遅すぎて使い物になりませんが何か shも遅すぎてunixの足を引っ張りまくりですが何か
あーあくだらん言語比較の始まりか
>>902 適材適所が理解できないやつ
つか日本でD触ってる人間の頭数って3桁いってるかどうか微妙とか思ってしまったりするわけだけど、
実際どうなんだろうね。
話のネタにしても本当にネタとしか受け取られていない・・・
>>904 MLの参加者数見る限り、一応3桁は行ってるだろう。
…4桁はいなそうだけど。
こんなに赤いのに
>>902 はrubyを使い物にならないと言う
DMD 0.80リリース
ruby の構文は汚いというか、読み難いと思う。
ま、主観の問題だからどうでもいいし、スレ違いだけど。
>>907 (゚Д゚)ウマー
ぬー ソースファイル一個のコンパイルは問題無いんだけど、 ファイル分けると undefined symbol 出まくり・・・ undefined symbol で出てくるエラーメッセージのシンボル名は理解不能な名前だし。 そもそも import module まわりの動作が理解不能。俺があほぉなのはわかりますが。 構文エラーがあるだけでコンパイラは例外だすし。 コンパイラ解析しろってことですか?
まだまともに仕様も固まってないのに何言ってるんだ。 問題があるなら連絡すればよろしい。
原因究明完了。
リアルファイル名に大文字が含まれていると、objのsymbolテーブルには"リアルファイル名"_クラス名とかいう感じでエクスポートされるため
リンカエラーがでるという感じらしい。
コンパイル時のシンボル解決の際はimportで使われてる名前を基準にシンボル解決が行われ、
リンク時に使われるのは当然objのシンボルなんでこのようなエラーが出るらしい。
昼寝したらあっさり解決した。やっぱ昼寝重要。
>>910 モジュール周りの仕様はほとんど確定じゃねーの?
なんかDの仕様が固まって安定して使えるようになる頃には もう.NET, WinFXが一般化してそうだな。 Longhorn出たら.NET版も作るのかね。そしたらDの存在意義が・・・
存在意義なんて吹けば飛ぶよ
>>912 は存在意義をWindowsだけに求めるタイプか
つか.NETって普及するの?
そりゃそうだな。スマソ。
>>915 D言語って普及するの
とどっちがうわなんだやめrj
D言語人柱の皆さん、好きです。応援してます。
DMDはぬるぽ量産ツール!ぬるぽ!
ガッ って、Dに NullPointerException あったっけ? 単に segfault で落ちるだけ?
Exception("Access Violation") が投げられまふ。あくば!
DMD 0.81リリース
try {
>>920 } catch (Exception e) {
ぬるぽ! }
0.81 コンパイラの即死バグへったっぽい。
ぬぅ C++っぽく。 void foo(){ Myclass myclass; myclass.talk(); } にしちゃあかんのな。 void foo(){ Myclass myclass = new Myclass; myclass.talk(); } 毎回newするのうざいんだけど。 つか上の例だと、あくばになるからコンパイルエラー出せよっていうのはお門違い? えっdmdに言えって?
_∧_∧ マルナゲシタノハオマエカ!!!
/ ̄ ( `Д´)⌒\ ガッ!!
__ / _| | |
ヽヽ / / \ | | ,,,,,,,iiiiillllll!!!!!!!lllllliiiii,,,,,,,
\\| |____| .| | .,llll゙゙゙゙゙ ゙゙゙゙゙lllll,
\/ \ | | .|!!!!,,,,,,,, ,,,,,,,,,!!!!|
| ヽ_「\ | |、 | ゙゙゙゙!!!!llllliiiiiiiiiilllll!!!!゙゙゙゙ .|
| \ \――、. | | ヽ .| .゙゙゙゙゙゙゙゙゙゙ |
| / \ "-、, `| | ヽ | |
_/ / "-, "' (_ ヽ ヽ .| |
/ __ノ "'m__`\ヽ_,,,, ヽ | |
`ー― ̄ ヽ、__`/ー_,,,, ゙゙゙゙!!!!!!!lllllllliii| |
\゙゙゙゙゙゙゙!!!!!lllllllliiiii| |
\ ヽ | |
ヽ \ | |
| \.| |
`ヽ、,,_ノ| |
゙゙!!!,,,,,,,, ,,,,,,,,,!!!゙゙
゙゙゙゙!!!!llllliiiiiiiiiilllll!!!!゙゙゙゙
/.// ・l|∵ ヽ\←
>>926
純粋仮想関数にabstractつけないとlinkerに怒られるようになった。
>>928 もっと人が読む文章を書いてくれ。ところどころ文意がわからん。
で、本題だが、Dのオブジェクトは参照ベースなんで
それだけで勝手にオブジェクト生成されちゃたまらん。
明示的な割り当て(および初期化)の構文がない方が不自然だ。
もっと冗長でない構文が欲しいのは確かだが、
実際派生クラスのインスタンスを新たに生成することもあれば
既存のオブジェクトやその一部分を指すことだってあるわけだし
インターフェイスや抽象クラスの変数宣言まで統一的に考えれば
それだけでインスタンス化までするのはどうしたっておかしいだろ。
>>930 それは変更と言うより元々の挙動が Bug 扱いっぽい。
> Bugs Fixed
> (中略)
> Function members without bodies in non-abstract classes now reference an external symbol rather than inserting a 0 in the vtbl[].
>>931 たしかに支離滅裂でしたね。気をつけます。
俺が言いたかったのは
Myclass myclass;
myclass.talk();
という部分、Dでは明らかに初期化されていないオブジェクトに対して操作を行っているということが明確だと思うんですよ。
これはコンパイル時にエラーを出すのが親切というか必然ではないかと。と言いたかった訳です。
もちろん、おっしゃるとおりこれの設計から見ても、明示的な初期化が必要なのは必然なのはわかっています。
いちいちnewするのがなんかめんどくさいなぁというのが本心ですが。
言ってるそばから意味わかんねー日本語が・・・ 酔ってるのかなぁ。酔いがさめるまで引きこもります・・・
そういうときはstruct、しかない、かな… ニュースグループで時々囁かれる let が搭載されたら、 let myclass = new Myclass; って書けて便利になるんだけれども
いちいちnew書くのが面倒ならマクロにしる とか書こうと思ったら、マクロ無いでやんの。 使えねえ・・・
>>932 前者の理屈にしても
this に触らなかったりそもそもstatic関数なら不正とする理由はないんでね?
俺はどっちかっつうと配列の初期化の方をどうにかしてほしい。 参照ベースだしJavaと同じにしたと言われりゃそれまでだけど。 初期化子が静的配列にしか使えないってのまで加わると使いづらすぎ。 そんなところで一貫性を推し進めなくても…… さんざんガイシュツの話題だからもう静かに改善案が組み込まれるのを待つことにしてるけど
>>937 そりゃstaticメソッドなら問題ないですよ。当然。
>this に触らなかったり
よく理解できないんだけどthisにアクセスしないってnewしないって事だよね?
そりゃアクセスしなければ問題が出るはずも無いが、そもそもDの設計方針で、
・未使用のローカル変数の不許可(コンパイルエラー扱い)
というのがあるから、そういう意味では不可能なのでは?
あーglut32.libの組み込みめんどくさかった。
implibするときに /system オプション入れないとあかんですよ。>これからglut触る人たち
つかコールバック関数とかにextern(C)するのダサいからglutはあんまりDに向いてないかも。
使えないことはありませんが。
>>939 > implibするときに /system オプション入れないとあかんですよ。
glutに限らず/systemつけないとダメな罠
☆ チン マチクタビレタ〜 マチクタビレタ〜 ☆ チン 〃 Λ_Λ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヽ ___\(\・∀・) < 次スレまだ〜? \_/⊂ ⊂_ ) \_____________ / ̄ ̄ ̄ ̄ ̄ ̄ /| | ̄ ̄ ̄ ̄ ̄ ̄ ̄| | | 愛媛みかん |/
次のスレタイはまともなものに…。
>>944 あぁ、更に酷いスレタイ…(;´Д` )
正統か? native-Java じゃないの?
native-JAVAでもないだろう、正統でもないが。
>>1 のテンプレでいいんじゃないか?
>>950 > ・Win32APIを利用できるので、in32アプリは作成可能。
W が抜けてるので使うなら忘れないで。
Dの配列は気持ち悪いな。便利だけどさ。
正規表現ライブラリの RegExpのexecとtestをループで使えそうなのだけど、 どうしたらよいかわかりません。 誰かわかったら教えて ソース見ると、メンバ変数をいじって回してるのがあるけど、 どーもよくわからない
int[10] foo; // 要素数10個のint型配列で、名前はfoo int foo[10]; // int型でfooという名前で要素数10個 うーん、Dの表現になれるとCのほうが違和感感じてくる。 前者だとfooをたどるだけでそれがintの配列10個ってわかるし、要は 慣れだと思うよ。
Dって型情報として、次元数と要素数を記述出来るのは良いけど、 多次元配列や配列の配列の場合に、右側が上の次元ってのがちょっと…。 実際に変数経由で利用する時は左側が上の次元なのに。 JavaやC#と揃えて欲しかったなぁ…。なもんでC形式の宣言も使ってる。
959 :
デフォルトの名無しさん :04/03/12 00:41
宣言を揃えるんじゃない。 int[100][20] array; [99][0]array = nullpo;
>>957 多次元配列の時気持ち悪くない?
int[2][3] hoge;
hoge[1][2] = 0; // array index [2] is outside array bounds [0 .. 2]
さんざん既出のネタなんだろうけど・・・
スマソ、もろに話し被った_| ̄|○ 更新しないまま書き込んじゃった。
>> 959 > 宣言を揃えるんじゃない。 > > int[100][20] array; > [99][0]array = nullpo; うーん、ちと意味が分からないや。 最後の行の使い方は出来なかった。ガッ!! (まぁ出来ても使いにくいだろうけど)
Dの配列で気になったのが、 int[] arr; arr.length += 4; というようにすると、 'arr.length' is not an lvalue ってエラーが最近のバージョンから出るようになった気がする。 (エラーにファイルと行番号は出ない) 仕様が変わったのかなぁ。。昔からこうだったかなぁ。。
って0.75で試したら同じ結果ですた。スマソ。
>>960 配列の話中申し訳ないけど次スレよろしく。
>>958 逆。JavaやC#と揃えて、宣言時も基本型のあとに [ ] を書く様にしたからこうなった。
JavaやC#で問題なく見えるのは、宣言時に要素数を明記しないためにすぎない。
本当は、[100][20]int array; array[99][19] = getLast(); とかがスマート
967 :
デフォルトの名無しさん :04/03/12 05:32
> 本当は、[100][20]int array; array[99][19] = getLast(); とかがスマート これってスマートなんか? 個人的には C# っぽく int[20,100] array; array[19,99] = getLast(); みたいなんでも良かったと思うんだが。
>D言語はC++言語の正統後継言語です ハァ?
>>968 C#の場合、多次元配列≠配列の配列、にして誤魔化してるからね。
配列の配列、と、多次元配列を一緒くたに扱う限りは、Pascalの語順にしないとDみたく宣言が逆順になる
>>970 意図的としたら少し尊敬する
> C#の場合、多次元配列≠配列の配列、にして誤魔化してるからね。 物はいいようっつーか… 単に区別してるだけでしょ。 > 配列の配列、と、多次元配列を一緒くたに扱う限りは、Pascalの語順にしないとDみたく宣言が逆順になる たしかに array[] of int みたいな型の書き方の方がいーかもしんない。 C風の <型名> <識別子> みたいな変数宣言との相性が悪そうだけど。
∧_∧ ( ´∀`)< すまぽ
> 966 > 逆。JavaやC#と揃えて、宣言時も基本型のあとに [ ] を書く様にしたからこうなった。 > JavaやC#で問題なく見えるのは、宣言時に要素数を明記しないためにすぎない。 int[100][20] array; array[99][19] = getLast(); っていうのも、やってやれない事は無いんじゃないのかなぁ。 (実装してないで言うのも良くないだろうけど) C形式の宣言を許していて、多次元配列の書式が統一されなかったり、 (Cは配列の配列でDでは多次元配列だけど) 見た目の問題とか、他のC系の言語との統一性考えると、 > 本当は、[100][20]int array; array[99][19] = getLast(); とかがスマート こちらのが並びが一致しているから
ぐわ、間違って途中で書き込んでしまった。 まぁDの多次元配列の書式はもう変わらないだろうしなぁ。 個人的には見た目の順番が逆なのは嫌ー。 右側が上の次元なのは、配列の宣言を構文解析する際に、 左から順に解釈するだけで良いようにする為なのかなぁ。 でもC形式の宣言で配列の配列じゃないのに、あの順番に 宣言するようになっているし…。(後置宣言に慣らされてる人向けとはいえ)
よーし。誰も立てないならパパが次スレ立てちゃうぞー。
ちょっと調べてみたら考えが浅はかだった事に気付く。 もし、int[100][20] array; array[99][19] = getLast(); をやろうとすると、今とは宣言の順番を丸っきり逆にしないといけないんだね。 でも、 [100][20]int array; array[99][19] = getLast(); これをやろうとするとやはり同じようになるような…。 見た目の順番揃える為に、多次元配列の宣言用に、[ , ] で宣言できたら良いな。
>>978 お疲れ。
このスレは3か月もったことになるな
前スレの4倍ぐらいの進行スピードかな
だから、宣言時は現状のままで、 配列使用時の構文を [X][Y]array = ... 形式にしろって。 一次元目の軸をあらわすXが一番目で、 二次元目の軸をあらわすYが二番目だ。 書き手として、こちらの方が理にかなった構文であるはずだ。 さらにいえば、パースもやりやすくなるはず。
おまいら配列へのポインタの配列とかの事 何にも考えとらんやろ。
>>981 確かにその方が理にかなってる。
でもDに導入すると更に記法のパターンが膨らむ…。
[Y, X] を導入して、Cの後置配列宣言を廃止するのが
色々と落ち着きそう。それってC#か…。
>>982 自分は958なんだけど、976の時点まで、ちゃんと考えてなかった。
http://www.digitalmars.com/d/arrays.html のPrefix Array Declarationsの例を見て少し理解した。
もし宣言のint[Y][X]をやるとなると、今のDとは宣言順を
逆にしないといけないから、それだと他のC系の言語とも
合わないし良くないね。
> それだと他のC系の言語とも合わないし良くないね。 そーだっけか?
>>982 個人的には D では静的配列と動的配列がゴッチャなので
配列のポインタ自体を廃止しちゃっても良かったんじゃないかと思う。
俺971ですけど、
>>981 はちょっと感動した。
要するに型の装飾がかかる方向を決めてしまえば、C言語みたいなことにはならない訳で。
前から後ろからってのは細かい問題だと。
型の装飾は全て前から、使用時は全て後ろから(すっきり)=Pascal、か、
型の装飾は全て後ろから、使用時も後ろから(配列が逆順に)=D、か、
型の装飾は全て後ろから、使用時は前から(すっきり)=
>>981 、か
ただ、981式ですと、メンバへのアクセスも前からにしないと落ち着かないなーw
a = ([x][y]obj).member(arg);
a = (arg)member.[x][y]obj;
まさか配列の話がここまで伸びているとは!
いいね、こんなのが欲しかった.. 配列記法に、前置修飾 がもう一個。-- Segfault いいね、こんなのが欲しかった.. delegateに、静的クロージャ がもう一個。-- Segfault いいね、こんなのが欲しかった.. 継承に、Mixin がもう一個。-- Segfault ようするにおめーらが欲しいのは、こいつらだな。
「"新しい"モー娘って、結局ほとんどは二つに分類できるような気がする。 一つは、モー娘若返りの世界から出てくる 根本的に若い年齢に基づいたメンバーで、 もう一つは、つんくが趣味でいれるようなダンスとか歌唱力とかに目をつけたブス。 でもそろそろ、アイドルプロデュースの実経験に裏打ちされた 新しいメンバーが生まれる時なんだろうね。」 いいね、こんなのが欲しかった...中澤姉さんに、Vシネ出演 がもう一個。-- Segfault
>一つは、モー娘若返りの世界から出てくる 「モー般若返り」に見えたYO,,,
>>986 > a = (arg)member.[x][y]obj;
a = member(arg).[x][y]array; をお勧めする。
(arg)というのはmemberを後置で修飾することだから。
>>982 配列のポインタの配列。
int[x]*[y] array;
a = [x]*[y]array;
読み方は、
「配列要素x番目、そいつは次の奴の参照先。
次の奴は配列要素y番目、そいつはarrayに属す。」
>>988 文法・実装は前置修飾になるけど、考え方としては、
上の読み方からも分かるように後置修飾的なんだよ。
a = int[x]*[y]array;
という記法が、省略なしの完全形。
ただ、intを書こうが省略しようが、値を評価するには
最後のarrayまで見る必要があるから、結局intは書く必要がない。
ただ、もし異型同名の宣言を許すなら、
int[x]*[y] array;
double[x]*[y] array;
a = double[x]*[y]array;
となるだろうね。
バグの温床・不必要・面倒、この三点により、俺はこの拡張を嫌うけど。
↑バカ?
配列アクセスが前置になるのは読みにくい。 これから始める人はいーかもしれんが。
ぬるぽ
梅間する
997 :
デフォルトの名無しさん :04/03/14 21:09
age
998
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。