1 :
デフォルトの名無しさん :
2006/05/03(水) 20:37:40
2 :
デフォルトの名無しさん :2006/05/03(水) 20:38:38
【char[] str】 【str ~= "nullpo"】
これいつになったら実用化されるの?
8 :
sage :2006/05/05(金) 08:27:24
これが伸びると仮定してもまだ数年はかかるんじゃね? 普及へのロードマップが全然想像できないが
間違えた
10 :
デフォルトの名無しさん :2006/05/05(金) 10:11:34
もう少しバイナリが小さくなってくれたら実用化はすぐだと思うんだがなぁ。 まずPG言語やバイナリに関心のある分野を抑えないと。
12 :
10 :2006/05/05(金) 13:01:18
コンパイラを実装できるようなスキルがないです。 使うのは多少できるが、、
D言語をどうこう言う前に、お前の実用化を目指そうね。
14 :
10 :2006/05/05(金) 13:18:56
別分野で実用されているので満足しておきます。
足を引っ張ってるのを実用されているとはいいません
まぁ自分の心配を先にしなさいな。
お前がな
すみませんでした。そうします。
うむ、分かればよろしい。
phobos\internal\dmain2.d のWinMain版って作れないのかな? 各モジュールが独自にスコープを持つ仕様のせいか思うように逝かない。
v0.155のphobosで、std.Thread.idが突然プライベートメンバになってるな。 前verまで、パブリックだったので、スレッドの識別(連想配列のキーなど)に使っていたのだが、 代わりがないようなので、std.Thread継承して、同じようなメンバ作るしかないのかな?
>>21 それ。
毎回同じコードだから独立させたかった。
WinMain内から呼び出す関数名をmain()にして link.exe WinMainのobj+mainのobj,,,,定義ファイル/co/noi; で何とか逝けた… もっと楽な手段がありそうだが今はこれで我慢しよう。
興味本位で聞くんだけど、WinMain って何に使うん? -L/su:windows 付ければ、 main でもコンソール出なくなるんだけど
lpszCmdlineは後からAPIでとれるけど、 nCmdShowはとれたっけ。
確か取れたような
>>25 実現したかったことは
・毎度おなじみの
>>21 のWinMainのコードをdmain2.dみたく分離してもう弄る事のないように。
・WinMainから呼ばさせる関数は(main関数みたく)どのモジュールに書いても呼び出される。
で、結果的に必要だった。
mainでもコンソール出なくなるのは
「何故WinMain()が呼ばれねー → 別モジュールにあるmain()が呼ばれてるから」
って馬鹿な過去の経験により知ってる。
3-4行目のことをを実現するに至った方法が
「"WinMainからmainを呼ばせて"別モジュールにmainの実体を記述」
なんだがな。
extern(C)のmainの如く
>>21 のコードとはもう無縁だし(もちろんリンクは必要だが)
>>24 みたくリンカを直接弄くらなくてもOKなことも分かったし
mainから記述できる上に例外はちゃんとWinMainが拾ってくれて
MessageBoxを出してくれることも確認できた。
>>30 なんか色合いが、JavaというかSunっぽくね?
>>30 なんか・・Dが3つもある意味が無いような
ロゴは鮭の顔でいいんじゃない?
swtのサンプルをdwtに移植しようと思ったんだが、 無名クラスから周囲の関数がどうもうまく扱えない。 これって正常な動作なんだろうか? class HogeAdapter { void foo() { printf("hoge"); } } class Hoge { private HogeAdapter _hogeAdapter; void addHogeAdapter(HogeAdapter hoge) { this._hogeAdapter = hoge; } void foo() { if (_hogeAdapter) _hogeAdapter.foo(); } } class Nanika { void hige() { printf("hige"); } // 扱いたい関数 /* class HigeAdapter : HogeAdapter { void foo() { hige(); } } void foo() { auto hoge = new Hoge; hoge.addHogeAdapter(new HigeAdapter); hoge.foo(); } //↑のように書けば問題無し。 */ void foo() { auto hoge = new Hoge; void hige() { this.hige(); } // @ hoge.addHogeAdapter(new class() HogeAdapter { void foo() { hige(); } }); hoge.foo(); } } void main() { auto nanika = new Nanika; nanika.foo(); } @の行があればコンパイルは通る。(これは書かないで済んで欲しい) ただし、実行するとAccess Violationになる。
36 :
デフォルトの名無しさん :2006/05/07(日) 18:50:24
ttp://www.kmonos.net/alang/d/class.html > 非staticネストクラスは、隠しメンバ(コンテクスト・ポインタと呼びます)を
> 一つ加えることで実現されています。 """関数内にあるときは周囲の関数のフレームポインタ"""が、
> クラス内にあるときは周囲のクラスの this ポインタが、隠しメンバに格納されています。
となっているので、今のところ仕様かなあ。
確かにクラスのメンバ関数内にあるときは両方にアクセスできて欲しいかも。
>>36 >関数のフレームポインタ
サンクス。なんとなく分かったような気になった。
以下のような場合うまく動作するが、
これは最外周の関数がポインタとなってると考えればいいのかな?
無知でスマソ。
class HogeAdapter { void foo() { printf("hoge"); } }
class Hoge {
private HogeAdapter _hogeAdapter;
void addHogeAdapter(HogeAdapter hoge) { this._hogeAdapter = hoge; }
void foo() { if (_hogeAdapter) _hogeAdapter.foo(); }
}
void main() {
void hige() { printf("hige"); }
void foo() {
auto hoge = new Hoge;
hoge.addHogeAdapter(new class() HogeAdapter { void foo() { hige(); } });
hoge.foo();
}
foo();
}
>>37 扱いたいメソッドをstaticメンバにするのはどうよ?
>>38 メソッドから呼び出すメソッドにも全てstaticを
付けなくてはならなくなってもう大変。
個人的にはコンストラクタでaddAdapterを呼ぶのが好みですが auto hoge = new Hoge(this, &hige); auto hoge = new Hoge(this, delegate void() { printf("hige"); }); Hoge.this(Control owner, void delegate() a) { }
↑ Hoge.this(Control owner, void delegate() a) { this.foo = a; owner.addAdapter(this); }
もしくはControlクラスにdelegateを直接ハンドルできるメソッドがあるのでそれを使う手もある void handleMouseDown(Object customData, void delegate(MouseEvent) func)
もうインテリセンスなしではやっていけません なんかないの?
作れ
インテリセンスはほんとMSの罠だよな。 あれなしじゃ生きていけないよ
MSじゃなくても罠ですよ。 もうアレがないと、まともに組めない。
ほんと麻薬みたいなもんだよな・・・ .ncb再構築のために、VS起動しなおしたりするようになったし・・・
作れって言われてもなー eclipseプラグインででも作ってみるか
Dでインテリセンス欲しい ↓ どうせなのでDでパーサーを作ろう ↓ 作り始める ↓ インテリセンスない ↓ めんどい ↓ 作る気なくなる ←今ここ
パーサあんの? じゃあくれ
よく読め
DMD 0.157
んじゃ共同開発と行きましょうか。 Eclipse用ってことは言語はJavaでいいんじゃないかな? まずは要件定義から。
"蜻蛉切り"という、いまや見るも無残なプロジェクトがあってな…… と、>49を見て思った。
中途半端なのってみっともないよな
かといってやり始めなければ何も変わらない
共同開発か・・ 参加してみたいがついていけるか不安
共同開発したいんなら、だれかが主導してWikiなりなんなり立ち上げるべきだろう ここはあくまでもD言語について語るスレ、せめて別のスレ立てれ、そして俺も助力する
D言語はコンパイルが早いといわれてるわけだし 構造解析も意外と速いんじゃなかろうか? テンプレートやmixinみたいな機能に対応するのは難しいかも知れんけど 解析さえしてしまえばあとは楽だと思う
Haskell最強だろ
「必要十分=最良」ではない件
使い勝手より記法の簡便さより何より、組み込みの方がコンパイルスピートが速いし効率良いコードも吐ける。 それでいいんじゃないか。
C++の文法って読みにくいんだよね。
>>64 C++の実装とインターフェースを分けて書くところが嫌い。
あれ以外は全部好きなんだけどね。
逆にDはそれが一つで済むところだけのためにすきなのだけど(w
>>65 分けて書くのは構わないんだが
結局インタフェースに実装を書いてしまうところがイヤ
>>66-68 インスタンスメソッドとクラスメソッドの違いを解釈するために
コンパイラが手抜きしているとも言う
結局D言語のIDEが何があって何が使いやすいの?
数ヶ月前の知識 akide:こないだ開発やめたんだっけか? elephant:どうなったか知らん Eclipce:未だにハイライトだけ? 蜻蛉切り:(´・ω・`) まだなんかあったっけ とにかく使いやすいのはないと思われ
poseidonは
74 :
72 :2006/05/16(火) 14:59:40
そういえば名前変わってたんだったっけ. akide DIDE->elephant->poseidon Eclipce 蜻蛉切り もうない?
とりあえず更新ありそうなposeidonに注目しつつ
>>75 みたいに好きなエディタ使うのが吉かな。
poseidonは現時点でもまあ使えない事はない。
IDE厨うぜぇ
とりあえずposeidonのインテリセンスが適当過ぎるのを何とかして欲しいわな オプソなのに誰もパッチ作ってない所に皆のやる気の無さを感じる。
やっぱVisual Studio並みの完成度がほしいんです
poseidon 使ってみたよ キーワードしか補完してくれないようじゃ使えないなあ
つまり現段階ではどれも使えないと・・
そこで
>>53 とかの話になるわけだがどうなったんだ
boost::spiritで遊んでみてるんだがコンパイル激重 orz でも面白いねこれ
ス レ 違 う ぞ
84 :
82 :2006/05/19(金) 23:03:34
Dパーサ作って遊んでるだけど
あるんだね じゃあこっちいじってみたほうがよさそうだなあ サンプルがよくわからんが…
BCC Developerレベルのものすらないんだろうか?
なんならボクが作ってアゲてもいいですよ?
>>88 救世主キタ━━━━━━(゚∀゚)━━━━━━ !!
作るならやっぱりDで作ってソース公開でお願い
Framework の方が先じゃない?
いやそれを作るのもインテリセンスないと面倒なんだよねw
おまいらブートストラップっつー言葉を忘れていまいか?
Dのパーサ、Dでつくるなら、Dのソースがあるんじゃね?
95 :
94 :2006/05/20(土) 12:43:39
ごめwww勘違いwwww
DでCのCALLBACKに対応する物はないの?
>92 んじゃまず C++とかなにかでD言語用IDEを作り そうしてできたD言語用IDEでD言語用IDEを作れば解決
VC++みたいな自動補完するにはパーサの他に何が必要? 宣言別に連想配列にキーワードぶち込むだけでOKかな?
101 :
デフォルトの名無しさん :2006/05/20(土) 17:53:52
パーサの条件 ・普通にツリー構造を解析できる ・テンプレート、mixinを解析できる ・externブロック内など言語に直接関係しない部分は解析対象外(そうしないと難しすぎるし) コード補完の条件 ・Ctrl+Space(任意)でツリーの特定部分を絞り込む ・ピリオドで下位ツリーの一覧を表示する ・左辺への代入、引数の指定などの場合は型優先表示される オプション ・大文字小文字を無視する(確定後補完する) オプション EclipseみたいなIDEのインテリセンスに肩を並べるにはここまでいかなね。 ぶっちゃけEclipseプラグインでいいと思うから、インテリセンスはJavaで作ればいいよ。 あと省略文字登録も可能にするとより完璧。(psfi → private static final intと補完)
とりあえず、入力内容から既知のキーワードの一覧を探索する、だけでも。 って、インクリメンタルサーチの普通の実装だけど。
>>102 それはちゃんとしたエディタなら、できるからねえ。
それを超えるのがIDE
D用のフレームワークってどんなのがあるんでしょうか?
まだD自身のフレームがふにゃふにゃしてるからなぁ。
最適化付きコンパイル周りにもバグは多い
字句解析、構文解析を作る場合は、D言語仕様のイタリック表記の部分を見ればいいの?
D用のフレームワークってどんなのがあるんでしょうか?
Delphi for the Microsoft .NET Framework
何でも自作 それがDクオリティ
>>112 dmcの一部を使ってるからソース出せないとか何とか
作者はdmdが成熟したら本気で売り物になるとか思ってるのか?
ターゲットがいまいちわからん。 サーバーサイドでもないし、クライアントアプリにも見えんし。
デーモン市場だと思うよ そんな市場あるの?って疑問はあえて持たないでくれ
デーモン市場って何? unixのデーモンのことか?
日本の国技である相撲が大好きな閣下のことだろ
C/C++をついに嫌になった人が代替品として使う言語だと思ってた だから個人ユースしか見えない・・・
いやいや定刻で刻めるシステムとかにはうってつけだろ メモリリーク心配しなくていいから 当然ゲームなんかも向いてる
まあ、Dのまともな完成品あるのもゲームくらいだもんな。
X11のD用ポーティングってない?
>ゲーム ガベコレの動作が不安ではある
CPUが200MHzの時代なら、16.6秒の世界にガベコレも怖かったろうけど 2GHzの時代ならぜんぜん勇気を持って踏み込めると思う 11ミリ秒くらいはゲームに使えるんじゃない?
ガベコレが怖いなら、最初だけガバッとメモリを確保して 後は一切 new しないプログラムを書けばいいだろう。
Dの意味が…
>>123 クラス指向な言語なんだから一つながりのシーンに割り当てるに十分なメモリがあればそれほどGCも問題にならないよ。
>>126 ガベコレがおきると困る期間(1プレイ分とか)の分だけ
がばっと確保して、その期間が過ぎたら解放して、
新しい期間が始まるときにまたがばっと確保して、
という方針でやるときには、確保と解放が何度も
起こるから、一応Dの意味はあると思う。
ガベコレを一定期間無効にするのはなんか問題が
あったんだっけ?
GCってもっと穏やかにできないのか? 何も一度に全て処理する必要ないように思う。
131 :
デフォルトの名無しさん :2006/05/24(水) 01:46:31
>>131 DWTのやつはまだ出ていないでしょ。
今あるやつはDFL。
ちょーどガベコレの話が出ているが
>>131 はガベコレがまともに動かないらしくdeleteで解決してる。
スレッドが関係しているのか。
>>131 なんか、そこみてるとGCが特定の条件下で、駄目駄目っぽいんだけど、
誰か現象をまとめてくださいよ。
>>135 マルチバイト文字の対応が微妙で
Windows2000で動かないらしい。
それでDWTだとか。
XPでも、tabcontrol.dがダメらしく、自分で変更しろ書いてある。
>>136 他人のページ宣伝してもおもろないんだが('A`)
>>137 なるほど。ちょっとつらいね
宣伝するなっつってんじゃん。馬鹿?
そこは俺のサイトなんで、勘弁してやってくれ
糞サイトを張ったら晒し 無関係のサイトを張ったら荒らし それ以外のサイトを張ったら宣伝
NGワード:宣伝
D 0.158
関数テンプレート以来ニュースを聞かないのだけど たいしたことしてないのかな?
まだまだバグフィックスが減らないなあ
バグそのものが打ち止めでフィクス件数が一定ってのなら先はあるんだけどね fix/bugってどこで調べられるん?
>>149 NewsgropusのD.bugsか、Bugzillaあるいは、Dstress。
D 0.159
gdc 0.18
すいません、質問です。 din.readLine() を使って標準入力をすべて受け取るループはどうやって書くんでしょうか? 標準入力の終端の検出方法がわからないのですが orz
>>153 readLineを諦めて下みたいに書くじゃ駄目?
foreach(char[]line;din){
}
ありがとうございます。 一行ずつ読めたらOKです。 ストリームに対してもforeach使えたんですね。
ストリームに対してforeachが使えるってどこかに書いてありましたっけ?
ほんとだ・・・。 一度ちゃんと読み直す必要がありそうです。 ありがとうございました。
if [ -f include/fixed ] ; then true; ¥ else ¥ : This line works around a 'make' bug in BSDI 1.1.; ¥ FIXPROTO_DEFINES=""; export FIXPROTO_DEFINES; ¥ mkinstalldirs="/bin/sh ../../gcc/mkinstalldirs"; ¥ export mkinstalldirs; ¥ if [ -d "/usr/include" ]; then ¥ /bin/sh ../../gcc/fixproto include include /usr/include; ¥ if [ $? -eq 0 ] ; then true ; else exit 1 ; fi ; ¥ else true; fi; ¥ echo timestamp > include/fixed; ¥ fi fixproto: populating `include' (No *.h files in /Users/Yume/tmp/gdc/gcc-3.3.6/build/gcc/include/d) (No *.h files in /Users/Yume/tmp/gdc/gcc-3.3.6/build/gcc/include/d/3.3) (No *.h files in /Users/Yume/tmp/gdc/gcc-3.3.6/build/gcc/include/d/3.3/etc) (No *.h files in /Users/Yume/tmp/gdc/gcc-3.3.6/build/gcc/include/d/3.3/etc/c) make[1]: *** [stmp-fixproto] Error 1 make: *** [all-gcc] Error 2 gdc 0.18 gcc 3.3.6 Mac OS X 10.3.9 ここで止まっちゃう…
リファレンスの日本語訳の更新が1ヶ月以上止まってるな…。
そりゃここまでだらだら作られたら飽きるわなw
164 :
163 :2006/06/04(日) 12:22:40
if(hours>=17||hours<=4){ if(instance.classinfo!=typeid(Night)) change!(Night)(); }else{ if(instance.classinfo!=typeid(Day)) change!(Day)(); } は if(hours>=17||hours<=4){ if(instance.classinfo!=Night.classinfo) change!(Night)(); }else{ if(instance.classinfo!=Day.classinfo) change!(Day)(); } の間違い
ifとかswitchで分けてるようじゃオブジェクト指向のStateパターンとは言わないんじゃないのか?
Stateはswitchをポリモフィズムに置き換えたものでは?
>>161 ちょっといま死ぬほど忙しいのでもうしばらく待ってちょ
……と日本語訳の中の俺がいってた。
>>168 Noahだけはガチで便利なので愛用してます。ありがとう。
>>168 死ぬほど忙しい癖に反応早いじゃねーか。
サボって2chばっかしてるのを忙しいなんて言うな。
記念カキコ
>>170 他の人にスレで煽られてるよ、とか教えてもらったとかじゃない?
173 :
168 :2006/06/04(日) 16:16:11
忙しい時ほどやらなくてもいいことを やって現実逃避してしまう人間の性…乙カレー
175 :
デフォルトの名無しさん :2006/06/04(日) 19:52:34
IA-64 CPUで実行したら馬鹿みたいに遅い 64ビットコンパイラはでないのか。。。
>168は偽者なので相手にしないでください、と本物の中の人が言ってます。 wなんて使いませんから。
どーでもいいよ
178 :
161 :2006/06/05(月) 03:00:35
dmd 0.160
New/Changed Features * Documentation is much more controlled by style sheets now. * AssertExpression's can now take an optional informational string as the second parameter. Static assert's can, too. * Added Expression.NewExpression so inner classes can be initialized more conveniently. * Added operator overloading of InExpression. * For Windows, looks for sc.ini in: 1. The current working directory 2. The directory specified by the HOME environment variable 3. The directory dmd.exe resides in * For Linux, looks for dmd.conf in: 1. The current working directory 2. The directory specified by the HOME environment variable 3. directory dmd resides in 4. /etc/
182 :
161 :2006/06/05(月) 16:15:45
我、訳者ノ生存ヲ確認!! NDSの英語漬けFランクの俺に手伝えることはあるか?
PATHは通っている?
すいません,またお助けください. こないだ foreach(char[] line; din) を教わった者です. これはリダイレクトならうまくいくのですが, a.exe < text.txt パイプで接続すると無限にループしてしまいます. type text.txt | a.exe リダイレクトと同じように動作させるにはどうしたらよいのでしょうか? サンプルコード -- import std.cstream; int main(char[][] args) { foreach(char[] line; din) { dout.writef(line, "\n"); } return 0; }
しまった 空白はなくなるんだった orz すいませんが脳内修正してください
188 :
184 :2006/06/06(火) 08:09:04
>>184 E:\D\dmd\bin\にlib.exeを突っ込んでみたらどうだろうか。
>>186 よく見ると最後に1行余分な改行が付くね
a.exe < text.txt > textout.txt
してみると分かる
192 :
186 :2006/06/06(火) 11:42:43
Phobosを眺めていて BufferedStream を見つけたので試してみました. うまく動いているようです. しかしこうしなきゃいけないもんなんでしょうかね. Stream dinbuf = new BufferedStream(din); foreach(char[] line; dinbuf) { dout.writef(line); } dinbuf.close();
193 :
186 :2006/06/06(火) 11:51:55
あ, dout.writef(line); は dout.writefln(line); にしといてください(^^;
194 :
184 :2006/06/06(火) 20:21:16
>>190 お陰様でインストールできました
どうもサンクス
テンプレートクラス内でもopApplyできるよね?
できない理由がない。
ローカライズ関係(GNUでいう処のgettext)やコード整形(GNUでいう処のindent)の内蔵まだー? Example: >type test.d private import std.stdio; char[] l="localized string"l; void main(){writefln(l);} >dmd -l test.d >cp test.en.lang test.ja.lang >nano test.ja.lang >dmd test.d test.en.lang test.ja.lang >test.exe
build 3.00
ていうかコンパイラ経由でコードアナライザが早く作れないものか。 これが出来てしまえばD用Eclipseプラグインにも拍車が掛かるというもの。 きょうび本体よりも付加価値に需要があるもんだ。
ある種そういうAPIはDMが用意していいものかもな IDEがDじゃなきゃいけないなんて誰も思わないだろうし
>>192 うまく動いているというより
バッファのおかげで止まってるだけのような気がする
>>201 しかもALL自作だとパーサがコンパイラ実装の車輪になってしまう。
>>202 止めたくて止まったんだからそれでいいのでは
インテリセンス完備のIDEまだ〜?チンチン!!(AA略)
俺はもうひたすらsakuraエディタで書いているよ。 最近、CTRL+SPACEで同一ファイル内での補完ができることに気づいた。
ずっと秀丸だったけどさくらエディタ試してみたら補完機能って思ってたより美味いね それで十分だとは思わないのだけど
開いてる全部のファイルの単語から補完してくれるxyzzy万歳。
へたれなのでviやemacsのキーバインドがどうにも覚えられない
>209 roguelikeやればとりあえずviでのカーソル移動はスムーズに行えるぞ viはナナメ移動できないけど
まあ新しい言語覚えるようなもんだ。 ただ、emacsやviの場合は、操作系統だけじゃなくて機能も 変わってくるから、より移行が大変なんだけどな。 忘れては覚えなおすのを慣れるまで続ける必要はある。 たしか、emacsやvimにはチュートリアルがついてくるから、 それを出す方法さえ覚えておけばなんとか。 xyzzyは、/++/形のコメントに対応してるd-modeがないから お勧めできないけどな。
業務PGはとりあえずviは覚えとか無いと苦労すると思うよ 今時どこでもWin開発Lin鯖だけど、設定ファイル弄るのにいちいちFTP使いたくないでしょ
213 :
209 :2006/06/15(木) 16:43:37
基本的な編集機能はどちらも覚えてあるんだけど,コピペとか検索とかすぐ忘れる だよね あぼーん
>>212 最近のLinuxて今でもviなん?
なんて、俺はBSDなんだけど
すれ違い乙
大抵のサーバーにはあったら嬉しいと無くては困るの両方が入ってる。 これはシェル、エディタあたりには共通して言える事柄だね。(Linuxだとシェルは固定だろうけど)
EclipseでJavaな環境を味わってしまったらDがツラくてたまりません。 Javaのプラグイン改造してなんとかDに対応できんものか。
そういえばdoxygenってDのコードをパースしてるんでは
writefで%xの表示がおかしいから調べてたら前スレ937で既出だった。 いつ直るんだろうこれ…(´・ω・`) このバグを回避するためのphobosの修正箇所とかわかる人いない?
しばらくの間はアダプタパターンでごまかしとけば?
v161
おーなんか無名関数が劇的に書きやすくなってるな。 関数型言語臭が非常に強くなったw
D 0.161 Jun 19, 2006 New/Changed Features * Added opIn_r operator overload. * Function return types for lambda delegates can now be inferred. * delegate keyword now optional for lambda delegates. * Shadowing local variable declarations is now deprecated. * New function template syntax.
loop(5, 100, { d += 1; } ); イイヨーイイヨー
>>224 Rubyのブロック構文みたいだw
すげー
Dやりたくなってきたw
あー 変更がわかりやすいサンプルコードも一緒に書いて欲しい(T-T せめてドキュメントのどこが変化したのか簡単にわかればなぁ // * New function template syntax. // // template Square(T) // { // T Square(T t) // { // return t * t; // } // } // これがこんな感じになったらしい T Square(T)(T t) { return t * t; }
シンプルになっていいとは思うが、C++化も著しいような templateが名前空間を持つって意味無かったな
まだ全然わかってないがこの二つで実現されてる気がする 間違ってたらすまんw // * Function return types for lambda delegates can now be inferred. // * delegate keyword now optional for lambda delegates. double test() { double d = 7.6; float f = 2.3; void loop(int k, int j, void delegate() statement) { for (int i = k; i < j; i++) { statement(); } } loop(5, 100, { d += 1; } ); loop(3, 10, { f += 3; } ); return d + f; }
>>226 Square(3);
で使えるのは前からだっけ?
>>227 関数テンプレートの暗黙のインスタンス化が楽になったけど(↓)
T min(T)(T a, T b)
{
return a<b?a:b;
}
void main()
{
dout.writef(min(10,20));
}
その名前空間の話と両立させることはできないのかな
loopってなんなの?
233 :
231 :2006/06/20(火) 21:57:07
あれ?普通にできますね orz 脊髄反射だめぽ
>>231 (限定的な)Implicit template instantiationの対象となる関数テンプレートが、
新しい文法で書かれたものになるってことではないかと。
言語の機能がかなり増えてきたな・・・ そろそろD言語プログラミングの手引きになる良い本が欲しくなってきた 気が早いのはわかってるけどww 今のところtemplate周りはC++の本,あとはC#の本で代用するしかないのが悲しい
237 :
デフォルトの名無しさん :2006/06/24(土) 11:58:45
βの間に次のαが飛び込んでくるからverが1にならないのか。 Javaとかでは決して出来ない仕様の作り方だ。 いつ仕様をコミットする気なのか聞いてみて欲しいw
言語開発をDigital Marsが一手で進めているからこそできる芸当だよな。 プログラマなんだから、開発のやめどころを計る能力はあると思う。 DMが満足するまでにD言語がどこまで行ってしまうのか楽しみ。皮肉抜きで。
基本データ型から派生して値の範囲や配列長の制約とかを定義できるようなのがサポートされたらイイナ。 いまそこら辺を担ってるのがクラスの不変条件だけど、 基本データ型の変数をメンバに持つクラスが変数の値の範囲の責任を持つんじゃなくて メンバとして扱われる変数の型が範囲の責任を持つような感じ。
>>239 クラスってユーザ定義の「型」でしょ
あとはオペレータオーバーロードでごまかせればそれでいいんじゃね?
どこまで基本型を模倣するかはクラスの設計者が考えたらいいんだし
>>237-238 思うんだが「とりあえずver1にする」の段階まで全然来てないんじゃないのか
うぉるたんは
> 今後の方向性
> 以下の新しい機能のDへの実装を計画していますが、 詳細はまだ定まっていません:
> Templateの継承
> 配列演算
> 配列リテラル
も構想してるだけの段階だろ
IDEがどうのこうの言うのはまだ早いってのと同じで
ver1マダー?
ってのは時期尚早じゃね?
241 :
デフォルトの名無しさん :2006/06/25(日) 01:53:31
0.99の時の淡い期待があったころが懐かしいw もはや永遠の17歳よろしく永遠のβと呼ばれるポジションに来ている
それでも0.999なら…0.999ならなんとかしてくれる(?)
0.1000になります
それは正規化ですよね
DでXML弄りたい場合って何使うのが普通?
>>240 つーか例えば
「型Fooはint型の変数valueをメンバに持ち、外部から参照すると
valueの範囲が常に0〜31であることを保証するクラスである」
ではなくて
「型Fooは0〜31の範囲の値をとり得るint型である」
みたいな簡単な定義ができるようなのがサポートされたらイイナって話。
基本型の値に対する契約表明みたいな位置づけで。
簡単な定義を簡単に記述できるわけだし、
Foo is intだから変数は参照型じゃなくて値型として処理できるし。
>>245 俺の作った中途半端なSAXがあるけど欲しい?
>>246 コンパイラが認識可能なアノテーションみたいな感じかな
// こうじゃなくて int a; assert(a>=0 && a<=31); // こんなふうに書いて int b {assert(b>=0 && b<=31);}; b = 20; // 書き込みは不変条件評価 int c = b; // 読み込みは評価せず // って感じかね。後はtypedefを拡張して typedef int Foo(value) {assert(value>=0 && value<=31);}; // とか。やりたいことはわかる // アスペクト指向を基本型でもできるのが近いかもしれない
>>249 そのtypedefを拡張ってのがかなりイメージに近いかな。
typedef+invariantな「もっと強い型」がホッスィ。
(alias+invariantでもいいけど)
業務ルール的な値の範囲チェックや配列長チェックなどの他の面でも、
その型の変数の値を参照するときには「不変条件が守られている」ことが
証明(デバッグ時に限り?)されてるからいろいろと便利になると思ふ。
×配列長チェックなどの他の面でも、 ○配列長チェックなどの面の他にも、
デバッグ時に限らないと性能低下が痛いしね
普通なら、関数でラップするか、クラス作るかってとこだな・・
ならunittestでいいじゃん
pascalなら部分範囲型というものがデフォルトで存在してるんだが。
しかしこれはpascalじゃないんだ。
typedef int xint = 10; で、初期値が指定できるので、 typedef int xint[0,100] = 10; みたいな感じでできたらいいなあ。
>>257 知ってたらスマソが
typedef int[0,100] xint = 10;
じゃなくて
typedef int[100] xint = 10;
だったら現状でもできるよ。
xintが0から100まで(100-1まで?)の値しかとらないようにしたいということではないのか
>>256 部分範囲型があるのと、実際に範囲チェックしてくれるのとは別だけどな
Delphiとか('A`)
ああDelphiはコンパイルオプションで範囲チェックを無しにできるな。 範囲チェックすると普通に遅くなるし。
263 :
デフォルトの名無しさん :2006/06/28(水) 00:02:44
>>245 indigo.xml.expat はなかなかよく働いてくれています。
D言語の構造体ってアクセス属性の指定ちゃんと効くのか… 以前どうなるか試したら構造体のprivateメンバに自由にアクセスできたから それ以来ずっと構造体のメンバにアクセス属性指定しても無視されるものなのかと思ってた。 同じモジュール内で試したらそりゃ自由にアクセスできる罠。
モジュールとか考えないで気負わずに書き始めて一つのファイルに全部書いたら アクセス指定が意味ないことに後で気づいたりする ファイル内で名前空間みたいにモジュール空間を指定できたらいいのになー 考えたことなかったけどモジュール空間の分割ってできたっけ?
templateで名前空間区切って、mixinで導入、とか。
なるほど でもやっぱり分割はできないね
言語仕様で「Only one module per file」って決まっちゃってるからファイル内モジュール空間の分割はムリポ。 んでprivateメンバにアクセスできる以上スコープ分割での誤魔化しは根本的な解決にならない。 この場合は素直にファイル分割じゃないかな。 アクセス指定が意味ないなーって状況に陥るってことは結合度の低いもんが混じっちゃってるんでしょ。
ver1.0マダーッ?
>>268 別の考え方をするなら、モジュールの規模を、
アクセスコントロールなしでもミスを起こさない程度にすべしってことでもあるかな。
で、モジュールはパッケージでまとめて、protectedをうまく使いましょうね、 ということか。
1ファイル1クラスって素敵じゃん
int main(){ if( 0 == 1 ){ return 0; } } 1.61でコンパイルすると Error 42: Symbol Undefined __d_assert_msg --- errorlevel 1 というエラーがでるようです。(1.60では普通に通る) 明らかにソースはおかしいですがシンタックスエラーにはならないようですね。
275 :
デフォルトの名無しさん :2006/06/28(水) 22:05:50
どなたか、yaccとlexみたいなものを書いていただけないでしょうか。 あの、Ragel State Machine Compiler みたいなもので お茶をにごされてもちょっとなので。 ANTLRっぽいOOしているものは、はっきり言ってイヤです。
すでにyaccやらlexやらその亜種やら派生種やらが多数あるのにあえてDで作る意味って何?
ガベコレ
278 :
デフォルトの名無しさん :2006/06/29(木) 00:35:29
>>276 Dでyaccやlexを作るのではなく、Dとの親和性の高いコードを吐くyaccやlexです。
まず、ハイスペックな人をDの方へ誘致すべきだと思うのですが、
そのためには、このあたりのツールは必須かとおもいますた。
ハイスペックな人っていうのは、 Conroe2 ES版とかを使っている人の事か?
280 :
デフォルトの名無しさん :2006/06/29(木) 02:22:08
いや、CPUぐらいは自作のやつをつかっている人のことだろ CPU:自作 (3.75GHz) MEMORY:2048MB PC2-4200 DDR2-SDRAM メモリー HDD:シリアルATA 1.2TB(3個x400GB) 7200rpm 8M ハードディスク グラフィックス:256MB RADEON X1900GT ビデオカード M/B:ASUS P5WD2-E ATX マザーボード
>CPUぐらいは自作
>CPUぐらいは自作 父さん・・・酸素欠乏症にかかって・・・
ネタだとは思うけど。 ネタでも86互換ってのは悲しい現実。
implib無くね?
285 :
デフォルトの名無しさん :2006/06/29(木) 07:06:32
>>275 > ANTLRっぽいOOしているものは、はっきり言ってイヤです。
OOっぽいコードを吐くかどうかは、はっきり言ってどうでもいい気がするんだが。
どうせParser Generatorを使う場合、生成されたコードを利用するだけなわけだし。
というかむしろ、素のyaccみたいにグローバル変数使いまくりでreentrantじゃない
コード吐かれる方がよっぽど困るような。
同感
287 :
デフォルトの名無しさん :2006/06/29(木) 12:36:57
D言語には=演算子のオーバーロードが組み込まれてないんだけど =演算子のオーバーロードに対するWalterタンの見解とか記事とか 過去のD言語スレで話題になったとかない? 非常に知りたいことなんだけど=が無視されてググれん。
290 :
289 :2006/06/29(木) 20:56:08
スマソ。
>>289 書き込んだ後引き続き探したら即効で見つけた。
291 :
save :2006/06/29(木) 22:02:02
DMD 0.162
0.162でwin32.windows(
ttp://hp.vector.co.jp/authors/VA028375/ )をimportすると
"0x0040a1ce"の命令が"0x00000000"のメモリを参照しました。メモリが"written"になることはできませんでした。
とかいうエラーが出るんですが‥‥ 0.161からなんか変わったんですかね。
修正履歴見るとバグ修正しかないように思えますけど。
そういうことだったのか!
>>294 トンクス、漏れは0.161に戻す。
たいしたことじゃないんですけど教えてください 三項演算子の条件で前置インクリメントしたときに 実行ステートメントが期待通りにならないんですけどそういうものなんですか
お前の期待通りとやらがどういった動作なのか他人には分からんと思う。
>>296 とりあえず、問題の発生する三項演算子の式と、それの期待する動作を書け。
>>296 C言語で同じ式を書けば違う動作をするんだろうな?
>>297-299 例えばこんなの
int i=0;
printf(++i?"%d\n":"",i);
期待する出力は1なんだが0が出力される
C、JAVAで同様のコードを書くとちゃんと1が出力される
>>300 C,Dでは引数の評価順序は実装依存。
そんなコードを書いてはいけない。
Javaは左から右と決まっているのな。知らんかった。
>>300 それは動作不定の書いてはいけないコード
OBJ[] o = new OBJ[0]; o ~= new OBJ; これって有効? この時点でのo.lengthは1だよね
std.gc.disable されてるときは delete したときに gc 通してでも開放して欲しいとか思ったり・・・ でもやっぱりそんな事すると重くなるのかな
.hからのマクロの変換が面倒杉 alias(T)(T a) G_TYPE_CHECK_INSTANCE_CAST(a, GTK_TYPE_BIN, GtkBin) GTK_BIN(a);のような事ができればいいのになぁ…
309 :
307 :2006/07/09(日) 23:08:54
そうだ、マクロ残したままにしてコンパイル前にgcc -Eをすればいいのか。#includeのせいでややこしくなるのが問題だけど。
>>284 C++のページからBasic Utilities 落とせ。
あと、要するにOMF形式なのでborland c++やopen watcomのimplibもつかえる
std.stream に truncate が無いけど仕様? もしかして他のライブラリの中だったりする?
モナドってこんな感じだっけ? T[] monad(T)(T[] a,T function(T) f){ T[] re; foreach(T b;a){ re~=f(b); } return re; } uint a(uint a){ return a+2; } uint b(uint a){ return a-1; } void main(){ static uint[] t=[0,1,2]; writefln(monad(monad(t,&a),&b)); }
× T[] monad(T)(T[] a,T function(T) f) ○ S[] monad(T,S)(T[] a,S[] function(T) f) ならリストモナドのbindだな。
どーでもいいことだが、 writefln(monad(monad(t,&a),&b)); は t.monad(&a).monad(&b).writefln(); と書きたいところだ。
こんなところにもモナドの波が 結局,合成関数と思ってていいんだろうか よくわからん
gdc 0.19
Download here:
http://sourceforge.net/project/showfiles.php?group_id=154306 Release Notes for 0.19
* Fixed D Bugzilla bugs 141(gdc), 157, 162, 164, 171, 174, 175,
192, 229
* Applied Dave Fladebo's suggestion for -O3 in gdmd
* Updated to DMD 0.162
* The version symbol for FreeBSD is now "freebsd"
* Enabled std.loader for FreeBSD
* Implement offsetof in assembler
* Support building with Apple's GCC (4.0 only)
* Fix parallel builds
これって何時になったらver1.0がでるの? このペースだと、でる頃には俺は爺になっていて 静かに盆栽でもいじってるよ。
もうそのネタ秋田。永遠のβだから心配すんな。 見切りでライブラリ作ったら余裕でごみ化させてくれるぞ。
こりゃもうウォルターに発展的解散を要求して開発主体をコミュニティーに移行する事を迫るしかないな。 PMだけならやってもいいけど。
そういう糞の最小公約数的なものになりかねない 開発形態よりは独断専行の現状の方が期待が持てる。
最小公約数?
>317 余生をD言語をいじって過ごす生活、悪くないじゃん。 ・・・そうか?
>>321 1にしかならないという皮肉なのか、素ボケなのか、どっちだろうね。
素ボケで、最大公約数の間違い ってどうでもいいよね。すまんかった。
ここはウォルターたんのはちゃ☆めちゃぶりに萌えるスレじゃなかったのか…
そろそろこれで仕事してみたいんだが。 まあネイティブで高級OOは諦めろってことだね
327 :
デフォルトの名無しさん :2006/07/18(火) 08:35:32
まだだ!まだあきらめんぞ! STLのalgorithmとか,lokiのtypelist,functorとか, boostのbindとかのDの実装を見かける度に色々と期待してるんだがなあ
sage忘れた Dが大躍進するロードマップが見えないんだよなぁ まずは1.0になることからか…
JavaやC#に対してアドバンテージがないとね BetterThanC++程度じゃだめじゃない?
欲しいのはそのBetterThanC++なんだけど。 俺は今のウォルターたんの独壇場を支持してるから、 どこぞの企業に捕らわれるのは気が進まないので コミュニティに力をつけてもらうしかないかなと。
更新履歴 0.150 0.151 0.152 0.153 0.154 ナメクジかおまえは。
日本のD言語使いってどのぐらいいるんだろ。 1000人ぐらいいるのかな。
見えない
D言語萌えー (280) ←人数
336 :
デフォルトの名無しさん :2006/07/19(水) 04:41:48
"D言語いいよな. 大好きだよ. " -- Coredump
無駄にimportが拡張されたな public import xx;はmodule test : xx;の方が良いと思うのだが…
D 0.163 Jul 18, 2006 New/Changed Features * Object.opCmp now throws an error. Should override it if used. Breaks existing code. * Imports now default to private instead of public. Breaks existing code. * Added static imports, renamed imports, and selective importing.
デフォルトでprivateになったのは細かいけどいいんじゃないのかなあ ちゅうか Added static imports, renamed imports, and selective importing. なんだこれ どこに書いてるか探すか・・・
static import: static import hoge; インポートしたモジュールのシンボルが、名前空間に導入されないので、 hogehoge() // エラー hoge.hogehoge(); // Ok renamed import: import hoge=hagehogefuga; hoge.hogehoge(); // Ok hagehogefuga.hogehoge(); // error hogehoge() // error selective import: import hoge : hogehoge, hagehage = hogehuge; hogehoge(); // Ok hagehage(); // Ok hogehuga(); // error
とてもありがたいのだがものすごくまぎらわしいなw
なんでもっとシンプルにしようとしないんだ。
そのうち消えるんじゃない? boolって以前bitだった気がしたけど違ったっけ?
>343 bitのaliasだったと思う。
昔 bit <- 組み込み型 alias bit bool 今 bool <- 組み込み型 alias bool bit まぁ大した差ではないな。
これから仕様変更する予定で公開されている仕様一覧みたいなのってないのかな
これから346が作るらしいよ
>>348 一ヶ月以上、経ってるから
確認すべきだな
管理人さん生きてますかー
>>348 夏休みの宿題はギリギリになって慌てないように、早めにやっておくんだよ。
ping japanese.document.d ...
>>347 作るにしてもその元になる情報が公開されているのか
いないのかさえ知らないから出た質問なのだ
今後の方向性 以下の新しい機能のDへの実装を計画していますが、 詳細はまだ定まっていません: 1. Templateの継承 2. 配列演算 3. 配列リテラル -- これくらいしかわからんぞ これらのどんなところが嬉しいのか考えてみようっと
Unofficial D wish listに色々あるけど…
「C++でnew/deleteでメモリを自己管理するの」と 「C++でpoolして再利用」 ってどっちが早いんだ? Dではpoolじゃないとゲームとか止まるんだけど、ちょっと気になってみた。
でもそれが可能なら auto の型推論の存在理由がなくなってしまうのか auto x = new A(); A x(); 下の方がタイプ数少ないのに下にしてないってことは不可能ってことなのかなー.
>>358 下のやつは不可能でしょ。
returnType functionHoge();
と区別がつかない。
関数内関数が定義できるから不可能なのか・・・
Cでも関数内で関数の宣言は出来るでしょ。
363 :
デフォルトの名無しさん :2006/07/22(土) 12:42:02
ん そうだっけ… じゃあ何でですか?
何が疑問かわかんねーよアホ
type identifier (argument_list) ; というのは、関数の宣言。 関数の定義は、 type identifier (argument_list) { function_body } 関数の定義とは区別つくけど、宣言と区別がつかないからダメって話じゃないの?
すまんすまん CでもC++でも区別が付くのにDでダメなのは何でかなと思って
>>366 C/C++でも区別つかねーよ。
int x();とでもコンパイラしてみ
0.163で追加された selective importだけど、 public としてしかimportされないがな。orz private alias int hoge; と書いてもprivateなaliasにならない。orz
Internal Server Error でみえないけど、D 0,163 が D1.0 だぜってやつ?
Article Numberで調べると、 Subject: Is D 0.163 D 1.0? From: Walter Bright Date: Sat, 22 Jul 2006 00:30:35 -0700 I think the title says it all. なんか、中途半端な1.0だなあ、、、
372 :
848 :2006/07/23(日) 12:46:09
お、ということは本格的にライブラリとか開発ツールとかに手を付けてよかとということか!?
>>371 同意。
!inとかarray initialization/literalsとかforeachの拡張だとかループのretryだとかネスト関数用の多段階returnとか多段階breakとかcのヘッダファイルを直接インポートできるようにするとかして欲しいし。
374 :
848 :2006/07/23(日) 14:28:59
>cのヘッダファイルを直接インポート これやるとなるとマクロとかを解析しなくちゃならないから せっかくコンパイルがちょっぱやなのに 少しの手間を省くためにCコンパイラ並みに遅くなったら嫌過ぎる。 そのうち誰かがツールを作るんじゃね?
直接インポートはいらん。マクロを使ってるものだとどうしても確認する必要はあるし、 トラブルの元だと思う。 ネスト関数からの多段階returnって要るかなあ? breakはラベル付きbreakで代用すればいいらしい。
>>367 あれ・・・デフォルトコンストラクタの呼び出しなら A x(); でも A x;
でもいいのかと思ったら前者は駄目なのか・・・大丈夫なんだと思ってたよ orz
吊ってきます
>>376 低脳は永遠に黙ってれば恥かかずに済むってことを覚えとけ
extern(Windows)な関数ポインタへキャストする場合はどう書くの? import std.c.windows.windows; HMODULE hModule = LoadLibraryA("UNLHA32.DLL"); //WORD WINAPI UnlhaGetVersion(VOID) extern(Windows) short function() UnlhaGetVersion_; UnlhaGetVersion_ = cast(???) GetProcAddress(hModule,"UnlhaGetVersion"); ???の部分。 とりあえず、受け側をキャストして誤魔化したけど *(cast(void**)&UnlhaGetVersion_) = GetProcAddress(hModule,"UnlhaGetVersion");
UnlhaGetVersion_ = cast(short function())GetProcAddress(hModule,"UnlhaGetVersion"); で良くね?
関数の呼び出し規約をムリヤリキャストしてちゃんと動くものなのか?
cast(typeof(UnlhaGetVersion_))
正直フリーソフトって作るものが無いから Dがどれだけ便利でも仕事に使えなきゃ触らないかも 試しにサーバ作ってみたけど置く場所ないし
>正直フリーソフトって作るものが無いから 発想が貧困なだけだろ
作りたいものがあるけど今の仕様だとちょっとなぁ と二の足を踏んでいる
>>383 まず必要なものが存在しない
他人の需要は俺の需要じゃないからな
>>385 >必要なものが存在しない
何作りたいのさ?
387 :
378 :2006/07/23(日) 18:50:41
>>386 満足している状態から、さらに必要なものを作れる奴って凄いと思う。
俺ちょっと作りたいもの見えてきた。 D言語でWindowsサービスとか作れないかな? いやWinAPIが使えるんだから当然できるのか
>>389 作れないかな?と思う前にコードを書くんだ。
>>390 言いたい事は分かるがそれってちょっとどうよ?
お前の日記帳じゃないんだから 糞の役にも立たないお前のやりたいことを書くくらいなら 「サービスの作り方inD」実践の報告を投稿するくらいしろ という話だと解釈した。
わかったよ やればいいんだろ
394 :
デフォルトの名無しさん :2006/07/25(火) 18:08:26
一番いいGUIライブラリってDWTってのでOK?
DFLじゃね?
SDLの方が強い
じゃぁおれは wxD で
じゃあ俺はXlibな
WinAPIということで
>>392 話はわかるがなあ
2chで役に立つものを期待するのもどうかと思うけどなw
もっと無駄なことしようだぜ
>>394 はどういう基準でいいと言っているのかわからないから
多分、情報を手に入れやすい、設計が優れている、 デファクトスタンダードになりえて覚えなおさなくて済みそうな、 GUIライブラリだと思う。
てかいまさらWinの開発なんてVS以外考えられないっしょ。 さっさとLinuxメインになれ
wxDがwx系を省みないほど洗練されればこれ一本でいいんだが
WinはVisual Studio Expressが無料配布だからそっちつかえってこったな
wxD はビルダーがないんだー
ビルダーなんか飾りだろ
gtkのヘッダ変換してgladeを改造して使えるようにして欲しいなぁ…
絶望した。 ファイルを開いたり新規作成したりすらできんD用フォームデザイナに絶望した。 英文化圏オンリー仕様マジダメポ。
ところで、signal って扱えないの?
>>410 そんなもんに頼らんでもプログラム書けるだろ?
>>412 ツールの存在意義って分かってる?
何のためにツールが生み出されるか分からないからそんなこと書いてんの?
それとも単なる宗教論?
フォームを表示するたった数行のコードを提示するだけで
>>414 オシマイだねー
import dfl.all;
int main()
{
Form form = new Form;
form.text = "title";
Application.run(form);
return 0;
}
//ビルドコマンドだよ^^
//build main.d dfl.lib -gui -clean -Ttest
次は
「これくらいの規模だったらツールに頼らなくても良かったし、
生APIでもプログラム書けるだろう。お前には無理だろうがな」
とでも言うのかなー?
>>410 D弄ってると色んなところで「あー日本語通らねえー」っていう事態に遭遇するよな。
切ない。
よく使い捨てツールを作るんだが すぐぶち当たる日本語ファイル名の扱いのせいで何度も絶望してるお orz それにしてもなんでだろうな 仕事は辛いものだ辛くないといけないんだと思ってる人が未だにいるのは 簡単にこなされたらアイデンティティーを失うと思うのかなぁ リアルでも楽な方法を覚えることに拒否反応を示す人いるし・・・ 困ったもんだ
linuxだと日本語問題にぶつからないので楽。 ただGUIライブラリがないけど。 #せめてversion(Windows)をlinux向けにコンパイルしたphobos+wineのライブラリ+DFLが使えるといいんだけど…
>>418 嘘こけ
euc,utf-8の2つだけでもお腹一杯になれるぞ
Linuxって日本語のファイル名って滅多につけないから、 そういう意味では日本語問題にぶつからないんじゃね?
>>415 簡単にできることをそんなに誇らしげに話されてもな……
WinはVisual Studio Expressが無料配布だからそっちつかえってこったな
>>421 お前みたいなカスを遠ざけるためにUNIX界は鉄の掟を敷いている。
二度と来るなよ、基地外。
なんかわからんけど原理主義っぽい人がいる気がする
UNIX界がどうのって話だと、ツール使うのは軟弱者って空気がある気がするけど。 俺たちはプログラマであって、アプリを使う人じゃないみたいな。 まあ、そんな事はどうでもよくて、ヌルポは3回までだから細心の注意を払うように。
【どうみても〜だ】 立てられる仮説が一つしかない自身の貧困な想像力を、極めて遠回しに自嘲した表現。
最近は手軽に避諸するライトユーザーが増えてきて困る。
こうして人類は何度でも同じ過ちを繰り返すのであった で 次のバージョンアップまだー? 今のが1.0ていう話はどうなった
>>419 linuxでのeuc-jpなんかはもはや過去互換の存在だし…
まぁ将来的にずっとutf-8とも保証されてないけど。
>>428 【どうみても〜だ】
【どうみても〜です。本当にありがとうございました。】
という慣用句とは別物だお
>>431 Apache が UTF-8 デフォルトになっていて
ブラウザで開いたときのエンコード誤検出がやたら増えた
結局デフォルト変えて使ってて
なんだかなぁと思う今日この頃
スレ違いスマソ
そもそもの論争とは関係ない所を突いてるし、どちらかと言うとピント外してるのは…
~~ってトークンは何を意味するの? 言語仕様→字句のトークン一覧にある(本家のほうも)んだけど そのトークンの意味を解説してる箇所を見つけられなかった。
>>436 予約。
一時実装されたけどすぐ撤回された。
Match式だったっけ? 正規表現比較というとんでもない演算子。
ただの演算子にしては実装内容が高レベル過ぎるとな
Perlの=~みたいなもん?
Perl並に正規表現が埋め込めるようになったら嬉しい
>>436 でも、リファレンスから削除されてないのはエラッタっぽいけどな。
#lineが出てきたらエディタとかの行番号ってどう表現したらいいの? ↓こんな感じ? 0001 : int main() 0002 : { 0003 : int #line 6 0006 : x; 0005 : return 0; 0006 : } Filespecが指定された時の表現方法なんて見当もつかないし、#lineは無視して 普通に4行目としちゃっていいのかな?
エディタが気にするようなものじゃないよ。
>>444 D言語のマクロとか他の処理系からDへのコンバータとかの出力を処理するときに
コンパイラのエラーメッセージが原始言語の行と一致させるための機構だから
エディタが気にしてもしょうがないよ。
Dが使えるIDEってないの?
またその話か
今となってはもう
>>447 の疑問って自分で調べりゃ分かる段階まで来てるんだよね。
エなんとか
え? え、え、エート、え express! Visiual D 2005 Express Editionか! 最後はやっぱりMSかぁ。
「ないの?」って聞かれてんだから正しい解答は「あるよ」じゃね?
えー
山下大将を見習え
OpAssignが無いと柔軟性に欠けるな。 String str; EvenNumber num; str.text = "text"; //str = "text" と記述したい num.value = 10; //num = 10 と記述したい ↑のように基本型の模倣が中途半端になる。 まあ「〜と記述したい」なんてただのエゴだし、そんぐらいしか文句はないけど。
でもテンプレート関係で… クラスと構造体が同じように抜えないことに不満を感じている人はあまりいないのかな? newしなきゃいけないのとしてはいけないのと。 実は問題にならなかったりするとか…
IDEは一応ある
>>457 ?
構造体が派生できない以外はあまり問題ないんじゃね?
一応書いておくと、こういうことをやろうとしていたみたい でもすまん、考え直したら、何とでも代替手段があるよね class X(T) { T foo; this() { foo = new T; } } void main() { new X!(C); new X!(S); // error }
日増しに言語仕様が腐っていってるな。
C++言語からいらない機能を排除してC、Java、C#の良いとこを付け加え さらにつけたい機能を節操なしに貪欲に付け加えた言語、それがD言語
機能がある分には問題ない。 害はほとんどない上、使う/使わないは任意で選べる。 漏れとしてはC++から(漏れにとって)いる機能まで排除したのが問題。 全ての規則に例外があるということをよくわかっている、とか言ってgotoまで実装してるくせに なんで代入演算子のオーバーロードが外されてるんだ。
opAssignだけは欲しい。
代入には変な仕掛けが無いほうが統一されていてわかりやすくない?
確か、GCがあるし、クラスのインスタンス変数は参照だしで、 メモリ管理上、代入演算子をオーバーロードしなければならない必要性がないから、らしい。
Cでgotoを使っていた場面のほとんどで gotoは不要になります。 しかしDは、全ての規則に例外がある、 ということをよくわかっている現実のプログラマのための現実的な言語です。 もちろんDはgotoに対応しています!
gotoは制御構文だしなあ
プロパティ名がクラス名または構造体名、共用体名と等しい場合はプロパティを省略できます。 //例 String str; str = "text"; //str.String = "text"; と等価 ('A`)ネタダケドナ
>>473 >>470 はDにgotoが含まれている理由(の日本語訳)。
gotoがそういう理由で言語仕様に含まれてるんだったら
同じ論理を以ってopAssignが含まれてていいじゃん、とgotoを妬んでる様子。
opSliceAssignで妥協すれば? str[] = "text"; みたいに
Get〜 Set〜 :: ->等を使う苦痛、って言えば判る人は判ってくれるかな。 まあこれ以上食い下がっても言語仕様が変わる訳ではないし、 最強のopAssignに代わる合理的な妥協案を探していったほうがよっぽど建設的だな。 str << "text";
具体的にどんな用途でopAssignが必要だと思うわけ?
エゴは具体的な理由とは言いがたいな。 具体的にどんな用途でopAssignを使おうと思ってるのか、さぁどうぞ。
えっ?
だから
>>456 で完結してね?
>>456 のコメント文の用途で使おうと思ってんじゃ(*´・ω・)(・ω・`*)ネーの?
その用途で使用することをを
>>456 の言葉を借りてエゴと形容したが。
読んだら自説を引っ込めなきゃいけなくなるのに 読むわけないだろ。
あれが理由? 仮にopAssignが定義出来たとしてさぁ class Foo{ Foo opAssign(Foo f); } Foo f; f = new Foo(); は一体どうなるのか考えてみようよ。 C++でもポインタに代入演算子は定義できないのと一緒で、もし定義できたら破綻してしまうだろ。
>>483 > C++でもポインタに代入演算子は定義できないのと一緒で、もし定義できたら破綻してしまうだろ。
Dのクラスの参照はポインタじゃないから、別に破綻しないだろ。
基本型の模倣するって言ってるのに、構造体じゃなくて
クラスを使ってnewさせるのはどんな理由があるんだろう。
>>483 それやると未割り当てのfのopAssignが呼ばれてエラーが出るだろうね。
でも何がどう破綻するのか判らん。
具体的にどんな意図で自身のクラスオブジェクトの参照を引数にしたopAssignを定義し
どんな用途で
>>483 みたいな使い方しようと思ってるのかも判らんし。
※
class Bar : Foo {}
Foo f = new Bar;
で割り当てはできそうかなーと思ったけど言語仕様上opAssign(Foo f)にマッチしちゃうな。
この手のは
>>484 の案でおkじゃね?
やっぱ美しくないからいらなくね?
いらない理由に美しさを持ち出すといる派と理由が等価になって水掛け論になる
キャスト演算子のオーバーロードはー?
議論だと思っているのは
>>488 だけだったりしてなw
>>490 水掛け論の論は持論でも暴論でも宗教論でもよくね?
なんで議論だと思ってんの?
なんか俺の心の琴線に触れる書き込みがあったらしくて、朝っぱらから壊れてたわ。 もし不愉快になってたらごめんな。そんじゃ、会社いってくらー
ああ、なるほど、キャスト演算子のオーバーロード使えばいいのか。 明示的に書けるわなぁ。
なるほど。 Foo opCast(char[] a){ Foo f=new Foo; f.text=a; return f; } Foo f=cast(Foo)"test"; ってことか。 >there can be only one opCast per struct or class だからコンパイルは通らないし、キャストのオーバーロードがFoo opCast(char[] a)では無くvoid opCast(char[] a, out Foo f)と書けないと複数宣言ができないけど。
解説見る限りopCastを使って Foo f=cast(Foo)"test"; って実現できないんじゃね? Foo opCast() { /* 文字列を格納したFoo型オブジェクトの参照を返す */ } を文字列リテラルのほうに実装できるんなら話は別だが。
Dの配列はなんか嫌い。
プロファイラとIDE用の参照リストはまだですか?
プロファイラって-profileでコードに埋め込まれる性能見積もり用のやつ?
500 :
497 :2006/08/12(土) 01:38:43
たぶんそれです。 サイトの更新されてるの知らなかったorz 後は自動補完に使える参照リストですね。
D 0.164
D 1.001 じゃなかったのか・・・。
>502 追加機能はddocだけだからいいじゃない
C++と比較すると速度的にだいぶ落ちる?
>>504 Cと比べてC++が遅くなるのと同程度にDもC++と比べて遅くなる。
配列周りが遅いだけ。
>>504 仕様かためとバグ潰しに奔走している言語に何を期待してるの?
動的配列の管理GCに丸投げしてると物凄く遅くなったけど、こまめにdeleteしてたら C++(dmc+stlport5.1)でstd::vector使って同じ処理させたときと比較して5倍くらい速くなりました。 メモリの管理はGCに任せろ!って言葉信じてたせいでD駄目じゃんって思いかけてましたよ・・・ ところでDで作ったアプリケーションが2バイト文字を引数として取ってくれる時と くれない時があるのでおかしいなと思ってたんですが、理由をご存知の方いません? module argtest; import std.c.stdio; int main(char[][] args) { foreach( index, argv; args ) { printf("args[%d] = %.*s\n",index,argv); } return 0; } 結果: >argtest あ a aあ あ args[0] = (実行ファイルのパス) args[1] = a args[2] = aあ args[3] = あ //なぜか1番目の引数がなかったことにされている。 //3番4番は全角文字交じり/全角文字のみなのに正常に認識されているので //全角文字を認識できていないわけではなさそう。 dmcでも全角文字が混じってると認識しなかったりするんですよね。
過去ログくらい読めよ
>>509 配列の要素をコピーして使い終わったら捨てて、って使い方してない?
以前配列処理でそんな使い方してたら極端に速度が落ちたけど
スライス使って参照で処理するような実装に変えたら問題解決した。
512 :
511 :2006/08/13(日) 09:09:31
511文章が言葉足らずだった。 ループ処理とかで巨大な配列の一部をコピーして動的配列に代入、使い終わったらその動的配列の内容を捨てる。 ↑ これがめちゃくちゃ速度落ちた。 ループ処理とかで巨大な配列の一部の参照をスライス使って動的配列に代入、使い終わったらその動的配列の内容を捨てる。 ↑ 問題解決した。 こう言いたかった。
>>510 どのくらい過去でしょうか。Part8から興味を持っての参加でしたが、
「英語圏しか想定していないものは駄目だ」みたいな話を見かけた印象しかなくて。
日々仕様が変わるようなのであまり古い情報参照してもしょうがないかもと思って
Part7以前のスレは追いかけてません。申し訳ない。
コマンドラインシェル自体がUTF-8に対応してないから出来なくて当然なのかなとは思ってましたけど、
dmcで-Bj -j0つけても同じ結果になったので、そもそもDigitalMars製品自体、全角文字コードの使用が想定外と考えて
引数に全角文字を与えないようにして問題を回避しています。
>>511 8MBのファイルから要素を読み込んで配列に格納して色々と処理をし、終わったらdeleteせずに次のファイルを・・・
という感じでどんどんメモリを消費する形にしていたんですが、2ファイル目以降の処理が
同じことさせてる割にはやけに遅くなっていたもので変だなあと。
ログ読んでたら「巨大なメモリを確保したら明示的にdeleteすべき」と書かれていたので試したら、
やけに動作が軽くなったので驚きました。
>>513 linux(utf-8)+dmd/gdmdだと問題なし。
もしecu-jpのlinuxでも起きないとしたらdmcのバグかもね。
コマンドプロンプトをchcp 65001にするとかnkfとか通してutf-8に変換するとかしてみたらもしかしたら大丈夫かもしれない。
>>513 Part8の
>>50-100 辺りを眺めるとこの話題が出てくる。
これなんかオススメ
↓
argtest "あ" "a" "aあ" "あ"
自分の場合Unicodeで逃げてみた。 extern(C)extern{ int _argc; wchar**_wargv; char *setlocale(int category, char *locale); } extern(C)int main(int argc,char**argv); extern(C)int wmain(int argc,wchar**argv){return main(0,null);} void main(){ setlocale(0,""); foreach(ws;_wargv[0.._argc]) printf("%S\n",ws); } こんぱいらおぷしょんに -L/EXET:NT/ENTRY:wmainCRTStartup を指定すること
>>514 あああすいません、なんか当然のようにwindows環境前提で書いてました。
chcp 65001は試したことあるんですが、それだと今度はprintfの出力すら表示されなくなったので
打つ手なしかなあとあきらめておりました。
>>515 思いっきり既出だったんですね。流し読みしてて見落としてましたorz ゴメンナサイ
引数をダブルクォートで囲むと空白文字だけが無視されると思っていましたが、
実際は囲った文字列が未加工で渡されるということでしょうか。
ひとつ賢くなれました。ありがとうございます。
>>516 こういう方法もあるんですね。今自分の使用している環境以外はあまり考えたことがなかったもので、
ロケールの話が出てくると途端にやり方がわからなくなってしまいますorz
解決のためのいろいろなアプローチがあることがわかってかなりの収穫になりました。ありがとうございました。
DってBCCとかのTLIBで出来たlibをリンク出来る? 一応phobos.libとかってあるけど、それとは同種のやつなのかわかんなくって。 BCCでも使えるライブラリで便利なのっていっぱいあるから使えたら素敵。
補完もできないIDEなんて
>>519 コンパイラの設定が分からなくてD applicationのプロジェクトが作成できない…
結局GUIライブラリはどれがいいのよ?
524 :
521 :2006/08/14(月) 12:34:54
結局コード補完が出来るIDEはまだないのか。
またIDE厨がわらわらと湧いてきたよ。 うぜぇー
>>518 使えることは使えるけど細部で異なるから、(BCC付属のやつを)そのまま使うのは実質無理だと思ったほうがいいかも?
あれが未定義これが未定義ってエラーばかりでリンク成功したことがあんまりないす。
dm製品が吐いたobjをTLIBでまとめたファイルなら問題なくつかえます。
>>526 VCのせいでIDEに幻想を持っている奴が多いからなしかたない
VCは幻想ではなく現実の製品ですが。 良いか悪いかは別としてな
実際Visual Studioは最強のIDEだとは思うよ
そんな言い方するな 「最強のIDEの一つ」くらいにしとけ
でもなあ・・・ VSは最強のIDEに一票 # 「最も〜の一つ」という日本語は逃げてるから嫌い(^^;
>>532 「に、一票」の部分に「飽くまで俺一人の意見だけどさ」という逃げを感じる。
そうか?
どうせなら「VSは最強のIDE。異論は認めん」くらいの厨っぷりをだな 発揮されても困るが
名前付き列挙体型の変数の値が列挙子のいずれかの値と等しいか否かを判定したいんだけど、 楽に判定できる方法ってDで用意されてる? 今のところメンバ総当りしか方法ないっぽい? enum Hoge { Ioge = 1, Joge = 7, Koge = 100, //... Zoge = 4649, } bool isHogeMemberValue(Hoge hogeValue) { bool result; switch (hogeValue){ //総当り比較? default: result = false; break; } return result; }
>>537 Mapに処理関数オブジェクトつっこんで呼び出すとかの方がいいんじゃないの?
>>538 トンクス。
確かにそれだと後々判定も一発で出来るしそっちの方がいいかもね。
(配列リテラル実装されてコンパイル時に登録できれば尚更)
"Hello world"サンプルからしてコンパイルこけたりするのは第一印象最悪 stdoutキーワードがわからないって何よ 小1時間調べ回ってstdin/out/err非推奨→廃止されてたって書いてあったから とりあえずimport std.stdio;とprintfで逃げたよ いくらなんでも廃止までするこたーないだろっての ところでWinXPなんだけどコンパイルしたexeが非ASCII文字化けさせない設定ある?>ALL
>540 上段については、import std.cstream;してdin/dout/derr使っとけ
今のサンプル通らないのかw それは困ったもんだなあ
>>540 toMBSzでSJISに変換してからコンソールに出力。
その辺の入門記事書いてどっかアップしようと思ってた過去の俺を思い出した。 D Memoが新しくなれば一番良いんだろうけども。 他人に配るんなら使えないが自分でテストする分にはコンソールでchcp 65001か実行結果取り込んでくれるエディタも吉。
>>527 d。dmcからD対応のlibとか作ってみる。
日本語訳者復活記念カキコ! ガンガレ
2006/08/17 の翻訳状況 * 0.164 対応作業中 o 作業場所... なかなか進まん
昨日、人生で初めて逆ナンされた。 彼女はおれがアニヲタって言っても全然気にしないって言ってくれた。 なんかすごく優しくて可愛くていい子だった。 絵を売る仕事をしているらしく、男気を見せるために思い切ってラッセンの絵を買った。 今飾ってるけどマジでかっこいい。 47万円の価値は十分にあると思う。
poseidon0.21がリリースされてからちょうど放置4ヶ月目か。
WIN32API直接呼べるのにDWT(JAVAのSWT移植)の意味は?
クール
Dのhello worldプログラムでも100kb以上するのってもしかして定数をメモリに確保してるから? それともDの機能によるもの?
(writefでもprintfでも100k超えないけどなぁ…) 実行ファイルにGCやらD標準ライブラリやら例外時の文字列やらくっ付いててでかいんだと思う。 crtdll.dllみたく共通部分を別ライブラリに分ければ実行ファイルは小さくできるけど 漏れは単体実行派だから実行ファイルのサイズには目を瞑ってる。 Dのプログラムを実行するにはDランタイムライブラリが必要です、なんてまっぴらゴメンだ、
556 :
デフォルトの名無しさん :2006/08/20(日) 22:01:53
>>550 DWTも放置されているしな。
Dのライブラリは放置されまくりんぐで、開発者にも逃げられる始末。
DってRTTIみたなのってある?
ありますが、リフレクションがない。
dmd0.165リリース
D 0.165 Aug 20, 2006 New/Changed Features * Added implicit conversion of expressions to delegates.
また省略構文を追加か…
言語仕様でリフレクションをサポートしてくれないのかな
{return func("test");}をfunc("test")と書けるようになったと。 void delegate() func(){return (ry;} void test(void delegate() delegate() a){a()();} test(func()); でもうまくいく?
565 :
564 :2006/08/21(月) 13:47:18
うまくいってないな…。 #にしてもこんなキャスト使うのかねぇ…? #char[] delegate() tmp=cast(char[] delegate())"test"; #writefln(tmp());
すごく・・・わかりにくいです・・・
余計ややこしい様な・・・
なんかこれ見てすげーなとおもた
ttp://www.digitalmars.com/d/lazy-evaluation.html bool scase(bool b, void delegate() dg)
{
if (b)
{ dg();
return true;
}
return false;
}
void cond(bool delegate()[] cases ...)
{
foreach (c; cases)
{ if (c())
break;
}
}
void foo()
{
int v = 2;
cond
(
scase(v == 1, writefln("it is 1")),
scase(v == 2, writefln("it is 2")),
scase(v == 3, writefln("it is 3")),
scase(true, writefln("it is the default"))
);
}
こういうことなんじゃないかと。 import std.string; alias int delegate() LazyInt; int tarai(LazyInt x, LazyInt y, LazyInt z){ if(x() <= y()){ return y(); }else{ return tarai(tarai(x()-1,y,z), tarai(y()-1,z,x), tarai(z()-1,x,y)); } } void main(char[][] args){ printf("%ld\n", tarai(500,250,0)); }
要するに、遅延評価をdelegateを使ってやるため、シンプルに見えるような構文をつくったよん、ということだよね。
ちなみに、Walterタソ I was going to call this 1.0 RC1, but I just could not resist adding the lazy expression evaluation. This adds one of the big capabilities of common lisp. とか言ってるよ。
前にも似たようなことをいってたような。 しかし0.165の変更はいらんなあ 余計にややこしいような・・ 同じことを色々と書けるってのはあまり好きじゃない
出たな妖怪たらいまわし
うーん 関数を書いた場所が delegate で受け取られる場所かどうか 知っていないといつ実行されるのかわからなくなるなあ 人の書いたコードを読むときにちょっと混乱しそう 遅延評価は面白いんだけどなあ
あらゆる式は、voidあるいは式の型を返すdelegateに暗黙的に変換できる。 ということらしいけど。
それなんて関数型言語?
>569だが、 void main(char[][] args){ if(args.length == 4){ printf("%d\n", tarai(atoi(args[1]), atoi(args[2]), atoi(args[3])) ); } } とやって引数渡して実行したらArrayBoundsErrorだったんだけど、 なにが原因なんだろう。
直感だけどatoiにchar*でなくてchar[]渡してるのはまずくね?
toIntとかなかったっけ?
std.conv
struct do_{ void delegate()[]dgs; static do_ opIndex(void delegate()[]dgs...){ do_ x;x.dgs = dgs;return x; } void while_(bool delegate()pred){ do foreach(x;dgs)x();while(pred()) } } void main(char[][]args){ int x = args.length; do_[ printf("Hello "), printf("World!"), printf("\n") ].while_(x-- != 0); } やべぇ、書いてみたけど何の役にも立たねぇw
ほー、面白い。いい方向性に向かってるなぁ。
>>575 これもそうだしout/inout引数もそうなんだよなあ。
>○○で受け取られる場所かどうか知っていないと混乱しそう
なんとかならんかな。
>>579 std.stringのatoiは long atoi(char[])だから大丈夫。
念のため toStringz(args[1]) とやってみたけど型不一致。
cast(int)atoi もためしたが無意味。
int x = atoi(args[1]);
int y = atoi(args[2]);
int z = atoi(args[3]);
printf("%d\n", tarai(x,y,z));
なら動くので、atoiの扱いには問題ないと思うんだよ。
>>584 importするんだから、知ることができないって状況はないから
問題ないんじゃないかな。
単に、引数の型を知ってるか否かという話でしょ。
ま、新機能が加わったばかりだから多少バギーでも仕方が無いでしょ。 2,3バージョン程度、上がると安定してくるからそれまでは我慢我慢
とりあえず、これで実行時エラーが出た。 int delegate() f(int delegate() z){ return z(); } void main(char[][] args){ f(0)(); }
588 :
587 :2006/08/21(月) 23:41:53
って、これは普通にアウトだな。 スマン、忘れてくれ。
>>585 変数受けしたら動くってのは、バグっぽいね。
tarai({return x;}, {return y;}, {return z;});
はおkで、
tarai({return atoi(args[1]);}, {return atoi(args[2]);}, {return atoi(args[3]);});
がダメってことみたいだから。
>>585 知ることが出来ないわけじゃないんだけどさ
import std.cstream;
void foo(void delegate() f)
{
f();
dout.writefln("foo");
}
void bar()
{
dout.writefln("bar");
}
void main()
{
foo( { bar(); } ); // これは delegate に見える
foo( bar() ); // そうは見えない
}
出力はどちらも普通とは逆順で
bar
foo
# ところで foo( bar() ); の行でエラーが出るんですけどバグですか?それならいいんですけど
すまん言いたいことは伝わるかもしれんが foo はこうだった orz そうじゃないと逆順にならないし void foo(void delegate() f) { dout.writefln("foo"); f(); }
うーん、上のやつはバグじゃなくて普通に使い方を 間違っているような気がしてきましたが・・・ 言いたいことは評価される順番が普通通りに行かないことがあるなあと
Haskellのせいで言語が汚染されていく
>>592 一応、式ならなんでもdelegateにしてくれるはずだから
バグでいいんじゃないかと。
call/ccまだー
この言語拡張ってどんな時に役立つんですか? たらいまわしみたいに、遅延評価を自然に記述したいとき? って、いまいち頻繁にあるのかわからない。 ifとかみたいな制御構造を作れるってこと?
>たらいまわしみたいに、遅延評価を自然に記述したいとき? 違う >ifとかみたいな制御構造を作れるってこと? そう
D始めたばかりです。 class Hoge { public: void hoge(){} } void main(char[][] args) { Hoge hoge; hoge.hoge(); } このコードをビルド(オプションなし)するとAccess Violationと出て実行時エラーになるのですが、原因の検討がつきません。 おそらく初心者ミスだと思うのですが、原因をご教示ください。
>>598 Hoge hoge=new Hoge;
>>599 ありがとうございました。
旧来のCというかRAIIを実現するには、
auto Hoge hoge = new Hoge;
でいいんでしょうか。
ついでにもうひとつ。自分で定義したモジュールをimportするとうまく動きません。 class Hoge{} void main(char[][] args){Hoge hoge = new Hoge;} // ok module foo.bar class Hoge{} import foo.bar void main(char[][] args){Hoge hoge = new Hoge;} // hoge.exeはwin32有効なアプリケーションではありません コマンドラインでもいいのに……
foo.barの方をコンパイルやリンクしてないってオチだと予想
importするのはシンボルだけ。
実装コードを含むには
>>602 。
Wikiにあるとおり0.162からwin32.windowsが使えなくなってるけどみんなどう対処してる?
最も合理的な対処方法は本家報告だと思うんだ。
wikiにあるのは多分本家のwindows.dの話じゃないと思ってたが。 あれ、本家の奴も動かないのかな?
本家のが中途半端だからwin32.windowsなんじゃなかった? でもwin32.windowsを自分で適用しようとしてもスクリプトが動かない理由がまだわからないや
日本語訳更新乙
まだバグがあるのは気にしないのだが↓のコードおもろいことになるな import std.cstream; void dotimes(int n, void delegate() exp) { for (int i = 0; i < n; ++i) { exp(); } } void main() { dotimes( 10, dout.writefln("Hoge")); }
ちなみにこんなん [char[]]Hoge [char[]]Hoge [char[]]Hoge [char[]]Hoge [char[]]Hoge [char[]]Hoge [char[]]Hoge [char[]]Hoge [char[]]Hoge [char[]]Hoge
>>602-603 ありがとうございました。
foo.barにobjがありませんでした……
今度はリンカでエラーが出たので自力でやってみます。
>>608 ホントに最新版まで追いついてるし
更新お疲れ様でした
delegateを周りを強化して遅延評価できるようにしても、 delegateを関数の外に持ち出せないのでは いまいち迫力に欠ける
>>613 同感。多少効率が悪くなってもいいから環境も束縛してほしい。
これが int delegate()inc(int n){ struct inc{int n;int get(){ return n++; }} auto p=new inc;p.n=n;return &p.get; } こう書けるようになるのだから、 その程度の速度の低下は許容してもいいじゃまいか。 int delegate()inc(int n){ return n++; }
もう関数のフレームをスタックで管理するのやめればいいんだよ。
619 :
616 :2006/08/23(水) 21:48:01
>>618 環境を束縛するなら下の式は上の式と同程度のコストになる位だな。
いっそ全部C関数にしてランタイムつくってクラスに見せかけたらどうだ?
>>621 ま、それは否定しないよ。実際、俺は頭は良いほうじゃないしな。
俺としては俺がアホかよりもdelegateを関数外に持ち出せるかのほうが遥かに重要だけどな。
もう、関数の引数を逃がすためだけに構造体を使うのに疲れたんだよ。
>>616 すいませんが挙動を説明してもらえませんか
ともっとアホな俺が登場
624 :
623 :2006/08/23(水) 22:08:03
なんでこういうコードが必要になるんでせうか?
bool delegate(T) less(T)(T b){
return (T a){return a<b;};
}
T *find_if(T,Pred)(T[]a,Pred p){
foreach(inout v;a)if(p(v))return &v;
return null;
}
void main(){
const int[]s=[2,3,5,6,3,2,1];
printf("%d",*find_if("Hello World"[],less(2)));
}
>>624 引数の一部を束縛したいときとか内部的に状態を持ちたいことって結構多いよ。
スマン "Hello World"[] → s な orz
こんなんも欲しくなる典型例だな。 Result delegate(A1) bind2nd(Result,A1,A2,R2)(Result delegate(A1,A2)dg,R2 a2) { return (A1 a1){return dg(a1,a2);}; }
うはw ちょっと時間かけないと理解できないなんてショックww えーっと less は C++ での関数オブジェクトの代わりに delegate を返す関数で・・・ あとさらにここで第2引数を束縛してて・・・ find_if は 引数1つの delegate を受け取って配列の要素に delegate を適用する関数で・・・ なんかわかってきたけど 引数を inout で受け取る関数や delegate じゃ代用できないの? ほんとよくわかってなくて申し訳ないのだけど
>>628 別に無理じゃないとは思うけど、綺麗に書けるかは別問題。
他にもD言語の遅延評価にキャッシュを付ける関数とかも簡単にかけたり。
T delegate()lazy(T)(T delegate()dg){
T val;
return {
if(dg)val = dg(),dg = dg.init;
return val;
};
}
同じ結果を得るのなら、他にいくらでも方法があるんで、「俺はこう書きたいんだー」という以上の意味はあんまり無いです。 できないよりできたほうが、なんかカックイイって感じますけど。
>>628 関数型言語やったこと無ければSchemeあたりをかじってみるのをおすすめする。
やっぱHaskelとかSchemeとかやってみないとこの辺りはダメかね ありがd 上のコードはちょっと勉強してみまつ
名前マングリングをやりたいんだけど自力でやらなきゃ駄目?
ここまでくると、ちょっと節操のないマルチパラダイム言語だな。 おもしろいけどw
コンパイル早くて関数の宣言要らない程度で十分な俺は吊ってきます。
コンパイル速いだけでもどんぶり三倍はくえる
>>635 画期的だけど、ちょっと無理すると落ちるな。
構造体を使った奴の方が、めんどくさいけど安定して使える感じがする。
>>635 のやつ、
delegate はスタックフレームへのポインタと関数ポインタからなっていて、
*dg がスタックフレームへのポインタであることは分かったんだが、
sp が何を指しているのかよく分からん…。
>>639 そりゃまあ。一方はillegalで構造体使うのは完璧に正しいコードなんだし。
でも"無理して落ちる"って例ってどんなのがある?
ちょっと考えた範囲では思いつかなかった…。
>>640 closure関数のスタックフレーム(変数xを含む) <= sp == &x
----
delegateリテラルのある関数のスタックフレーム
---- <= *dg
delegateリテラルのある関数の引数とかreturn addressとか
というスタック構造ぽいので、とりあえず大雑把に sp から *dg+α まで
切り出しとけば足りるだろ的な考え。
>>633 型名だけなら .mangleof。関数名とかごとやりたいと思ったら自力かな。
643 :
639 :2006/08/25(金) 03:11:27
>>641 遅延リストを作って遊んでいて、その生成関数が
LazyList creat(int n, int delegate(int) dg){
return new LazyList(n, closure({
return creat(dg(n), dg);
}));
}
というふうになるんだけど、これをリリースビルドして実行すると落ちる。
デバッグビルドだと大丈夫。
詳しく調べてないんであれだけど、createが再帰的になっているのがいけないのかなと思う。
調子に乗ってHaskellの
fib = 0 : 1 : zipWith (+) fib (tail fib)
を移植して
LazyList fib(){
return LazyList(0, closure({
return LazyList(1, closure({
return zipWith(fib2(), fib2().next(), (int n, int m){return n + m;});
}));
}));
}
とかすると、デバッグビルドでも無理。
でも構造体を使ってクロージャを作ると、fibもうまくいく。
644 :
639 :2006/08/25(金) 03:33:26
LazyList fib(){ return LazyList(0, closure({ return LazyList(1, closure({ return zipWith((int n, int m){return n + m;}, fib(), fib().next()); })); })); } だった。訂正します。
645 :
641 :2006/08/25(金) 03:51:36
なるほど。ありがd。 てきとーに class LazyList { int head; LazyList delegate() next; this(int n, LazyList delegate() d) { head = n; next = d; } } LazyList zipWith(int delegate(int,int) f, LazyList a, LazyList b) { return new LazyList( f(a.head, b.head), closure({return zipWith(f, a.next(), b.next());}) ); } で実験してみたら、fib()の方はclosureのデリゲート書き換えの行を if(*dg) *dg = (ry にしたら通った。環境を持ってく必要がない場合はdg[0]にぬるぽが入るっぽい。 creat()のは再現できなかった。もーちょい調べてみるわ。
646 :
640 :2006/08/25(金) 12:04:05
void Foo(char[] str){} void Foo(wchar[] str){} void Foo(dchar[] str){} void main() { //postfixを使わないと曖昧エラー Foo("text"); } だったのが void Foo(char[] str){} void Foo(wchar[] delegate() str){} void Foo(dchar[] delegate() str){} void main() { //postfixを使わないとFoo(char[] str)が呼ばれる Foo("text"); //Foo(wchar[] delegate() str)が呼ばれる Foo("text"w); } みたいにできて便利
>>647 その曖昧エラーは正直かなりどうにかして欲しい部分ではある。
自分で作る部分に関してはそういう事も出来るか。
649 :
639 :2006/08/25(金) 21:55:05
>>645 スタックフレームに関しては、なんとなくしか理解できてないけど、とりあえず
>if(*dg) *dg = (ry
としたら、うまくいった。
creat()のは、別のところにミスがあって直したら動くようになった。
LazyListを構造体で実装して、最適化付きでビルドするとうまくいかなかったりとか、
プログラムによっては正しくない計算結果が出てきたりとか、不安定なところはまだあるけど、
それよりも結構メモリを食うことの方がちょっと気になる。
構造体でのクロージャに比べて2〜3倍メモリを食うみたい。
余談だけど、上のfibを某所で見つけた遅延関数のキャッシュと組み合わせてみたら、
計算量が劇的に減って、かなりおいしい状況に。
あとは多倍長整数のライブラリがあればな〜。(Windows環境で使えるやつ)
まぁ、memoizeが上手くいくケースなんて、 フィボナッチ数列を再帰で解くぐらいしかめったに無い使えないワザだけどね。
>>649 言語の方であっても良いと思うんだけどな>>多倍長整数
そうかあ Dならそういうのを言語で,と期待できるんだなぁw 普通なら標準ライブラリに入れてくれ,となるだろうに
653 :
641 :2006/08/26(土) 00:13:27
>>649 不要なローカル変数も戻り先アドレスもレジスタ待避の分も
スタックポインタのアラインメントの分も全部巻き込んでクロージャに
突っ込むから、確かにメモリ消費は酷いっす。
まあ半分以上ネタなんで、実用上は構造体を使うべきかと...
# クロージャ用構造体をある程度自動生成してくれるmixinとか書けないかな
Dというのはより良い機能を言語自体に付け足せる言語ですか?
C++、Java、C#、Ruby、といったもので遊んできたボクですが、Dもおもしろい?
割と。
どういうとこが?
ころころと仕様が変わるところかな。
Javaの変わりようのが凄いけどなw 関数型とか組み込みスクリプトとか組み込みDBとかw java.lang.XML xml = #root { #leaf { 1 } #leaf { 2 } #node { #leaf { foo } } }; Java 7でこんな構文も登場するらしい。
>>659 Javaって自分の出自を忘れたらしいな。
もうEE専用って感じになりつつある。
VB9のパクリ
>>659 少なくとも Java の仕様の変化は「追加」に収まってるよ。
D のように過去のソースの書き換えが必要になることはない。
追加に納めるからこそ汚くなる気もするけどな。
確かに仕様は出来るだけ早く固めないと GUIライブラリやIDEなんかを作ろうとしてる人も 中途でやる気をなくしちゃうんだろうね。 仕様が変わってコンパイルできなくなったら 修正が面倒だから。
なんで同じ言語でポーティング作業してんだろうって絶望感はすごいからな
>665 違う言語だと悟ればいいんだよ ・・・そうか?
>>666 しかしそれは開発者の無能を示すことになる。
言語仕様がころころ変わるとはこれ如何に。 まだ言語仕様はこう、って確立してすらいないのに。
確立するまではころころ変わるのは仕方ないという事で自己解決してますね。 確立したのにころころ変わるのはまずいけど。
アルファ版のお試し用のようなものとしてリリースされてるのに それで仕様が変わったからって文句言う奴もおかしい。
やっぱ正式版は売るんだろうか
コンパイラは無料で、お金払うならSDKがついてきますよってノリでは
つーか、まだβだし しょうがないやん
>>642 関数名ごとだから自力でやるよ
だいたい規則わかったし
こんな機能知らなかった、、、 D では 配列型の引数の後ろに ... を続けると、 以降全ての引数を集めて一つの配列を作るようになります。 引数は指定された配列型に対して型検査が行われ、 個数は、 配列のプロパティとして取得することが可能です: int sum(int[] values ...) { int s = 0; foreach (int x; values) s += x; return s; } int main() { int i; i = sum(8,7,6); printf("sum = %d\n", i); return 0; }
それはCでも書ける。 んじゃなかったっけ?
Cだと引数の個数を明示的に渡さなきゃいかんのと、型チェックがない。
インスタンスからクラスを得る事って出来る?rubyの obj.class みたいに。 ていうかそもそもクラスを変数のような物として持てる? auto foo = new Foo; auto bar = new foo.type; => barもFooのインスタンス 的な。
そういう場合はtypeofを使う。 auto foo = new Foo; auto bar = new typeof(foo); クラスの情報が知りたい時は.classinfo。 printf("%.*s\n", foo.classinfo.name);
win32.windowsが落ちる原因はwinnt.dの const uint SECURITY_DESCRIPTOR_MIN_LENGTH = SECURITY_DESCRIPTOR.sizeof; の行っぽい。 const uint SECURITY_DESCRIPTOR_MIN_LENGTH = 20; とか const uint SECURITY_DESCRIPTOR_MIN_LENGTH = _SECURITY_DESCRIPTOR.sizeof; に編集すると落ちない。 んで見つけた。 //クラッシュ再現コード const int fooSize = Foo.sizeof; struct tagFoo {} alias tagFoo Foo; void main(){}
ナイス
環境変数を設定/取得したい場合ってどうすればいい?
>>685 std.c.stdlib.(getenv|setenv|unsetenv)
>>686 サンクス。putenvとかで探してた。
で、取得は出来たもののsetenv使うとリンクでエラー出るんだが……。
Error 42: Symbol Undefined _setenv
俺だけ?使うのに何か必要なのか?
688 :
686 :2006/08/29(火) 00:44:12
うーん、本当だ。調べずに適当に書いたのは失敗だったな。 もう、面倒だからC言語の関数を直接externすれば解決だよ。とかじゃ駄目ですか? extern(C)int putenv(char*);
>>688 ああ、それで使えるんだ。
いやとりあえず全然問題無い。どうもありがとう。
ところで、いくらなんでもそろそろver1.0だろ? と思ってぶらりと訪れてみたらこれかよ?
[] ←の演算子のオーバーロードって出来なかったっけ? 出来るならその関数名教えてエロい人!
692 :
691 :2006/08/29(火) 20:30:25
事故解決しました。 単項演算子やら二項演算子やらじゃないのね。おかげで見逃してしまった・・・。
やっとβになったの? D言語は世に出すつもり無いんでしょ。 理想を追い求める職人の遊び道具のようだし。 適当なところで言語仕様固めて、早く普及して欲しいな・・・
>>693 世に出て普及したとしても君には扱えないからさっさと他の言語にいくことをすすめます
職人の遊び道具の仕様を固められると、遊びがいが減って激しく不愉快なわけだが。 むしろバージョンアップでの言語仕様の右往左往こそがD言語らしい。
D言語はもう固めちゃって、右往左往はD++でやってほしい
javaのバージョンアップ・スケジュールのように後方互換を意識しつつ 言語仕様を徐々に追加(拡大)していって欲しい。 何か次世代?の新機能ばっかりアレコレ詰め込んで修正してばっか りで、全然仕様を固めようとしてない。 いつ出るか分からないし、もう待ちくたびれて、javaとかC#に流れてし まった。 ハードに近い仕事はCで十分だし。 なかなかリリースされないし、仕様がどうこうよりも、Dの存在意義と いうか、Dのやりたい事を明瞭にした方がいいのかも?
だから君には向いていないって言ってるでしょ。 何度言えば理解できるんだろ。 日本語分かりますか?
Dがなかなか出ないから、このさい C + gnuライブラリー + gcライブラリー + gnomeライブラリー でいいんじゃないの 横から悪いけど、君に向いてるも何も Dだと有利なところが無いようだけどさ
某やだからさ
>javaとかC#に流れてしまった。 Dから流れる先でも全然ないというか、 そっちに行くようなら始めからDは向いてなかったんだろうね
もはやDじゃないと意図したプログラムを作成出来ない俺は病気だな
>>702 それはすごいな
バージョンアップで仕様変更のたびにプログラム作成できなくなっちゃうw
バージョンアップで仕様変更のたびにプログラム作成できなくなるなんてどんだけ融通が利かないんだよ。
バージョンアップに伴う仕様変更で右往左往する状況を楽しめる人意外は Dに関わらないことをすすめます。 おとなしくJavaなりC#でも扱ってろってこった
アンチの自演うざ
>>697 漏れは
・超高速のコンパイル速度
・VMのいらないネイティブバイナリ
・ヘッダファイル要らない
ってとこに魅力を感じてまう。
遅延評価とかは正直(´・ω・`)ドウデモイイ…
あ、よく考えたら、バージョンupなんか付いていかずに
気に入った版をずっと使い続ければいいんじゃね?俺天才?
>>708 俺も俺も
あとは、CPAN並みにライブラリが豊富だと
いいなーって思う
>708 版の違うライブラリが使えるかどうかわからんのでダウト まあネタだろうけど
ネイティブ・バイナリーでも、ランタイムが無いと動かないんじゃ、 結局ランタイム・ライブラリーに頼るしかないんじゃ、 CやDやJavaとか、言語の違いはあまり関係ないと思うけど・・
712 :
デフォルトの名無しさん :2006/08/30(水) 17:44:54
PCや32Bit以上機器が前提だと今のハードの進歩からして、
実行時の速さやレスポンスはそんなに気になるほどでもない感じ。
それよりも他のIOからの入出力の方がレスポンスが遅いから
そっちの方が気になるけどさ。
>>699 がいいたいこと分かる気がするけど、
Dが活躍するところがいまいち見出せない。
だから正式版も出ないし、期待されていても、
いつまでも普及しないのかなと思っちゃう。
D使ってる人って、こういうのが大事だと思ってないのかな?
713 :
デフォルトの名無しさん :2006/08/30(水) 18:02:14
Dは、CやC++でゴリゴリ書かなきゃならない分野で役に立つものであって、 Java、PHP、Perl、.NETで済むのならわざわざつかわなくったって良いと思う。 Javaの機能との比較は必要ないと思うが。
これの配列結合ってsizeofとmemcpyを端折ってるだけでしょ? タイプシュガーは大切だけど、見た目以上の効果は無いと思う
>>714 折り畳みができる。
保守性が高い。
#遅いのは同意。
CやC++は開発者に負担がかかる。 前方宣言だの未初期化だの.だの::だの->だの。 VBやJavaやC#はエンドユーザーやPCに負担がかかる。 実行時ランタイムだのVMだの。 柔軟性が損なわれててOSのAPIを使用するのに余計な手間がかかるし。 理想には程遠いが理想に最も近いからDを使ってる。 Dの現状に文句言ってる香具師はこんな些細なことすらに妥協できないのかよ。
まあGC使う以上はアロケーションは可能な限り隠蔽したほうがいいかも
Dでちょっとしたラッパー作ってたら最後に必ずBus errorが出るようになった・・・ どこが悪いんだがわからない・・・
719 :
デフォルトの名無しさん :2006/08/30(水) 20:50:57
>>716 いや〜、ツッコミどころ満載ですけど、みなさんツッコミいかがですか〜
720 :
デフォルトの名無しさん :2006/08/30(水) 20:59:23
定職につきたがらないモラトリアム人間。それがD。
シェアウェア厨のオナニー言語にアインシュタインを超えてる人が降臨したのか。
Visual Studioもただで使えるしC♯の方がいいのに なんでまだD言語なんてシェアウェア厨のオナニー言語にアインシュタインを超えてるの MONOでネイティブコードも作れるのになんで欠陥だらけのガベコレを使ってるんだ お前らのやっていることの意味がわからない わからないが俺のここを見てくれ Java、PHP、Perl、.NETで済むのならわざわざつかわなくったって良いと思う。ゴリゴリ 「すごく大きいです・・・」 いや〜、ツッコミどころ満載ですけど、みなさんツッコミいかがですか〜 「そんな大きいの入りきれません><」
DMCってgccより遅いんだけど、D言語なんて作ってる場合じゃないのでは?
724 :
デフォルトの名無しさん :2006/08/30(水) 21:25:51
ずーとsage進行で、地下に潜んでいる人たちなの、ここの人たちは? たまには太陽浴びるのも気持ちいーよー! あー、おひさまって暖かいー、って実感できるからさ!! ,.. -───‐- 、 ,/:.:.:.:.:.:_,,. -─- 、:.:.:.`ヽ、 /:.:.:.:.:.:/ ___ \:.:.:、\_ r‐く、:/:.:.://´:|:.:.:.:、:.:.:.:`\|:.:.:.lく__{_ く二ニ/:.:.:./:.:|:.:.:.:!:.:.:.:.ヽ:.:ヽ\:.l:.:.ヾ`くニヽ、 r─‐ァ'´ /:.:.:.:.|:_/!|:.:.l|:.:.:.:.l:.:|、:.:.|:.:l:.|:.:.:.:|l∠ lヽ l/´!|>'|l:.:.:.:.l!:|`!|ヽ|ヽ:.:.:ト、!, く|l:.|:l:.:.:.:.ト、_`ヽ、Ll . / /|l:.:.:l:|,rf⌒ヽ! \l´ ィ⌒'ミ |:.:.i:.|:.:l|人 〉 | ,イ:.:.l:.ハ、:ヽ仆、:::リ ト、:::リ l:.:.|ノ:/)っ ∨ ∨|ハ:.|:.:.:.:|Tr‐っ' , ー' /:.:.//'´ l! ヽrーュi ⌒!、 t-r‐! ,.ノ:.// / 〈l|L__人`ヽ`ー'イ |lィー'´ `ー-=‐'`ヾ\_弋_フ/く 「`ーく_乍_フ_ ト、_ l /l |:| ヽゝ/ー、_) `ヘニLl ̄` \入 ヽノ
725 :
デフォルトの名無しさん :2006/08/30(水) 21:27:55
とりあえずDはこれ以上仕様が変わらない部分はどこかっていうのを確定してくれないと「遊ぶ」以上のことができなくて困る。
「だってこれは…オヤシロ様の祟りだもの」 :::::::::::| ,,rッ=广"`''フー-、,,_./:::::::`''-、::::::::::::::::;/:::::::::::::::::::::::::::::. | :::::::::::l /_,,/--''ッ┴---、,,,/:::::::::::::::::::`ヽ::::::;/:::::::::::::::::::::::::::::::: | ::::::::::::| ''/::;rチ――--、,,/ヽ:、:::::::::::::::::::/j:::::::::::::/:::::::::::::::::::: | :::::::::::::| /;;/ /;;;;;;;;;;;;;;;;;;;;/`''-、::ヽ、::::;/ /::::::::/:::::::::::::::::::::: | i、::::::::::| 〃 .|;;;;;;;;;;;;;;;;;;;ノ:::::::::_;ヽ‐ 'く ./:::::::./:::::::::::::::::: ::::::: | ,i\:::::::| ′ |;;;;;;;;;;;;;;/;;;;::-:''´! .゙i `ッく:_::/:::::::::::::::::::: :::::: | .i| .ヽ:::::l l;;;;;;;;;;;;" ̄;;;;;;;;;;ノ l/''/゙::;;へ:::::::::::::::::::::: ::::::: / ..i| ヽ:| 戈_ :ノ " .//:::::::::::::::::::::::::: ::::::: / : ! リ  ̄''''―ニ=-' ._,,-〃:::::::::::::::::::::::::::: ::::::: / ,, -'':::::::::::::::::::::::::::::::::::: ::::::: / _,, -::":::::::::::::::::::::::::::::::::::::::: /::::: / i| ,,,-::''::::::::::::::::::::::::::::::::::::::::::::::_,, -:::''::::::::: / ` ._,, -::'"::::::::::::::::::::::::::::::::::::;;;;;:-ッー::'''::::::::::::::::::: / _,,,,-::'':゙_::;;;::;;;::;;;---― ''' ̄厂 ,,シ:::::::::::::::::::::::::::: / <二二> ̄ ̄ メ -::'':::::::::::::::::::::::::::::::: .i ツ:::::::::::::::::::::::::::::::::::::::::: .!
>>725 閉鎖空間内で「遊ぶ」以上のことをやってれば良くね?
世間に合わせてコンパイラのバージョン上げたりせず。
何このスレ・・・・・・・? /ヽ /ヽ / ヽ / ヽ ______ /U ヽ___/ ヽ | ____ / U :::::::::::U:\ | | // ___ \ ::::::::::::::| | | | | | U :::::::::::::| | | .|U | | ::::::U::::| | | | ├―-┤ U.....:::::::::::::::::::/ | |____ ヽ .....:::::::::::::::::::::::< └___/ ̄ ̄ :::::::::::::::::::::::::| |\ | :::::::::::::::::::::::| \ \ \___ ::::::
729 :
デフォルトの名無しさん :2006/08/30(水) 22:09:11
おまいら、Apache,JavaVM,Linux,Windows,MySQL,Oracle...とか、 なんで出来てるのか考えたことぁあるか? JavaとかC#でできてると思う? というか、ソースなんてみたことある? ところで上にあげたものって、みんなメモリ管理とかデータ構造で苦労してんだぜ。 ちったぁ、Dさんのいうこと聴いてやれよ。
アンチが自分の意見を論破されてAA使って荒らし始めたな、うぜぇ
731 :
デフォルトの名無しさん :2006/08/30(水) 22:47:51
>>729 大丈夫か?それらは、少なくともDで作ってるわけではないと思うぞ。そしてD自体をDで作ってるのか?あ?
732 :
デフォルトの名無しさん :2006/08/30(水) 23:09:31
>>731 あほか、文脈みてから言え。
今苦労してるから、なんとかしようとしてるんじゃねぇのか?
Cで解決できるんなら、さっさとだれか使える標準作れ。
スレが伸びてるから、なんかあったかと思ってたら、毎度の如くのどうでもいい話題か。
まぁとりあえず、Dが天下とるまでがんばろう矢
それはつまり永遠にがんばりつづけろと
つまり、Dで何したいのか決めてからだろうね。 で、俺達はDで一体何をしようか?Dで何ができるんだろう?
>>736 何だそれ。
Dで何某かしたいことがあるからDを使うんじゃないの?
738 :
デフォルトの名無しさん :2006/08/31(木) 00:10:26
>>736 だから、Javaやってるような人を相手にしちゃダメだって
739 :
デフォルトの名無しさん :2006/08/31(木) 00:11:29
スマソ 736 × 737 ○
740 :
デフォルトの名無しさん :2006/08/31(木) 00:22:11
あとで泣き見せてやるさ! 次の未来は俺達が作るのさ! まってろよ、未来!!
741 :
デフォルトの名無しさん :2006/08/31(木) 00:31:36
Dに行っちゃう人の心境って、やっぱ
>>716 と同意見なのかなぁ
例えば、前方宣言なんか、自分で(文字処理用の)ツールを作って
ヘッダー作るときにそのツールを通せばいいだけでしょ?
未初期化の怖さ知らないでしょ?
演算子 . -> はCの言語仕様として納得し、それと自分のやりたい事との
見極めが出来ないんだろうな。
「些細なことにすら妥協」ってこっちの方がよっぽど些細だと感じちゃうなぁ。
やっぱツッコミが多かった。なんか私って釣られたみたいー☆
Dをやる理由? 俺は新しい機能を入れたと思ったら、 次のバージョンでそれをdeprecatedにするようなWalterたんに惚れたからだ。 それ以上の理由がない。
>>741 些細なことだけどわざわざ妥協してCを使うまでもなくね?
Dという代替言語があるんだから。
代替言語がなかったら妥協するしか無いが。
俺の場合は、Boostとかc2libとか他も含めて色々苦労して、やっぱ色々問題があったから
Dにというのがあるんだけどなぁ
>>741 その程度のことで判断してるのか?
>>741 その辺は本当に些細なこと。
Dに移行する理由の内のほんのわずか。
Cに対する不満がDで解決する一部分の例に過ぎない。
高速コンパイルに惹かれた人。
DBCに惹かれた人。
配列の扱いに惹かれた人。
文法に惹かれた人。
ネスト関数、ネストクラスに惹かれた人。
スコープガード、プロパティ、テンプレート、ネイティブコード、walterタン、etc...
Dに行っちゃう人の心境は多種多様だと思うよ。
なんで
>>741 はそういう視野の狭い見方しちゃうかな。
お前ら釣られすぎ ∧∧ (゚Д゚ ) ⊂ ヽ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 〉 ノノ~ < おちけつ〜 ∪∪ \_________
確かに
>>741 は図星なんだよなぁ〜 本当に細かいところなんだけどさぁ。
Dに惚れたんじゃない Dが漏れに惚れたんだ
750 :
デフォルトの名無しさん :2006/08/31(木) 02:01:19
オレもC++のコピーコンストラクタとかSTLの挙動不審とかかなり参ったよ。 obj->nameとかも美的センスねーって思ってた。 だからDにとても強い魅力を感じてるけど、そろそろD出来上がってくれよ。 甘い言葉で引き付けているだけで、さすがにもう待ちくたびれたよー D使っていても結局は小さいツールしか作ってねーし
アセンブラからCに移行するときにも似たような煽りあいがあったんだろう。 まあ、時代に選ばれればそれが正義って事だ。
ということは、今のD言語は迷走のときなのか・・・
いやあもうDの復権はないと思うよ。
迷走もしてないんじゃね?おっさんが1人で作っている趣味言語だし。 MSとかSUNの資本の前には象の前の蟻みたいなもんだろうしさ。 でも、C#がこけたMSがVMよりネイティブ路線に方向転換して(OSは押さえてるしな)、 ある程度コミュニティが育っているD言語に注目、そのままお買い上げ位ないかなあ。 とか激しく妄想しまくりんぐ。
がっくし・・ OTL
D言語はC99にすら劣ります。あのISO/IEC化されたC99ですら あのざまなのです。規格も提出されてないD言語が主流になるなんて、 逆立ちしたって無理です。
>>753 復権?
>>756 劣るかどうかはともかくとして、主流とかどうでもいいよなあ・・・
定期的にこういう流れになるよな。なんでだ。
C++の提案を見ると むしろJavaやDの方が実験台になっている のろいのはいいことらしい
759 :
デフォルトの名無しさん :2006/08/31(木) 03:31:50
がっくし・・ OTL
>>757 今現在D言語に向いていない人
1.主流になる言語以外は覚える価値が足りない/そんな余裕がない
2.JavaやC#の代替言語が欲しい
3.IDEがないとプログラミングできない/やる気になれない
今現在D言語に向いている人
1.D言語が主流になることがそれほど重要ではない
2.そもそもまだIDEが欲しくなるようなアプリを書かない/別にIDEいらない
2.C/C++のいろんなことに辟易している
3.やっぱネイティブが好き
4.言語仕様の○○が嬉しい(GC,変数自動初期化,組み込み型文字列などなど)
各自家で考えてくるように
なんか自分が好きなヒーローがナンバーワンじゃないと 気がすまないお子様みたいな印象受けますよ。不毛過ぎ。 Dはまだ冒険できる段階なんだから、あれこれ試して 他の言語と影響し合って共に成長していきゃみんな幸せでしょうに。 その結果淘汰される言語が出てきてもそれはもうしょうがないでしょ。
ほしい機能なんか自分で作ればいいとか言ってるけど それが面倒だから、機能がある言語に乗り換えるという発想をしないのか? というか、別に自分で作ればいいジャンと主張するのは構わないけど その労苦を厭うことを認めるくらいの寛容さがほしいね
764 :
デフォルトの名無しさん :2006/08/31(木) 09:09:37
>>727 そうはいかないだろ。バグフィクスだってあるんだから
765 :
デフォルトの名無しさん :2006/08/31(木) 12:12:50
766 :
デフォルトの名無しさん :2006/08/31(木) 12:32:34
>>761 で、いつ正式版をリリースするつもりなの?
767 :
デフォルトの名無しさん :2006/08/31(木) 12:39:31
昔はwinehpを期待して何年も待ってたけど、違った方に流れてしまった。 wineのやりたい事はvirtual pcやvmwareに吸収された感じだった。 Dのネイティブと言う発想は、もう既に、java virtual machineや.net frameworkに 吸収されてるんじゃないのか。確かに実行速度が速い遅いはあるけどさ。 ハード的なネイティブ(cpu毎の命令セット)?と言うか、 ソフト的なネイティブ(bytecode)の方にさ。
>>767 3行目から意味が全くわからないな・・・
Dのコンパイルが早い(というかC++のが遅い)のはどの仕様が原因かな。 やっぱりテンプレートまわり?
今のところ D の GC 実装って保守的だけど、 正確な GC が実装される可能性ってあるんだろうか。 そもそもタグビットとかを設けずに正確な GC を実装可能なのか よく知らないんだけども。
なにをもって正確なGCっていうの? 共通の言葉としてそんなのあるの? 773のオレオレ言語に正確なGCってのがあるの?
「集め残しがないような」という意味?
あぁ、exact GCのexactをそのまま直訳したのね。 Java界隈ではexact GCを正確なGCって翻訳する人がいるのか…。
Exactly(そのとおりでございます)
技術系用語を下手に翻訳されると余計意味がつかみにくくなるな。 慣用句と一緒でexact と GCで意味を成してるんだから exactだけ翻訳するのはおかしいだろ と、思う今日この頃
正確なゴミ収集者。
名詞に相当する言葉は翻訳しないでそのまま使えってこった。 寿司とかだって海外では翻訳されないでそのまま辞書に載ってんだろ。
勘違い 言い訳粘着 見苦しい
Googleの検索結果数は人によって違うから数字も書いておいた方がいいよ
保守的なGCってのもあんま聞かんな。。。
> 保守的なGC の検索結果 約 13,200 件中 1 - 10 件目 (0.16 秒) この手の用語で1万超えてれば普及度高いほうだと思うけど.
GC関係の話題で保守的なGCってのはよく聞く。 正確な GC ってのは聞いたこと無いけどな。
DMD 0.166 リリース
D 0.166 Aug 30, 2006 New/Changed Features * Upgraded zlib from 1.2.1 to 1.2.3 per Bugzilla 286 * Removed implicit conversion to delegates, except in the case of typesafe variadic arguments. * Replaced with lazy parameter storage class per Tomasz Stachowiak's suggestion D/41633. * Incorporated Oskar Linde's patches to support member templates.
lazyがdelegateなのを利用したトリック(
>>635 )が使えなくなったか。残念。
まぁ、メンバ関数テンプレートが使えるようになったから良しとしとこう。
793 :
792 :2006/09/01(金) 04:52:33
あ、ごめん勘違い。廃止されたのはexp -> exp delegte()か。 別にあのトリックは普通に使えるね。
void dotimes(int count, void delegate() exp) から void dotimes(int count, lazy void exp) に変更なだけ?
ほんとにメンバ関数テンプレート使えるようになってる? 本家のドキュメントに言及されてる部分が見つからないんだけど
メーリングリストより
>It is really just a small patch that enables implicit function template instantiation for member function and operator templates. It should work identically to how IFTI works for free functions.
>It should open up quite a few door. Here is a quick demo I hacked together of how compile time dimensionality checking can be implemented:
>
http://www.csc.kth.se/~ol/physical.d
おおーすばらしい
zlib がバージョンアップしたのかと思ったら一年放置してただけなのね.
enum eNumbers { zero, one } const char[][eNumbers.max+1] sNumbers = [ eNumbers.zero : "0", eNumbers.one : "1", ]; void main(char[][] args) { eNumbers x = eNumbers.one; switch(x) { case sNumbers[eNumbers.zero] : break; case sNumbers[eNumbers.one] : break; default: break; } } なぜこれが、通らない?
あ、まちがい eNumbers x = eNumbers.one; じゃなくて char[] x = "1";
>>800 switchがintとchar[]の比較になっているということでは。
>sNumbers[eNumbers.zero] >sNumbers[eNumbers.one] が定数じゃないから
>>799-800 http://www.kmonos.net/alang/d/statement.html#switch > caseの式は全て、switch Expression の型Tへ暗黙に変換できるような
> 定数値か定数配列へ評価されなくてはなりません。
で、定数配列なのはsNumbersであって、
sNumbers[0]やsNumbers[1]ではないから、ということなんだろう。
しかし、同じ理屈で
const int[] ns = [1,2,3,4,5];
ns[0] = 6;
が通るんだが、だれもうれしくないと思う。
それともバグなのかな。
constが型修飾子じゃなくて記憶クラス指定子扱いな仕様バグなのか、
配列に対するconst指定の振る舞いのバグなのか。
>>802 const char[] char0 = "0";
として
case char0:
とするとchar0が文字列リテラル扱いされて通るが、
const char[] char0 = ['0'];
として
case char0:
とすると通らないってのは嫌だと思う。
classのメソッドがテンプレート化できません……orz
>>803 >const char[] char0 = ['0'];
こんな書き方する奴がイヤだと思う。
余談だが "mojiretsu".dup で定数でない文字列扱いなのかあ ところでD言語とC++のconstの違いについて書いている資料ってどこかにありますか? 違うとはいろいろなところで見かけるけどどう違うのかがよくわからなくて
>>806 "mojiretsu".dupは折り畳みが実装されてないだけかと。
constはstatic thisで初期化できるとか。
const int[] xxx = [0]; や const char[] xxx = "0"; が大丈夫で const char[] xxx = ['0']; や const char[][] xxx = ["0"]; がダメっていう理由が思いつかない。 バグなのか?
動的配列の初期化子や文字列リテラルは実装されているけど配列リテラルは実装されて無い
>>808 const char[] xxx = ['0'];はどう考えてもバグ。
const char[][] xxx = ["0"];は現状では静的配列の静的配列じゃ無く動的配列の静的配列になってるんじゃね? どっちにしてもバグ。
ソース読んで無いから正確には分からないけど。
const int[] xxx = [0]; static assert (xxx[0] == 0); const char[] xxx2 = "0"; static assert (xxx2[0] == '0'); const char[] xxx3 = ['0']; static assert (xxx3[0] == '0'); const char[][] xxx4 = ["0"]; static assert (xxx4[0] == "0"); これで評価できるのはxxx2のみ 今までは配列リテラル未実装のせいかと思ってて「配列リテラル早く来い」書き込んでたけど case文にxxx1を使っても大丈夫なら何かしらバグが存在してるみたいだね。
×xxx1 ○xxx
813 :
808 :2006/09/02(土) 16:33:00
>811 あ、ごめん。まとめまちがってた。 const int[] xxx = [0]; は通らない。
>>801-812 お返事ありがとう。勉強になりました。
で、今のところenumと文字列の整合をしようと思ったらこんな感じにするしかないのかな?
template sNumbers(eNumbers idx) {
static if(idx == eNumbers.zero)
const char[] sNumbers = "0";
static if(idx == eNumbers.one)
const char[] sNumbers = "1";
}
case sNumbers!(eNumbers.zero) :
break;
win32.windowsをimportしたときのエラーをみながら修正するの疲れた。 もう諦めよう…
>>814 enumと文字列の整合に限らず、配列の静的評価の問題はそれ以外に解決方法見つからん。
>>818 "aaa"w.toT()って書けるな。
どうでも良いけど多分こっちのが書きやすい。
lazy int closure = counter(); というふうに、変数に束縛できたらいいのに
>>820 delegateに変換するという荒業でなんとか。
T delegate() lazy2dg(T)(lazy T v){
asm{
naked;
mov EAX,[ESP+4];
mov EDX,[ESP+8];
ret 8;
}
}
void main(){
int x;
auto closure = lazy2dg(++x);
closure();
closure();
printf("%d\n",x);
}
テンプレートでうまいこと書けそうで、書けないんだよなあ。
import std.string; import std.stream; union X { char[] str; ubyte[] bin; } int main(){ X x; x.str = "あaいi"; char[] r = std.string.format("%s(%d) (%.s)(%d)\n", x.str, x.str.length, x.bin, x.bin.length); printf(r); return 0; } これだと x.str.length も8になるんだけど4じゃないの?
>>823 echo -n "あaいi" | nkf -w | wc -c
8
>>823 あれ、仕様が変わったのかな
"あaいi".lengthだけでも8になってる。(utf-8)
>>823 std.utfで文字数を取得出来たんじゃないかな?
>>825 それが4になる仕様ってあったか?
俺が知ってる限りそんな仕様の時代一度もなかったが。
どーやったら4バイトで表現できるのか逆に疑問
"あaいi".lengthは確かに8が正解とは言えないが char[]やbyte[]に落とされたら8になるのは当たり前だ罠。 utf8を格納する型、ったってchar[]は単なるcharの配列だし utf8の1文字のサイズは可変なのに対しchar.sizeofは1固定だからな。
>>821 なにげに便利そう。でも凶悪なコード(w
実装依存しまくりだもんな。lazyが組み込まれたのなら、bindも組み込んで欲しいなあ。
charってのはutf8な文字1文字を表すもんだからchar[] foo = "あいうえお"の時foo.length == 5だと思ってた。 動的配列のlengthは要素数の取得設定ってあったし…すまなかった。 でも俺以外にも勘違いしてるヤツはいるはず!
> charってのはutf8な文字1文字を表すもんだから ?
一番大事な、 char 型は「符号なし 8 bit」 の記述に気づかなかったのか・・・。そんなバナナ。
>>832 マルチバイト文字使いたくないならdcharでも使っとけ。
まぁ細かい事考えるとUTF32でも微妙に例外あるけどな。
char c1 = 'あ'; char c2 = 'i'; assert(c1.sizeof == 3); assert(c2.sizeof == 1); char[] str = "あaいi"; assert(str[0]. == 'あ'); assert(str[1]. == 'a'); assert(str[2]. == 'い'); assert(str[3]. == 'i'); assert(str[0].sizeof == 3); assert(str[1].sizeof == 1); assert(str[2].sizeof == 3); assert(str[3].sizeof == 1); assert(str.length == 4); きめぇw
うわイヤすぎw
今日書いた驚愕コード with(this) { メンバ変数に代入していくコード }
>>836 ほんとにそんな仕様になってんのかと思ってびびった。
そんなはずあるわけないよなぁ。よかったよかった。
pimplやろうとするとエラーになる。 mixinで対処できるけど、なんだかなぁ。
Dでpimplやる必要性あるのか?
http://www.kmonos.net/alang/d/lazy-evaluation.html なんかを読んでてふと思ったんだけど、
こういう説明に出てくる、dotimes関数とかEnforceテンプレートのような
瑣末なコード断片って、ライブラリ化されるほどでもないし、備えておくと
便利というほどには汎用性のある関数ってわけでもないけど、
いざその処理を書くとなると、いちいち書くのが不毛な感じがするんだよなあ。
こういうどうでもいいような微妙な処理を、バリエーション豊富に
とりそろえたライセンスフリーな何かって、どっかから一括で
手に入らんかな。
全部のソースコードで書く2,3行の処理をそれぞれ1行で済ませられたら、
楽になっていいなあと思うんだけど。
module foo.2bar.baz; import foo.2bar.baz; 数字から始まるフォルダを含むモジュール名を指定するとエラー出すけど、これって仕様、それともバグ? そういう記述は見つかんなかったけど、確信はなし。
>>844 仕様
ModuleDeclaration:
module ModuleName ;
ModuleName:
Identifier
ModuleName . Identifier
Identifier:
IdentiferStart
IdentiferStart IdentifierChars
IdentifierChars:
IdentiferChar
IdentiferChar IdentifierChars
IdentifierStart:
_
Letter
UniversalAlpha
IdentifierChar:
IdentiferStart
Digit
>>845-846 構文解析の方を見なきゃなんなかったのか・・・。
Identifierならしょうがないな・・・。
サンクス。
opCall の使い所がいまいち分かりません! class Foo { static Foo opCall(){ return new Foo; } } とかでもやっときゃ良いんですか?
>>848 >opCallの使い所
C++でいう関数オブジェクトとか。
まぁ、delegateあるからC++より使う幅狭いけど
>>848 構造体の初期化をコンストラクタ風にしたいときとか。
int x = 2, y = 1; void main(){ int res = 0; for(int i = 0; i < 10; i++){ res = res + x - y; writefln(res); } } これを最適化付きでビルドすると、間違った答えが出る件。
>>851 res = res + (x - y);
ってやると正しい結果になりますね。
普段括弧多用するのでこういうのは気づかなかった…
853 :
デフォルトの名無しさん :2006/09/06(水) 00:44:46
x, yをローカルスコープにしても直るみたい。
ここにきてそんな基本的なバグが
これじゃ、リリースは当分先になるなぁ・・
やなバグだなぁ… clでも昔似たようなのがあった気はするけど。
D言語パーフェクトガイドがどこにも売ってないよ(´・ω・`)
ほんとだ、売ってないね。
861 :
デフォルトの名無しさん :2006/09/06(水) 20:55:38
D言語に関して2004年に書かれた本はもはや参考にならない
>>861 この間、本屋に一冊あったから買っちゃった。
ところで、お勧めのD解説サイトってある?
>>862 蜘蛛の巣しか無くね?
あとやねうらおさんのとか。若干情報が古いけど。
近所のTSUTAYAで売ってると思うがなぁ ないところにはないのか
C++言語に関して1998年に書かれた本の内容がまだ実装されていない
mixin周りってまだバグ多いんだな private領域へのアクセスになるべきなのかならないべきなのかわからんけど どっちかになるべきだよなこれ template Foo() { private int priv; public int pub; } class Bar { mixin Foo F; this() { priv = 1;// error pub = 1; F.priv = 2; F.pub = 2; } } void main() { }
>>848-850 opCallの用途ってそんなんしかないのか
interface State {
void onLButtonDown();}
class State1 : State {}
class State2 : State {}
class Context
{
void onLButtonDown() {
pre();
onLButtonDown()
868 :
867 :2006/09/06(水) 21:22:26
ぐは すまん 途中で送信してしまた
まあそのなんだ lazyは便利だという話 あるクラスの中において,ある処理の前後で必ず実行する定型処理があったら void doSequence(lazy void doSomething)
もうだめぽ orz Janeはシフト+エンターで書き込みなのか・・・・・・・・・・・・・・・・ もういや・゚・(ノД`)・゚・
>>863 すまんが、URLを教えて。
それらしきものが全然見つかんない orz
>>872 え、
それの事だったのか。
勘違いスマソ
>>872 その後者の方の
> デジタル火星の言語の周りを回る標準ライブラリは、その名も Phobos、火星の惑星です。標準でどんなものが用意されているか、見てみましょう。
これは指摘するべきだろうか。
>874 前者でないの? まあ、衛星だな。
アメリカの惑星衛星探査機ボイジャー一号は、女子高校生の輪の下をくぐり抜けるように数々の写真撮影に成功 警察では公然猥褻の疑いもあると見て捜査をすすめています。
879 :
851 :2006/09/06(水) 23:08:29
>>857 してみようかと思ったけど、本家の方はほとんど見てないからよく分からないし、
英語力の無さからいっても無理そう。
>>879 コード読んで、動かしてもらえばわかってもらえるはず。
俺も英語力は無きに等しいけど、意味は通じるんじゃないかな。
--
This code compiled with '-release -O' make a illegal calculation.
import std.stdio;
int x = 2, y = 1;
void main() {
int res = 0;
for(int i = 0; i < 10; i++) {
res = res + x - y;
writefln(res);
}
}
なんでもっとシンプルな言語仕様にしないんだろ。
>>882 Walterタンとおまえの方向性が違うだけ。
気に入らなきゃ他の言語を探すなり自分で作るなりをすればいいだけ。
十分しんぷるだろ
開発理念からだろ。
887 :
851 :2006/09/07(木) 02:50:34
>>881 何とかがんばってBugzillaに書き込んできた。
例文サンクス。
Good job! (゚Ρ゚)b
-release使うなってか
バグの再現に' -release' は必用ないとゆーとるのでは?
Only -O is needed for the bug. -Oだけで再現できますよと言ってる?
俺もためしたけど-Oだけで発症したよ。 > -release isn't required. Only -O is needed for the bug. -releaseは要らないよ。そのバグに必要なのは-Oだけよ。 > This error also occurs in DMC with similar code. DMCでも同様のコードでこのエラーが起きたよ。 あとの行はその人が調べたバグの起きる条件の詳細っぽい。 しかし怖いバグだな。
Walterは内部の沢山の書き直しが必要とか言ってるけどidentifierに期待age static foreachとか可変個引数テンプレートとかにも対応して早く以下のようなコードを書いてみたいものだなぁ… template T(char[][] a...){ interface Base(){ void do(); } static foreach(char[] b;a){ class identifier(b):Base{ void do(){ writefln(b); } } } } mixin T!("test1","test2","test3");
boostのpreprocessorに近いものかな
テンプレートクラスをライブラリにして使おうとすると良くリンクエラーになるのだが。 普通にプロジェクト内の一ファイルとしてコンパイルするとうまくいくのに。 しょうがないから、mixinで丸ごとコードを持ってくるようにして対処してるけど、これってバグ?
>>896 あ、それ俺もなるわ。
仕様とか、自分のやり方が違うのかと思って、
そういうライブラリ自体をコンパイルしてリンクしてたけど・・・。
バグじゃないにしてもコンパイルしないで使える方法とか知りたいです。
Dは一回再編した方がいいとおもう。ごちゃごちゃしてきたし。 言語の設計だけやったら実装してくれる神はおらんものか。
C++がごちゃごちゃしてきたので再編したんじゃなかったのかと
俺は各機能の使い分けが難しくなってきたように思う。 同じような機能がたくさんない? 好みもあるだろうけど自分の場合lazyが増えたおかげでdelegateを使う場面が激減したよ。 C#のイベントハンドラのように、インスタンスにメソッドを連結するような用途ではdelegateを使わなくなった。 function pointerとdelegateはどっちかで十分ならどっちかに絞るのも手だと思う。 必然性があってそうなっているのかもしれないが・・・俺にはわからないや。
イマイチ closure と function と delegate と 関数クラス の使い方のイメージの相違が分からない 呼ばれるなら一緒じゃないの? (コンテキストを保存する意味ではdelegateは有用だと思うけど、じゃぁ他のは?とも思う)
>>898 あなたが新世界の神となれば良いじゃないですか
903 :
デフォルトの名無しさん :2006/09/08(金) 10:45:26
DMDの古いバージョンは、もう配布されていないのでしょうか?
dmdのリンク先URLから何かを察したり本家changelogさえ見たことすら無いのだろう。
906 :
デフォルトの名無しさん :2006/09/08(金) 14:24:37
>>900-901 ・基本はdelegate。
・functionはdelegateより速い。あと""Cの関数ポインタと互換性がある""。
でも外部スコープの変数を参照できない。
・lazyは""ちょっと記法が楽""なのだけが利点。
引数をとれない。式しか書けない==文が書けない。変数として持ち回れない。
・関数クラス(opCallのあるクラスのこと?)は""opCall以外のメンバも持てる""けど
delegateはcallすることしかできない。それ以外の点では逆にdelegateの方が汎用性高い。
template property(T : float) { float property(inout float m_var, float var, lazy int range) { if(var == float.nan) { return m_var; } else { if(range()) { m_var = var; } return m_var; } } } class A { private float m_hoge=0.0; public float hoge(float hoge=float.nan) { return property!(float)(m_hoge, hoge, hoge>3.0 && hoge<8.0); } } void main() { A a = new A; for(float i=0.0;i<10.0;i+=1.0) { a.hoge = i; writefln(a.hoge); } } いまは反省している。
DってNaNとNaNを==比較してtrue返す仕様なの?
>>909 試せ
float a, b;
printf("%s", a==b);
そういえば、
>>910 みたいな小さいコード試す時に -run 使うと幸せになれるよね。
-run なんて忘れてた。
>>910 アホ、908への皮肉だボケ。
試さないとダメなのは908だ。
てか、そもそもお前がそのコード試せよ。
どうみてもSegment Faultだろ。馬鹿か。
float property(inout float m_var, float var, lazy int range=true) { if(!isnan(var) && range()) { m_var = var; } return m_var; }
DWT使ってるとやたらとコンパイル遅くなるんだけどもこれはどうにもならないの?
>>914 確かビルドオプションのどれか省略したらかなり高速になったような。デバッグがらみのフラグだったかな?
いまDWT入れてなくて確認できないですけど。
import ファイルを .di にとか。
>>902 ドラフトを作る程度までなら現役SEなんでなんとかやれるかと思うんですが、
コンパイラ理論がよくわからないもので、、
使う側の要望・メリットを仕様にまとめるってのならできるんですが、、
いやコンパイラの理論がわからなかったらまとめられないっしょ それに全部まとめなおさなくても気に入らないところだけ挙げてみればー
>>919 そんなこと無いと思う。コンパイラの負担が無茶苦茶増える事はあると思うけど。
DってJavaみたいなフレームワークはあるのですか?
がんばる
>>922 言語が安定してくれないとそっちに取り掛かれないんだよね。
今まで作った奴をかき集めたらなんかライブラリになりそうだけどやめとこ・・・
こわがりすぎー
929 :
639 :2006/09/09(土) 20:27:49
>>653 Dのホームページのテンプレート再訪のところにあったTupleとFuncMetaを使って書いたらこうなった。
int delegate() counter(int n, int m){
auto tuple = makeTuple(n, m);
return closure(tuple, (inout typeof(tuple) t){
return t.val!(0)++;
});
}
RetType!(U) delegate() closure(T, U)(T tuple, U func){
struct Closure{
T tuple;
U func;
RetType!(U) closure(){
return func(tuple);
}
}
auto c = new Closure;
c.tuple = tuple;
c.func = func;
return &c.closure;
}
counter関数が毎回書く部分で、closure関数が一度書いておけばいい部分。
まあ、正直ここまでする価値があるかは微妙だけど。
930 :
639 :2006/09/09(土) 20:30:49
間違えた。こっちが正しい。 int delegate() counter(int n){ auto tuple = makeTuple(n); return closure(tuple, (inout typeof(tuple) t){ return t.val!(0)++; }); }
Dでは10進演算器を言語でサポートする予定はないんでしょうか? 金勘定に使いたいと思うと、でっかいインテジャーでも使い勝手悪くて 結局ライブラリ作らないと駄目なんですけど。
世界のGDPを銭単位で扱うつもりですか?
>>932 小数点の扱いとか、切り上げ切り捨ての時にチョコチョコ操作してやらなきゃ
ならないんだよ。お金勘定系のシステム作ったこと無い人には、ピント来ないと
思うんだけどね。
で、その辺のチョコチョコしたことはまぁ、書けば良いし誰だって書けける程度の事だから
みんな書くんだけど、言語でサポートしててくれれば、安全で分かりやすく書けるのね。
まぁ、端数切捨てモードを言語側で指定できたり有効桁数の設定ができると金の取扱いは楽だな。
import std.stdio; import std.cstream; void main() { char[][] list; foreach(char[] line; din) list ~= line; foreach(char[] s; list) writefln(s); } 実行すると、エラーになるのですが。これは何がいけないのでしょうか?教えてください。
char[][]型 ~= char[]型をしようとしても困る やりたいのは、これ? foreach(char[] line; din){ list.length = list.length+1; list[length-1] = line.dup; } foreach(char[] s; list) writefln(s);
>>936 StreamのopApplyで渡すバッファは、
ローカル変数だったり使いまわされてたりするのでdupが必要。
import std.stdio;
import std.cstream;
void main(){
char[][] list;
foreach(char[] line; din)
list ~= line.dup;
foreach(char[] s; list)
writefln(s);
}
939 :
937 :2006/09/11(月) 06:26:57
ごめん勘違いしてたのでスルーして
940 :
917 :2006/09/11(月) 11:39:47
コンセプト的なハナシからすると、 プリミティブな変数型を排除して純粋なオブジェクト指向にする。 public class TestMain { public static void main(string[] argrs) { string a = "aaa"; if(a == "aaa") { printf("ok\n"); } } } リテラル型のデータはそれぞれ対応したクラス型を持ったオブジェクトとして扱う。 オブジェクトは全て参照渡しを原則とする。 オブジェクト同士の比較する際には比較演算子==を使用するが、この場合に限り値よる比較を行う。 参照の同一性を調べる場合には ExemplaClass ec = new ExampleClass(); ExemplaClass ec2 = new ExampleClass(); if(ec.reference == ec2.reference){ // } としてreferenceプロパティの結果を比較する。 --------------------------------------------- ていうようなメモの蓄積でよければどっかにwiki作ってやってけそうですが、、
おながいします
別スレでね
>>940 とりあえず、その思想をDに適用するのは糞だと指摘しとく。
「純粋なオブジェクト指向」なんて、まさに「言語の上っ面の設計だけ」したい奴の常套句。
プリミティブ型を排除してもさほど便利にはならない。
それなのに実行速度は激しく落ちる。そんなアホな方向性は絶対ダメだ。
>>940 それじゃ文がCっぽいNativeなRubyになる。
Rubyがだめとは思わないが、そんな中途半端な言語はちょっと勘弁して欲しい。
あとは
>>943 と同意。
>>940 Java以外の言語の設計思想を知らんのじゃないか?
>>940 スモールトーク?
後、言語の大枠の話と、いきなり演算子の表記の仕方を同列に
語ってるのも痛い。
己を知れって感じ。
コンパイラ理論を知らなくても、言語の設計は出来ると思うけど、
言語を知らないのに、言語の設計は出来ないと思う。
>>940 がシステム作ってるとか思うと、本当にユーザーさんが
可哀想だと思う。
>>940 > プリミティブな変数型を排除して純粋なオブジェクト指向にする。
メリットを言ってみて。
950 :
940 :2006/09/12(火) 01:24:23
皆さんのアツいレスは純粋にうれしいです。 自分はWeb系なんで他分野の方と感覚に大きなギャップがある事を見落としてしまいました。 確かに先の提案とDの思想では相反する事があるかもしれませんが、 本気で現場で使える言語にするなら人によってクセの出るような言語仕様ではいけません。 1プログラマのオナニー以上の存在になるにはもっとゼネラリストにスポット当てる事が重要です。 具体的には、 ある機能に対して言語を正規化して1つの事をやるには1つしか選択肢がない事が望ましいです。 組み込みの人には申し訳ないですが、 もはや職人芸に頼った成果は敬遠されてきてます。 パフォーマンスの事にしても、 Webの世界ではこの手の問題が出る時っていうのは クライアントから金がむしりとれる絶好のチャンスなんですね。 なのでできるだけ小さい言語マニュアルで、 ライブラリのドキュメントさえ読めばすぐに使えるような環境を用意する事、 コードの集合体であるライブラリは疎結合を重んじる事、 サービスを中心に可能な限り抽象化したレイヤで要件が実装できる事。 これらを言語レベルでプログラマに押し付ける事ができればJavaを置き換える事も可能なのではないでしょうか。
表記と、その表記が表す意味のどちらかを矛盾なくつなげればいい あとは他人がイイと思うかどうかだぽ 気にするな
>>950 > ある機能に対して言語を正規化して1つの事をやるには1つしか選択肢がない事が望ましいです。
現実的な言語であるD言語の主張によると、「なにごとにも例外があります」だそうです。
現実を例外なしのすっきりした規則でくくりだすことはできないっつーことですね。
表現できる世界が余計に狭くなるか、余計に複雑になります。
言語的な綺麗さで括り出すことによって取りこぼされがちな数多の例外を、
プログラマレベルで取り繕う羽目にならないように言語仕様に収めたものが、
D言語の理想だと思います。
> ある機能に対して言語を正規化して1つの事をやるには1つしか選択肢がない事が望ましいです。
というような厳しい制約は、汎用のプログラミング言語としては不適切なものです。
なぜなら、先に述べたように「表現できる世界が余計に狭くなるか、余計に複雑に」なるからです。
ある目的に特化した、つまり用途や環境を絞った言語ならばシンプルで綺麗な規則の
言語を設計できるのかもしれません。しかしD言語のような汎用の言語は、専用言語
のようにカバー範囲を狭くしたり単純にしたりすることで言語の綺麗さを得るのは、
かなり慎重にする必要があるでしょう。すくなくとも、
> ある機能に対して言語を正規化して1つの事をやるには1つしか選択肢がない事が望ましいです。
というようにばっさりやってしまうのはかなりの判断ミスだと思われます。
汎用の言語と、それによってカバーされるプログラムの世界の広さをもっと具体的かつ
実際的にまとめあげてからでないと、そのような未だない綺麗な言語を設計することが
可能であると主張することは難しいと思います。説得力の点で。
>>950 「言語の上っ面の設計だけ」したい奴って言われたくなかったら、
もうちょっと納得のいく言い訳言ってみて。
955 :
940 :2006/09/12(火) 02:02:26
Javaのキモい部分だけ取り除けばそれなりにいい感じになりそうだけど。 とりあえずスレ違いなんでどっかのwikiに移動します。 さようなら。 まとまったらリンクだけここにはっときますね。
>>955 > キモい部分だけ
という発言が「上っ面」といわれる所以になってるのに気づけ
ノシ
>>950 本来はプログラミング言語はメタ言語なんだから、
「ある言語で何かを表現したら、何かの意味を示している」
じゃなくて
「何かの意味を表現するために、ある言語で何かを表現している」
じゃん
だから
> 本気で現場で使える言語
とか
> パフォーマンス
とか
> できるだけ小さい言語マニュアル
とか
> ライブラリのドキュメントさえ読めばすぐに使える
とかいう表面の話で終わってるのがつらいね
今のオブジェクト指向言語ってデータ(オブジェクト)を大事にしすぎてると思う。 理想的にはコードとデータが等しい価値観をもつといいと思うけどLispは流行る気がしないし。 とにかくオブジェクトっていうデータ主体整理方法があるなら、 コード主体整理方法があってもいい良いきがするんだよねえ。
(lil゚Д゚)その発想はなかった OOPはデータ中心じゃないぞ
それはともかく 誰かそろそろ新スレよろ
961 :
誰か :2006/09/12(火) 07:27:11
>>958 oopを全然理解してないやん。
まずちゃんと学習してから妄想しようね。
>>959 c++からOOP入ってるから構造体の中に関数入れているってイメージが強いのかも。
世の中もアルゴリズムよりデザインパターンみたいな風潮になっている気がするし。
>>962 色々勉強した結果にOOPはデータ主体のプログラム整理術だと結論づけたんだけど。
一言で否定されると悲しいな。
OOPとは何かを語れる能力 ⊃ ある事例AがあってAはOOPに属さないと指摘できる能力
複数形だとオットットってやつ
そんなわけで
>>963 は気にしなくてもいいと思われ
OOPなんて、所詮 >データ主体のプログラム整理術 程度のものだろ まあ、Java信者はそれじゃゆるせないみたいだけど
970 :
デフォルトの名無しさん :2006/09/12(火) 14:20:16
いや、JavaでOOP語られてもなあ。
Javaは「デストラクタのないC++」への道を突き進む暴走特急
Javaはプリミティブ型のために純粋なOOしてないとよく言われますが
スレ違い
次スレ立ったみたいなんで とりあえず埋めますか
あなたのエッチなソースみせてください。
OOPなんて所詮とかいう人に限ってプログラムが流れ作業だと思っているに違いない
全てがオブジェクトじゃないとゆるせない人乙w
OOPマンせーなひとって、OOPで何でもモデリングできちゃうって思ってるわけでしょ? なんか、かなり視野せまくね〜? つうかウサンクセ〜
なんか急に釣り針が増えたな
>>981 ああ。うっかり飲みこむところだったぜ・・・アブネェアブネェ
∩___∩ / | ノ ヽ / / > < |/ そんな餌パクッ | //// ( _●_)/ミ 彡、 l⌒l ノ / __ \ \ヽ . (___) \__) . O| / | /\ \ | / ) ) ∪ ( \ \,,_)
うまそうにくいやがる
次スレ立ったみたいなんで とりあえず埋めますか
梅
小梅ちゃん
977には釣られてもいいと思うんだ
.hなソースはありません。 該当するC/C++スレに移動してください。
えっちなのはいくないと思います
以降、モナドについて語る。
ありゃ〜おいしいねぇ〜
あっちはへんなのがわいてる
次スレが痛いのでつ。
1000だったらF言語登場
Eは無視かよ
1000?
*'``・* 。 | `*。 ,。∩ * + <`∀´> *。+゚ `*。 ヽ、 つ *゚* イルボンになる魔法を〜♪ `・+。*・' ゚⊃ +゚ ☆ ∪~ 。*゚ `・+。*・
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。