トップページ⇒tech
575コメント158KB

D言語ドラフト一応読んだよ

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
http://www.digitalmars.com/d/index.html
何か聞きたいことはあるかね。
0002デフォルトの名無しさんNGNG
C#との違いを語ってくれ
00031NGNG
まず基本は

・C風味のシンタックス
・単一継承+インターフェース
・ガベコレ

つまり、Java/C#とよく似てる。
人によっては90%同じと言うかもしれない。
C++/Java/C#を使ってる人ならすぐ使える。
00041NGNG
>>2
一番の違いは、VMなしを前提としていること。
VMの有無は、理論的には言語使用と独立であり、
JavaでもC#でも機械語にコンパイルすることは可能だが、
やっぱりコンパイル/リンク/デバッガー/Make等を意識して
設計した痕跡があちこちにある。
00051NGNG
例えば、DBCやUNITTESTを言語仕様の中に取りこんでいること。
これはデバッグモード/リリースモードをコンパイル時に
切り替えることを前提としてると思う。
00061NGNG
C#ともうひとつ大きく違うのがテンプレートのサポート。
当初は演算子オーバーロードと一緒に切る予定だったらしいが、
現在の仕様書にはこれを入れると書いてある。
機能はC++と同じだが、書き方は変えるみたい。
0007デフォルトの名無しさんNGNG
これで何作るの?
0008デフォルトの名無しさんNGNG
リフレクション・RTTI関連の機能の説明がないような...
0009デフォルトの名無しさんNGNG
Dの利点はなんでそ?
0010デフォルトの名無しさんNGNG
よーするにネイティブコード吐くC#/Javaでしょ
00111NGNG
>>7
設計者は、C/C++と同様のgeneral purposeな言語にするつもりのようだ。

しかし、ガベコレがあるのでカーネルやリアルタイムシステムには使えない。
また、サーバサイドではJavaに負ける。
JavaVMは、これからCに近いスピードになっていくからね。

だから、もし使われるとしたら
クライアントサイドの大規模プロジェクトだと思う。
gnome/kde/mozilla/excel/emacsのようなものを作るには
ピッタリだ。
0012デフォルトの名無しさんNGNG
>>11
>gnome/kde/mozilla/excel/emacsのようなものを作るには

