07/10/05 20:16:30
プログラミング言語 D (D Programming Language) について語るスレッドです。
過去スレは >>2
■本家
URLリンク(www.digitalmars.com)
URLリンク(www.kmonos.net) (和訳)
■コンパイラ
URLリンク(www.digitalmars.com) (DMD, 本家)
URLリンク(dgcc.sourceforge.net) (GDC, gccフロントエンド)
URLリンク(gdcmac.sourceforge.net) (GDCのmac用バイナリ)
■参考URL
URLリンク(f17.aaa.livedoor.jp) (D言語研究)
URLリンク(dsource.org) (dsource)
URLリンク(www.sun-inet.or.jp)
URLリンク(wisdom.sakura.ne.jp)
2:デフォルトの名無しさん
07/10/05 20:17:02
■過去スレ
Part14 スレリンク(tech板)
Part13 スレリンク(tech板)
Part12 スレリンク(tech板)
Part11 スレリンク(tech板)
Part10 スレリンク(tech板)
Part 9 スレリンク(tech板)
Part 8 スレリンク(tech板)
Part 7 スレリンク(tech板)
Part 6 スレリンク(tech板)
Part 5 スレリンク(tech板)
Part 4 スレリンク(tech板)
Part 3 スレリンク(tech板)
Part 2 URLリンク(f3.aaacafe.ne.jp)
Part 1 URLリンク(pc5.2ch.net)
3:デフォルトの名無しさん
07/10/05 20:17:33
■関連スレ
D言語なら俺に聞け
スレリンク(tech板)
D言語を広めるスレ
スレリンク(tech板)
D言語は多分コケると思っている人の数→
スレリンク(tech板)
【次世代言語】D言語でOSを作ろう【Monaの移植?】
スレリンク(tech板)
バイナリをゲロる言語の魅力って何?
スレリンク(tech板)
その他リンク
【Java/C/PHP/Perl/Ruby/Python/TeX】Eclipse M22
スレリンク(tech板)
eclipseってそんなに良いか?【エクリプス】
スレリンク(tech板)
統合開発環境Eclipseプラグイン開発QA
スレリンク(tech板)
"Code of the Nerds" Digital Mars C/C++
スレリンク(tech板)
4:デフォルトの名無しさん
07/10/05 21:33:36
(new Otsu).res(1)
5:デフォルトの名無しさん
07/10/05 21:58:45
otu().dup().otu().otu().otu()otu().otu().print();
6:デフォルトの名無しさん
07/10/05 23:14:17
しまった言い忘れてた・・・
そろそろこの二つはテンプレから外さないか
URLリンク(www.sun-inet.or.jp)
URLリンク(wisdom.sakura.ne.jp)
URLリンク(f17.aaa.livedoor.jp)
に載ってるもののうち下の4つを推薦しておくわ
# C/C++に疲れた人のD言語 … haru氏
# わかったつもりになるD言語 … K.INABA氏
# D始めました。 … shinichiro.h氏
# D言語入門講座 … SHOO氏
7:6
07/10/05 23:20:38
アドレス載せるの忘れたのでテンプレ用フォーマットで再投下(最初のアドレスが長すぎる・・・)
URLリンク(rayerd.ddo.jp) (C/C++に疲れた人のD言語)
URLリンク(www.kmonos.net) (わかったつもりになるD言語)
URLリンク(shinh.skr.jp) (SDL, SDL_*, OpenGL, GLU, glutのポーティングとか)
URLリンク(shoo.s20.xrea.com) (D言語とTangoの入門講座)
そして >>1 乙
8:デフォルトの名無しさん
07/10/05 23:57:55
>>7
そういう時は、TinyURLで圧縮しとけば良いんじゃね?
C/C++に疲れた人のD言語:URLリンク(tinyurl.com)
これからテンプレのWiki関係URLは圧縮しとけば良さげ。
9:8
07/10/05 23:58:51
ってぐわw
ごめんwうまく展開できてないっぽいわw
10:デフォルトの名無しさん
07/10/06 00:02:01
あれ? 俺はちゃんと元のページに飛べたよ?
11:8
07/10/06 00:12:46
>>10
mjd?
あれーオレだけなのかw
何故かindexに飛んじゃう・・・
12:デフォルトの名無しさん
07/10/06 02:22:03
じゃあテンプレのテンプレなw
誰か次スレ立てるときに覚えていたら思い出させてちょうだい
プログラミング言語 D (D Programming Language) について語るスレッドです。
過去スレは >>2
■本家
URLリンク(www.digitalmars.com)
URLリンク(www.kmonos.net) (和訳)
■コンパイラ
URLリンク(www.digitalmars.com) (DMD, 本家)
URLリンク(dgcc.sourceforge.net) (GDC, gccフロントエンド)
URLリンク(gdcmac.sourceforge.net) (GDCのmac用バイナリ)
■参考URL
URLリンク(f17.aaa.livedoor.jp) (D言語研究)
URLリンク(dsource.org) (dsource)
URLリンク(tinyurl.com) (C/C++に疲れた人のD言語)
URLリンク(www.kmonos.net) (わかったつもりになるD言語)
URLリンク(shinh.skr.jp) (SDL, SDL_*, OpenGL, GLU, glutのポーティングとか)
URLリンク(shoo.s20.xrea.com) (D言語とTangoの入門講座)
13:デフォルトの名無しさん
07/10/06 04:10:02
2.005来てるね
14:デフォルトの名無しさん
07/10/06 04:56:36
D 2.005
Oct 1, 2007
New/Changed Features
* std.math.sin, cos, tan are now evaluated at compile time if the argument is a constant.
* Added Cristian Vlasceanu's idea for C++ interface for 'plugins'
* Overhaul phobox linux.mak and add documentation build logic
* Massive additions to std.conv
* Add writeln() and write() to std.stdio
15:デフォルトの名無しさん
07/10/06 07:31:24
* Add writeln() and write() to std.stdio
これは地味だが良修正
16:デフォルトの名無しさん
07/10/06 07:40:16
>>C++ interface
なにこれ
C++のクラスがDLLでつかえちゃうのかしらん
17:16
07/10/06 07:44:43
調べた。
感想:すげぇ・・・
18:デフォルトの名無しさん
07/10/06 08:15:28
やっと由美がかないそうだ
19:デフォルトの名無しさん
07/10/06 08:44:08
Tango 0.99.2 Don has been released.
20:デフォルトの名無しさん
07/10/06 09:20:17
Tangoの、0.99.9の次バージョンは何になるのだろうか
21:デフォルトの名無しさん
07/10/06 09:21:52
extern(C++) キタコレ!!!!
22:デフォルトの名無しさん
07/10/06 10:21:39
乙
23:デフォルトの名無しさん
07/10/06 10:42:13
>extern(C++)
これ、軽く祭りじゃねぇの
24:デフォルトの名無しさん
07/10/06 13:24:15
ライブラリ使えないし正直2.0は暫く見送り……と思っていた俺にもそろそろ『時期』って奴が来たのか?
25:デフォルトの名無しさん
07/10/06 13:36:36
おまいら、もっと騒げよ
26:デフォルトの名無しさん
07/10/06 13:53:41
>extern(C++)
すげー
けど、現状Cライブラリでなんとかなってるし
リンクしたいC++ライブラリなんてないしな・・・
27:デフォルトの名無しさん
07/10/06 13:55:48
もれなくさげてるお上品なおまえらに萌えだ
28:デフォルトの名無しさん
07/10/06 14:10:38
D始まったな。
遊んでくるわ。
29:デフォルトの名無しさん
07/10/06 15:18:29
C++のライブラリをポートする必要がなくなったってこと?
誰かエロい人おしえてくれ。
30:デフォルトの名無しさん
07/10/06 15:35:41
ベターC++ときいて飛んできました
31:デフォルトの名無しさん
07/10/06 15:37:25
ついにポートする必要なくなったのかな。
本家BOOST使い放題ってこと?
32:デフォルトの名無しさん
07/10/06 15:39:25
boostは大部分がマクロやテンプレートに依存してるから無理だろ。
33:デフォルトの名無しさん
07/10/06 15:40:48
あらら。でも、視野ひろがったなぁ。
34:デフォルトの名無しさん
07/10/06 15:41:17
つURLリンク(www.digitalmars.com)
35:デフォルトの名無しさん
07/10/06 16:05:26
htodのc++対応版が欲しくなるな。
36:デフォルトの名無しさん
07/10/06 18:02:24
ざっと見た感じできるのはここまでで
extern(C++) {
interfance CPP { ... }
CPP getCPP();
}
CPP cpp = getCPP();
こういうことはできないのか
extern(C++) { class CPP { ... } }
CPP cpp = new CPP;
ここまできたらなんとかして欲しいけど無理か?
37:デフォルトの名無しさん
07/10/06 18:43:20
だれか
>>34
の翻訳して
38:デフォルトの名無しさん
07/10/06 19:12:32
>>37
神修正につき翻訳中。
適当にばらしてinabaさんとこのdikiに書いておくわ。
39:デフォルトの名無しさん
07/10/06 19:14:44
DからC++が使えることよりも
C++からDが使えることの方が嬉しい鴨試練
40:デフォルトの名無しさん
07/10/06 19:19:23
---- C++ ----
#include <iostream>
using namespace std;
class D{
public:
virtual int bar(int i, int j, int k){
cout << "i = " << i << endl;
cout << "j = " << j << endl;
cout << "k = " << k << endl;
return 8;
}
};
D *getD(){
D *d = new D();
return d;
}
---- D ----
extern (C++){
interface D{
int bar(int i, int j, int k);
}
D getD();
}
void main(){
D d = getD();
d.bar(9,10,11);
}
例にこんなのあるけど何かダサくね?
D d = D::create();
とか無理なんけ?
41:デフォルトの名無しさん
07/10/06 19:21:00
ほいさ。逐次書いてます。
inabaさんとかぶらんように、下のほうから翻訳するかも
URLリンク(www.kmonos.net)
42:デフォルトの名無しさん
07/10/06 19:23:51
>>40
>>36
とりあえず気持ちを繋ぎ止める為に身体を許したって感じだな
43:デフォルトの名無しさん
07/10/06 19:24:30
>>41
GJ!!!
ありがとう!!
44:デフォルトの名無しさん
07/10/06 19:36:39
流れをぶったぎってスマン
以下のコードがdmd1.020では大丈夫だが dmd1.022 (1.021も?)では
コンパイルエラーになった(【1】の const をはずすと大丈夫)。
ちなみにインデントには全角スペース使いました。
Main.d(29): mixin Test!(TestStruct(12)) does not match any template declaration
----------- Main.d -------------------------
private import std.stdio;
template Test(alias test)
{
void test_func(){ test.hoge(); }
}
struct TestStruct
{
void hoge(){ writefln("hoge %d", a); }
int a;
}
const TestStruct test_struct = {12}; // 【1】
mixin Test!(test_struct);
void main()
{
test_func();
}
-------------------------------------------------
ひとまず const 外してやり過ごす・・・。
45:デフォルトの名無しさん
07/10/06 19:38:13
「{C関数}と{クラス}」
だと
「何のクラス」か分からなくなるので
the とか it's とか冠詞が付くんじゃないかな
よって誤植と推測
46:デフォルトの名無しさん
07/10/06 20:07:29
翻訳はちょっと一休み。inabaさんのCとのインターフェースの翻訳を流用しながら書いています。
いつも使ってるvistaマシンがアップデートで死んでる。
親指シフターにローマ字入力はきついぜ。
47:前スレ978
07/10/06 20:44:49
dmd2.005で動かしたら動いた。
というか、なんか勘違いしてたかもw
前スレ>>979 レスthx!
48:デフォルトの名無しさん
07/10/06 20:51:15
>>40
これってC++側にvoid deleteD(D*t)用意しないとリークする?
それとも、GCされるの?
49:デフォルトの名無しさん
07/10/06 22:05:23
C++オブジェクトをDのinterfaceとして取得する発想は盲点だった・・
ちょっと感動中。Cristian Vlasceanuさんとやら天才じゃね?
さて、ありがたく和訳を読ませて頂きまする。
# ふつーのテキストが<pre>に包まれて
# 横に長ーく表示されちゃってるのは
# Dikiの仕様なのかしらん。
50:デフォルトの名無しさん
07/10/06 22:09:23
草取りを除いて翻訳終わりました。>41のアドレスに。
>>40
DからはC++のクラス全体が見えているわけではなく、
ある型のインスタンスポインタと、その型の仮想関数テーブルだけが見えているようです。
したがって、
・フィールド(メンバ変数)
・staticメンバ
・コンストラクタ、デストラクタ、変換(cast?)オペレータ、演算子オーバーロード、割り当て関数(newとdelete)
これらはすべてアクセスできません。
多重継承したC++クラスのインスタンスも怪しいです。
>>48
リークします。
>40のC++側コードに追加するなら、
int removeD(D* obj){
try{
delete obj;
} catch(なにがしか) {
例外を受け取ったらエラーコードをreturnする
}
return 正常;
}
とするべきでしょう。
多用するなら、D側でラッパとなるクラスを用意して、
そのデストラクタからC++のデストラクタとなる関数を呼び出すようにするしかないかと。
二重deleteの防止などはかなり面倒ですんで、C++側でshared_ptrかGCを用意する対策が必要でしょう。
51:デフォルトの名無しさん
07/10/06 22:12:17
>>50
㌧。
そうすると、既存のC++ライブラリをDから使いたければ、
C++でラッパーを書かないといけないんだな。
ちょっと面倒だね。
52:デフォルトの名無しさん
07/10/06 22:20:34
ダサい部分や面倒な部分も、
Dならどんどん解決策が出てくるに違いないとか思える気分だw
D 2.0始まったな!
53:デフォルトの名無しさん
07/10/06 22:21:57
お前らテンションたけぇなぁ
自分の足の匂いでも嗅いで落ち付けよ
ああ臭ェ
54:デフォルトの名無しさん
07/10/06 22:47:43
構造体の扱いについていまいち不明な点があったので、訳註に加えました。
構造体扱いならメンバと非仮想関数にアクセスできる?(仮想関数にはアクセスできないが)
>>49
# 仕様ではないでしょうか。とりあえずコピペでテキストエディタで折り返すと見やすいかと。
>50に追加。
非仮想関数にもアクセスできません。
55:デフォルトの名無しさん
07/10/06 23:03:40
vtblしか見えないのか。ちょっと使い道限られるなあ。
56:デフォルトの名無しさん
07/10/06 23:29:21
COMには最適w
57:デフォルトの名無しさん
07/10/06 23:35:44
DCOMか
58:デフォルトの名無しさん
07/10/07 00:02:23
>>57
それは紛らわしすぎw
59:44
07/10/07 00:05:02
D1.022 にあるこれか
Bugzilla 1474: regression: const struct with an initializer not recognized as a valid alias template param
これはどういうこと?直ったのか?直ってないけど・・・。
仕様としてだめになったってこと??(regression:回帰、復帰、逆行、退化、退行)
フォーラム読んでも結論がよくわからず・・・。誰かわかります?
60:44
07/10/07 00:10:33
こっちも関連あるかな。
Bugzilla 1456: Cannot use a constant with alias template parameters
61:デフォルトの名無しさん
07/10/07 00:27:53
regressionってのは「一回直ったバグが再発したよ」ってことだと思う
62:44
07/10/07 01:03:28
> 61
なるほど。じゃあいつか直るってことかな。
どうもありがとう。
63:デフォルトの名無しさん
07/10/07 10:39:16
>>59-62
「「一回直ったバグが再発したよ」っていうバグを直したよ」ていうのが
> Bugzilla 1474: regression: const struct with an initializer not recognized as a valid alias template param
これなので、直ってないのだったら報告した方がいいかも。
2.005だと直ってるぽいので1.x系の問題かな。
64:デフォルトの名無しさん
07/10/07 12:52:36
D言語研究、リンクがいくつか変なとこに書き換えられてる?
FrontPageの差分を見るとそうっぽいんだけど、携帯からだとよくわからない…
65:デフォルトの名無しさん
07/10/07 13:43:15
>>64
直してみた
66:デフォルトの名無しさん
07/10/07 14:24:52
ブラウザの脆弱性を利用してキーロガーをトロイの木馬しようとしているのか
物騒な時代だな
67:デフォルトの名無しさん
07/10/07 18:46:37
>>65
おおお。ありがとう!
68:デフォルトの名無しさん
07/10/07 23:59:49
なんかバグ見つけた
import std.stdio;
void main(){
writefln(join("123", "456"));
}
string[] join(T ...)(T t){
string[] a;
foreach(e; t){
a ~= e;
}
return a;
}
joinの返り値が壊れる
D2.005
69:デフォルトの名無しさん
07/10/08 00:20:05
C++のクラスのメンバ変数だけど、無理やり構造体と同じ風にアクセス出来る気がする。
Dのクラスの場合、インスタンスのポインタから+8バイト位置から各メンバ変数並んでいるけど、
C++の場合、+0バイト位置から並んでいるみたい…。
70:68
07/10/08 00:30:51
68はバグではなかったです。
お騒がせしました。
71:デフォルトの名無しさん
07/10/08 01:01:58
>>69
ABIの仕様次第なんじゃないのかそんなん
72:デフォルトの名無しさん
07/10/08 01:02:56
tango使ってみようと思ったらstringが未定義とか言われてしまった。
付属のdmdは1.0.21だから大丈夫なはずなんだけども。仕様?
73:デフォルトの名無しさん
07/10/08 01:38:52
stringはdmdじゃなくてtangoのobject.diの中身の問題だとおもうので、tangoの仕様なんじゃないかと。
74:デフォルトの名無しさん
07/10/08 10:50:05
static if(is(string)) alias char[] string;
75:デフォルトの名無しさん
07/10/08 10:56:11
>>71
マングリング規則や仮想関数テーブルの位置や順番すら処理系依存なんだから、
この際、特定のコンパイラ向けにとことん特化すべきじゃなかろうか。
dmdならdmc++の出力とだけリンクできればいいと思う。
76:デフォルトの名無しさん
07/10/08 13:15:47
いや、C++はpluginって書いてあるから、abiごとにplugin書かないといけないんだろ。
それより、C++から来た例外をどうキャッチするのかが気になる。
77:デフォルトの名無しさん
07/10/08 13:22:02
>76
仕様読んでから書け。
78:デフォルトの名無しさん
07/10/08 13:31:52
すまん、ちゃんとダメって書いてあったな>例外
pluginも、plugin"で"C++対応じゃなくて、plugin"のために"C++対応するんだな。
79:デフォルトの名無しさん
07/10/08 13:33:35
DMDScriptをD2.0対応にかきかけたが
くじけそう・・・
80:デフォルトの名無しさん
07/10/08 23:22:48
Dにもユーザー定義リテラルください。
81:デフォルトの名無しさん
07/10/08 23:36:58
ありゃ。C++のマングリング規則ってはっきり決まってたっけ?って
思ってたら、やっぱdmc依存なん?
「C++ではマングリング規則がコンパイラ依存」なんて記述も見つかるし。
そうだとしたら「dmdはC++のマングリングを把握しています」なんて書いてあるけど、
微妙にJARO通報モノだったり? 訳注でも付けとこか。
82:デフォルトの名無しさん
07/10/08 23:37:12
stlのlistとかに相当するのって出来合いのあったっけ?
boost::multi_indexが欲しいがこれは作るしかなさそう
83:デフォルトの名無しさん
07/10/08 23:45:14
>>82
コレクションクラスならtangoに入ってる。
84:デフォルトの名無しさん
07/10/08 23:51:47
>>81
Linux版のdmdでは以下のに対応してる。Windows版は知らね。
URLリンク(www.codesourcery.com)
85:デフォルトの名無しさん
07/10/09 01:18:39
>>84
ありがとーぉ。dmcはWin32しか無いじゃないかーとか絶望するところだった。
……でも正直書いてあることの意味がほとんど理解できませぬ。
C++ABIの標準を決めようって活動で、
g++とかはそれに従ったマングリングをすることもできる、って事?
Win版に関しては、最後の
「時間がたてば、より多くのC++ ABIの側面が
Dから直接アクセスできるようになるでしょう。」の一文に期待するしか?
86:デフォルトの名無しさん
07/10/09 01:22:33
>>83
ありがとうございます。
見てみましたがなんか微妙な使い勝手?
87:デフォルトの名無しさん
07/10/09 01:32:52
>>85
IA-64向けコンパイラでは標準、それ以外のアーキテクチャ向けでもg++とicpcがこのabiを元にした物を標準で使ってる。
88:デフォルトの名無しさん
07/10/09 01:35:09
URLリンク(ja.wikipedia.org)
dmc++とvcはマングリング規則一緒っぽい。
89:デフォルトの名無しさん
07/10/09 04:47:57
DMDで64bit版あったらいいのにって思うのは俺だけ?
90:デフォルトの名無しさん
07/10/09 07:39:02
>>88
Wikipediaそんなのまでのってるのか・・・
91:デフォルトの名無しさん
07/10/09 12:37:34
オタクがおおい分野はとんでもない内容まで乗ってますよ。
どうせこの板の常連とかが書いた or 訳したんでしょう。
92:デフォルトの名無しさん
07/10/09 13:00:16
msvcとdmc++のマングリング規則が一緒でも
オブジェクトファイルの形式が違うからリンクできないんだよね?
C++って案外可搬性ないんだな
93:デフォルトの名無しさん
07/10/09 16:04:45
うぐぅ。Linux上でのC++との連携がうまくいかない・・。タコですんません。
>>84で言うLinux版dmdて、
URLリンク(www.kmonos.net) のヤツの事でOK?
それともgdcとゆーやつを頑張ってコンパイルしなきゃダメ?
94:デフォルトの名無しさん
07/10/09 16:33:32
>>93
そのヤツでOKだけど
URLリンク(www.digitalmars.com)
から落とさないとバージョン古いよ
95:デフォルトの名無しさん
07/10/09 17:50:24
インスタンスからstaticメソッドが呼べるのがちょっとううざったいというか、
演算子オーバーロードでstaticなのとそうでないのが区別できないのが困る
96:デフォルトの名無しさん
07/10/09 18:11:32
関数でslice/range表現(x..y)を受け取りたい……
void func(real x..y);
と関数を定義したいなあ、と。
タプルでもいいから。
末尾を含むかどうかはx...y表現を認めるかどうかは難しそうだけど。
機能の提案って本家のMLとかに流すんでしたっけ?
97:デフォルトの名無しさん
07/10/09 18:14:05
digitalmars.Dでいいと思う
98:デフォルトの名無しさん
07/10/09 18:15:24
そもそも range型があってもいいんじゃないかと思う
99:デフォルトの名無しさん
07/10/09 18:16:51
実装されたときにx..yがx, yに展開されるようになると予想
100:デフォルトの名無しさん
07/10/09 18:19:00
1..3 は Tuple!(1,2) じゃないといやだよう
101:デフォルトの名無しさん
07/10/09 20:11:28
1..6はTuple![1,6)
102:デフォルトの名無しさん
07/10/09 20:34:40
>>101
対カッコの強調表示がむちゃくちゃになるのが難点
103:デフォルトの名無しさん
07/10/09 20:51:19
Tuple!("[1,6)");
104:デフォルトの名無しさん
07/10/09 22:28:19
それならTuple!("1..6")にしてやれよww
105:デフォルトの名無しさん
07/10/09 22:37:54
一通りここでの議論を読んで、既出の議論がないか調べてみます。
URLリンク(www.digitalmars.com)
x..yがx, yに展開されるだけだとsyntax sugerとしてもいまいち弱い感じがしますね。
(x, y]を表現できるリテラルはかなり少ないので、そのへんの書き方で文法を汚さずに追加できれば面白そうなのですが。
以前x<Range<=yと書くとRange型のインスタンスが生成されるクラスをC++で書いたのですが、
opCmpだとそれは許されないんですよねえ。
106:デフォルトの名無しさん
07/10/09 22:55:41
>>104
は?
107:デフォルトの名無しさん
07/10/09 22:56:03
触ったらかわいそう
108:デフォルトの名無しさん
07/10/09 23:30:36
先にちょいと提案したいことがあったので、そっちを提案してみる
class Foo {
enum EnumType { A, B, C }
}
void func(Foo.EnumType arg);
こういう定義のとき、funcに列挙された値を与えるのに
func(Foo.EnumType.A)
とやたら冗長なので、
func(A)
と書いて通るように識別子探索を拡張して欲しいと提案してみる。
これっていまのところ解決策はないですよね?
109:デフォルトの名無しさん
07/10/09 23:36:35
>>108
今後のプランの一つに入ってるって、どこかで見た気がする。
カンファレンスのスライドだったかなあ。
110:デフォルトの名無しさん
07/10/09 23:48:10
>>109
それはいいねえ。
早めに対応してもらいたい感じだ
カンファレンスのログはあったと思うので、探してみる
111:デフォルトの名無しさん
07/10/09 23:54:26
だからslice/rangeはRangeオブジェクトリテラルにしようと(ry
>>93
死ぬほどありがとう。おかげで悩みまくった数時間が気持ちよく無意味になりますた。
そしてdmdのバージョン出力をよく見てなかった俺めアホが!
しかし完全にUTF-8化されているだけあって、Ubuntuじゃ文字化けしねぇなぁ。
Vista買ったのがバカらしくなってきたわい。
>>108
あー。それJavaでもC#でも同じ事思った覚えが。是非是非。
112:111
07/10/10 00:02:00
て、何自己レスしとんねん。
res[111].replace(">>93", ">>94");
113:デフォルトの名無しさん
07/10/10 00:20:15
>>110
URLリンク(d.puremagic.com)
うぉるたたんのスライドのp35
114:デフォルトの名無しさん
07/10/10 00:29:17
34だた
115:デフォルトの名無しさん
07/10/10 00:42:15
enumも今になってみると中途半端というかinvariantとかぶってるよな。
定数関連はinvariantに任せて、enumの方はシンボルってことで識別子名を
簡単に表示できるようになってくれればいいのに。
enum使うとデバッグ作業がめんどくさくて。
116:デフォルトの名無しさん
07/10/10 00:56:51
次の更新→enum廃止
117:デフォルトの名無しさん
07/10/10 01:13:07
>>115
ありがとう。
enum以外にも魅力的な拡張が多くて目移りしますね。
第一引数が配列である関数をプロパティ的に扱える機能の拡張はいいですね。
ついでにクラス内の(public)メンバを列挙して、自動で配列プロパティに突っ込むテンプレートがあるとうれしいかも……
ついでにデリゲートもオーバーロードしたかったり
>115
struct + invariant配列のほうが便利だったりしますね。パラメタ多いと。
118:デフォルトの名無しさん
07/10/10 01:20:35
そういえば、pp27あたりのstructがinterfaceを継承できるという案があるが、
あれはC++のクラスを利用する布石ではないかという希ガス
まあ、便利なものはテンプレートの互換性がないと何も使えない気も……
119:デフォルトの名無しさん
07/10/10 02:00:48
delegateのcovariant/contravariantが早く欲しい
その次は(環境を持ち運べる)closureかな
120:デフォルトの名無しさん
07/10/10 02:41:24
うひょー、D Conference 2007の資料、結構目を引く点山盛りな感じ。
英語未熟でおぼろげにしか解らないけど。
とりあえずヲルタンのを見てみただけだけど、要点だけまとめた簡潔なスライドだし、
翻訳する費用対効果は高いんじゃ、と無責任に言ってみる。
あと疑問ー。
URLリンク(www.kmonos.net)
の「Dのガベージコレクタで確保したメモリへのポインタを渡すには...」のくだり。
GCによる解放対策にだけ触れてる感じだけど、
GCって生きてるオブジェクトでも、移動してポインタ書き換えとかするよね?
ほんとに安全にD外にGCポインタ貸し出すなら、GCを停止しないといけないんじゃ?
121:デフォルトの名無しさん
07/10/10 09:28:04
URLリンク(d.puremagic.com)
とりあえず、はっておこう
122:デフォルトの名無しさん
07/10/10 09:30:02
>>120
オブジェクト/クラス単位でガベコレのON/OFFって出来なかったっけ
123:デフォルトの名無しさん
07/10/10 11:27:14
D Conference 2007.jp開かれないかな
124:デフォルトの名無しさん
07/10/10 16:28:12
>>122
カスタムアロケータを書くしかなかったと思う。
125:デフォルトの名無しさん
07/10/10 21:34:36
import std.stdio;
void main(){
auto b = new B();
b.f();
}
class A{
void f(){
writefln("A");
}
}
class B: A{
final void f(){
super.f();
writefln("B");
}
}
リリースビルドして実行するとBがダブって表示されるのですが、
これは正しい動作なんでしょうか? バグなのでしょうか?
126:デフォルトの名無しさん
07/10/10 21:34:57
カスタムアロケータたのCCCCCCCCCCCCCCC
127:デフォルトの名無しさん
07/10/11 01:00:16
コンパイル時に整数乱数が欲しいんだが、どうすればいいんじゃろう。
128:デフォルトの名無しさん
07/10/11 01:11:40
>>127
つ __TIMESTAMP__
129:デフォルトの名無しさん
07/10/11 01:14:30
thx
そういえばそんなのあったなあ。
だけど文字列なのか…ちょっと厄介だのう
130:デフォルトの名無しさん
07/10/11 06:26:34
テンプレート内で文字列に変換するとき、迷ったらbox(...).toStringすればいいことに気づいた
便利だなこれ
>>120
「開放する」の元の単語ははcollectであってdeleteやfreeじゃないので、
「処理する」「片付ける」のほうがいいかもしれませんね。
131:デフォルトの名無しさん
07/10/11 06:48:08
>>129
例えばこんな感じ
hashの中身は、なるべくばらけが大きくなるような暗号系のアルゴリズムに近いほうがいいかも。
この値をキーにして、立ち上がりの早い擬似乱数生成器にかける方法もある
いずれにせよインチキなんで、求める乱数性に応じて適当にやってみてください
int hash(in char[] x) {
int sum;
foreach(c; x) sum^=cast(int)c*3;
return sum;
}
static if( hash(__TIMESTAMP__) == 1 ) {
}
132:120
07/10/11 10:47:31
>>130
おおう、対応どもです。しかしせっかく真摯に対応していただいて申し訳ないのですが、
私の言いたいことは翻訳の仕方に関してでは無く、書いてある内容そのものなのデス。
多分原文でも言ってることは同じで、翻訳には問題なかったんじゃないでしょか。
というわけで、改めて>>120の疑問を書き直してみたり。
「Dでnewした領域のポインタをC++に渡してやってもいいけど、
途中でGCが走ってその領域がcollectされちゃうと、
いきなりポインタが無効になってC++側が困るよね。
だから以下ほげほげな方法で、GCのcollect対象にならないよう気をつけてね」
ってヲルターは言ってるけど、ポインタが無効になる要因ってcollectだけじゃないよね?
URLリンク(www.kmonos.net) によれば、
> 4. 残ったメモリ領域のデータをコピーして使用領域をまとめる処理 (コピーGCと呼ばれます) が実行される可能性があります。
> ガベージコレクタは、オブジェクトをメモリ上の任意の位置に再配置することがあり...
つまりcollect対象でない「生きた」領域を指すポインタだって、GCが走れば再配置によって無効になる可能性がある。
本当は「生かす」だけじゃなく、そのメモリ位置に「固定」する方法が必要なんじゃないか?
……って、アレ? このへん「Cとのインターフェイス」に書いてあることと同じじゃないすか。今気付いた。
今まで問題になったことなかったっけ? 再配置なんて実際には滅多に起こらないとか?
133:デフォルトの名無しさん
07/10/11 11:12:23
>>132
・今のPhobosとTangoのGC実装はコピーGCじゃないので、再配置なんて実際には決して起こらない
・もし実装がコピーGCに変わったら、指摘されてる通りの問題は起きる
・そんときは std.gc.fix(void*) みたいな固定するメソッドが追加されるんじゃないかなあ(予想
134:デフォルトの名無しさん
07/10/11 12:11:03
Tangoのほうは仕様変更とかないの?
135:デフォルトの名無しさん
07/10/11 12:27:46
SDLのD2.0用のポーティングってある?
136:デフォルトの名無しさん
07/10/11 12:33:55
>>134-135
わかんね
137:デフォルトの名無しさん
07/10/11 13:33:07
>>133
managed C++ に、pinっていうのがあったなぁ
(ピン止めという意味)
138:デフォルトの名無しさん
07/10/11 15:01:05
>I think Herb was talking about ADL. D doesn't have ADL, but the next update will include "overload sets" which, although very different, accomplish the same thing.
大風呂敷ktkr。非常にwktk。
139:デフォルトの名無しさん
07/10/11 15:28:15
だれかよんでくだしい
140:デフォルトの名無しさん
07/10/11 16:18:29
私は、Herb(人の名前?)はADLについて話していたと思っている。
DはADLを持ってはいないが、次のアップデートの際には「overload sets」が導入されるだろう。
これはADLとは非常に異なるものの、同じことを実現するものである。
141:デフォルトの名無しさん
07/10/11 16:20:54
誤訳や補足があればおながいします
142:デフォルトの名無しさん
07/10/11 16:31:43
元の話よんでないけど文脈からして
Herb = Herb Sutter (C++のえらいひと)
ADL = Argument Dependent Lookup
namespace Hoge { class X{}; void foo(X* x){} }
foo( new Hoge::X );
// Hoge::foo って書かなくても、引数のクラスと同じ名前空間で
// 定義されてるfooを勝手にコンパイラが呼んでくれるC++の機能
// 複数の名前空間にまたがって関数オーバーロード出来る
かと。
Walterたんは昔ADLやるとカオスになるからやらないって言ってたけどどうなるんだろう
143:デフォルトの名無しさん
07/10/11 17:45:45
ネームスペースあえてつぶすようなマネはやめてほしいなぁ。。。
パールのお化けがでるよ?
144:デフォルトの名無しさん
07/10/11 17:47:13
(new Hoge.X).foo();
に限ってADLを行うようにすればいいんじゃね?
145:デフォルトの名無しさん
07/10/11 18:00:09
それは、配列のプロパティ的な引っ張り方だねぇ。
うーん。わかる人にはわかるって感じだなぁ。
むー、どうなるんだろうねぇ。
146:デフォルトの名無しさん
07/10/11 23:03:02
>>143
何にもわかってないなぁ。。。
147:デフォルトの名無しさん
07/10/12 16:05:48
>>146
もっとサンプルコードくれくれ。
148:デフォルトの名無しさん
07/10/12 19:10:29
この問題はこういうのだと把握
//b.d
void func(string){}
//a.d
import b;
void func(int){}
void main(){
func(10);
//オーバーロードと考えてこれを呼べてもいいだろうに
//func("hoge");
b.func("hoge"); // 現状フルネームが必要
}
ADLあんまり知らないんだが
importされたモジュールのシンボルと真の意味で重複しなければ
呼び出し可能にするだけだと思うんだけどややこしいことが必要なの?
149:デフォルトの名無しさん
07/10/12 19:49:52
それちがくね?
150:デフォルトの名無しさん
07/10/12 20:27:50
あれ・・・違ったらすまそ
ADLは引数の型の名前空間を見に行って関数を探すみたいだけど
そんなややこしそうなことしなくても素直に考えたら
a.func(int) を a_func_int として
b.func(string) を b_func_string としておいて
どこかで func(10) を見つけたら *_func_int のシンボルを検索し
func("hoge") を見つけたら *_func_string のシンボルを検索するだけだよな?
それでコンフリクトが見つかったらあいまいな関数呼び出しエラーにすればいいんじゃないのかと思って
151:デフォルトの名無しさん
07/10/12 20:40:39
なんかすごく勘違いしてる気がするぞ
152:デフォルトの名無しさん
07/10/12 20:55:03
ううむADLが何で必要なのか勉強してくるか・・・
153:デフォルトの名無しさん
07/10/12 21:35:52
てか調べてから家よ。
なんでお前の想像でレスを消費しなきゃなんないんだよ。アホかいな。
154:デフォルトの名無しさん
07/10/12 22:35:11
低レベルな質問で申しわけないんですが、構造体データを
std.file.read() や std.file.write() で読み書きするにはどうしたら
良いんでしょうか?というか、void[]型の使い方がいまいち分からない。
155:154
07/10/12 23:12:13
すいません、自己解決しました。
void[] は型のない配列だから、構造体もlengthが1の配列にして受け渡しすりゃ良かったんですね。
156:デフォルトの名無しさん
07/10/13 00:53:25
自分でも試してみたけど、そういうmarshalっぽいのはすごい泥臭くなるのね。
毎回手で書くようなもんじゃないということなんかな。
157:デフォルトの名無しさん
07/10/13 01:15:38
構造体をうにおんで囲んでryとか
158:デフォルトの名無しさん
07/10/13 02:06:38
泥臭さもDらしさではある
159:デフォルトの名無しさん
07/10/13 02:29:16
(cast(ubyte*)&st)[0 .. st.sizeof]
共用体のほーがいいかもなー
160:デフォルトの名無しさん
07/10/13 03:11:03
YAMLの実装はありますか?
161:デフォルトの名無しさん
07/10/13 04:36:40
URLリンク(shinh.skr.jp)
これ?
162:デフォルトの名無しさん
07/10/13 22:42:49
>>135
DerelictのD2.0用のポーティングならある
163:デフォルトの名無しさん
07/10/14 05:50:56
そろそろ1系列から2に乗り換えようと思うんだが何がどう変わる?
164:デフォルトの名無しさん
07/10/14 06:24:42
その辺よくわかんなくてずっと1系列使ってる俺。
詳しい人誰か移行ガイドとか書いてくれないかなと思い続けている。
165:デフォルトの名無しさん
07/10/14 10:36:27
>>164
いいだしっぺの法則で是非 m(_ _)m
constとか文字列のコピー、そのあたり型が厳格になったのが
違うと思う
166:デフォルトの名無しさん
07/10/14 13:16:58
2.0 ちょっと使ってみた感じ
・doxygen 未対応(const な引数、戻り値を使うと正常にパースできない)。
・各種ポーティングを2.0用に(若干)修正必要。
・各種ポーティングに渡す時にキャストが必要。
例えばtoUTF16z()などの戻り値が(const wchar*)だけどポーティングのほうは(wchar*)なのでcast(wchar*)が必要
・文字列リテラルが invariant なchar[] なので char[] s = "hoge"; とかやってると修正が必要。
だった。文字列リテラルはともかく、各ツールやライブラリが2.0用に対応してないと面倒くさくて適わない。
結局1.0に戻った。const/invariant/final は1.0に初めから欲しかったなぁ。
167:166
07/10/14 13:20:23
あと不安定だった。bindings の win32 は修正しないと無限ループ突入したし。
168:デフォルトの名無しさん
07/10/14 13:47:48
constといえば、
const(C) c; //Cはクラス
というメンバ変数に代入しようと思ってもできない(言語仕様上できるはず)とか、
メンバ関数でfinal constってできないこととか、
「一度初期化したら変更しない。初期化はコンストラクタじゃないメンバ関数で行う」
ということをしたいときに、finalが使えないこととか、
使いにくい点が多数。
将来なんとかなるのかな。
あと、「あるオブジェクトが別のオブジェクトの参照をもつ」ということをたまにするけど、
そのとき、別のオブジェクトを変更しないときはそれにconstを付けたいと思うのが普通だと思う。
で、そうするとその別オブジェクトに含まれるポインタには全部constが付いてしまう。
例えば、別オブジェクトにHWND型の変数があって、それを取り出してAPI関数に
入れるときには、constが付いてしまっている。
何が言いたいのかというと、win32のバインディングを完全にD2.0に対応しようとするならLPCSTRをconst付きにするだけでは駄目だということ。
ポインタ型を引数に取る全ての関数について、正しくconstをつけないといけない。
でも正直、win32をポーティングしてる人たちがここまでやるとは思えないし、なんかconst周りは絶望感しか感じない。
169:168
07/10/14 13:52:10
あと、余談だけど、関数引数のinって値渡しだったんだな。
参照渡しだとずっと思ってた。
どこで勘違いしたんだろ。
170:163
07/10/14 14:09:05
>>166-168
とん。
結構めんどそうなのでもう少し様子見てみるわ
171:デフォルトの名無しさん
07/10/14 17:04:00
>>169
ポインタの値渡しだね。
1.0の in/out/ref は正直使いにくいと思った。
in でも参照先の値を変更することがいくらでもできるし。
const まわりはまだ検討が足りない気がするなぁ。
172:デフォルトの名無しさん
07/10/14 23:44:10
>>171
>ポインタの値渡し
? アセンブラでみるとポインタで渡すのが参照渡しとおもってたんだけど・・違うのかな。
>参照先の値を変更することがいくらでもできる
castしてない?
173:デフォルトの名無しさん
07/10/14 23:54:33
CTFEでForeachRangeつかえないのかな?
174:168
07/10/15 00:13:18
>>171
>ポインタの値渡しだね。
ただの値渡しだと思う。
デバッガで逆アセしたコード見てみたら、inがあってもなくても同じコードになってたし。
175:171
07/10/15 01:14:50
>>172, 174
ああ、ごめん。俺が言ったのはクラスや配列を引数として渡すときのこと。
int などの基本型ならそのままの値渡し。
176:デフォルトの名無しさん
07/10/15 20:42:17
/*
以下のコードがコンパイルエラーになるんだけどバグ?
bug.d(12): Error: this for m needs to be type S not type bug.C
bug.d(12): class bug.C member m is not accessible
*/
import std.stdio;
import win32.windows;
struct S
{
int m;
}
class C
{
int f()
{
return S.m.offsetof; // エラーになる
}
}
int main()
{
writefln("%d", S.m.offsetof); // これはOK
return 0;
}
177:デフォルトの名無しさん
07/10/15 21:28:16
バグっぽいね
178:デフォルトの名無しさん
07/10/16 07:26:22
デリゲートの挙動が意味不明だ
179:デフォルトの名無しさん
07/10/16 18:36:41
>>178
どんな感じっすか
180:デフォルトの名無しさん
07/10/16 19:18:31
デリゲートな部分ですから、、、
181:デフォルトの名無しさん
07/10/16 19:40:16
【審議中】
∧,,∧ ∧,,∧
∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U ( ´・) (・` ) と ノ
u-u (l ) ( ノu-u
`u-u'. `u-u'
182:デフォルトの名無しさん
07/10/16 21:33:12
OpenGL+SDLでゲームを作っているのですが、
SDL_mixerとABAさんのsound.dを使うようにしたところ、
Out of memoryというエラーが出てクラッシュするようになってしまいました。
メモリ使いすぎかと思ったのですが、
タスクマネージャから見るとメモリ使用量はほとんど増加していないので、
どんなバグを疑えばよいですか?
ソースコードの変更点としては、数箇所にSound.playSe()とSound.playMarkedSe()を追加しただけで、
しかもこのライブラリはABAさんが実用化しているので、何が変わっているのかさっぱりです。
これを取り除くとやはり発生しなくなります。
183:デフォルトの名無しさん
07/10/16 21:34:58
書き忘れ。
コンパイルは成功して、同じ用にゲームは動き、音もなるのですが、
しばらく動かしていると突然エラーが出て終了する、という状態です。
184:デフォルトの名無しさん
07/10/16 23:33:10
>>180
口元の筋肉がちょっと動いた
185:デフォルトの名無しさん
07/10/17 00:29:22
D言語のコンパイラ精度ってどうなの
186:デフォルトの名無しさん
07/10/17 01:22:29
正確性には欠けるな。バグだらけ
187:デフォルトの名無しさん
07/10/17 01:24:16
>>182
D2.0でやってる?
188:178
07/10/17 02:36:03
>>179
要はこういうことなんだなあ、と
URLリンク(www.kmonos.net)
189:デフォルトの名無しさん
07/10/17 04:23:32
爆弾キターーーー
URLリンク(www.digitalmars.com)
What's New for D 2.006
* Transformed all of string, wstring, and dstring into invariant definitions.
Tons of changes in function signatures and implementations rippled through the standard library.
Initial experience with invariant strings seems to be highly encouraging.
* Implemented Overload Sets for functions and templates.
phobosの機能追加は多すぎて省略
190:デフォルトの名無しさん
07/10/17 05:04:39
何か凄い凄い。
std.getoptでプログラムの引数の利用が容易に、std.fileにディレクトリ内のファイル一覧を簡単に取得する方法が無かったのが修正された、std.stdioに機能増えすぎワロタ、std.contractsが新鮮。
std.conv.parseとstd.string.munchのコンボもいい。けど、refを使ったのは別のモジュールにまとめて欲しいような気がしないでもない。
191:デフォルトの名無しさん
07/10/17 05:16:50
すごい、すごいけどD1.0系列の更新が止まったように見える…
仕様が固定されたD1.0系列を使うか新機能とPhobosが見せる巻き返しを堪能するためにD2.0を使うべきか…悩ましい…
192:デフォルトの名無しさん
07/10/17 05:29:55
何がすごいのかさっぱり分からん
193:デフォルトの名無しさん
07/10/17 05:59:56
D言語
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
___ _
/ ____ヽ /  ̄  ̄ \
| | /, -、, -、l /、 ヽ
| _| -|○ | ○|| |・ |―-、 |
, ―-、 (6 _ー っ-´、} q -´ 二 ヽ |
| -⊂) \ ヽ_  ̄ ̄ノノ ノ_ ー | |
| ̄ ̄|/ (_ ∪ ̄ / 、 \ \. ̄` | /
ヽ ` ,.|  ̄ | | O===== |
`- ´ | | _| / |
194:デフォルトの名無しさん
07/10/17 07:51:06
な、なんだどうした何が起こった!? 日本語訳を!
良いニュースなのか悪いニュースなのか!?
195:デフォルトの名無しさん
07/10/17 07:55:39
C++が使えない無能の為のプログラミング言語=D言語
196:デフォルトの名無しさん
07/10/17 08:10:22
ktkr
197:デフォルトの名無しさん
07/10/17 08:15:42
こりゃまたすごいのきたな。
198:デフォルトの名無しさん
07/10/17 08:24:33
てかD言語ってまだ開発してたのか
199:デフォルトの名無しさん
07/10/17 09:13:04
標準ライブラリって本当にPhobosからTangoに移行するん?
200:デフォルトの名無しさん
07/10/17 11:54:50
>>199
定期的に話題になるよな
2.0をいじってたら、
Tangoのわなびとしか、最近思えなくなってきた。
201:デフォルトの名無しさん
07/10/17 12:05:40
URLリンク(www.digitalmars.com)
ををVariant来た! boxはいらない子になるのかなぁ・・・
!isっていつからあった?
202:デフォルトの名無しさん
07/10/17 12:14:31
あ、string系のaliasがconst(char)[]からinvariant(char)[]に変わったのか。
……どーいう意味を持つのかイマイチ分からない。
というか、未だに「invariant型」の動作がよく分からん。
invariant(char[]) book = "I, Robot";
って宣言したbookに関して、
book ~= " by Isaac Asimov";
book.length = 1;
book = "2001 Space Odyssey";
こういう動作は別に禁止されないんだよね。invariant型って、どういう目的で使えばいいの?
203:デフォルトの名無しさん
07/10/17 12:32:07
>>191
D2.006の新しいPhobosの機能をD1.xに移植した人がdigitalmars.D.announsに。
std2ってやつ。
204:デフォルトの名無しさん
07/10/17 13:24:39
>>202
invariant(char[]) book = "I, Robot";
を
invariant(char)[] book = "I, Robot";
で、意味が変わるきがするが
205:デフォルトの名無しさん
07/10/17 14:02:50
>>201
!isはisが導入されたときからあったと思う
206:デフォルトの名無しさん
07/10/17 14:11:49
>>204
それは同じ意味になる
URLリンク(www.digitalmars.com)
の Invariant Doesn't Apply To Declared Symbols のあたり。
207:デフォルトの名無しさん
07/10/17 14:19:58
>>202
たとえば
class Stream {
int opApply( int delegate(ref const(char)[] line) dg );
}
こういう宣言だったとしたら、
string s;
foreach(line; din) if( line[0] == '#' ) s = line;
writeln( "#で始まってた最後の行は", s );
このコードは期待した通りに動かないかもしれない。
Streamが内部でlineの中身を勝手に再利用してるかもしれないので。
constだと、"自分が"lineの中身を書き換えることはできなくなるけど、
他のところで書き換えが起こる可能性は否定できない。
これが
class Stream {
int opApply( int delegate(ref invariant(char)[] line) dg );
}
こうだったら、opApplyの実装を見るまでもなく↑のコードは普通に動く。
invariantな配列の中身はもう"誰も"書き換えないので、Streamが後で
書き換えるようなことがない。
とかそういう使い方。
208:デフォルトの名無しさん
07/10/17 14:29:13
おい。invariant周りでコンパイル通らなくなったぞ。
まーた全部書き換えかよ…
209:デフォルトの名無しさん
07/10/17 14:48:24
なんでもかんでもidupつけないといけないのは気持ち悪いな
210:デフォルトの名無しさん
07/10/17 15:21:42
aasumeUniqueでおk
211:デフォルトの名無しさん
07/10/17 15:49:37
URLリンク(www.digitalmars.com)
string letters()
{
char[] result = new char['z' - 'a' + 1];
foreach (i, ref e; result)
{
e = 'a' + i;
}
return assumeUnique(result);
}
これか なるほど
212:デフォルトの名無しさん
07/10/17 19:05:34
>>208
動作確認してなかったので翻訳してなかったんだが、
string, wstring, dstringの定義をinvariant付きにしました。
関数の定義と実装を(標準ライブラリ関数の影響も含めて)山ほど変更する必要があります。
invariantなstringを使ってみた最初の感想としては、かなり有望です。
なにがどう有望なのか試してないのでなんともいえませんが。
213:デフォルトの名無しさん
07/10/17 19:37:54
おいおい、phobos 張り切るのもいい加減にしろよ。tango の立場がなくなっちまうじゃないか。
214:デフォルトの名無しさん
07/10/17 20:01:30
walたんがTangoに「○○追加してね」っていえばいい
215:デフォルトの名無しさん
07/10/17 20:41:34
D2.x用のTangoは、どうなってる? もう出てる?
216:デフォルトの名無しさん
07/10/17 20:45:46
>>215
まだじゃね?
217:デフォルトの名無しさん
07/10/17 21:20:07
import std.stdio, std.contracts;
void main() {
foreach(string line; lines(enforce(fopen(__FILE__)))) {
write(line);
}
}
SUGEEEE
218:デフォルトの名無しさん
07/10/17 21:22:39
そんな感動するようなことじゃないが、これまでなかったのが不思議だな。
219:デフォルトの名無しさん
07/10/17 21:31:01
そういう短いけれども案外実用的なコードがたくさん欲しいところ
220:デフォルトの名無しさん
07/10/17 21:31:17
>>187
解決しました。
すいません、もともとあったメモリ関係のバグが、たまたま出てきた形でした。
221:デフォルトの名無しさん
07/10/17 21:45:35
D言語、1系が安定しない永遠のβだった頃から注目してるけど、
1系が成熟しないままさっさと2系に移ったところを見ると
実用的になるのは3系が登場してからかなと思ってしまう。
222:デフォルトの名無しさん
07/10/17 21:51:38
Dは永遠にをるたんの実験言語。
実用的になるなんてあり得ないよ。
223:デフォルトの名無しさん
07/10/17 21:59:20
>>209-211
さっぱりわからんのだが・・・
idup付ける代わりにassumeUniqueで済むってことだけじゃないよな?
余計にタイプ数増えるんだが
本当はassumeUniqueは何のためのものなの?
224:デフォルトの名無しさん
07/10/17 22:05:37
>>223
idupはデータのコピーが行われるが、
assumeUniqueはコピーが行われない。
225:デフォルトの名無しさん
07/10/17 22:40:23
>>224
うーん
そうですか
もうちょっと暗黙のコピーが発生するのを許容して
明示的な指定が減るようになったらいいね
226:デフォルトの名無しさん
07/10/17 22:50:17
テストしてなさすぎワロス
いろいろ試してみたがdmd2.006はstd.formatが壊れてるな
//>writef
//testtest1010
//%s=%dvalue200
import std.stdio;
void main(){
writef("test", "test", 10, 10, "\n%s=%d", "value", 200, "\n");
}
227:デフォルトの名無しさん
07/10/17 23:01:33
>>226
>Breaking change: std.stdio.writef can now only accept a format as its first argument.
228:デフォルトの名無しさん
07/10/17 23:21:22
>>227
あ 最後に書いてあるのそういうことか thx
229:デフォルトの名無しさん
07/10/17 23:34:02
stringにconstつけてみたりinvariantになったりするのはWalterたんからの「ソース見直せリファクタリング汁!!」というご命令に違いない!
230:デフォルトの名無しさん
07/10/17 23:57:41
Andrei Alexandrescuありがとう、そしてがんばれー
とエールを送っておこう
231:デフォルトの名無しさん
07/10/18 01:09:50
>>230
Andrei Alexandrescu先生のTMPが見られるのは今やD言語だけ!(でもない)
232:デフォルトの名無しさん
07/10/18 01:40:11
gdcってdmdで言うv2.0以降はあるの?
233:デフォルトの名無しさん
07/10/18 01:46:50
svnで対応してるよ。
234:デフォルトの名無しさん
07/10/18 19:31:42
>>206
ありがと しらんかった
235:デフォルトの名無しさん
07/10/19 00:01:06
coroutineが、phobosでほしいなぁ
236:デフォルトの名無しさん
07/10/19 00:14:29
そこは言語仕様に組み込むべきだろう。
237:デフォルトの名無しさん
07/10/19 06:13:14
dmd2.004 以降でこういうちょっと怪しいのをコンパイルしようとすると途中で固まる。
void main(){ f([[]]); }
void f(int[][] a){}
f(cast(int[][])[[]]); ならおk
-v 付きでコンパイルすると semantic3 までは表示されるけど code が表示されずに止まってる。
何これ?
238:デフォルトの名無しさん
07/10/19 06:40:44
D言語で作られたアプリケーションって何があるよ
239:デフォルトの名無しさん
07/10/19 11:33:27
Dで作ったOS
それがDOS
240:デフォルトの名無しさん
07/10/19 11:37:56
URLリンク(www.digitalmars.com)
int ifind(in const const char[] s, in const const char[] sub);
なんなんだ、const だらけかよ。
inつかっても constをこれだけ使うっていうのがなんとも・・・
241:デフォルトの名無しさん
07/10/19 12:44:04
in const constってどういう意味ですかwwww
inって
invariant const scopeだったよねwwwconst三つですかwwwww
242:デフォルトの名無しさん
07/10/19 13:09:17
typo
ソース見れ
243:デフォルトの名無しさん
07/10/19 13:36:42
D言語でstaticライブラリをつくる方法はどうやるのでしょうか。
コンパイル激早なんで、やる必要があまりないのかもしれませんが・・・
244:デフォルトの名無しさん
07/10/19 13:50:03
budなら
bud -lib main.d
何も使わないでやるなら
dmd -c main.d
lib -c -l main.lib main.obj
245:デフォルトの名無しさん
07/10/19 13:50:18
>>240
なんかintつけるとDDocが変なものを生成する。
246:デフォルトの名無しさん
07/10/19 14:18:48
static引数まだー?
247:デフォルトの名無しさん
07/10/19 16:20:50
>>246
なにそれ
248:デフォルトの名無しさん
07/10/19 16:53:40
関数名に?入れて述語ry
そういやなんで?とか!とかは識別子にならないの?
249:デフォルトの名無しさん
07/10/19 17:01:03
scopeクラスが単にnew ScopeClass();でエラー出さないでしかもスコープ抜けてもデストラクタが呼ばれないですけどこれはバグ?
250:デフォルトの名無しさん
07/10/19 17:03:49
やっべDMD古いからかな。新しいので試してみます。一応古いのは1.020です
251:デフォルトの名無しさん
07/10/19 17:24:27
>>249
scope周りはバグだらけ。もうどうしようもない
252:デフォルトの名無しさん
07/10/19 17:40:25
把握しました
253:デフォルトの名無しさん
07/10/19 17:50:04
本当にconstとかinveriantとか必要なのか?
C++から移ってきたときはほしいなと思ったこともあったけど、現状のconstとinveriantを見てるとうざったさ以上の便利さを感じない…
もっと上手い方法なかったのかな…
254:デフォルトの名無しさん
07/10/19 18:03:42
デリゲート便利だなw
Scheme触って帰ってきたら使わずには居られないwwww
255:デフォルトの名無しさん
07/10/19 19:50:18
>>253
constまわりは、まだまだこれからって感じだと思う。
現時点では文字列をimmutableにするためにしか使われてないし。
評価を下すのはまだ早いと思う。
現状のconstまわりの仕様には問題あると思うが。
文字列(配列)のスライスはコピー作らないから、文字列をimmutableにする意味はあると思うし、現時点では、
「inveriantは文字列をimmutableにするためのもの」
って割り切って、それ以外の機能は使わないようにすれば何とかやっていけそうだと俺は感じてる。
256:デフォルトの名無しさん
07/10/19 23:12:18
>>244
ありがとうございます
作れました!
257:デフォルトの名無しさん
07/10/20 02:46:33
勇気出してD2を入れることにしたぞー!
258:デフォルトの名無しさん
07/10/20 07:56:12
macroって結局なんなの?
259:デフォルトの名無しさん
07/10/20 13:09:30
>>258
カンファレンスのをるたんのスライド見れば分かるよ。
260:デフォルトの名無しさん
07/10/20 14:45:02
それでも俺は1系列を使い続ける
261:デフォルトの名無しさん
07/10/20 16:50:22
>260
1系列は俺に任せてお前達は先に行け!
まで読んだ
262:デフォルトの名無しさん
07/10/20 17:38:26
>>261
文字数増えてるという不思議。
263:デフォルトの名無しさん
07/10/20 18:20:58
>>262
つまり行間じゃなくて字間を読んだということか
264:デフォルトの名無しさん
07/10/20 20:27:45
D2.0のstring周りの改変は
暗黙のコピーがいやでしょうがない
どこでどう動いてるか把握したい
文字列で、知らぬ間にメモリをちょっとでも使われるのも嫌でたまらん
ってことかな。
スクリプトライクな手軽なコーディングを
できるだけ殺さないように、がんばってんだよね
265:デフォルトの名無しさん
07/10/20 22:14:00
みんな phobos と tango のどっち使ってる?
phobos は単純明快だが機能面でちょっと不足な上にバグ多いし、
tango は機能面はある程度充実してるけどドキュメントが整備されてない上に使いにくかったりするし、
なんかこう、どっちも中途半端なんだよなぁ。
266:デフォルトの名無しさん
07/10/20 22:28:27
>>248
全角?も駄目なんだな。これで我慢しとけ。
bool もしかしてnullですか(Object nullかどうか調べるオブジェクト)
{
return nullかどうか調べるオブジェクト is null;
}
267:デフォルトの名無しさん
07/10/21 00:09:01
もしかしてnullですか?
268:デフォルトの名無しさん
07/10/21 00:10:25
もしかしてnullですか¿
269:デフォルトの名無しさん
07/10/21 00:11:09
nullですよ¡
270:デフォルトの名無しさん
07/10/21 03:22:06
>>264
藻前は組み込みに向いている
Dが組み込みに対応するその日まで
Dで生き延びろ
271:デフォルトの名無しさん
07/10/21 03:25:55
>>264の発言は>>264自身のことじゃなくてDの文字列仕様の意図でしょ?
272:デフォルトの名無しさん
07/10/21 07:58:34
>>265
両者の良いところが全部一つに集まると、
素晴らしき真のDが誕生してどんな願いも叶えてくれると伝説にはあります
273:デフォルトの名無しさん
07/10/21 09:51:27
>>270
げ、するどい 正直びっくりした。
組み込み屋です。 Dが早く使えないかねらってます。
274:デフォルトの名無しさん
07/10/21 12:02:31
ちょっと和んだ
275:デフォルトの名無しさん
07/10/21 13:55:30
>>273
そう考えると2.006 invariant stringは有望だなあ。
Walterたんが「リアルタイム処理ではmalloc/freeよりGCの実行制御のほうが有利なこともある」
ってるが、そういうのは確かにあるので分かる気はする。
実際free listと組み合わせるとなかなか高速に動作してくれるし。
ada並の用途になるとDも本望だろう。
276:デフォルトの名無しさん
07/10/21 14:37:40
>>272
それを後の人は「闇鍋」と呼んだ。
277:デフォルトの名無しさん
07/10/21 14:57:01
D1~D7まで揃えるとDragonが(ry
278:デフォルトの名無しさん
07/10/21 15:34:37
組み込み屋ってなにするひと?
279:デフォルトの名無しさん
07/10/21 15:45:17
>>278
URLリンク(ja.wikipedia.org)組み込みシステム
280:デフォルトの名無しさん
07/10/21 15:57:58
>>279
サンクス
281:デフォルトの名無しさん
07/10/21 17:11:50
組み込みに関してはかなり素人で見当違いなことかもしれないんだが…
たとえばH8のマイコンがGCCのコンパイラでコンパイルできるみたいだけど、
GDCとH8を使ってD言語による組み込み向けのプログラムを作ることはできないのかな?
282:デフォルトの名無しさん
07/10/21 18:59:26
GDC
283:デフォルトの名無しさん
07/10/21 19:00:39
ごめん、途中で送ってしまった
GDCでクロスコンパイラはつくれるかもしれないが、
ターゲットが32ビットCPUでないとだめかもしれない。
284:デフォルトの名無しさん
07/10/21 19:01:25
tango 0.99.2を使ってるんだが、IConduitやらOutputStreamやら入出力周りの関係と用途がさっぱりわからん。
ソースによらず汎用的にストリームを扱いたいときはどのインタフェースをサポートすればいい?
285:デフォルトの名無しさん
07/10/21 20:22:16
>>281
去年 gdc を H8 にポートしてみた事がある。
phobos の GC がうまく動作しないところで絶賛放置中。
2日の作業じゃここらが限界だった。
286:デフォルトの名無しさん
07/10/21 22:06:18
GCつかわなければいけるんじゃなかろうかと一瞬考えたけど、そんなDに意味はあるのかどうか真剣に考えてしまった。
287:デフォルトの名無しさん
07/10/21 22:16:38
ベターC++と高速コンパイルだぜ!
288:デフォルトの名無しさん
07/10/21 22:41:03
GDCだと遅い罠
289:デフォルトの名無しさん
07/10/22 00:17:21
じゃあ意味ないんじゃね?
290:デフォルトの名無しさん
07/10/22 00:56:13
>>284
flectioned から抜き出してみた。tango と phobos の差異を吸収するような
書き方が一番なんでないかい?
static if(is(typeof((new object.Object()).toUtf8()) == char[])){
const bool inTango = true;
const bool inPhobos = false;
}else{
const bool inTango = false;
static if(is(typeof((new object.Object()).toString()))){
const bool inPhobos = true;
}else{
const bool inPhobos = false;
}
}
static if(inTango){
import tango.stdc.stdio;
} else static if(inPhobos) {
import std.c.stdio;
}
int main()
{
printf("Hello world");
return 0;
}
291:デフォルトの名無しさん
07/10/22 00:58:57
またあげちまったよ・・・すまん
292:デフォルトの名無しさん
07/10/22 01:23:43
URLリンク(dsource.org)
Tangobos is a compatibility layer to allow most Phobos software to be compiled unmodified on Tango.
It is effectively a port of Phobos to Tango: it is only modified to the degree required to make it compile.
これってTango/Phobos共存させるのが目的なんだよな?
293:デフォルトの名無しさん
07/10/22 02:30:10
テラタンゴボスwww
294:デフォルトの名無しさん
07/10/22 10:56:20
なんというド直球ネーミングw
295:デフォルトの名無しさん
07/10/22 11:06:07
D言語製のブラウザってある?
296:デフォルトの名無しさん
07/10/22 12:24:25
>>292
Tangoboswww
見間違いかと思ったわw
297:デフォルトの名無しさん
07/10/22 12:57:13
>>292
Tangoの上に乗っかるPhobos互換レイヤか
298:デフォルトの名無しさん
07/10/22 13:07:18
どっちかに統一したほうが良いように思うのは俺だけ?w
299:デフォルトの名無しさん
07/10/22 13:09:36
Tangoboswwwwwwwwwwwww
300:デフォルトの名無しさん
07/10/22 13:31:59
>>298
統一してほしいね~
そもそも、TangoはPhobosと共存できないように
作る必要があったのだろうか?
301:デフォルトの名無しさん
07/10/22 14:03:17
誰かがグレイトなライブラリを作ればいい。
どうせ D はまだ実用されてるとは言いがたい状況なんだし、
新規のライブラリがポンと出てきた所で問題は無い。
302:デフォルトの名無しさん
07/10/22 14:08:58
それをここで作るんですよ
303:デフォルトの名無しさん
07/10/22 14:27:52
Pascal型UpperCamelCaseが嫌いなのでphobos中心にマージされて欲しいと思う俺がいるが、
phobosはバージョンアップに追従するのが原則、
Tangoはそこまでやったりもしてないからなあ。
C++ユーザからの乗り換えパスとしてSTLとboost相当の移植は欲しい気がする
lexical_castとかはC++では使えるけどDではtoStringその他が使えるからまあいいけど。
304:デフォルトの名無しさん
07/10/22 14:35:52
>>303
>lexical_cast
確かめてないけどstd.conv.toは?
305:デフォルトの名無しさん
07/10/22 16:47:31
makefileがわりにmake.dってファイル作ってrdmd make.d optionってやるのよさそうだね。
bud使ったほうが早いかな?むしろrdmd bud.dってかww
306:デフォルトの名無しさん
07/10/22 16:49:55
いまさら気づいたけどなんもよくないね
307:デフォルトの名無しさん
07/10/22 17:01:00
D2でライブラリ関係のコンパイル通らなすぎわろたあああああああああああ
308:デフォルトの名無しさん
07/10/22 17:31:37
>>303
ちゃんと「The D Style」なんてのまで存在してるのに、
そこまでlowerCamelが嫌いだったのかねぇ・・。
豊富な機能やクラス設計に「おお」と思いつつ、ドキュメントのHelloWorldを見た時点で
> tango.io.Console;
「え? モジュール名・・」
> Cout("Hello...")(s).newline
「え? Coutて? UpperCamelな関数? いや()演算子持ったオブジェクト?
つかなんで可変引数使わへんのん? で、newline? 構文が最終的にプロパティ参照になっちゃってるやん?」
そんなTango。
309:デフォルトの名無しさん
07/10/22 17:34:31
そういう話題が出ないはずないと思うんだけどなぁ・・・
なんか考えがあってのことなのかね?
310:デフォルトの名無しさん
07/10/22 17:44:08
Tangoは機能自体はいいんだが、俺も設計が気に食わない。
311:デフォルトの名無しさん
07/10/22 17:54:10
たしかにCoutはきもい
void coutln(T...)(T t){ ... }
とか各自定義汁ってことか?www
312:デフォルトの名無しさん
07/10/22 17:56:18
とりあえず動けばおkってことになってるのかな???
313:デフォルトの名無しさん
07/10/22 18:15:54
自分はCoutよりStdout派。
import tango.io.Stdout;
Stdout("こんにちは 世界\n");
Stdout(1, 2, 3, 4, 5).newline;
int a = 5, b = 10;
Stdout.format("てすと {} + {} = {}", a, b, a+b).newline;
314:デフォルトの名無しさん
07/10/22 18:33:08
opCallのオーバーロードは、C++のビットシフトのオーバーロードより数倍キモイ。
315:デフォルトの名無しさん
07/10/22 18:34:55
まぁ、なんだかんだワガママ言ってもphobosよりはOOPが生きてるし、
使いたいといえば使いたいんだよねTango。
SDLに対するSDL_image/mixer/..、C++のSTLに対するboostみたく、
phobosがコンパイラ添付の最低限ライブラリ、
Tangoが「事実上の標準」な拡張ライブラリ、とかに分かれててくれるのが理想と思う俺。
組込みとか色々タイトな分野じゃない限り、普通Tangoを被せて使うものだよ、みたいな。
316:デフォルトの名無しさん
07/10/22 19:09:10
ならTangoはPhobosを利用しないといけないな!
つーかなんでTangoはPhobosと共存できないのwww意味不明wwwwww
317:デフォルトの名無しさん
07/10/22 19:11:50
Phobosは廃止でいいよwwwwwwww
318:デフォルトの名無しさん
07/10/22 19:41:58
そこでTangobosが登場する??
Phongoとか、ネーミングはもうちょっとなんとかならんかったのか。
319:デフォルトの名無しさん
07/10/22 19:51:41
Tacos
320:デフォルトの名無しさん
07/10/22 20:02:40
>>319
それ良さそう。
321:デフォルトの名無しさん
07/10/22 20:19:52
>>304
俺も使ってないけど使えると思う。
というのはともかくとして、C++はlexical_castが無いと面倒な場面があるのだが、
Dではstd.conv.toを使わなくても結構いけるのでそのへんが良い。
322:デフォルトの名無しさん
07/10/22 20:21:13
>>319
cはどっから来たんだよw
323:デフォルトの名無しさん
07/10/22 20:22:33
無理に2つのライブラリ名入れることも無くない?
324:デフォルトの名無しさん
07/10/22 21:01:04
PThaonbgoos
325:デフォルトの名無しさん
07/10/22 21:02:42
よめなす。ふぁんぐーす(bはサイレント)?
326:デフォルトの名無しさん
07/10/22 21:09:56
たんごぼす
327:デフォルトの名無しさん
07/10/22 21:24:47
こんどこそでいもすで
328:デフォルトの名無しさん
07/10/22 22:06:25
Daimos(デイモス)はもうすでにあるし、Harmonia(ハルモニア)でよくね?
ギリシャ神話でアレス(Ares)の娘…ポボス(Phobos)とデイモス(Daimos)の妹?
ハーモニー(調和)の語源。とってつけたような設定じゃないか。
329:デフォルトの名無しさん
07/10/22 22:07:57
すまん、スペルミス。
×Daimos
○Deimos
330:デフォルトの名無しさん
07/10/22 22:12:21
ハルモニアっていうとロマサガ思い出す・・・
331:デフォルトの名無しさん
07/10/22 22:25:30
ちなみに
Harmonia URLリンク(harmonia.terrainformatica.com) も
Ares URLリンク(www.dsource.org) もすでにあるが
332:デフォルトの名無しさん
07/10/22 22:27:36
>>328
それいいけど名前資源の無駄遣いはそろそろ控えるべきだと思ったw
やるならマジでやって欲しい・・・
333:デフォルトの名無しさん
07/10/22 22:28:16
あるのかよ
だから無駄遣いはダメだと(ry
334:デフォルトの名無しさん
07/10/22 23:23:03
あったのか
ライブラリの名前資源の干渉は防げないもんなぁ
335:デフォルトの名無しさん
07/10/22 23:31:29
じゃあ、
com.digitalmars.phobosとかするか?w
336:デフォルトの名無しさん
07/10/22 23:34:07
そんなことされたら勝手に名前変えるぞゴルア
337:デフォルトの名無しさん
07/10/23 00:38:02
もう日本語にしちゃおうぜ
338:デフォルトの名無しさん
07/10/23 00:41:43
しかもひらがなな
339:デフォルトの名無しさん
07/10/23 00:44:24
日本人である私たちがコードやコメントやパッケージ名に日本語を使わないのはおかしい!
って言ってみるテスト
340:デフォルトの名無しさん
07/10/23 00:45:24
import 標準.標準入出力;
void main() {
writefln("ほげほげ");
}
// こんなの嫌だぞ俺w
341:デフォルトの名無しさん
07/10/23 00:47:01
でも
import std.stdio;
よりは意味が取れる罠w
表意文字万歳
342:デフォルトの名無しさん
07/10/23 00:53:23
ヒント: タイプ数
343:デフォルトの名無しさん
07/10/23 00:55:16
じゃあひらがなかカタカナでいこう
344:デフォルトの名無しさん
07/10/23 00:57:55
ヒント: 文字幅
345:デフォルトの名無しさん
07/10/23 01:15:21
輸入 標準.標準入出力;
無 主() {
整形書出改行("ほげほげ");
}
こんな中国産言語ならありそうだな
346:デフォルトの名無しさん
07/10/23 01:18:50
そしてブロックはPython風にインデントでやれば{}も消える!!
347:デフォルトの名無しさん
07/10/23 01:26:22
>>344
半カナはどうだ? タイプはかな入力で。
ドウニュウ キカク.キカクニュウシュツ;
ナシ メイン(){
ギョウカキ("ホゲホゲ");
}
348:デフォルトの名無しさん
07/10/23 01:36:31
話を広げておいて申し訳ないのだがものすごい既視感がwww
前に似たような話してたお
349:デフォルトの名無しさん
07/10/23 01:36:58
>>347
かな入力なんてできる人はかなりレアだぞ…
俺にはつらいw
350:デフォルトの名無しさん
07/10/23 01:39:11
Phobos上でTangoが動作しつつ、キモイ名前をどうにかしてくれたらTangoはかなり使いやすいライブラリだと思うんだ。
って話だったっけ?
351:デフォルトの名無しさん
07/10/23 01:53:33
まったくそのとおりである
352:デフォルトの名無しさん
07/10/23 02:12:57
std::cout << "hoge" << std::endl; の悪習を引きずるかのような
Cout("hoge").newline; に代表される
気持ち悪いインタフェースがなくなればってのも加えておいてくれ
353:デフォルトの名無しさん
07/10/23 02:57:09
そもそも
std::cout << "hoge" << std::endl;
の良かったところはグローバルな演算子オーバーロードで簡単に拡張が加えられるところだったと思うんだ。
std::ostream& operator<<(std::ostream& strm, const Hoge& fuga);
逆にいえばこれが使えなければ意味がないわけで…
Cout("hoge").newline;
とかは何を意図してこんなことをしようと思ったのか…
まぁ、可変個数引数だと問題はあるけど。
String s;
Cout(s.append("aa"), s.append("bb"), s.append("cc"))).newline;
これだと
aabbccとなるかccbbaaとなるかわからん。
354:デフォルトの名無しさん
07/10/23 03:00:35
ここではおまいらが好き勝手言ってるだけだけど、
何か良くて何が悪いのかが評価できるなら素晴らしいライブラリを作ることもできそうなのになw
Phobosのobject.dをいじらず、The D Style準拠で
Cout周りのインタフェースをほげほげした(どうすんだこれ)
そんなTangoに改造したらいいってわけか
355:デフォルトの名無しさん
07/10/23 03:01:20
2か所訂正…orz
auto s = new String; で aaaabbaabbccとなるかccccbbccbbaaとなるか…か。
356:デフォルトの名無しさん
07/10/23 03:03:07
>>353
待て待てその最後みたいなのはC++でもやっちゃいけないことになってるんじゃなかったか
それを問題視する必要はないことしようぜ
357:デフォルトの名無しさん
07/10/23 03:04:05
>>353
>演算子オーバーロード
ヒント: toString
358:357
07/10/23 03:05:52
あ、でもtoStringよりもストリーム演算子の方が効率的だわな。
359:デフォルトの名無しさん
07/10/23 03:08:47
>>353
>opCall_rまだー?
まで読んだ。
360:デフォルトの名無しさん
07/10/23 03:10:52
("hogahage")Cout;
こうですか><
361:デフォルトの名無しさん
07/10/23 03:11:59
俺もそうおもたw
けどおかしいだろw
362:デフォルトの名無しさん
07/10/23 03:34:05
(Cout "hogahage");
じゃあこうですか><
363:デフォルトの名無しさん
07/10/23 10:42:06
そして半角ひらがなの復活
364:デフォルトの名無しさん
07/10/23 17:17:25
暇だから上げてみます。
自分用に作ったフレームワークです。
libwindowはライブラリでそっちをなるべくいじらない方向で設計されてます。
WorksMainはライブラリの実装で関数をガリガリ書くことでその目的を遂げます。
このライブラリはウインドウズ専用です。
URLリンク(www9.uploader.jp)
365:デフォルトの名無しさん
07/10/23 17:37:53
>>363
ちょ!それスレ違い。
いや、俺もそのスレみてるからわかるんだが。
366:デフォルトの名無しさん
07/10/23 18:49:23
>>364
方向性にはげあがるほど同意
lowerCamelはいかが?(参照>>308)
367:デフォルトの名無しさん
07/10/23 19:55:18
>>365-366
じゃああえて・・・DFLでよくね?
368:デフォルトの名無しさん
07/10/23 20:20:35
>>362
それなんてLisp?
369:デフォルトの名無しさん
07/10/23 21:07:29
>>366
関数名はキャピタライズを採用して欲しかった俺がいる。
Time now = Now;
とかやりたかったのに・・
370:デフォルトの名無しさん
07/10/23 21:42:58
これで諦めてください><;
Time now = Time.now();
371:364
07/10/23 23:33:54
URLリンク(www9.uploader.jp)
ここのアップローダはD関係なら自由に使ってください。合計200MBまで入りますから。
っていうか、人のライブラリがどうなってるか気になる!!!
そうそう、あとで後悔した時用に削除Passを忘れずに。
で!レスサンクス!!
>>366
こういう先頭大文字とかって名前あったんですね。。。
C++辺りからの癖になってるんですけど、次は小文字も検討してみます。
>>367
それ言われるとちょっと弱い。笑
⑨にも・・・を見るとTangoだとかvar1系だとかそういうのが良くわからないので使ってないんですけど、
将来的な移植性を考えるとやっぱ習得したいですねぇ。。。
372:デフォルトの名無しさん
07/10/23 23:57:44
「ひとこぶらくだはひとこぶうんち ふたこぶらくだはふたこぶうんち これはうそ!」
lower/upper camel という字面を見てたら思い出した子供時代のはかない記憶。
373:デフォルトの名無しさん
07/10/24 12:20:43
Overload setっていうのでtoStringがかぶらなくなるのかと思ったら
import std.string;
class Foo {
void bar(char* ptr) {
string s = toString(ptr); // std.string.toString(char*)呼んで欲しい
// けどObjcet.toStringにマッチしないのでエラー
}
}
ダメなのか。まあstd.conv.toができたからいいけど
374:デフォルトの名無しさん
07/10/24 13:14:32
string s = .toString(ptr);
って書けばいいから、できなくても別に不便ではないな
375:デフォルトの名無しさん
07/10/24 13:29:20
ExceptionとErrorの使い分けがわかりません><
おしえてくだしあ><
376:デフォルトの名無しさん
07/10/24 13:31:57
class Exception;
回復可能な例外は全て Exception クラスから派生すべきです
class Error: object.Exception;
回復不可能な例外は Error クラスから派生すべきです
377:デフォルトの名無しさん
07/10/24 13:33:33
回復が可能かそうでないかの区別がつきません><><><
378:デフォルトの名無しさん
07/10/24 14:57:06
例外が回復可能かどうかなんて設計段階で判断できるような。
設計で判断できなくても経験積めばここは復帰無理だなっていうのが直感で分かるように。
379:デフォルトの名無しさん
07/10/24 15:35:55
どの範囲で復帰不能か可能か、って話もあるしな
380:デフォルトの名無しさん
07/10/24 15:38:23
なにがどうなると回復不可能になるの?
381:デフォルトの名無しさん
07/10/24 15:46:00
回復が不可能になるとだな
382:デフォルトの名無しさん
07/10/24 15:58:04
場合によりけりでしょ。
タイムアウトなんかで期待される結果が帰ってこなかった場合に、
初期値等のテキトーな値代入して問題なく処理続行できるなら例外、
出来ないならエラーって言う感じでいいんでは。
383:デフォルトの名無しさん
07/10/24 16:29:31
回復不可能だって分かった時点でErrorの子クラスでExceptionをラップして投げなおせばいい。
384:デフォルトの名無しさん
07/10/24 16:31:01
にゃる そういう意味なのか
システムがぬっ壊れたりするのかとおもた
385:デフォルトの名無しさん
07/10/24 18:59:27
俺が分類したケース
回復不能
・root/admin権限が必要なのになかった
回復可能
・ファイルが見つからなかったが、指定しなおせばよい
>>384
最終的にはシステムがぬっ壊れない限りは回復の手段を用意することはできるかと思う
386:デフォルトの名無しさん
07/10/24 19:01:42
処理続行できるような想定範囲内のエラーで例外投げるな。例外は例外的な事態に使用すべき。
……みたいなの(やや極端な言い方だけども)を信じてたんで微妙に慣れない。
多分戻り値でエラー処理みたいな文化が嫌なんだろうけど、効率なんかも考えると回復可能なエラーまで例外ってどうなの? って気がしてしまう。
上みたいな(勝手な)文化を持ってたせいかExceptionに回復可能な、みたいなニュアンスも感じないし。
実際のところDでなんか書いてるときにみんなErrorとException使い分けてるの?
387:デフォルトの名無しさん
07/10/24 19:10:19
俺の考えでは、プログラムの動作自体が危うい場合がError。
それ以外は全部Exception。
たとえば、ファイルをコピーするプログラム、copyを作るときに、
パラメータで指定されたファイルが見つからない場合は、Exception。
388:デフォルトの名無しさん
07/10/24 19:14:12
基本的にException。
拾いたければ拾えばいいじゃん(たいていは回復可能だから)
というスタンス。
行列演算で要素数が不適切なときもException(動的に要素数を決められる場合)。
ただし契約違反は実装者が間違ってるからassertするときはErrorが多い。
389:デフォルトの名無しさん
07/10/24 19:18:20
>>386
引数、返り値が適切なほうがいいというのはあるかもしれない。
計画の中にpureという仕様が入ってるが、
ああいうのをまじめにやるならエラー処理のために引数や返り値がつぶされるのは好ましくない。
390:デフォルトの名無しさん
07/10/24 19:21:41
>>386
> 処理続行できるような想定範囲内のエラーで例外投げるな。例外は例外的な事態に使用すべき。
これは誰の教えなのかkwsk
391:デフォルトの名無しさん
07/10/24 20:44:55
人生のExceptionが発生しました
392:デフォルトの名無しさん
07/10/24 20:58:52
>>391
回復可能なのか、よかったな
393:デフォルトの名無しさん
07/10/24 21:06:09
回復には神権限が必要です
394:デフォルトの名無しさん
07/10/24 21:15:29
引きこもりでごめんなさい→Exception
生まれてきてごめんなさい→Error
ってことか
395:デフォルトの名無しさん
07/10/24 21:33:52
お願い届いて!!私のException!!!
引きこもりでごめんなさい。
396:デフォルトの名無しさん
07/10/24 21:49:23
そろそろ人生のErrorが発生しそうで不安になってきた。
397:デフォルトの名無しさん
07/10/24 22:31:15
Javaみたく「こいつはこーいう例外投げるかもしれんからちゃんと対処しろよ!」ってコンパイラに言われないしなぁ。
意識してErrorを自前で投げたことはないや。
assert違反とか、デバッグモードで埋め込まれる配列境界チェックなんかはErrorか? そんくらい。
あれ? ErrorてExceptionの派生クラスだったのか?
つまり「Error is a Exception」「回復不可能は回復可能の一種」 ・・あれ?
おかしくないですかカテジナさん!
398:デフォルトの名無しさん
07/10/24 22:31:22
ファイル読み込みルーチンで、開くべきファイルがロックされてたり
ファイルがなかったりしたら、再試行とか考えてException、
そもそもファイルシステムや開くファイルの種類が非対応だったりして
なにをどうしようがファイル読み込みは無理、ってなのはError、とか。
ただ、それらを受け取るルーチンでは、たとえば別の読み込みルーチンを
使うとかで、(より大きな枠組みから考えると)復帰可能だったりするかもしれない。
という感じで、回復可能か否かが処理の段階によって変わることに注意して組むと
Errorの使い出もあるんじゃなかろうか。
399:デフォルトの名無しさん
07/10/24 22:53:29
Errorがでたのに何事もなくプログラムが動作し続けるってのは、ちょっとおかしいと思う。
それだと正常系に復帰してるじゃん、と。
OutOfMemoryぐらい致命的でないとErrorというのとはちょっと違うと思う。
400:デフォルトの名無しさん
07/10/24 23:08:48
>>399
回復不可能は回復可能がグレードアップ!
という考えで
401:デフォルトの名無しさん
07/10/24 23:11:16
つまり、ErrorをExceptionで捕えることができるのはおかしい、と。
Exceptionを派生したErrorってのがおかしいんだよな。
Errorを派生したExceptionとか、ErrorとExceptionはそれぞれ何からも派生してないってのがいいような気がするね。
Tangoみたいに安易に消しちゃうのはどうかとも思うが。
402:デフォルトの名無しさん
07/10/24 23:38:26
>>399
頑張ってメモリ解放して状況解消する頑健なプログラムだってありうるべ
メモリ食いつぶしかねないプログラムなら特に。
どんなエラーも何らかの処理がなされる、というのがDの例外機構なわけで、
399的な「絶対に正常系に復帰しない」発想だと、例外もクソもなく強制終了
するしかない状況じゃないとErrorを出さない、という意味のない話になるべ
何が正常動作かは処理の段階によって変わるんじゃね
403:デフォルトの名無しさん
07/10/24 23:40:29
その処理の段階ってちゃんと定義されてるのかな?
今のままだとExceptionとErrorがごっちゃになりそうな悪寒
404:デフォルトの名無しさん
07/10/25 00:23:53
むしろError使ったことないし
必要な場面に出くわしたことがないし
これからも使わない気がしている
405:デフォルトの名無しさん
07/10/25 00:27:56
そういうのを定義するのが設計だべ
まあそんなまじめなプログラム俺も書いたことないけど
406:デフォルトの名無しさん
07/10/25 07:11:32
2.006にしてみたらinvariant string関係の変更がtonほど出てきた
407:デフォルトの名無しさん
07/10/25 07:59:27
invariantのおかげでWin32API使うとき今まで以上にキャスト式書く機会が増えた。それ以外で特に気になるところはなし。
今は2.006でphobosが強化されたという話を聞いてわくわくしてるところ。
408:デフォルトの名無しさん
07/10/25 08:24:16
invariant stringとstd.stringの変更を解決してたら、設計の理由がなるほどと……
無駄なコピーを抑えたいという発想をどう実現するかがなんか分かってきた。
variant世界とinvariant世界が分かれてる感じで、
両者の窓口がcast(invariant)やidup、dupといった風情。
in char[]を受け取ってchar[]を返す関数の内部でstd.string関数を使う場合、
入り口でcast invariantして出口でdupすればおk、みたいな。
ただしこの方法だとスレッドセーフには気をつけないとならんので注意かも。
409:デフォルトの名無しさん
07/10/25 08:55:20
めぐりめぐって
invariantがなくなって、Cと同じになったりしてな・・・
410:デフォルトの名無しさん
07/10/25 09:41:42
散々こねくり回して出た結論がそれならば、それもまたよし。
411:デフォルトの名無しさん
07/10/25 09:58:43
idupの個人的まとめ
・idupは本当にコピーを生成する
・idupしたコピーはGCに回収される
idupされた文字列を参照するようなstring(std.string中の関数の返り値など)をいつまでも受け渡し続けると、
いつまでたっても回収されずに残り続けることになるかもしれない。
巨大な文字列から1行だけ取り出すとかした場合はidupして、
巨大なやつをGCに回収してもらいやすくするのは考えられる。
idupは比較的気軽に使えるかなと思う。
長期的に生存する可能性があるプログラムについては知らね
412:デフォルトの名無しさん
07/10/25 10:25:51
ArrayBoundsErrorは回復不可能なんですか?
413:デフォルトの名無しさん
07/10/25 10:30:57
配列の範囲外に対する不正なアクセスだからエラーなんでは?
そもそもDは配列のサイズがあらかじめ調べられるので、範囲外に対するアクセスは事前に防げるはず。
414:デフォルトの名無しさん
07/10/25 10:48:59
ほんとによく設計されたソフトウェアなら、モジュールがAssertErrorなんか投げてきても
catchして「このモジュールはバグってんな」って切り離て、
さらにそのモジュールに依存する別のモジュールにも通知したりして、
本当にコアなモジュールが生きてる限りは動きつづける、とか作りこむんだろーな。
apacheとかそんな感じになってるのか。Dじゃないけど。
気楽なDの個人アプリじゃそこまでやらんで、
void main(){
try{
myMain();
}catch(Exception e){
outputErrorMessage("ごめんちゃいバグで強制終了します。以下をコピペして送ってくれるとお互い幸せに。", e);
}
}
とかでいいよね? 後は明らかに発生しそうなException(new File(stdin.readLine())とか)くらいは
その場でcatchすんの忘れないように気を付けなきゃ、で。
「catchすんの忘れてねぇか? いいのか?」とコンパイラに言ってもらえればなぁ、とも思うけど、
そうなるとErrorとExceptionの違いが問題になってくる感じ。
415:デフォルトの名無しさん
07/10/25 10:55:20
もしかして関数呼び出すたびにtry-catch書くのが普通なのか
416:デフォルトの名無しさん
07/10/25 12:12:43
default: を書き忘れて例外出されたときはかなりビビッた。
何でswitchが例外投げるの!?って。
417:デフォルトの名無しさん
07/10/25 12:14:23
>>415
俺は!の話だけどさ、基本的に例外投げないな。だから、ほとんどtry構文使わない。
418:デフォルトの名無しさん
07/10/25 12:54:01
D言語で作られたアプリで参考になるのねーの?
419:デフォルトの名無しさん
07/10/25 13:10:04
>>415
それは普通、ではなく理想
420:デフォルトの名無しさん
07/10/25 13:45:58
回復可能なもので例外投げるのは速度が・・・
421:デフォルトの名無しさん
07/10/25 13:52:39
通常の実行ロジック部分のパフォーマンスが重要
例外時に速度重視?
422:デフォルトの名無しさん
07/10/25 14:13:54
ああ、なるほど。勘違いしてた
423:デフォルトの名無しさん
07/10/25 15:10:24
>>419
Cで関数呼び出しごとにエラーコードをチェックしてエラーコード返して・・・ってやるよりも
遥かにぐちゃぐちゃなコードが出来上がるだけな気がするのだけど。
それを無くして「正常な実行パス」だけを簡潔に書くための構造化例外やん?
424:デフォルトの名無しさん
07/10/25 16:07:23
>>423
分かっててもときどき変なことやっちゃうんだよね
特にC++とかJavaでね
try~catchはmainだけで充分なのかも知れない
425:デフォルトの名無しさん
07/10/25 16:35:20
>>423
すべての例外はどこかの階層で拾って、プログラムが適切に復旧するようにするのが理想。
別に、一関数ごとにtryで囲む必要はない。
426:デフォルトの名無しさん
07/10/25 18:13:59
in, body, outをはじめて使ってみたお^^
しかしenum/invariant structのような型で制限してしたほうが書くのは面倒だけど使えるお-_-;
427:デフォルトの名無しさん
07/10/25 20:35:06
>>426
でもoutとかで「戻り値にnullは絶対返さないよ!」とかassertしてあると使うのもコード読むのも安心するお^^
でも型だけで事足りるならちゃんと型設計してるってことだし偉いお^^
428:デフォルトの名無しさん
07/10/25 20:59:06
in/out/bodyってコード読むとき邪魔っぽくない?
429:デフォルトの名無しさん
07/10/25 21:05:16
ちょっとインデントに悩んだことはあった
430:デフォルトの名無しさん
07/10/25 21:23:49
void hoge() in { assert(文); } body
{
// 処理
}
みたいに書いたり・・・?
in と out を関数内部に書きたかったりする・・・
void hoge()
{
in{ assert(文); }
out{ assert(文); }
}
あ、でもこれなら普通の scope 文でいいのか・・・?
431:デフォルトの名無しさん
07/10/25 21:34:33
公式の書き方は
URLリンク(www.digitalmars.com)
中括弧を改行しないでくっつける派の俺としてはちょっと冗長に見える。
けどまあこれくらい改行するのもぱっと見わかりやすいのかな。
432:デフォルトの名無しさん
07/10/25 22:58:35
中かっこを開業しないでくっつける派の俺としても悩んだけど
void func()
in{
assert(...);
}
out{
assert(...)
}
body{
...
}
って感じにして妥協してみてる…
この辺もコーディング規則で一応の指標があるといいのだけど…(宗教戦争勃発しそうな気もするけど)
433:431
07/10/25 23:12:09
>>432
偉いなw
俺なんか
void func() in {
} out {
} body {
}
さえ正直捨てきれない。
434:デフォルトの名無しさん
07/10/25 23:18:23
自分はオールマンスタイルが気に入ってる
435:430
07/10/25 23:41:01
自分もオールマンスタイル派なんだけど、公式の書き方は見難いと
感じてしまう。慣れの問題なのかもだけど。
436:デフォルトの名無しさん
07/10/26 01:14:24
if (test) {
...
}
else {
...
}
これってやめたほうがいいのかな
437:デフォルトの名無しさん
07/10/26 01:33:44
begin
rescue
ensure
end
438:デフォルトの名無しさん
07/10/26 01:42:40
オライリーのPL/SQL本だかどっかで
void func(){
hoge();
}
こうあるべきだと力説されて妙に同意してしまって以来、
どうしてもfunc()と"{"が同じ行にいられないと落ち着かなくて困る。
>>430は俺にとっても抗えぬ誘惑だ・・・
太古より語り継がれる伝説の「IDE」がいつか完成して普及すれば、
inとoutは普段は折り畳まれて「contractあるよー」的マークに収まり、
そこにマウスオーバーするとin/outのコードがポップアップで表示され・・・とか実装されるに違いない。
時を待つのじゃ・・・さすれば泣く日は来ぬ・・・
439:デフォルトの名無しさん
07/10/26 02:13:15
イデ・・・オン・・・
440:デフォルトの名無しさん
07/10/26 09:13:09
定数を引数とする三角関数のコンパイル時計算をオフにしたいときがあるわけだが、どうしたもんかな
ちょいと考えてみる
441:デフォルトの名無しさん
07/10/26 10:12:13
>440
なにゆえ?
442:デフォルトの名無しさん
07/10/26 12:07:22
>>436
俺もそのスタイルで書いてるよ。
ifブロックとelseブロックがきれいに分離してるのが気持ちいいよね。
443:デフォルトの名無しさん
07/10/26 15:26:54
>>441
コンパイル時に決定できるループでsinが山ほどあったときにコンパイルが遅くなっていたんですが、今見たら大丈夫になっていました。
勘違いかもしれませんが、再発して条件が再現できそうならまた報告します。