そういう用途ならgnomeやemacsなんかでも
使われてるlisp系が良いと思うけど。
ところで、GNUな人はGuileを崇拝してないのか?(w
0013デフォルトの名無しさんNGNG
win用のGUIソフトって作れるの?
00141NGNG
>>9 >>10
C#/Javaに対する大きな利点としてはDBCがあると思う。
DBC付きのインターフェース継承ってありそうでなかった。

静的な型チェック+Pre/Post conditionを使いこなせば、
単体テスト完了時点で、かなりの品質を確保できる。
開発者のレベルがまちまちの大規模プロジェクトでは
すごく有効だと思う。
0015デフォルトの名無しさんNGNG
DBCって何ですか?
00161NGNG
>>12
凡人プログラマには静的な型チェックが必要。
00171NGNG
>>13
JavaのSwingのような標準のGUIライブラリは作らないようだ。
しかし設計者はSymantecの人らしいので、
Winのことはよくわかっている。
だから、外付けのwin用のGUIライブラリは
すぐ提供されると思う。
0018デフォルトの名無しさんNGNG
>>16
静的な型チェックは(チェックする機会を作れば)lispでもできるよ。
使われないのは多分、読みにくいからだろう(w
0019デフォルトの名無しさんNGNG
Java/C#と同じ方向性か。
正直、マクロを取っ払ってるのは失敗な気が。
0020デフォルトの名無しさんNGNG
DはDelphiのDだろバーカ!
パクるんじゃねーよ!
00211NGNG
>>15
Design By Contract

例えば、平方根を計算するメソッドは次にようになる。
long square_root(long x)
in { assert(x >= 0); }
out (result) {assert((result * result) == x);}
body {return math.sqrt(x);}

bodyが実際のメソッド本体。
inはこのメソッドに渡すパラメータに要求する条件。
この場合は、正の数でなければ平方根は計算できない。
outは、このメソッドが満たす条件。
平方根*平方根=元の数になるはずという意味。

このようにして「お前がこれこれの条件を満せば、
俺はこういう仕事をする」ということをソースに表現する。
inとoutを発注元が書いて、bodyを下請けが書く。
発注元が頭よければ下請けが馬鹿でも大丈夫。
0022デフォルトの名無しさんNGNG
俗に言う「Hello, world!」プログラムをDで書いてみてYO!
00231NGNG
>>20
「D」という名前はいろいろな意味で突込みが厳しいようだ。
どうも、それが狙いみたいだけど。
0024デフォルトの名無しさんNGNG
可変引数は取れるの?
取れた場合、型チェックは?
0025デフォルトの名無しさんNGNG
メモリ開放は手動で出来るの?
0026デフォルトの名無しさんNGNG
つーかいきなり出てきた感じがするんだけど。>D
目的はなんなの?
何か作られた理由でもあんの?
00271NGNG
>>22

俺はドラフト読んだだけなので自信がないが、
たぶん、こんなもんだと思う。

import stdio;
int main()
{
printf ("Hello, world\n") ;
return 0;
}
0028デフォルトの名無しさんNGNG
頭文字D?
もしかして作者はとうふ屋ですか?
いまだに(80)86使いこなしますか?
0029デフォルトの名無しさんNGNG
せっかくDelphiの時代が到来したと思ったら、
C#だのDだの余計な言語を作りやがって!!!

Delphi最高!
他はゴミ箱逝き!!!
0030デフォルトの名無しさんNGNG
>>27
うひょー・・・一行目以外はすっかりC/C++だね(w
argv/argcとリターンコードをDBCでチェックするようなHelloWorldを書くべきかな
0031デフォルトの名無しさんNGNG
>>28 ウマイ
0032デフォルトの名無しさんNGNG
正直、なんでimport`statement'にしたのかわからん。
ただ単にマクロを取っ払いたかっただけの勇み足にしか見えん。
マクロというか、プリプロセッサを無くしたのは良い
かもしれないが、マクロ自体は無くす必要は無い筈。
0033デフォルトの名無しさんNGNG
して、そのコンパイラ等は何処に?
リア厨なので英語チンプンなのれす。
00341NGNG
>>24
CのAPIはコンパチで呼べると書いてあるので、
たぶんできると思う。
サンプルプログラムにprintfもあるし。
型チェックはしないと思う。

同じ名前で引数の型が違うのは、C++と同じでできる。
この場合は型チェックもやるはず。

>>25
俺も知りたい。
たぶん、できないと思う。

>>26
開発者がC++/C#/Javaが微妙に嫌いで使いたくないからじゃないかな。
自分がそうだから、みんなそうだと思ってるような気がする。
俺は3つとも好きだけどね。
0035デフォルトの名無しさんNGNG
>C#/Javaに対する大きな利点としてはDBCがあると思う。
これはどうだろう?
完全なUnitTestを導入するとしたらDの提供する機能では不十分だね。
どの道外部のTestingFrameworkが必要になりそう。

in/outはあると便利かもしれないけど
>out (result) {assert((result * result) == x);}
>body {return math.sqrt(x);}
なんてコードが常に書けるとは限らないからね。
0036>33NGNG
あと2ヶ月だって。slashdottedってなに?
When can I get a D compiler?
I'm hard at work on one. I hope in a couple months. I had not anticipated being slashdotted.
0037デフォルトの名無しさんNGNG
Delphi使いはこの先どうやって生きていけばいいですか?
この作者はDel坊に氏ねと言ってますか?
0038ほらよ>37NGNG
http://www.2ch.net/accuse2.html
00391NGNG
>>30 正解!
>>32
マクロは何でもできる
→しかし、ふつーはこう使ってる
→「こう使ってる」所を言語に入れて後はステ

というのが開発者の思考パターンらしい。
言語を作る人は、自由度を上げて、ひとつの
言語要素であれもできるこれもできるというパターンが
好きなのが多いんで(その極がLisp)、この人はちょっと珍しい。
そのために、言語仕様がふくらんでいく。
ここで好き嫌いがわかれるだろうね。
俺も、この点はちょっとハラハラしながら見てるが、
ここまではそれなりのバランスを取ってるような気がする。

>>33
まだ、α版しかなくて未公開です。
でも、言いだしっぺがコンパイラ屋さんなんで処理系はそのうちできると思うよ。
0040デフォルトの名無しさんNGNG
slashって猛烈なって意味が無かったアルか?
あとdotted は dot;点アルね
アメリカさんは決まりきった語を省くから
salsh dotted work ;猛烈な 仕事が 点在してる アル
だと思うアル。。。
004133NGNG
>>39
>でも、言いだしっぺがコンパイラ屋さんなんで処理系はそのうちできると思うよ。
おぉ。なんか安心できる。

しかし、せっかくDを名乗るなら、大改革をしてほしかったなぁ。
漏れ的にはAppleScriptやHyperTalkみたいな自然言語に
近い言語体系がよかったんだけどなぁ。
00421NGNG
>>35
言語に含まれたDBCの機能を利用して、
外部のテストルーチンを書けば便利だと思うよ。
例えばclass Aがあるとして
A a ;
という変数に対して、

assert(a) ;

とすると、class Aの不変条件をチェックできる。
要所要所にこれを入れておけば、もしAにバグがあって
aの内部状態がおかしくなった時に、
おかしくなった所で検出できる。
0043デフォルトの名無しさんNGNG
日本も1文字の言語作れや。
い言語(欠番)
ろ言語(欠番)
まず、
「は」言語をCにぶつける。
「に」言語はDにぶつけろ。
Delphiには「フジヤマ」言語で対抗。
最終的に「スシ」言語で天下を取る。
00441NGNG
>>37
Visual DはありえんがD Builderはできるだろう。
:=さえ捨てれば生きていける。
0045デフォルトの名無しさんNGNG
「ゲイシャ」言語はエロゲースクリプト
0046デフォルトの名無しさんNGNG
>>43
意味のない気負いブリにワロタ
004725NGNG
なんかつまんない言語だな。流行るかどうかは別にして。
00481NGNG
>>8
俺の予想では、リフレクションはまずサポートされない。
RTTIはdynamic_cast<>と同じ。
00491NGNG
>>47
実は俺もそう思ってる。
意外にレスがつくんでびっくりしたよ。
0050デフォルトの名無しさんNGNG
delegateもなさそうだな。
これではまともなGUIライブラリは作れないだろ。

このC/C++との絶妙な距離間のとり方
(コード非互換の上、アドバンテージが少ない)
が災いして流行ることはなさそう。
ちょっと便利ってだけでほいほい移行できたら
Cなんてとっくに廃れてるよ。
0051デフォルトの名無しさんNGNG
>>50
それは無いだろう。
Cより便利なシステム記述言語って何がある?
0052デフォルトの名無しさんNGNG
>>47
せいぜい、既存の言語の改良どまりっぽいもんな。
0053デフォルトの名無しさんNGNG
C#/JAVAのネエィテイブコンパイラがほしい俺には、
この言語は夢のように見える。
00541NGNG
あと、小技的に面白いと思ったのが、

・ ローカル変数を使わないとエラー

未使用のローカル変数を放置しておくと、ソースの可読性をさまたげるので、こ
れはなかなかよいと思う。

・ HTMLへのコードの埋めこみ

HTMLファイルをコンパイラに食わせると、<code>...</code>を抜き出してコンパ
イルしてくれる。JavaDocのようにコメントにドキュメントを埋めこむのではな
く、ドキュメントにコードを埋めこむ。文芸的プログラミングの復活か?

・ debug行

debug(3) { ... } と書いておくと、コンパイル時にdebugレベルを3以上にした
時だけ、...の部分が有効になる。

・ typedef

typedef Money int ;としておくと、

void print(int i) ;
void print(Money m) ;

は、別のメソッドになって、引数のタイプで区別される。
00551NGNG
DBC付きインターフェースのありがたみについて補足しておくと、例えば、
GenericContainerというインターフェースに対して、

bool empty() ;
int size()
void add(T t)
post { assert(size() == before.size() + 1); }
invariant() { assert(empty() || size() > 0); }

なんてふうに、メソッドの意味を規定できる。このインターフェースを実装する
奴は、「要素を加えるとサイズがひとつ増える」とか「空だったらサイズが0だ
し、0でなければ空とは言えない」みたいな、インターフェースの意味を満たす
ことを強制される。

これをバリバリ使ってフレームワークを構築すれば、フレームワークの提供者と
ユーザの責任範囲が明確になってかなり品質が向上するぞ。

KDEとかmozillaのように多種多様なコンポーネントが複雑にからまるようなソフ
トにDが向くと俺が言ったのは、こういう意味だ。また、大規模ビジネスソフト
でありがちな、小数のできる設計者と多数のヘボプログラマというチームを活用
するためにも有効だ。

なお、現時点でのスペックにはインターフェースの詳細は書いてない。DBCがつ
くというのは、俺の勝手読みだ。
0056デフォルトの名無しさんNGNG
> ・ HTMLへのコードの埋めこみ

これ,マジ面白いと思いました
ただし個人的には <code>〜</code> の部分というよりは
<pre><code>〜</code></pre> の部分だけを抜いて欲しいなとか思ってみたりして

# 重箱の隅つっついて正直スマンかったです(笑い
0057デフォルトの名無しさんNGNG
c# ネイティブコンパイラが出れば不要だろ。
0058デフォルトの名無しさんNGNG
DBCは「規定」と訳すより「契約」を使ったほうがよさげ。
0059名無しさん@EmacsNGNG
slashdotted は /. に出たってことじゃないの?
http://slashdot.org/article.pl?sid=01/08/15/234223
0060デフォルトの名無しさんNGNG
>>59
/. に出て、web page に、短時間の間に大挙して人が押し寄せてくることらしい。
転じて、/. に出てなくても、短時間の間に...を slashdotted って呼ぶらしい。
0061デフォルトの名無しさんNGNG
>60
まるでどこぞの巨大掲示板のようだね
0062デフォルトの名無しさんNGNG
ヲタ用語使う言語開発者って以下略
0063 ◆6eFTVtLI NGNG
言語開発者なんてオタ以外の何者でもない
0064デフォルトの名無しさんNGNG
>>61
2chる。
0065デフォルトの名無しさんNGNG
>>62
あからさまに少数の限定した人達がオタ用語を使ったところでどうだと言うのだ?
0066デフォルトの名無しさんNGNG
初期のC++がCのプリプロセッサだったように、
C++のプリプロセッサとしてインプリメントされていれば、
汎用的にどこでも使えて実用性が生まれて面白かったかも。
(既に過去形かい>われ)
0067デフォルトの名無しさんNGNG
わたし的にはテンプレートは好きだが
GCの採用と演算子のオーバーロード廃止の二点で却下。
演算子を活用すると可変長引数みたいな醜い部分を
排除できるから素敵(はぁと)。
0068デフォルトの名無しさんNGNG
>>67
そういうの隠蔽されるとちょっといや。
GCは・・・まぁJavaで慣れたからいいや。
0069デフォルトの名無しさんNGNG
<<演算子が5通りの意味で使われてるソース
(シフト、ストリーム出力、列のアペンド、ローテート、イベント送信)
をメンテして欝になった。
00701NGNG
>>66
GCCのフロントエンドを作るって書いてるから、
汎用性は比較的早く確保されると思われ。
0071>70へ教育的指導NGNG
る。
007266NGNG
>>70
ほほう。
各UNIX+Win OS用のネイティブバイナリ必須のわしとしては
JavaやC#より魅力的。
GCCのフロントエンドということは、既存のC用のライブラリ等も
利用可能かな?C++ライブラリは無理かな。

しかし、C#とかDとかなんでC++の上位互換で作ってくれないのか。
気持ち的にはバッサリ逝きたいのはわかるし、そのままでは穴を
残しまくることになるけどさ。
00731NGNG
>>72

> 各UNIX+Win OS用のネイティブバイナリ必須のわしとしては
> JavaやC#より魅力的。

ついでに言っておくと処理系をオープンソースで配布するとのこと。C#との最も
大きな違いはそこになるかも。

> GCCのフロントエンドということは、既存のC用のライブラリ等も
> 利用可能かな?C++ライブラリは無理かな。

CのAPIとの互換性は確保する(Cのヘッダファイルは理解する?)とのことなので、
CのライブラリはほとんどOK。C/C++とソースレベルの互換性は無いので、C++ラ
イブラリはたぶん使えない。
0074デフォルトの名無しさんNGNG
C#のネイティブコンパイラが欲しい人はWindows
Javaのネイティブコンパイラが欲しい人はMaxOS X

ってことじゃだめか、やっぱ
0075名無しさんNGNG
21世紀のCってかんじ
0076デフォルトの名無しさんNGNG
これって、UNIX畑の人達が作ってるの?
彼らが作るものは、ウィン厨の俺には使いこなせないことが多いんだが・・・・
0077デフォルトの名無しさんNGNG
>>76
君なら出来るよ。
0078デフォルトの名無しさんNGNG
lisp風にプログラムを動的に書きかえられるといいな。
0079デフォルトの名無しさんNGNG
>>77
なんだか良く分からないけど、ありがとう。
希望が湧いてきた、頑張ってみるよ( ´∀`)
0080デフォルトの名無しさんNGNG
>>76 作者の Walter Bright は
昔 MSDOS用の DataLight-C(広域最適化が優秀だった),
Zortech-C++(MicrosoftやBorlandより先に出たDOS用C++),
Symantecに移って Win32用の Symantec C++ を書いた人。
この人、たぶんGUIに興味なし。
0081デフォルトの名無しさんNGNG
>>78

C言語ではプリプロセッサがソースコードの置き換えを
行っているけど、D言語では?
00821NGNG
>>81
Dではありがちなプリプロセッサの用途ごとに代替の手段を用意している。

・ 定数の宣言
const int BUFSIZE = 4096 ;
とかenumを使う。

・ 短く汎用的なロジックの定義(min/maxとか)
inline関数を使う。

・ ジェネリックプログラミング(複数の型で同一のアルゴリズム)
templateを使う。

ここまではC++と同じで、C++では推奨だったことがDでは必須になっている。

・ #ifdefによる条件コンパイル(デバッグ用のコード)
debug文という機能を使う。

・ #ifdefによる条件コンパイル(機種依存の処理)
機種依存コードをひとつのモジュールに入れて、そのモジュールを機種ごとに置き換える。

・ #includeで他のモジュールを引用する
import文。

プリプロセッサで処理すると、コンパイルエラーがわかりにくかったりデバッガ
が使えなかったりするが、上記のように言語仕様の中に組込めばそういう問題は
ない。

これ以外の変てこなプリプロセッサの使い方は、わけわからんソースになるから
D言語では禁止。

C#ではこのあたりをどう考えているのか、誰か詳しい人解説してくれ。
0083デフォルトの名無しさんNGNG
debug文はJavaにもほしいな。
0084デフォルトの名無しさんNGNG
>>82
>これ以外の変てこなプリプロセッサの使い方は、わけわからんソースになるから
これ以外、ってプリプロセッサ自体無い様だけど?
0085 NGNG
Dと言うからには、
やはりC/C++のスーパーセットでなければならない。
そうでないと、Cの次のDってことにはならない。
0086デフォルトの名無しさんNGNG
BCPL->B->C->P->Lと進むというのが定説
0087デフォルトの名無しさんNGNG
Basic→C→Perl→Lispか?
俺が覚えた言語の順番だったり・・・・
0088デフォルトの名無しさんNGNG
>>87
warata
0089デフォルトの名無しさんNGNG
>>87 PはPascalじゃないのかに、
0090他力本願NGNG
SunもBorlandもMSもSymantecも新言語を作った。
次はMetroworksの番だ!
C++のスーパーセット言語作ってくれ〜〜〜〜〜〜
どこもやってないし、CodeWarriorならIDEも申し分ないし、
色んなターゲット環境へのポーティングも得意だし、
言うことなし!なんだが。
0091デフォルトの名無しさんNGNG
だから Metroworks はモトローラに買われて終わったんだってば。
0092デフォルトの名無しさんNGNG
ていうか使ってみて〜。
D言語でゲーム作ってみて〜。
0093デフォルトの名無しさんNGNG
Dあげ
0094デフォルトの名無しさんNGNG
が
0095デフォルトの名無しさんNGNG
Metroworksは終わってないっ!
スンマソン信者なものでつい。
あれ以降Motrola向け技術開発も増えたけど、今もいい仕事してる。
でも組み込み系にフォーカスしているのは否めないか。
0096デフォルトの名無しさんNGNG
>各UNIX+Win OS用のネイティブバイナリ必須のわしとしては
たとえネイティブでもGCがあるからにはランタイムの仕掛けが
いろいろとあって箱庭的環境と思われ。
0097デフォルトの名無しさんNGNG
>ネイティブでもGCがあるからには
そういやこの組み合わせってはじめて見るな
0098デフォルトの名無しさんNGNG
>>97
今のVBってネイティブ+GCだろ。
0099デフォルトの名無しさんNGNG
>>98
被害者発見!
0100デフォルトの名無しさんNGNG
>>80
Walter BrightとBjarne Stroustrupが、コンストラクターに
おけるオプティマイズ方法案(一時変数生成の抑止)を
相談するエピソードが"The Design and Evolution of C++"に
出てくるね。アイスかなんか食べながら、ってのがカッコいいなぁ。
010180NGNG
おー、D&E は読んでないので知らなかったよ。
アイスとは…二人とも甘党なのか。(単に暑かっただけか)
彼らが顔あわせる機会というと、↓この時かな?
http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/meetings
■ このスレッドは過去ログ倉庫に格納されています