D言語 Part15
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/10/05(金) 20:16:30過去スレは >>2
■本家
ttp://www.digitalmars.com/d/
ttp://www.kmonos.net/alang/d/ (和訳)
■コンパイラ
ttp://www.digitalmars.com/d/dcompiler.html (DMD, 本家)
ttp://dgcc.sourceforge.net/ (GDC, gccフロントエンド)
ttp://gdcmac.sourceforge.net/ (GDCのmac用バイナリ)
■参考URL
ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究)
ttp://dsource.org/ (dsource)
ttp://www.sun-inet.or.jp/~yaneurao/dlang/
ttp://wisdom.sakura.ne.jp/programming/d/
0002デフォルトの名無しさん
2007/10/05(金) 20:17:02Part14 http://pc11.2ch.net/test/read.cgi/tech/1184807424/
Part13 http://pc11.2ch.net/test/read.cgi/tech/1177499924/
Part12 http://pc11.2ch.net/test/read.cgi/tech/1171037394/
Part11 http://pc10.2ch.net/test/read.cgi/tech/1165621441/
Part10 http://pc8.2ch.net/test/read.cgi/tech/1158013550/
Part 9 http://pc8.2ch.net/test/read.cgi/tech/1146656260/
Part 8 http://pc8.2ch.net/test/read.cgi/tech/1137068104/
Part 7 http://pc8.2ch.net/test/read.cgi/tech/1122912733/
Part 6 http://pc8.2ch.net/test/read.cgi/tech/1109933426/
Part 5 http://pc5.2ch.net/test/read.cgi/tech/1102785854/
Part 4 http://pc5.2ch.net/test/read.cgi/tech/1091185216/
Part 3 http://pc5.2ch.net/test/read.cgi/tech/1079068715/
Part 2 http://f3.aaacafe.ne.jp/~null/cache/1079280501.html
Part 1 http://pc5.2ch.net/tech/kako/1003/10036/1003674814.html
0003デフォルトの名無しさん
2007/10/05(金) 20:17:33D言語なら俺に聞け
http://pc11.2ch.net/test/read.cgi/tech/1108172110/
D言語を広めるスレ
http://pc11.2ch.net/test/read.cgi/tech/1175432606/
D言語は多分コケると思っている人の数→
http://pc11.2ch.net/test/read.cgi/tech/1136288019/
【次世代言語】D言語でOSを作ろう【Monaの移植?】
http://pc11.2ch.net/test/read.cgi/tech/1128794438/
バイナリをゲロる言語の魅力って何?
http://pc11.2ch.net/test/read.cgi/tech/1160869311/
その他リンク
【Java/C/PHP/Perl/Ruby/Python/TeX】Eclipse M22
http://pc11.2ch.net/test/read.cgi/tech/1168166588/
eclipseってそんなに良いか?【エクリプス】
http://pc11.2ch.net/test/read.cgi/tech/1099300344/
統合開発環境Eclipseプラグイン開発QA
http://pc11.2ch.net/test/read.cgi/tech/1081517094/
"Code of the Nerds" Digital Mars C/C++
http://pc11.2ch.net/test/read.cgi/tech/1044210976/
0004デフォルトの名無しさん
2007/10/05(金) 21:33:360005デフォルトの名無しさん
2007/10/05(金) 21:58:450006デフォルトの名無しさん
2007/10/05(金) 23:14:17そろそろこの二つはテンプレから外さないか
ttp://www.sun-inet.or.jp/~yaneurao/dlang/
ttp://wisdom.sakura.ne.jp/programming/d/
http://f17.aaa.livedoor.jp/~labamba/?%A5%EA%A5%F3%A5%AF%BD%B8#content_1_3
に載ってるもののうち下の4つを推薦しておくわ
# C/C++に疲れた人のD言語 … haru氏
# わかったつもりになるD言語 … K.INABA氏
# D始めました。 … shinichiro.h氏
# D言語入門講座 … SHOO氏
00076
2007/10/05(金) 23:20:38ttp://rayerd.ddo.jp/pukiwiki/ingwiki/index.php?C%2FC%2B%2B%A4%CB%C8%E8%A4%EC%A4%BF%BF%CD%A4%CED%B8%C0%B8%EC (C/C++に疲れた人のD言語)
ttp://www.kmonos.net/alang/wnd/ (わかったつもりになるD言語)
ttp://shinh.skr.jp/d/ (SDL, SDL_*, OpenGL, GLU, glutのポーティングとか)
ttp://shoo.s20.xrea.com/shoo/programing (D言語とTangoの入門講座)
そして >>1 乙
0008デフォルトの名無しさん
2007/10/05(金) 23:57:55そういう時は、TinyURLで圧縮しとけば良いんじゃね?
C/C++に疲れた人のD言語:http://tinyurl.com/3da5oa
これからテンプレのWiki関係URLは圧縮しとけば良さげ。
00098
2007/10/05(金) 23:58:51ごめんwうまく展開できてないっぽいわw
0010デフォルトの名無しさん
2007/10/06(土) 00:02:010012デフォルトの名無しさん
2007/10/06(土) 02:22:03誰か次スレ立てるときに覚えていたら思い出させてちょうだい
プログラミング言語 D (D Programming Language) について語るスレッドです。
過去スレは >>2
■本家
ttp://www.digitalmars.com/d/
ttp://www.kmonos.net/alang/d/ (和訳)
■コンパイラ
ttp://www.digitalmars.com/d/dcompiler.html (DMD, 本家)
ttp://dgcc.sourceforge.net/ (GDC, gccフロントエンド)
ttp://gdcmac.sourceforge.net/ (GDCのmac用バイナリ)
■参考URL
ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究)
ttp://dsource.org/ (dsource)
ttp://tinyurl.com/3da5oa (C/C++に疲れた人のD言語)
ttp://www.kmonos.net/alang/wnd/ (わかったつもりになるD言語)
ttp://shinh.skr.jp/d/ (SDL, SDL_*, OpenGL, GLU, glutのポーティングとか)
ttp://shoo.s20.xrea.com/shoo/programing (D言語とTangoの入門講座)
0013デフォルトの名無しさん
2007/10/06(土) 04:10:020014デフォルトの名無しさん
2007/10/06(土) 04:56:36Oct 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
0015デフォルトの名無しさん
2007/10/06(土) 07:31:24これは地味だが良修正
0016デフォルトの名無しさん
2007/10/06(土) 07:40:16なにこれ
C++のクラスがDLLでつかえちゃうのかしらん
001716
2007/10/06(土) 07:44:43感想:すげぇ・・・
0018デフォルトの名無しさん
2007/10/06(土) 08:15:280019デフォルトの名無しさん
2007/10/06(土) 08:44:080020デフォルトの名無しさん
2007/10/06(土) 09:20:170021デフォルトの名無しさん
2007/10/06(土) 09:21:520022デフォルトの名無しさん
2007/10/06(土) 10:21:390023デフォルトの名無しさん
2007/10/06(土) 10:42:13これ、軽く祭りじゃねぇの
0024デフォルトの名無しさん
2007/10/06(土) 13:24:150025デフォルトの名無しさん
2007/10/06(土) 13:36:360026デフォルトの名無しさん
2007/10/06(土) 13:53:41すげー
けど、現状Cライブラリでなんとかなってるし
リンクしたいC++ライブラリなんてないしな・・・
0027デフォルトの名無しさん
2007/10/06(土) 13:55:480028デフォルトの名無しさん
2007/10/06(土) 14:10:38遊んでくるわ。
0029デフォルトの名無しさん
2007/10/06(土) 15:18:29誰かエロい人おしえてくれ。
0030デフォルトの名無しさん
2007/10/06(土) 15:35:410031デフォルトの名無しさん
2007/10/06(土) 15:37:25本家BOOST使い放題ってこと?
0032デフォルトの名無しさん
2007/10/06(土) 15:39:250033デフォルトの名無しさん
2007/10/06(土) 15:40:480034デフォルトの名無しさん
2007/10/06(土) 15:41:170035デフォルトの名無しさん
2007/10/06(土) 16:05:260036デフォルトの名無しさん
2007/10/06(土) 18:02:24extern(C++) {
interfance CPP { ... }
CPP getCPP();
}
CPP cpp = getCPP();
こういうことはできないのか
extern(C++) { class CPP { ... } }
CPP cpp = new CPP;
ここまできたらなんとかして欲しいけど無理か?
0037デフォルトの名無しさん
2007/10/06(土) 18:43:20>>34
の翻訳して
0038デフォルトの名無しさん
2007/10/06(土) 19:12:32神修正につき翻訳中。
適当にばらしてinabaさんとこのdikiに書いておくわ。
0039デフォルトの名無しさん
2007/10/06(土) 19:14:44C++からDが使えることの方が嬉しい鴨試練
0040デフォルトの名無しさん
2007/10/06(土) 19:19:23#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();
とか無理なんけ?
0041デフォルトの名無しさん
2007/10/06(土) 19:21:00inabaさんとかぶらんように、下のほうから翻訳するかも
ttp://www.kmonos.net/alang/dee/diki/?C%2B%2B%E3%81%A8%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%EF%BC%88%E4%BB%AE%E8%A8%B3%EF%BC%89
0042デフォルトの名無しさん
2007/10/06(土) 19:23:51>>36
とりあえず気持ちを繋ぎ止める為に身体を許したって感じだな
0043デフォルトの名無しさん
2007/10/06(土) 19:24:30GJ!!!
ありがとう!!
0044デフォルトの名無しさん
2007/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 外してやり過ごす・・・。
0045デフォルトの名無しさん
2007/10/06(土) 19:38:13だと
「何のクラス」か分からなくなるので
the とか it's とか冠詞が付くんじゃないかな
よって誤植と推測
0046デフォルトの名無しさん
2007/10/06(土) 20:07:29いつも使ってるvistaマシンがアップデートで死んでる。
親指シフターにローマ字入力はきついぜ。
0048デフォルトの名無しさん
2007/10/06(土) 20:51:15これってC++側にvoid deleteD(D*t)用意しないとリークする?
それとも、GCされるの?
0049デフォルトの名無しさん
2007/10/06(土) 22:05:23ちょっと感動中。Cristian Vlasceanuさんとやら天才じゃね?
さて、ありがたく和訳を読ませて頂きまする。
# ふつーのテキストが<pre>に包まれて
# 横に長ーく表示されちゃってるのは
# Dikiの仕様なのかしらん。
0050デフォルトの名無しさん
2007/10/06(土) 22:09:23>>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を用意する対策が必要でしょう。
0051デフォルトの名無しさん
2007/10/06(土) 22:12:17�d。
そうすると、既存のC++ライブラリをDから使いたければ、
C++でラッパーを書かないといけないんだな。
ちょっと面倒だね。
0052デフォルトの名無しさん
2007/10/06(土) 22:20:34Dならどんどん解決策が出てくるに違いないとか思える気分だw
D 2.0始まったな!
0053デフォルトの名無しさん
2007/10/06(土) 22:21:57自分の足の匂いでも嗅いで落ち付けよ
ああ臭ェ
0054デフォルトの名無しさん
2007/10/06(土) 22:47:43構造体扱いならメンバと非仮想関数にアクセスできる?(仮想関数にはアクセスできないが)
>>49
# 仕様ではないでしょうか。とりあえずコピペでテキストエディタで折り返すと見やすいかと。
>50に追加。
非仮想関数にもアクセスできません。
0055デフォルトの名無しさん
2007/10/06(土) 23:03:400056デフォルトの名無しさん
2007/10/06(土) 23:29:210057デフォルトの名無しさん
2007/10/06(土) 23:35:440058デフォルトの名無しさん
2007/10/07(日) 00:02:23それは紛らわしすぎw
005944
2007/10/07(日) 00:05:02Bugzilla 1474: regression: const struct with an initializer not recognized as a valid alias template param
これはどういうこと?直ったのか?直ってないけど・・・。
仕様としてだめになったってこと??(regression:回帰、復帰、逆行、退化、退行)
フォーラム読んでも結論がよくわからず・・・。誰かわかります?
006044
2007/10/07(日) 00:10:33Bugzilla 1456: Cannot use a constant with alias template parameters
0061デフォルトの名無しさん
2007/10/07(日) 00:27:53006244
2007/10/07(日) 01:03:28なるほど。じゃあいつか直るってことかな。
どうもありがとう。
0063デフォルトの名無しさん
2007/10/07(日) 10:39:16「「一回直ったバグが再発したよ」っていうバグを直したよ」ていうのが
> Bugzilla 1474: regression: const struct with an initializer not recognized as a valid alias template param
これなので、直ってないのだったら報告した方がいいかも。
2.005だと直ってるぽいので1.x系の問題かな。
0064デフォルトの名無しさん
2007/10/07(日) 12:52:36FrontPageの差分を見るとそうっぽいんだけど、携帯からだとよくわからない…
0065デフォルトの名無しさん
2007/10/07(日) 13:43:15直してみた
0066デフォルトの名無しさん
2007/10/07(日) 14:24:52物騒な時代だな
0067デフォルトの名無しさん
2007/10/07(日) 18:46:37おおお。ありがとう!
0068デフォルトの名無しさん
2007/10/07(日) 23:59:49import 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
0069デフォルトの名無しさん
2007/10/08(月) 00:20:05Dのクラスの場合、インスタンスのポインタから+8バイト位置から各メンバ変数並んでいるけど、
C++の場合、+0バイト位置から並んでいるみたい…。
007068
2007/10/08(月) 00:30:51お騒がせしました。
0071デフォルトの名無しさん
2007/10/08(月) 01:01:58ABIの仕様次第なんじゃないのかそんなん
0072デフォルトの名無しさん
2007/10/08(月) 01:02:56付属のdmdは1.0.21だから大丈夫なはずなんだけども。仕様?
0073デフォルトの名無しさん
2007/10/08(月) 01:38:520074デフォルトの名無しさん
2007/10/08(月) 10:50:050075デフォルトの名無しさん
2007/10/08(月) 10:56:11マングリング規則や仮想関数テーブルの位置や順番すら処理系依存なんだから、
この際、特定のコンパイラ向けにとことん特化すべきじゃなかろうか。
dmdならdmc++の出力とだけリンクできればいいと思う。
0076デフォルトの名無しさん
2007/10/08(月) 13:15:47それより、C++から来た例外をどうキャッチするのかが気になる。
0077デフォルトの名無しさん
2007/10/08(月) 13:22:02仕様読んでから書け。
0078デフォルトの名無しさん
2007/10/08(月) 13:31:52pluginも、plugin"で"C++対応じゃなくて、plugin"のために"C++対応するんだな。
0079デフォルトの名無しさん
2007/10/08(月) 13:33:35くじけそう・・・
0080デフォルトの名無しさん
2007/10/08(月) 23:22:480081デフォルトの名無しさん
2007/10/08(月) 23:36:58思ってたら、やっぱdmc依存なん?
「C++ではマングリング規則がコンパイラ依存」なんて記述も見つかるし。
そうだとしたら「dmdはC++のマングリングを把握しています」なんて書いてあるけど、
微妙にJARO通報モノだったり? 訳注でも付けとこか。
0082デフォルトの名無しさん
2007/10/08(月) 23:37:12boost::multi_indexが欲しいがこれは作るしかなさそう
0083デフォルトの名無しさん
2007/10/08(月) 23:45:14コレクションクラスならtangoに入ってる。
0084デフォルトの名無しさん
2007/10/08(月) 23:51:47Linux版のdmdでは以下のに対応してる。Windows版は知らね。
http://www.codesourcery.com/cxx-abi/
0085デフォルトの名無しさん
2007/10/09(火) 01:18:39ありがとーぉ。dmcはWin32しか無いじゃないかーとか絶望するところだった。
……でも正直書いてあることの意味がほとんど理解できませぬ。
C++ABIの標準を決めようって活動で、
g++とかはそれに従ったマングリングをすることもできる、って事?
Win版に関しては、最後の
「時間がたてば、より多くのC++ ABIの側面が
Dから直接アクセスできるようになるでしょう。」の一文に期待するしか?
0086デフォルトの名無しさん
2007/10/09(火) 01:22:33ありがとうございます。
見てみましたがなんか微妙な使い勝手?
0087デフォルトの名無しさん
2007/10/09(火) 01:32:52IA-64向けコンパイラでは標準、それ以外のアーキテクチャ向けでもg++とicpcがこのabiを元にした物を標準で使ってる。
0088デフォルトの名無しさん
2007/10/09(火) 01:35:09dmc++とvcはマングリング規則一緒っぽい。
0089デフォルトの名無しさん
2007/10/09(火) 04:47:570090デフォルトの名無しさん
2007/10/09(火) 07:39:02Wikipediaそんなのまでのってるのか・・・
0091デフォルトの名無しさん
2007/10/09(火) 12:37:34どうせこの板の常連とかが書いた or 訳したんでしょう。
0092デフォルトの名無しさん
2007/10/09(火) 13:00:16オブジェクトファイルの形式が違うからリンクできないんだよね?
C++って案外可搬性ないんだな
0093デフォルトの名無しさん
2007/10/09(火) 16:04:45>>84で言うLinux版dmdて、
http://www.kmonos.net/alang/d/dcompiler.html#linux のヤツの事でOK?
それともgdcとゆーやつを頑張ってコンパイルしなきゃダメ?
0094デフォルトの名無しさん
2007/10/09(火) 16:33:32そのヤツでOKだけど
http://www.digitalmars.com/d/changelog.html#new2_005
から落とさないとバージョン古いよ
0095デフォルトの名無しさん
2007/10/09(火) 17:50:24演算子オーバーロードでstaticなのとそうでないのが区別できないのが困る
0096デフォルトの名無しさん
2007/10/09(火) 18:11:32void func(real x..y);
と関数を定義したいなあ、と。
タプルでもいいから。
末尾を含むかどうかはx...y表現を認めるかどうかは難しそうだけど。
機能の提案って本家のMLとかに流すんでしたっけ?
0097デフォルトの名無しさん
2007/10/09(火) 18:14:050098デフォルトの名無しさん
2007/10/09(火) 18:15:240099デフォルトの名無しさん
2007/10/09(火) 18:16:510100デフォルトの名無しさん
2007/10/09(火) 18:19:000101デフォルトの名無しさん
2007/10/09(火) 20:11:280102デフォルトの名無しさん
2007/10/09(火) 20:34:40対カッコの強調表示がむちゃくちゃになるのが難点
0103デフォルトの名無しさん
2007/10/09(火) 20:51:190104デフォルトの名無しさん
2007/10/09(火) 22:28:190105デフォルトの名無しさん
2007/10/09(火) 22:37:54ttp://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=55946
x..yがx, yに展開されるだけだとsyntax sugerとしてもいまいち弱い感じがしますね。
(x, y]を表現できるリテラルはかなり少ないので、そのへんの書き方で文法を汚さずに追加できれば面白そうなのですが。
以前x<Range<=yと書くとRange型のインスタンスが生成されるクラスをC++で書いたのですが、
opCmpだとそれは許されないんですよねえ。
0106デフォルトの名無しさん
2007/10/09(火) 22:55:41は?
0107デフォルトの名無しさん
2007/10/09(火) 22:56:030108デフォルトの名無しさん
2007/10/09(火) 23:30:36class Foo {
enum EnumType { A, B, C }
}
void func(Foo.EnumType arg);
こういう定義のとき、funcに列挙された値を与えるのに
func(Foo.EnumType.A)
とやたら冗長なので、
func(A)
と書いて通るように識別子探索を拡張して欲しいと提案してみる。
これっていまのところ解決策はないですよね?
0109デフォルトの名無しさん
2007/10/09(火) 23:36:35今後のプランの一つに入ってるって、どこかで見た気がする。
カンファレンスのスライドだったかなあ。
0110デフォルトの名無しさん
2007/10/09(火) 23:48:10それはいいねえ。
早めに対応してもらいたい感じだ
カンファレンスのログはあったと思うので、探してみる
0111デフォルトの名無しさん
2007/10/09(火) 23:54:26>>93
死ぬほどありがとう。おかげで悩みまくった数時間が気持ちよく無意味になりますた。
そしてdmdのバージョン出力をよく見てなかった俺めアホが!
しかし完全にUTF-8化されているだけあって、Ubuntuじゃ文字化けしねぇなぁ。
Vista買ったのがバカらしくなってきたわい。
>>108
あー。それJavaでもC#でも同じ事思った覚えが。是非是非。
0113デフォルトの名無しさん
2007/10/10(水) 00:20:15http://d.puremagic.com/conference2007/speakers.html
うぉるたたんのスライドのp35
0114デフォルトの名無しさん
2007/10/10(水) 00:29:170115デフォルトの名無しさん
2007/10/10(水) 00:42:15定数関連はinvariantに任せて、enumの方はシンボルってことで識別子名を
簡単に表示できるようになってくれればいいのに。
enum使うとデバッグ作業がめんどくさくて。
0116デフォルトの名無しさん
2007/10/10(水) 00:56:510117デフォルトの名無しさん
2007/10/10(水) 01:13:07ありがとう。
enum以外にも魅力的な拡張が多くて目移りしますね。
第一引数が配列である関数をプロパティ的に扱える機能の拡張はいいですね。
ついでにクラス内の(public)メンバを列挙して、自動で配列プロパティに突っ込むテンプレートがあるとうれしいかも……
ついでにデリゲートもオーバーロードしたかったり
>115
struct + invariant配列のほうが便利だったりしますね。パラメタ多いと。
0118デフォルトの名無しさん
2007/10/10(水) 01:20:35あれはC++のクラスを利用する布石ではないかという希ガス
まあ、便利なものはテンプレートの互換性がないと何も使えない気も……
0119デフォルトの名無しさん
2007/10/10(水) 02:00:48その次は(環境を持ち運べる)closureかな
0120デフォルトの名無しさん
2007/10/10(水) 02:41:24英語未熟でおぼろげにしか解らないけど。
とりあえずヲルタンのを見てみただけだけど、要点だけまとめた簡潔なスライドだし、
翻訳する費用対効果は高いんじゃ、と無責任に言ってみる。
あと疑問ー。
http://www.kmonos.net/alang/dee/diki/?C%2B%2B%E3%81%A8%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%EF%BC%88%E4%BB%AE%E8%A8%B3%EF%BC%89
の「Dのガベージコレクタで確保したメモリへのポインタを渡すには...」のくだり。
GCによる解放対策にだけ触れてる感じだけど、
GCって生きてるオブジェクトでも、移動してポインタ書き換えとかするよね?
ほんとに安全にD外にGCポインタ貸し出すなら、GCを停止しないといけないんじゃ?
0121デフォルトの名無しさん
2007/10/10(水) 09:28:04とりあえず、はっておこう
0122デフォルトの名無しさん
2007/10/10(水) 09:30:02オブジェクト/クラス単位でガベコレのON/OFFって出来なかったっけ
0123デフォルトの名無しさん
2007/10/10(水) 11:27:140124デフォルトの名無しさん
2007/10/10(水) 16:28:12カスタムアロケータを書くしかなかったと思う。
0125デフォルトの名無しさん
2007/10/10(水) 21:34:36void main(){
auto b = new B();
b.f();
}
class A{
void f(){
writefln("A");
}
}
class B: A{
final void f(){
super.f();
writefln("B");
}
}
リリースビルドして実行するとBがダブって表示されるのですが、
これは正しい動作なんでしょうか? バグなのでしょうか?
0126デフォルトの名無しさん
2007/10/10(水) 21:34:570127デフォルトの名無しさん
2007/10/11(木) 01:00:160128デフォルトの名無しさん
2007/10/11(木) 01:11:40つ __TIMESTAMP__
0129デフォルトの名無しさん
2007/10/11(木) 01:14:30そういえばそんなのあったなあ。
だけど文字列なのか…ちょっと厄介だのう
0130デフォルトの名無しさん
2007/10/11(木) 06:26:34便利だなこれ
>>120
「開放する」の元の単語ははcollectであってdeleteやfreeじゃないので、
「処理する」「片付ける」のほうがいいかもしれませんね。
0131デフォルトの名無しさん
2007/10/11(木) 06:48:08例えばこんな感じ
hashの中身は、なるべくばらけが大きくなるような暗号系のアルゴリズムに近いほうがいいかも。
この値をキーにして、立ち上がりの早い擬似乱数生成器にかける方法もある
いずれにせよインチキなんで、求める乱数性に応じて適当にやってみてください
int hash(in char[] x) {
int sum;
foreach(c; x) sum^=cast(int)c*3;
return sum;
}
static if( hash(__TIMESTAMP__) == 1 ) {
}
0132120
2007/10/11(木) 10:47:31おおう、対応どもです。しかしせっかく真摯に対応していただいて申し訳ないのですが、
私の言いたいことは翻訳の仕方に関してでは無く、書いてある内容そのものなのデス。
多分原文でも言ってることは同じで、翻訳には問題なかったんじゃないでしょか。
というわけで、改めて>>120の疑問を書き直してみたり。
「Dでnewした領域のポインタをC++に渡してやってもいいけど、
途中でGCが走ってその領域がcollectされちゃうと、
いきなりポインタが無効になってC++側が困るよね。
だから以下ほげほげな方法で、GCのcollect対象にならないよう気をつけてね」
ってヲルターは言ってるけど、ポインタが無効になる要因ってcollectだけじゃないよね?
http://www.kmonos.net/alang/d/garbage.html によれば、
> 4. 残ったメモリ領域のデータをコピーして使用領域をまとめる処理 (コピーGCと呼ばれます) が実行される可能性があります。
> ガベージコレクタは、オブジェクトをメモリ上の任意の位置に再配置することがあり...
つまりcollect対象でない「生きた」領域を指すポインタだって、GCが走れば再配置によって無効になる可能性がある。
本当は「生かす」だけじゃなく、そのメモリ位置に「固定」する方法が必要なんじゃないか?
……って、アレ? このへん「Cとのインターフェイス」に書いてあることと同じじゃないすか。今気付いた。
今まで問題になったことなかったっけ? 再配置なんて実際には滅多に起こらないとか?
0133デフォルトの名無しさん
2007/10/11(木) 11:12:23・今のPhobosとTangoのGC実装はコピーGCじゃないので、再配置なんて実際には決して起こらない
・もし実装がコピーGCに変わったら、指摘されてる通りの問題は起きる
・そんときは std.gc.fix(void*) みたいな固定するメソッドが追加されるんじゃないかなあ(予想
0134デフォルトの名無しさん
2007/10/11(木) 12:11:030135デフォルトの名無しさん
2007/10/11(木) 12:27:460136デフォルトの名無しさん
2007/10/11(木) 12:33:55わかんね
0137デフォルトの名無しさん
2007/10/11(木) 13:33:07managed C++ に、pinっていうのがあったなぁ
(ピン止めという意味)
0138デフォルトの名無しさん
2007/10/11(木) 15:01:05大風呂敷ktkr。非常にwktk。
0139デフォルトの名無しさん
2007/10/11(木) 15:28:150140デフォルトの名無しさん
2007/10/11(木) 16:18:29DはADLを持ってはいないが、次のアップデートの際には「overload sets」が導入されるだろう。
これはADLとは非常に異なるものの、同じことを実現するものである。
0141デフォルトの名無しさん
2007/10/11(木) 16:20:540142デフォルトの名無しさん
2007/10/11(木) 16:31:43Herb = 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やるとカオスになるからやらないって言ってたけどどうなるんだろう
0143デフォルトの名無しさん
2007/10/11(木) 17:45:45パールのお化けがでるよ?
0144デフォルトの名無しさん
2007/10/11(木) 17:47:13に限ってADLを行うようにすればいいんじゃね?
0145デフォルトの名無しさん
2007/10/11(木) 18:00:09うーん。わかる人にはわかるって感じだなぁ。
むー、どうなるんだろうねぇ。
0146デフォルトの名無しさん
2007/10/11(木) 23:03:02何にもわかってないなぁ。。。
0147デフォルトの名無しさん
2007/10/12(金) 16:05:48もっとサンプルコードくれくれ。
0148デフォルトの名無しさん
2007/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されたモジュールのシンボルと真の意味で重複しなければ
呼び出し可能にするだけだと思うんだけどややこしいことが必要なの?
0149デフォルトの名無しさん
2007/10/12(金) 19:49:520150デフォルトの名無しさん
2007/10/12(金) 20:27:50ADLは引数の型の名前空間を見に行って関数を探すみたいだけど
そんなややこしそうなことしなくても素直に考えたら
a.func(int) を a_func_int として
b.func(string) を b_func_string としておいて
どこかで func(10) を見つけたら *_func_int のシンボルを検索し
func("hoge") を見つけたら *_func_string のシンボルを検索するだけだよな?
それでコンフリクトが見つかったらあいまいな関数呼び出しエラーにすればいいんじゃないのかと思って
0151デフォルトの名無しさん
2007/10/12(金) 20:40:390152デフォルトの名無しさん
2007/10/12(金) 20:55:030153デフォルトの名無しさん
2007/10/12(金) 21:35:52なんでお前の想像でレスを消費しなきゃなんないんだよ。アホかいな。
0154デフォルトの名無しさん
2007/10/12(金) 22:35:11std.file.read() や std.file.write() で読み書きするにはどうしたら
良いんでしょうか?というか、void[]型の使い方がいまいち分からない。
0155154
2007/10/12(金) 23:12:13void[] は型のない配列だから、構造体もlengthが1の配列にして受け渡しすりゃ良かったんですね。
0156デフォルトの名無しさん
2007/10/13(土) 00:53:25毎回手で書くようなもんじゃないということなんかな。
0157デフォルトの名無しさん
2007/10/13(土) 01:15:380158デフォルトの名無しさん
2007/10/13(土) 02:06:380159デフォルトの名無しさん
2007/10/13(土) 02:29:16共用体のほーがいいかもなー
0160デフォルトの名無しさん
2007/10/13(土) 03:11:030161デフォルトの名無しさん
2007/10/13(土) 04:36:40これ?
0162デフォルトの名無しさん
2007/10/13(土) 22:42:49DerelictのD2.0用のポーティングならある
0163デフォルトの名無しさん
2007/10/14(日) 05:50:560164デフォルトの名無しさん
2007/10/14(日) 06:24:42詳しい人誰か移行ガイドとか書いてくれないかなと思い続けている。
0165デフォルトの名無しさん
2007/10/14(日) 10:36:27いいだしっぺの法則で是非 m(_ _)m
constとか文字列のコピー、そのあたり型が厳格になったのが
違うと思う
0166デフォルトの名無しさん
2007/10/14(日) 13:16:58・doxygen 未対応(const な引数、戻り値を使うと正常にパースできない)。
・各種ポーティングを2.0用に(若干)修正必要。
・各種ポーティングに渡す時にキャストが必要。
例えばtoUTF16z()などの戻り値が(const wchar*)だけどポーティングのほうは(wchar*)なのでcast(wchar*)が必要
・文字列リテラルが invariant なchar[] なので char[] s = "hoge"; とかやってると修正が必要。
だった。文字列リテラルはともかく、各ツールやライブラリが2.0用に対応してないと面倒くさくて適わない。
結局1.0に戻った。const/invariant/final は1.0に初めから欲しかったなぁ。
0167166
2007/10/14(日) 13:20:230168デフォルトの名無しさん
2007/10/14(日) 13:47:48const(C) c; //Cはクラス
というメンバ変数に代入しようと思ってもできない(言語仕様上できるはず)とか、
メンバ関数でfinal constってできないこととか、
「一度初期化したら変更しない。初期化はコンストラクタじゃないメンバ関数で行う」
ということをしたいときに、finalが使えないこととか、
使いにくい点が多数。
将来なんとかなるのかな。
あと、「あるオブジェクトが別のオブジェクトの参照をもつ」ということをたまにするけど、
そのとき、別のオブジェクトを変更しないときはそれにconstを付けたいと思うのが普通だと思う。
で、そうするとその別オブジェクトに含まれるポインタには全部constが付いてしまう。
例えば、別オブジェクトにHWND型の変数があって、それを取り出してAPI関数に
入れるときには、constが付いてしまっている。
何が言いたいのかというと、win32のバインディングを完全にD2.0に対応しようとするならLPCSTRをconst付きにするだけでは駄目だということ。
ポインタ型を引数に取る全ての関数について、正しくconstをつけないといけない。
でも正直、win32をポーティングしてる人たちがここまでやるとは思えないし、なんかconst周りは絶望感しか感じない。
0169168
2007/10/14(日) 13:52:10参照渡しだとずっと思ってた。
どこで勘違いしたんだろ。
0171デフォルトの名無しさん
2007/10/14(日) 17:04:00ポインタの値渡しだね。
1.0の in/out/ref は正直使いにくいと思った。
in でも参照先の値を変更することがいくらでもできるし。
const まわりはまだ検討が足りない気がするなぁ。
0172デフォルトの名無しさん
2007/10/14(日) 23:44:10>ポインタの値渡し
? アセンブラでみるとポインタで渡すのが参照渡しとおもってたんだけど・・違うのかな。
>参照先の値を変更することがいくらでもできる
castしてない?
0173デフォルトの名無しさん
2007/10/14(日) 23:54:330174168
2007/10/15(月) 00:13:18>ポインタの値渡しだね。
ただの値渡しだと思う。
デバッガで逆アセしたコード見てみたら、inがあってもなくても同じコードになってたし。
0176デフォルトの名無しさん
2007/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;
}
0177デフォルトの名無しさん
2007/10/15(月) 21:28:160178デフォルトの名無しさん
2007/10/16(火) 07:26:220179デフォルトの名無しさん
2007/10/16(火) 18:36:41どんな感じっすか
0180デフォルトの名無しさん
2007/10/16(火) 19:18:310181デフォルトの名無しさん
2007/10/16(火) 19:40:16∧,,∧ ∧,,∧
∧ (´・ω・) (・ω・`) ∧∧
( ´・ω) U) ( つと ノ(ω・` )
| U ( ´・) (・` ) と ノ
u-u (l ) ( ノu-u
`u-u'. `u-u'
0182デフォルトの名無しさん
2007/10/16(火) 21:33:12SDL_mixerとABAさんのsound.dを使うようにしたところ、
Out of memoryというエラーが出てクラッシュするようになってしまいました。
メモリ使いすぎかと思ったのですが、
タスクマネージャから見るとメモリ使用量はほとんど増加していないので、
どんなバグを疑えばよいですか?
ソースコードの変更点としては、数箇所にSound.playSe()とSound.playMarkedSe()を追加しただけで、
しかもこのライブラリはABAさんが実用化しているので、何が変わっているのかさっぱりです。
これを取り除くとやはり発生しなくなります。
0183デフォルトの名無しさん
2007/10/16(火) 21:34:58コンパイルは成功して、同じ用にゲームは動き、音もなるのですが、
しばらく動かしていると突然エラーが出て終了する、という状態です。
0184デフォルトの名無しさん
2007/10/16(火) 23:33:10口元の筋肉がちょっと動いた
0185デフォルトの名無しさん
2007/10/17(水) 00:29:220186デフォルトの名無しさん
2007/10/17(水) 01:22:290187デフォルトの名無しさん
2007/10/17(水) 01:24:16D2.0でやってる?
0188178
2007/10/17(水) 02:36:03要はこういうことなんだなあ、と
http://www.kmonos.net/wlog/64.html#_2340060823
0189デフォルトの名無しさん
2007/10/17(水) 04:23:32ttp://www.digitalmars.com/d/changelog.html
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の機能追加は多すぎて省略
0190デフォルトの名無しさん
2007/10/17(水) 05:04:39std.getoptでプログラムの引数の利用が容易に、std.fileにディレクトリ内のファイル一覧を簡単に取得する方法が無かったのが修正された、std.stdioに機能増えすぎワロタ、std.contractsが新鮮。
std.conv.parseとstd.string.munchのコンボもいい。けど、refを使ったのは別のモジュールにまとめて欲しいような気がしないでもない。
0191デフォルトの名無しさん
2007/10/17(水) 05:16:50仕様が固定されたD1.0系列を使うか新機能とPhobosが見せる巻き返しを堪能するためにD2.0を使うべきか…悩ましい…
0192デフォルトの名無しさん
2007/10/17(水) 05:29:550193デフォルトの名無しさん
2007/10/17(水) 05:59:56 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
___ _
/ ____ヽ /  ̄  ̄ \
| | /, −、, -、l /、 ヽ
| _| -|○ | ○|| |・ |―-、 |
, ―-、 (6 _ー っ-´、} q -´ 二 ヽ |
| -⊂) \ ヽ_  ̄ ̄ノノ ノ_ ー | |
| ̄ ̄|/ (_ ∪ ̄ / 、 \ \. ̄` | /
ヽ ` ,.|  ̄ | | O===== |
`− ´ | | _| / |
0194デフォルトの名無しさん
2007/10/17(水) 07:51:06良いニュースなのか悪いニュースなのか!?
0195デフォルトの名無しさん
2007/10/17(水) 07:55:390196デフォルトの名無しさん
2007/10/17(水) 08:10:220197デフォルトの名無しさん
2007/10/17(水) 08:15:420198デフォルトの名無しさん
2007/10/17(水) 08:24:330199デフォルトの名無しさん
2007/10/17(水) 09:13:040200デフォルトの名無しさん
2007/10/17(水) 11:54:50定期的に話題になるよな
2.0をいじってたら、
Tangoのわなびとしか、最近思えなくなってきた。
0201デフォルトの名無しさん
2007/10/17(水) 12:05:40ををVariant来た! boxはいらない子になるのかなぁ・・・
!isっていつからあった?
0202デフォルトの名無しさん
2007/10/17(水) 12:14:31……どーいう意味を持つのかイマイチ分からない。
というか、未だに「invariant型」の動作がよく分からん。
invariant(char[]) book = "I, Robot";
って宣言したbookに関して、
book ~= " by Isaac Asimov";
book.length = 1;
book = "2001 Space Odyssey";
こういう動作は別に禁止されないんだよね。invariant型って、どういう目的で使えばいいの?
0203デフォルトの名無しさん
2007/10/17(水) 12:32:07D2.006の新しいPhobosの機能をD1.xに移植した人がdigitalmars.D.announsに。
std2ってやつ。
0204デフォルトの名無しさん
2007/10/17(水) 13:24:39invariant(char[]) book = "I, Robot";
を
invariant(char)[] book = "I, Robot";
で、意味が変わるきがするが
0205デフォルトの名無しさん
2007/10/17(水) 14:02:50!isはisが導入されたときからあったと思う
0206デフォルトの名無しさん
2007/10/17(水) 14:11:49それは同じ意味になる
http://www.digitalmars.com/d/final-const-invariant.html
の Invariant Doesn't Apply To Declared Symbols のあたり。
0207デフォルトの名無しさん
2007/10/17(水) 14:19:58たとえば
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が後で
書き換えるようなことがない。
とかそういう使い方。
0208デフォルトの名無しさん
2007/10/17(水) 14:29:13まーた全部書き換えかよ…
0209デフォルトの名無しさん
2007/10/17(水) 14:48:240210デフォルトの名無しさん
2007/10/17(水) 15:21:420211デフォルトの名無しさん
2007/10/17(水) 15:49:37string letters()
{
char[] result = new char['z' - 'a' + 1];
foreach (i, ref e; result)
{
e = 'a' + i;
}
return assumeUnique(result);
}
これか なるほど
0212デフォルトの名無しさん
2007/10/17(水) 19:05:34動作確認してなかったので翻訳してなかったんだが、
string, wstring, dstringの定義をinvariant付きにしました。
関数の定義と実装を(標準ライブラリ関数の影響も含めて)山ほど変更する必要があります。
invariantなstringを使ってみた最初の感想としては、かなり有望です。
なにがどう有望なのか試してないのでなんともいえませんが。
0213デフォルトの名無しさん
2007/10/17(水) 19:37:540214デフォルトの名無しさん
2007/10/17(水) 20:01:300215デフォルトの名無しさん
2007/10/17(水) 20:41:340216デフォルトの名無しさん
2007/10/17(水) 20:45:46まだじゃね?
0217デフォルトの名無しさん
2007/10/17(水) 21:20:07void main() {
foreach(string line; lines(enforce(fopen(__FILE__)))) {
write(line);
}
}
SUGEEEE
0218デフォルトの名無しさん
2007/10/17(水) 21:22:390219デフォルトの名無しさん
2007/10/17(水) 21:31:010220デフォルトの名無しさん
2007/10/17(水) 21:31:17解決しました。
すいません、もともとあったメモリ関係のバグが、たまたま出てきた形でした。
0221デフォルトの名無しさん
2007/10/17(水) 21:45:351系が成熟しないままさっさと2系に移ったところを見ると
実用的になるのは3系が登場してからかなと思ってしまう。
0222デフォルトの名無しさん
2007/10/17(水) 21:51:38実用的になるなんてあり得ないよ。
0223デフォルトの名無しさん
2007/10/17(水) 21:59:20さっぱりわからんのだが・・・
idup付ける代わりにassumeUniqueで済むってことだけじゃないよな?
余計にタイプ数増えるんだが
本当はassumeUniqueは何のためのものなの?
0224デフォルトの名無しさん
2007/10/17(水) 22:05:37idupはデータのコピーが行われるが、
assumeUniqueはコピーが行われない。
0225デフォルトの名無しさん
2007/10/17(水) 22:40:23うーん
そうですか
もうちょっと暗黙のコピーが発生するのを許容して
明示的な指定が減るようになったらいいね
0226デフォルトの名無しさん
2007/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");
}
0227デフォルトの名無しさん
2007/10/17(水) 23:01:33>Breaking change: std.stdio.writef can now only accept a format as its first argument.
0228デフォルトの名無しさん
2007/10/17(水) 23:21:22あ 最後に書いてあるのそういうことか thx
0229デフォルトの名無しさん
2007/10/17(水) 23:34:020230デフォルトの名無しさん
2007/10/17(水) 23:57:41とエールを送っておこう
0231デフォルトの名無しさん
2007/10/18(木) 01:09:50Andrei Alexandrescu先生のTMPが見られるのは今やD言語だけ!(でもない)
0232デフォルトの名無しさん
2007/10/18(木) 01:40:110233デフォルトの名無しさん
2007/10/18(木) 01:46:500234デフォルトの名無しさん
2007/10/18(木) 19:31:42ありがと しらんかった
0235デフォルトの名無しさん
2007/10/19(金) 00:01:060236デフォルトの名無しさん
2007/10/19(金) 00:14:290237デフォルトの名無しさん
2007/10/19(金) 06:13:14void main(){ f([[]]); }
void f(int[][] a){}
f(cast(int[][])[[]]); ならおk
-v 付きでコンパイルすると semantic3 までは表示されるけど code が表示されずに止まってる。
何これ?
0238デフォルトの名無しさん
2007/10/19(金) 06:40:440239デフォルトの名無しさん
2007/10/19(金) 11:33:27それがDOS
0240デフォルトの名無しさん
2007/10/19(金) 11:37:56int ifind(in const const char[] s, in const const char[] sub);
なんなんだ、const だらけかよ。
inつかっても constをこれだけ使うっていうのがなんとも・・・
0241デフォルトの名無しさん
2007/10/19(金) 12:44:04inって
invariant const scopeだったよねwwwconst三つですかwwwww
0242デフォルトの名無しさん
2007/10/19(金) 13:09:17ソース見れ
0243デフォルトの名無しさん
2007/10/19(金) 13:36:42コンパイル激早なんで、やる必要があまりないのかもしれませんが・・・
0244デフォルトの名無しさん
2007/10/19(金) 13:50:03bud -lib main.d
何も使わないでやるなら
dmd -c main.d
lib -c -l main.lib main.obj
0245デフォルトの名無しさん
2007/10/19(金) 13:50:18なんかintつけるとDDocが変なものを生成する。
0246デフォルトの名無しさん
2007/10/19(金) 14:18:480247デフォルトの名無しさん
2007/10/19(金) 16:20:50なにそれ
0248デフォルトの名無しさん
2007/10/19(金) 16:53:40そういやなんで?とか!とかは識別子にならないの?
0249デフォルトの名無しさん
2007/10/19(金) 17:01:030250デフォルトの名無しさん
2007/10/19(金) 17:03:490251デフォルトの名無しさん
2007/10/19(金) 17:24:27scope周りはバグだらけ。もうどうしようもない
0252デフォルトの名無しさん
2007/10/19(金) 17:40:250253デフォルトの名無しさん
2007/10/19(金) 17:50:04C++から移ってきたときはほしいなと思ったこともあったけど、現状のconstとinveriantを見てるとうざったさ以上の便利さを感じない…
もっと上手い方法なかったのかな…
0254デフォルトの名無しさん
2007/10/19(金) 18:03:42Scheme触って帰ってきたら使わずには居られないwwww
0255デフォルトの名無しさん
2007/10/19(金) 19:50:18constまわりは、まだまだこれからって感じだと思う。
現時点では文字列をimmutableにするためにしか使われてないし。
評価を下すのはまだ早いと思う。
現状のconstまわりの仕様には問題あると思うが。
文字列(配列)のスライスはコピー作らないから、文字列をimmutableにする意味はあると思うし、現時点では、
「inveriantは文字列をimmutableにするためのもの」
って割り切って、それ以外の機能は使わないようにすれば何とかやっていけそうだと俺は感じてる。
0256デフォルトの名無しさん
2007/10/19(金) 23:12:18ありがとうございます
作れました!
0257デフォルトの名無しさん
2007/10/20(土) 02:46:330258デフォルトの名無しさん
2007/10/20(土) 07:56:120259デフォルトの名無しさん
2007/10/20(土) 13:09:30カンファレンスのをるたんのスライド見れば分かるよ。
0260デフォルトの名無しさん
2007/10/20(土) 14:45:020261デフォルトの名無しさん
2007/10/20(土) 16:50:221系列は俺に任せてお前達は先に行け!
まで読んだ
0262デフォルトの名無しさん
2007/10/20(土) 17:38:26文字数増えてるという不思議。
0263デフォルトの名無しさん
2007/10/20(土) 18:20:58つまり行間じゃなくて字間を読んだということか
0264デフォルトの名無しさん
2007/10/20(土) 20:27:45暗黙のコピーがいやでしょうがない
どこでどう動いてるか把握したい
文字列で、知らぬ間にメモリをちょっとでも使われるのも嫌でたまらん
ってことかな。
スクリプトライクな手軽なコーディングを
できるだけ殺さないように、がんばってんだよね
0265デフォルトの名無しさん
2007/10/20(土) 22:14:00phobos は単純明快だが機能面でちょっと不足な上にバグ多いし、
tango は機能面はある程度充実してるけどドキュメントが整備されてない上に使いにくかったりするし、
なんかこう、どっちも中途半端なんだよなぁ。
0266デフォルトの名無しさん
2007/10/20(土) 22:28:27全角?も駄目なんだな。これで我慢しとけ。
bool もしかしてnullですか(Object nullかどうか調べるオブジェクト)
{
return nullかどうか調べるオブジェクト is null;
}
0267デフォルトの名無しさん
2007/10/21(日) 00:09:010268デフォルトの名無しさん
2007/10/21(日) 00:10:250269デフォルトの名無しさん
2007/10/21(日) 00:11:090270デフォルトの名無しさん
2007/10/21(日) 03:22:06藻前は組み込みに向いている
Dが組み込みに対応するその日まで
Dで生き延びろ
0271デフォルトの名無しさん
2007/10/21(日) 03:25:550272デフォルトの名無しさん
2007/10/21(日) 07:58:34両者の良いところが全部一つに集まると、
素晴らしき真のDが誕生してどんな願いも叶えてくれると伝説にはあります
0273デフォルトの名無しさん
2007/10/21(日) 09:51:27げ、するどい 正直びっくりした。
組み込み屋です。 Dが早く使えないかねらってます。
0274デフォルトの名無しさん
2007/10/21(日) 12:02:310275デフォルトの名無しさん
2007/10/21(日) 13:55:30そう考えると2.006 invariant stringは有望だなあ。
Walterたんが「リアルタイム処理ではmalloc/freeよりGCの実行制御のほうが有利なこともある」
ってるが、そういうのは確かにあるので分かる気はする。
実際free listと組み合わせるとなかなか高速に動作してくれるし。
ada並の用途になるとDも本望だろう。
0276デフォルトの名無しさん
2007/10/21(日) 14:37:40それを後の人は「闇鍋」と呼んだ。
0277デフォルトの名無しさん
2007/10/21(日) 14:57:010278デフォルトの名無しさん
2007/10/21(日) 15:34:370279デフォルトの名無しさん
2007/10/21(日) 15:45:17ttp://ja.wikipedia.org/wiki/組み込みシステム
0280デフォルトの名無しさん
2007/10/21(日) 15:57:58サンクス
0281デフォルトの名無しさん
2007/10/21(日) 17:11:50たとえばH8のマイコンがGCCのコンパイラでコンパイルできるみたいだけど、
GDCとH8を使ってD言語による組み込み向けのプログラムを作ることはできないのかな?
0282デフォルトの名無しさん
2007/10/21(日) 18:59:260283デフォルトの名無しさん
2007/10/21(日) 19:00:39GDCでクロスコンパイラはつくれるかもしれないが、
ターゲットが32ビットCPUでないとだめかもしれない。
0284デフォルトの名無しさん
2007/10/21(日) 19:01:25ソースによらず汎用的にストリームを扱いたいときはどのインタフェースをサポートすればいい?
0285デフォルトの名無しさん
2007/10/21(日) 20:22:16去年 gdc を H8 にポートしてみた事がある。
phobos の GC がうまく動作しないところで絶賛放置中。
2日の作業じゃここらが限界だった。
0286デフォルトの名無しさん
2007/10/21(日) 22:06:180287デフォルトの名無しさん
2007/10/21(日) 22:16:380288デフォルトの名無しさん
2007/10/21(日) 22:41:030289デフォルトの名無しさん
2007/10/22(月) 00:17:210290デフォルトの名無しさん
2007/10/22(月) 00:56:13flectioned から抜き出してみた。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;
}
0291デフォルトの名無しさん
2007/10/22(月) 00:58:570292デフォルトの名無しさん
2007/10/22(月) 01:23:43Tangobos 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共存させるのが目的なんだよな?
0293デフォルトの名無しさん
2007/10/22(月) 02:30:100294デフォルトの名無しさん
2007/10/22(月) 10:56:200295デフォルトの名無しさん
2007/10/22(月) 11:06:070296デフォルトの名無しさん
2007/10/22(月) 12:24:25Tangoboswww
見間違いかと思ったわw
0297デフォルトの名無しさん
2007/10/22(月) 12:57:13Tangoの上に乗っかるPhobos互換レイヤか
0298デフォルトの名無しさん
2007/10/22(月) 13:07:180299デフォルトの名無しさん
2007/10/22(月) 13:09:360300デフォルトの名無しさん
2007/10/22(月) 13:31:59統一してほしいね〜
そもそも、TangoはPhobosと共存できないように
作る必要があったのだろうか?
0301デフォルトの名無しさん
2007/10/22(月) 14:03:17どうせ D はまだ実用されてるとは言いがたい状況なんだし、
新規のライブラリがポンと出てきた所で問題は無い。
0302デフォルトの名無しさん
2007/10/22(月) 14:08:580303デフォルトの名無しさん
2007/10/22(月) 14:27:52phobosはバージョンアップに追従するのが原則、
Tangoはそこまでやったりもしてないからなあ。
C++ユーザからの乗り換えパスとしてSTLとboost相当の移植は欲しい気がする
lexical_castとかはC++では使えるけどDではtoStringその他が使えるからまあいいけど。
0304デフォルトの名無しさん
2007/10/22(月) 14:35:52>lexical_cast
確かめてないけどstd.conv.toは?
0305デフォルトの名無しさん
2007/10/22(月) 16:47:31bud使ったほうが早いかな?むしろrdmd bud.dってかww
0306デフォルトの名無しさん
2007/10/22(月) 16:49:550307デフォルトの名無しさん
2007/10/22(月) 17:01:000308デフォルトの名無しさん
2007/10/22(月) 17:31:37ちゃんと「The D Style」なんてのまで存在してるのに、
そこまでlowerCamelが嫌いだったのかねぇ・・。
豊富な機能やクラス設計に「おお」と思いつつ、ドキュメントのHelloWorldを見た時点で
> tango.io.Console;
「え? モジュール名・・」
> Cout("Hello...")(s).newline
「え? Coutて? UpperCamelな関数? いや()演算子持ったオブジェクト?
つかなんで可変引数使わへんのん? で、newline? 構文が最終的にプロパティ参照になっちゃってるやん?」
そんなTango。
0309デフォルトの名無しさん
2007/10/22(月) 17:34:31なんか考えがあってのことなのかね?
0310デフォルトの名無しさん
2007/10/22(月) 17:44:080311デフォルトの名無しさん
2007/10/22(月) 17:54:10void coutln(T...)(T t){ ... }
とか各自定義汁ってことか?www
0312デフォルトの名無しさん
2007/10/22(月) 17:56:180313デフォルトの名無しさん
2007/10/22(月) 18:15:54import tango.io.Stdout;
Stdout("こんにちは 世界\n");
Stdout(1, 2, 3, 4, 5).newline;
int a = 5, b = 10;
Stdout.format("てすと {} + {} = {}", a, b, a+b).newline;
0314デフォルトの名無しさん
2007/10/22(月) 18:33:080315デフォルトの名無しさん
2007/10/22(月) 18:34:55使いたいといえば使いたいんだよねTango。
SDLに対するSDL_image/mixer/..、C++のSTLに対するboostみたく、
phobosがコンパイラ添付の最低限ライブラリ、
Tangoが「事実上の標準」な拡張ライブラリ、とかに分かれててくれるのが理想と思う俺。
組込みとか色々タイトな分野じゃない限り、普通Tangoを被せて使うものだよ、みたいな。
0316デフォルトの名無しさん
2007/10/22(月) 19:09:10つーかなんでTangoはPhobosと共存できないのwww意味不明wwwwww
0317デフォルトの名無しさん
2007/10/22(月) 19:11:500318デフォルトの名無しさん
2007/10/22(月) 19:41:58Phongoとか、ネーミングはもうちょっとなんとかならんかったのか。
0319デフォルトの名無しさん
2007/10/22(月) 19:51:410320デフォルトの名無しさん
2007/10/22(月) 20:02:40それ良さそう。
0321デフォルトの名無しさん
2007/10/22(月) 20:19:52俺も使ってないけど使えると思う。
というのはともかくとして、C++はlexical_castが無いと面倒な場面があるのだが、
Dではstd.conv.toを使わなくても結構いけるのでそのへんが良い。
0322デフォルトの名無しさん
2007/10/22(月) 20:21:13cはどっから来たんだよw
0323デフォルトの名無しさん
2007/10/22(月) 20:22:330324デフォルトの名無しさん
2007/10/22(月) 21:01:040325デフォルトの名無しさん
2007/10/22(月) 21:02:420326デフォルトの名無しさん
2007/10/22(月) 21:09:560327デフォルトの名無しさん
2007/10/22(月) 21:24:470328デフォルトの名無しさん
2007/10/22(月) 22:06:25ギリシャ神話でアレス(Ares)の娘…ポボス(Phobos)とデイモス(Daimos)の妹?
ハーモニー(調和)の語源。とってつけたような設定じゃないか。
0329デフォルトの名無しさん
2007/10/22(月) 22:07:57×Daimos
○Deimos
0330デフォルトの名無しさん
2007/10/22(月) 22:12:210331デフォルトの名無しさん
2007/10/22(月) 22:25:30Harmonia http://harmonia.terrainformatica.com/doku.php も
Ares http://www.dsource.org/projects/ares/ もすでにあるが
0332デフォルトの名無しさん
2007/10/22(月) 22:27:36それいいけど名前資源の無駄遣いはそろそろ控えるべきだと思ったw
やるならマジでやって欲しい・・・
0333デフォルトの名無しさん
2007/10/22(月) 22:28:16だから無駄遣いはダメだと(ry
0334デフォルトの名無しさん
2007/10/22(月) 23:23:03ライブラリの名前資源の干渉は防げないもんなぁ
0335デフォルトの名無しさん
2007/10/22(月) 23:31:29com.digitalmars.phobosとかするか?w
0336デフォルトの名無しさん
2007/10/22(月) 23:34:070337デフォルトの名無しさん
2007/10/23(火) 00:38:020338デフォルトの名無しさん
2007/10/23(火) 00:41:430339デフォルトの名無しさん
2007/10/23(火) 00:44:24って言ってみるテスト
0340デフォルトの名無しさん
2007/10/23(火) 00:45:24void main() {
writefln("ほげほげ");
}
// こんなの嫌だぞ俺w
0341デフォルトの名無しさん
2007/10/23(火) 00:47:01import std.stdio;
よりは意味が取れる罠w
表意文字万歳
0342デフォルトの名無しさん
2007/10/23(火) 00:53:230343デフォルトの名無しさん
2007/10/23(火) 00:55:160344デフォルトの名無しさん
2007/10/23(火) 00:57:550345デフォルトの名無しさん
2007/10/23(火) 01:15:21無 主() {
整形書出改行("ほげほげ");
}
こんな中国産言語ならありそうだな
0346デフォルトの名無しさん
2007/10/23(火) 01:18:500347デフォルトの名無しさん
2007/10/23(火) 01:26:22半カナはどうだ? タイプはかな入力で。
ドウニュウ キカク.キカクニュウシュツ;
ナシ メイン(){
ギョウカキ("ホゲホゲ");
}
0348デフォルトの名無しさん
2007/10/23(火) 01:36:31前に似たような話してたお
0349デフォルトの名無しさん
2007/10/23(火) 01:36:58かな入力なんてできる人はかなりレアだぞ…
俺にはつらいw
0350デフォルトの名無しさん
2007/10/23(火) 01:39:11って話だったっけ?
0351デフォルトの名無しさん
2007/10/23(火) 01:53:330352デフォルトの名無しさん
2007/10/23(火) 02:12:57Cout("hoge").newline; に代表される
気持ち悪いインタフェースがなくなればってのも加えておいてくれ
0353デフォルトの名無しさん
2007/10/23(火) 02:57:09std::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となるかわからん。
0354デフォルトの名無しさん
2007/10/23(火) 03:00:35何か良くて何が悪いのかが評価できるなら素晴らしいライブラリを作ることもできそうなのになw
Phobosのobject.dをいじらず、The D Style準拠で
Cout周りのインタフェースをほげほげした(どうすんだこれ)
そんなTangoに改造したらいいってわけか
0355デフォルトの名無しさん
2007/10/23(火) 03:01:20auto s = new String; で aaaabbaabbccとなるかccccbbccbbaaとなるか…か。
0356デフォルトの名無しさん
2007/10/23(火) 03:03:07待て待てその最後みたいなのはC++でもやっちゃいけないことになってるんじゃなかったか
それを問題視する必要はないことしようぜ
0357デフォルトの名無しさん
2007/10/23(火) 03:04:05>演算子オーバーロード
ヒント: toString
0358357
2007/10/23(火) 03:05:520359デフォルトの名無しさん
2007/10/23(火) 03:08:47>opCall_rまだー?
まで読んだ。
0360デフォルトの名無しさん
2007/10/23(火) 03:10:52こうですか><
0361デフォルトの名無しさん
2007/10/23(火) 03:11:59けどおかしいだろw
0362デフォルトの名無しさん
2007/10/23(火) 03:34:05じゃあこうですか><
0363デフォルトの名無しさん
2007/10/23(火) 10:42:060364デフォルトの名無しさん
2007/10/23(火) 17:17:25自分用に作ったフレームワークです。
libwindowはライブラリでそっちをなるべくいじらない方向で設計されてます。
WorksMainはライブラリの実装で関数をガリガリ書くことでその目的を遂げます。
このライブラリはウインドウズ専用です。
http://www9.uploader.jp/dl/sukiyaki/sukiyaki_uljp00003.zip.html
0365デフォルトの名無しさん
2007/10/23(火) 17:37:53ちょ!それスレ違い。
いや、俺もそのスレみてるからわかるんだが。
0366デフォルトの名無しさん
2007/10/23(火) 18:49:23方向性にはげあがるほど同意
lowerCamelはいかが?(参照>>308)
0367デフォルトの名無しさん
2007/10/23(火) 19:55:18じゃああえて・・・DFLでよくね?
0368デフォルトの名無しさん
2007/10/23(火) 20:20:35それなんてLisp?
0369デフォルトの名無しさん
2007/10/23(火) 21:07:29関数名はキャピタライズを採用して欲しかった俺がいる。
Time now = Now;
とかやりたかったのに・・
0370デフォルトの名無しさん
2007/10/23(火) 21:42:58Time now = Time.now();
0371364
2007/10/23(火) 23:33:54ここのアップローダはD関係なら自由に使ってください。合計200MBまで入りますから。
っていうか、人のライブラリがどうなってるか気になる!!!
そうそう、あとで後悔した時用に削除Passを忘れずに。
で!レスサンクス!!
>>366
こういう先頭大文字とかって名前あったんですね。。。
C++辺りからの癖になってるんですけど、次は小文字も検討してみます。
>>367
それ言われるとちょっと弱い。笑
�Hにも・・・を見るとTangoだとかvar1系だとかそういうのが良くわからないので使ってないんですけど、
将来的な移植性を考えるとやっぱ習得したいですねぇ。。。
0372デフォルトの名無しさん
2007/10/23(火) 23:57:44lower/upper camel という字面を見てたら思い出した子供時代のはかない記憶。
0373デフォルトの名無しさん
2007/10/24(水) 12:20:43import std.string;
class Foo {
void bar(char* ptr) {
string s = toString(ptr); // std.string.toString(char*)呼んで欲しい
// けどObjcet.toStringにマッチしないのでエラー
}
}
ダメなのか。まあstd.conv.toができたからいいけど
0374デフォルトの名無しさん
2007/10/24(水) 13:14:32って書けばいいから、できなくても別に不便ではないな
0375デフォルトの名無しさん
2007/10/24(水) 13:29:20おしえてくだしあ><
0376デフォルトの名無しさん
2007/10/24(水) 13:31:57回復可能な例外は全て Exception クラスから派生すべきです
class Error: object.Exception;
回復不可能な例外は Error クラスから派生すべきです
0377デフォルトの名無しさん
2007/10/24(水) 13:33:330378デフォルトの名無しさん
2007/10/24(水) 14:57:06設計で判断できなくても経験積めばここは復帰無理だなっていうのが直感で分かるように。
0379デフォルトの名無しさん
2007/10/24(水) 15:35:550380デフォルトの名無しさん
2007/10/24(水) 15:38:230381デフォルトの名無しさん
2007/10/24(水) 15:46:000382デフォルトの名無しさん
2007/10/24(水) 15:58:04タイムアウトなんかで期待される結果が帰ってこなかった場合に、
初期値等のテキトーな値代入して問題なく処理続行できるなら例外、
出来ないならエラーって言う感じでいいんでは。
0383デフォルトの名無しさん
2007/10/24(水) 16:29:310384デフォルトの名無しさん
2007/10/24(水) 16:31:01システムがぬっ壊れたりするのかとおもた
0385デフォルトの名無しさん
2007/10/24(水) 18:59:27回復不能
・root/admin権限が必要なのになかった
回復可能
・ファイルが見つからなかったが、指定しなおせばよい
>>384
最終的にはシステムがぬっ壊れない限りは回復の手段を用意することはできるかと思う
0386デフォルトの名無しさん
2007/10/24(水) 19:01:42……みたいなの(やや極端な言い方だけども)を信じてたんで微妙に慣れない。
多分戻り値でエラー処理みたいな文化が嫌なんだろうけど、効率なんかも考えると回復可能なエラーまで例外ってどうなの? って気がしてしまう。
上みたいな(勝手な)文化を持ってたせいかExceptionに回復可能な、みたいなニュアンスも感じないし。
実際のところDでなんか書いてるときにみんなErrorとException使い分けてるの?
0387デフォルトの名無しさん
2007/10/24(水) 19:10:19それ以外は全部Exception。
たとえば、ファイルをコピーするプログラム、copyを作るときに、
パラメータで指定されたファイルが見つからない場合は、Exception。
0388デフォルトの名無しさん
2007/10/24(水) 19:14:12拾いたければ拾えばいいじゃん(たいていは回復可能だから)
というスタンス。
行列演算で要素数が不適切なときもException(動的に要素数を決められる場合)。
ただし契約違反は実装者が間違ってるからassertするときはErrorが多い。
0389デフォルトの名無しさん
2007/10/24(水) 19:18:20引数、返り値が適切なほうがいいというのはあるかもしれない。
計画の中にpureという仕様が入ってるが、
ああいうのをまじめにやるならエラー処理のために引数や返り値がつぶされるのは好ましくない。
0390デフォルトの名無しさん
2007/10/24(水) 19:21:41> 処理続行できるような想定範囲内のエラーで例外投げるな。例外は例外的な事態に使用すべき。
これは誰の教えなのかkwsk
0391デフォルトの名無しさん
2007/10/24(水) 20:44:550392デフォルトの名無しさん
2007/10/24(水) 20:58:52回復可能なのか、よかったな
0393デフォルトの名無しさん
2007/10/24(水) 21:06:090394デフォルトの名無しさん
2007/10/24(水) 21:15:29生まれてきてごめんなさい→Error
ってことか
0395デフォルトの名無しさん
2007/10/24(水) 21:33:52引きこもりでごめんなさい。
0396デフォルトの名無しさん
2007/10/24(水) 21:49:230397デフォルトの名無しさん
2007/10/24(水) 22:31:15意識してErrorを自前で投げたことはないや。
assert違反とか、デバッグモードで埋め込まれる配列境界チェックなんかはErrorか? そんくらい。
あれ? ErrorてExceptionの派生クラスだったのか?
つまり「Error is a Exception」「回復不可能は回復可能の一種」 ・・あれ?
おかしくないですかカテジナさん!
0398デフォルトの名無しさん
2007/10/24(水) 22:31:22ファイルがなかったりしたら、再試行とか考えてException、
そもそもファイルシステムや開くファイルの種類が非対応だったりして
なにをどうしようがファイル読み込みは無理、ってなのはError、とか。
ただ、それらを受け取るルーチンでは、たとえば別の読み込みルーチンを
使うとかで、(より大きな枠組みから考えると)復帰可能だったりするかもしれない。
という感じで、回復可能か否かが処理の段階によって変わることに注意して組むと
Errorの使い出もあるんじゃなかろうか。
0399デフォルトの名無しさん
2007/10/24(水) 22:53:29それだと正常系に復帰してるじゃん、と。
OutOfMemoryぐらい致命的でないとErrorというのとはちょっと違うと思う。
0400デフォルトの名無しさん
2007/10/24(水) 23:08:48回復不可能は回復可能がグレードアップ!
という考えで
0401デフォルトの名無しさん
2007/10/24(水) 23:11:16Exceptionを派生したErrorってのがおかしいんだよな。
Errorを派生したExceptionとか、ErrorとExceptionはそれぞれ何からも派生してないってのがいいような気がするね。
Tangoみたいに安易に消しちゃうのはどうかとも思うが。
0402デフォルトの名無しさん
2007/10/24(水) 23:38:26頑張ってメモリ解放して状況解消する頑健なプログラムだってありうるべ
メモリ食いつぶしかねないプログラムなら特に。
どんなエラーも何らかの処理がなされる、というのがDの例外機構なわけで、
399的な「絶対に正常系に復帰しない」発想だと、例外もクソもなく強制終了
するしかない状況じゃないとErrorを出さない、という意味のない話になるべ
何が正常動作かは処理の段階によって変わるんじゃね
0403デフォルトの名無しさん
2007/10/24(水) 23:40:29今のままだとExceptionとErrorがごっちゃになりそうな悪寒
0404デフォルトの名無しさん
2007/10/25(木) 00:23:53必要な場面に出くわしたことがないし
これからも使わない気がしている
0405デフォルトの名無しさん
2007/10/25(木) 00:27:56まあそんなまじめなプログラム俺も書いたことないけど
0406デフォルトの名無しさん
2007/10/25(木) 07:11:320407デフォルトの名無しさん
2007/10/25(木) 07:59:27今は2.006でphobosが強化されたという話を聞いてわくわくしてるところ。
0408デフォルトの名無しさん
2007/10/25(木) 08:24:16無駄なコピーを抑えたいという発想をどう実現するかがなんか分かってきた。
variant世界とinvariant世界が分かれてる感じで、
両者の窓口がcast(invariant)やidup、dupといった風情。
in char[]を受け取ってchar[]を返す関数の内部でstd.string関数を使う場合、
入り口でcast invariantして出口でdupすればおk、みたいな。
ただしこの方法だとスレッドセーフには気をつけないとならんので注意かも。
0409デフォルトの名無しさん
2007/10/25(木) 08:55:20invariantがなくなって、Cと同じになったりしてな・・・
0410デフォルトの名無しさん
2007/10/25(木) 09:41:420411デフォルトの名無しさん
2007/10/25(木) 09:58:43・idupは本当にコピーを生成する
・idupしたコピーはGCに回収される
idupされた文字列を参照するようなstring(std.string中の関数の返り値など)をいつまでも受け渡し続けると、
いつまでたっても回収されずに残り続けることになるかもしれない。
巨大な文字列から1行だけ取り出すとかした場合はidupして、
巨大なやつをGCに回収してもらいやすくするのは考えられる。
idupは比較的気軽に使えるかなと思う。
長期的に生存する可能性があるプログラムについては知らね
0412デフォルトの名無しさん
2007/10/25(木) 10:25:510413デフォルトの名無しさん
2007/10/25(木) 10:30:57そもそもDは配列のサイズがあらかじめ調べられるので、範囲外に対するアクセスは事前に防げるはず。
0414デフォルトの名無しさん
2007/10/25(木) 10:48:59catchして「このモジュールはバグってんな」って切り離て、
さらにそのモジュールに依存する別のモジュールにも通知したりして、
本当にコアなモジュールが生きてる限りは動きつづける、とか作りこむんだろーな。
apacheとかそんな感じになってるのか。Dじゃないけど。
気楽なDの個人アプリじゃそこまでやらんで、
void main(){
try{
myMain();
}catch(Exception e){
outputErrorMessage("ごめんちゃいバグで強制終了します。以下をコピペして送ってくれるとお互い幸せに。", e);
}
}
とかでいいよね? 後は明らかに発生しそうなException(new File(stdin.readLine())とか)くらいは
その場でcatchすんの忘れないように気を付けなきゃ、で。
「catchすんの忘れてねぇか? いいのか?」とコンパイラに言ってもらえればなぁ、とも思うけど、
そうなるとErrorとExceptionの違いが問題になってくる感じ。
0415デフォルトの名無しさん
2007/10/25(木) 10:55:200416デフォルトの名無しさん
2007/10/25(木) 12:12:43何でswitchが例外投げるの!?って。
0417デフォルトの名無しさん
2007/10/25(木) 12:14:23俺は!の話だけどさ、基本的に例外投げないな。だから、ほとんどtry構文使わない。
0418デフォルトの名無しさん
2007/10/25(木) 12:54:010419デフォルトの名無しさん
2007/10/25(木) 13:10:04それは普通、ではなく理想
0420デフォルトの名無しさん
2007/10/25(木) 13:45:580421デフォルトの名無しさん
2007/10/25(木) 13:52:39例外時に速度重視?
0422デフォルトの名無しさん
2007/10/25(木) 14:13:540423デフォルトの名無しさん
2007/10/25(木) 15:10:24Cで関数呼び出しごとにエラーコードをチェックしてエラーコード返して・・・ってやるよりも
遥かにぐちゃぐちゃなコードが出来上がるだけな気がするのだけど。
それを無くして「正常な実行パス」だけを簡潔に書くための構造化例外やん?
0424デフォルトの名無しさん
2007/10/25(木) 16:07:23分かっててもときどき変なことやっちゃうんだよね
特にC++とかJavaでね
try〜catchはmainだけで充分なのかも知れない
0425デフォルトの名無しさん
2007/10/25(木) 16:35:20すべての例外はどこかの階層で拾って、プログラムが適切に復旧するようにするのが理想。
別に、一関数ごとにtryで囲む必要はない。
0426デフォルトの名無しさん
2007/10/25(木) 18:13:59しかしenum/invariant structのような型で制限してしたほうが書くのは面倒だけど使えるお-_-;
0427デフォルトの名無しさん
2007/10/25(木) 20:35:06でもoutとかで「戻り値にnullは絶対返さないよ!」とかassertしてあると使うのもコード読むのも安心するお^^
でも型だけで事足りるならちゃんと型設計してるってことだし偉いお^^
0428デフォルトの名無しさん
2007/10/25(木) 20:59:060429デフォルトの名無しさん
2007/10/25(木) 21:05:160430デフォルトの名無しさん
2007/10/25(木) 21:23:49{
// 処理
}
みたいに書いたり・・・?
in と out を関数内部に書きたかったりする・・・
void hoge()
{
in{ assert(文); }
out{ assert(文); }
}
あ、でもこれなら普通の scope 文でいいのか・・・?
0431デフォルトの名無しさん
2007/10/25(木) 21:34:33ttp://www.digitalmars.com/d/dbc.html
中括弧を改行しないでくっつける派の俺としてはちょっと冗長に見える。
けどまあこれくらい改行するのもぱっと見わかりやすいのかな。
0432デフォルトの名無しさん
2007/10/25(木) 22:58:35void func()
in{
assert(...);
}
out{
assert(...)
}
body{
...
}
って感じにして妥協してみてる…
この辺もコーディング規則で一応の指標があるといいのだけど…(宗教戦争勃発しそうな気もするけど)
0434デフォルトの名無しさん
2007/10/25(木) 23:18:230435430
2007/10/25(木) 23:41:01感じてしまう。慣れの問題なのかもだけど。
0436デフォルトの名無しさん
2007/10/26(金) 01:14:24...
}
else {
...
}
これってやめたほうがいいのかな
0437デフォルトの名無しさん
2007/10/26(金) 01:33:44rescue
ensure
end
0438デフォルトの名無しさん
2007/10/26(金) 01:42:40void func(){
hoge();
}
こうあるべきだと力説されて妙に同意してしまって以来、
どうしてもfunc()と"{"が同じ行にいられないと落ち着かなくて困る。
>>430は俺にとっても抗えぬ誘惑だ・・・
太古より語り継がれる伝説の「IDE」がいつか完成して普及すれば、
inとoutは普段は折り畳まれて「contractあるよー」的マークに収まり、
そこにマウスオーバーするとin/outのコードがポップアップで表示され・・・とか実装されるに違いない。
時を待つのじゃ・・・さすれば泣く日は来ぬ・・・
0439デフォルトの名無しさん
2007/10/26(金) 02:13:150440デフォルトの名無しさん
2007/10/26(金) 09:13:09ちょいと考えてみる
0441デフォルトの名無しさん
2007/10/26(金) 10:12:13なにゆえ?
0442デフォルトの名無しさん
2007/10/26(金) 12:07:22俺もそのスタイルで書いてるよ。
ifブロックとelseブロックがきれいに分離してるのが気持ちいいよね。
0443デフォルトの名無しさん
2007/10/26(金) 15:26:54コンパイル時に決定できるループでsinが山ほどあったときにコンパイルが遅くなっていたんですが、今見たら大丈夫になっていました。
勘違いかもしれませんが、再発して条件が再現できそうならまた報告します。
0444デフォルトの名無しさん
2007/10/26(金) 17:38:52camelがどうのという話題で俺はこれを思い出す。
http://images.google.co.jp/images?hl=ja&lr=&oe=UTF-8&um=1&q=camel%20toe&ie=UTF-8&sa=N
0445デフォルトの名無しさん
2007/10/26(金) 17:44:360446デフォルトの名無しさん
2007/10/26(金) 19:33:15IDEでコメントつける場合にずれるのが困りもの
// ほげほげが見付からなかった場合はエラー
else {
put_error_log("hogehoge not found.");
}
0447デフォルトの名無しさん
2007/10/26(金) 23:04:44ですよね!
つーかこの書き方どこで覚えたか忘れたんだけど。
あと、コメント書くとき
if (test) { // ほげほげなら
...
}
ってなってるけどこれもやめたほうがいいかなwww
関数書くときは
/// ほげほげする
void func() {
...
}
こうなるからびみょうに統一されてなくね??とか思ってしまう
0448デフォルトの名無しさん
2007/10/26(金) 23:29:120449デフォルトの名無しさん
2007/10/26(金) 23:31:140450442
2007/10/26(金) 23:42:52//ほげほげ
if (test) {
...
}
//はげはげ
else if(test2){
...
}
//その他
else{
...
}
ってしてる。
関数は
///ほげほげする
void func() {
...
}
0451デフォルトの名無しさん
2007/10/26(金) 23:59:190452デフォルトの名無しさん
2007/10/27(土) 00:18:16ちょwww
0453デフォルトの名無しさん
2007/10/27(土) 00:18:530454デフォルトの名無しさん
2007/10/27(土) 00:23:05大抵は条件式見れば何してるか分かるし、
ぱっとみて何を比較してるかわからないほど複雑になったら関数化する。
仕事なら仕方ないから規則通りにどんな馬鹿らしいコメントでも書くけど。
0455デフォルトの名無しさん
2007/10/27(土) 00:25:000456デフォルトの名無しさん
2007/10/27(土) 00:28:41フィールドのプロパティ.offsetofが
class Foo
{
int x;
}
...
void test(Foo foo)
{
size_t o;
o = Foo.x.offsetof; //error
o = foo.x.offsetof; //ok
}
になってるけど、これって仕様が変わったの?
0457デフォルトの名無しさん
2007/10/27(土) 00:30:50>>176-177
0458デフォルトの名無しさん
2007/10/27(土) 00:33:26バグっぽいのか。さんくす。
0459デフォルトの名無しさん
2007/10/27(土) 00:34:200460デフォルトの名無しさん
2007/10/27(土) 01:00:53今のとこ、これ!っていうIDEはないのかな?
Poseidon?C::B?Descent?
0461デフォルトの名無しさん
2007/10/27(土) 01:22:290462デフォルトの名無しさん
2007/10/27(土) 01:51:470463デフォルトの名無しさん
2007/10/27(土) 01:56:250464デフォルトの名無しさん
2007/10/27(土) 02:02:54んでウォルタンが開発やめた後D言語の亜系が乱立することに…
そして時代はbsDとreDhat系の戦いへ…
0465デフォルトの名無しさん
2007/10/27(土) 02:40:12http://cmeerw.org/prog/owtools/
↑のwlinkでリンクすると以下のコードが
Error: Access Violation
で止まっちゃうんだけど、どして?
void main()
{
for(int i=0 ; i<5000 ; i++)
{
int[] x = new int[100];
}
}
ちなみに、変数 x を毎回deleteしてやるといける。
0466デフォルトの名無しさん
2007/10/27(土) 02:40:17バージョンの印付いてるの前提だけど!
0468デフォルトの名無しさん
2007/10/27(土) 12:54:43そこのバグの修正は半年から一年後に
行われることがざらだそうです
0469デフォルトの名無しさん
2007/10/27(土) 16:07:33それも前スレか前々スレかで見たな
0470デフォルトの名無しさん
2007/10/27(土) 19:09:31IDEが発動するとき第6言語(D)は滅びるということか
0471デフォルトの名無しさん
2007/10/27(土) 21:35:16Dでも作ってみようかと思ったんだが、!= と == の区別ができない…
0472465
2007/10/28(日) 00:30:36まじすか?
その時は、だいたいどんな結論に落ちついたんすか?
や、Viewerないもんで。。。ごめんねーいろんな人。
0473デフォルトの名無しさん
2007/10/28(日) 01:04:06テラ量子力学wwwwwwwww
と思ったらマジでそういうライブラリなのか・・・
量子コンピュータの広がりの影響なのかな・・・
0474デフォルトの名無しさん
2007/10/29(月) 13:24:460475デフォルトの名無しさん
2007/10/29(月) 21:46:53なんでだろ
0476デフォルトの名無しさん
2007/10/29(月) 21:49:53コンパイルエラーが発生して、以下のようなメッセージが出力されました。
flectioned.d(104): module Vararg cannot read file 'tango\core\Vararg.d'
環境は、Windows / Cygwin / dmd.exe 1.022 + phobos で、
tangoはインストールしてないのに、
tango以下のファイルをimportしようとしてるみたいです。
static ifがtrueでもfalseでも両方のブロックの文法解析が行われてるのかな?
とりあえず、flectioned.dの104〜131行と247行を
コメントアウトしたらコンパイルできました。
あんまりうまい解決方法だと思えないので、
何か他にいい方法がないでしょうか?
0477デフォルトの名無しさん
2007/10/29(月) 22:09:13Cygwin か dsss が何か悪さしてんじゃない?
0478デフォルトの名無しさん
2007/10/29(月) 22:30:45あ。たぶんdsssのような気がしてきました。
おそらくdsssは、
import文を見てコンパイルするファイルを特定していってるんだけど、
そのときにstatic ifをうまく解析できてないのかもしれません。
[わなD]に
「DSSSは、static ifで条件importしている依存関係の解析が
甘くて時々不便だったりするので…」
という記述があったので、これのことなのかも。
0479デフォルトの名無しさん
2007/10/29(月) 22:41:270480デフォルトの名無しさん
2007/10/29(月) 22:52:37dsss net install derelictsdl
コンパイラをdmd 2.006にして上記のコマンドを実行したら、
たしかにコンパイルエラーが出ました。
include\d\derelict\util\loader.di(223):
Error: cannot implicitly convert expression ("") of type invariant char[0u] to char[]
たぶん文字列をキャストすりゃいいんだろうけど、
全部キャストするのはヤだなー。
http://www.dsource.org/forums/viewtopic.php?t=2903&sid=c9657f55c4f87d635f986ebfc3bb79bf
検索してみたら上記のリンク先でそれっぽい話題が交わされているようですが、
私は英語が読めないのでよくわからんかったです。
0481デフォルトの名無しさん
2007/10/29(月) 23:04:18わなDかな
0482デフォルトの名無しさん
2007/10/30(火) 00:45:01[わなD]D 2.x と D 1.x
http://www.kmonos.net/alang/wnd/topics/d2-d1.ja.html
上記のページを参考にして、char[]をstringに、
dupをidupに修正してコンパイルしたらうまいくいきました。
0483デフォルトの名無しさん
2007/10/30(火) 01:43:53わなD更新されてるじゃまいか
どっかで更新されたかどうか告知あったりしないのかな
RSS配信とか
0484デフォルトの名無しさん
2007/10/30(火) 02:19:27class Bar
{
private const( Foo ) mFoo;
const( Foo ) getFoo()
{
return mFoo;
}
void setFoo( const( Foo ) iFoo )
{
mFoo = iFoo;
}
}
みたいなことをD言語2.xでしたいのですが、
Bar.setFoo()の中でコンパイルエラーが発生してしまいます。
たぶんメンバ変数Bar.mFooの定義方法がよくないと思うのですが、
どうするとよいでしょうか?
0485デフォルトの名無しさん
2007/10/30(火) 03:05:51うまくいかないや
こんなんになりました
class Foo{}
class Bar
{
private const(Foo)* mFoo;
const(Foo) getFoo()
{
return *mFoo;
}
void setFoo(const(Foo) iFoo)
{
mFoo = &iFoo;
}
}
void main()
{
auto bar = new Bar;
bar.setFoo(new Foo);
const(Foo) foo = bar.getFoo();
}
0486デフォルトの名無しさん
2007/10/30(火) 03:42:21const(Foo) mFoo; なら変数mFoo自体は書き換え可能なはずだよね。
メンバ変数のときだけ動作が違う、ってんだからバグじゃね?
0487デフォルトの名無しさん
2007/10/30(火) 04:30:53とりあえずaliasでごまかしてみるとうまくいくようです。
class Foo{}
class Bar
{
alias const( Foo ) Foo_const;
private Foo_const mFoo;
Foo_const getFoo()
{
return mFoo;
}
void setFoo( Foo_const iFoo )
{
mFoo = iFoo;
}
}
// 意味のないエイリアス
// この手のものは…どうなんですか、ウォルターたん…
0488デフォルトの名無しさん
2007/10/30(火) 05:49:360489デフォルトの名無しさん
2007/10/30(火) 11:03:50> 2007/10/30 :: RSSはじめました
ました
0490デフォルトの名無しさん
2007/10/30(火) 11:04:560491デフォルトの名無しさん
2007/10/30(火) 11:57:380492デフォルトの名無しさん
2007/10/30(火) 14:25:540493デフォルトの名無しさん
2007/10/30(火) 14:59:37ほんとだ。constがきえてるっぽい。これもバグなのかな。
まぁconst/invariant周りのバグは多すぎて報告する気にもならんけど。
0494デフォルトの名無しさん
2007/10/30(火) 16:06:320495デフォルトの名無しさん
2007/10/30(火) 17:11:50エスパーしてみると、文字列リテラルの型がinvariant(char)[]になった。
0496デフォルトの名無しさん
2007/10/30(火) 17:58:36if(auto p = ("hoge" in foo))
writefln(*p);
else
writefln("ねーよ");
try {
writefln(foo["hage"]);
}
catch(ArrayBoundsError) {
writefln("ねーよ");
}
v2でどー書くの?
0497デフォルトの名無しさん
2007/10/30(火) 18:13:36void main(){
int[string] foo = [ "hoge" : 1, "hage" : 2 ];
foreach(k; foo.keys)
writeln(k, foo[k]); // Error: ArrayBoundsError
}
おそらくバグだな
0498デフォルトの名無しさん
2007/10/30(火) 18:16:44int[string] foo;
foo["hoge"] = 1; foo["hage"] = 2;
foreach(k; foo.keys)
writeln(k, foo[k]);
}
こうすればいけるな。
0499デフォルトの名無しさん
2007/10/30(火) 21:23:48>>486
クラスのメンバ変数にconstオブジェクトを持たせると挙動がおかしいのは、
下記のページにあるバグ報告と同じっぽいですね。
http://d.puremagic.com/issues/show_bug.cgi?id=1376
0500デフォルトの名無しさん
2007/10/30(火) 23:06:210501デフォルトの名無しさん
2007/10/31(水) 03:07:110502デフォルトの名無しさん
2007/10/31(水) 10:19:11ソースじゃなく、バイナリだけだけど
0503デフォルトの名無しさん
2007/10/31(水) 10:34:24おぉおおぉおおそろしいことを…!
でもよくやった!
0504デフォルトの名無しさん
2007/10/31(水) 11:22:19dmd.exeでどかっとコンパイルしたほうが速いんだね・・
>>502
ちょwww
0505デフォルトの名無しさん
2007/10/31(水) 13:49:37Doctor2年でつか
>>502
どこの会社だよそれwwwww
せめて1.0にしろよwwwww
後で致命的なバグ見つかってもしらねーぞwwww
0506デフォルトの名無しさん
2007/10/31(水) 14:05:32国内初の実用事例キタコレwwwww
0507デフォルトの名無しさん
2007/10/31(水) 14:22:55:::::::::::::::::::::::::::::::::。::::::...... ... --─- :::::::::::::::::::: ..::::: . ..::::::::
:::::::::::::::::...... ....:::::::゜::::::::::.. (___ )(___ ) ::::。::::::::::::::::: ゜.::::::::::::
:. .:::::。:::........ . .::::::::::::::::: _ i/ = =ヽi :::::::::::::。::::::::::: . . . ..::::
:::: :::::::::.....:☆彡:::: //[|| 」 ||] ::::::::::゜:::::::::: ...:: :::::
:::::::::::::::::: . . . ..: :::: / ヘ | | ____,ヽ | | :::::::::::.... .... .. .::::::::::::::
::::::...゜ . .::::::::: /ヽ ノ ヽ__/ ....... . .::::::::::::........ ..::::
:.... .... .. . く / _三502三∠⌒>:.... .... .. .:.... .... ..
:.... .... ..:.... .... ..... .... .. .:.... .... .. ..... .... .. ..... ............. .. . ........ ......
:.... . ∧∧ ∧∧ ∧∧ ∧∧ .... .... .. .:.... .... ..... .... .. .
... ..:( )ゝ ( )ゝ( )ゝ( )ゝ無茶しやがって… ..........
.... i⌒ / i⌒ / i⌒ / i⌒ / .. ..... ................... .. . ...
.. 三 | 三 | 三 | 三 | ... ............. ........... . .....
... ∪ ∪ ∪ ∪ ∪ ∪ ∪ ∪ ............. ............. .. ........ ...
三三 三三 三三 三三
三三 三三 三三 三三
0508502
2007/10/31(水) 17:40:02リアルタイム映像系で、DとDirectX10と絡めた。
やっぱりネックはGCだけど、評判が悪いがscopeとかつかうとわりと回避できるよ。
それでもメモリ使用のグラフををみると
/|/|/|/|/|
こんな感じでノコギリみたいになる。
そこ以外はサクサク開発できた。
まぁなんだ、D言語最高
0509デフォルトの名無しさん
2007/10/31(水) 18:05:54ところで
ttp://hp.vector.co.jp/authors/VA031566/d_direct3d9/index.html
が古くなってるからDirectX10周りを公開してくれたら助かる人がいるんじゃないかな
仕事で書いたコードだから無理かなと思うのであんまり期待せずに言っておくw
納品して利益が発生するものに使う機会はまだないが
社内向けのなら俺もD使ってる
0510デフォルトの名無しさん
2007/10/31(水) 18:51:09どんだけばk・・・いや、いい意味でなw乙w
0511デフォルトの名無しさん
2007/10/31(水) 19:00:32確かに集合型とか一時オブジェクトを扱うとC++よりDが圧倒的に楽なんだよなあ。
DX10を絡めたのは尊敬する。俺はやろうとして挫折してます。
0512デフォルトの名無しさん
2007/10/31(水) 20:23:41ノウハウうpしてくれると俺が鼻水100ccほど垂らしながらよろこびます
0513デフォルトの名無しさん
2007/10/31(水) 20:26:520514デフォルトの名無しさん
2007/10/31(水) 21:01:36本当に勇者だなお前は
お前みたいな勇者のおかげで俺たち一般PGが最新技術に触れる日が早まる
0515デフォルトの名無しさん
2007/10/31(水) 21:03:150516デフォルトの名無しさん
2007/10/31(水) 21:44:520517デフォルトの名無しさん
2007/10/31(水) 22:14:53SIMD部分をどうするかでかなり悩む
0518デフォルトの名無しさん
2007/10/31(水) 22:19:270519デフォルトの名無しさん
2007/10/31(水) 23:12:07「C++よりいい感じだぜー」って研究室でデータ計算だかに
使ってるって言う人も見たなぁ、という記憶が。
まぁ「納品」という言葉が出てくると俺ビビらずにはいられんけどw
ところで興味本位でメインマシンを64bitなubuntuにしてみたら
いろんな32bitライブラリがネーヨとリンカに言われ俺涙目。
dmdもamd64吐けるようにぷっりーずぅぅぅー。
0520デフォルトの名無しさん
2007/10/31(水) 23:32:21sudo apt-get install lib32gcc1
してリンカフラグ弄ればいいとおも
0521502
2007/11/01(木) 07:05:47C++でまずDirectX10をラップしてそれをDで使用するようにしました。
DirectX10.1とかでるし、dxgi.h、d3d10.h、d3dx10.hがころころ変わると思ったので。
以下スレチにならない程度にさわりを・・・
/* C++ */
class Device {
public:
_cptr<ID3D10Device> _cp; // _cpt<T>rはCOMをあつかうスマートポインタ
};
class Swapchain {
public:
uint32 _width, _height;
_cptr<IDXGISwapChain> _cp;
int init( Device &dev, const DXGI_SWAP_CHAIN_DESC &ds);
};
class Buffer {
public:
_cptr<ID3D10Buffer> _cp;
};
とこんな風にまんま包み込んで、
Dに以下の様な関数をエキスポート
Device * dx10g0_Device_new();
void dx10_Device_delete(Device *pthis);
int dx10_Device_init(Device *pthis, void *pdevicesettings);
int dx10_Device_DrawPrimitive(Device *pthis, uint type, uint n);
int dx10_Device_DrawIndexedPrimitive(Device *pthis, uint type, uint indexcount);
中の関数はDirectX10APIより少々便利めにつくるようにしてます。
こうすることのメリットは、上でいったヘッダーファイルがかわっても(少しは)大丈夫なこと、
DirectX9に同様のものをつくることで、D側からはDirectX10、DirectX9が同じように扱えること。
Shader4.0をつかってしまったら、意味がないかもだけど・・・
0522デフォルトの名無しさん
2007/11/01(木) 13:14:21情報有難う御座いまするー。
そうかー32bit系はそういうパッケージ名を与えられているのですね。
lib32gcc1は入ってました。中身の.soから、Winでいうインポートライブラリが生成できればいいんでしょか。
ともあれこれ以上は自力でごにょごにょとやってみます。
0523デフォルトの名無しさん
2007/11/01(木) 19:10:15なるほど。
俺は、汚いヘッダファイルからではなく、比較的綺麗なIDLからDにポーティングしようとして挫折。
.diを吐くIDLコンパイラ欲しい、、、
0524デフォルトの名無しさん
2007/11/01(木) 19:26:300525デフォルトの名無しさん
2007/11/01(木) 19:46:12ありがとうございます。参考になります。
まあDから読みやすいようにするのがいい解ということですかねえ。
0526デフォルトの名無しさん
2007/11/02(金) 01:22:34リンカのLibにはあるっぽいんですけど、
export BOOL BitBlt(HDC,int,int,int,int,HDC,int,int,DWORD);
しても認識しません。。。
0527デフォルトの名無しさん
2007/11/02(金) 01:33:180528デフォルトの名無しさん
2007/11/02(金) 01:35:31ありがと〜。
0529デフォルトの名無しさん
2007/11/02(金) 02:36:370530デフォルトの名無しさん
2007/11/02(金) 02:44:05はやく標準でとりこんでくれないかなぁ。。。
0531デフォルトの名無しさん
2007/11/02(金) 03:58:220532デフォルトの名無しさん
2007/11/02(金) 07:48:20今丁度はまってた事。
クラスを宣言してC++と同じ要領で使おうとしたら、宣言自体は参照のためにアクセス違反の例外が飛んだ。ってか飛びまくった。
つまり、newしてなかった。あ〜、何事かとおもったわ。(TT
0533デフォルトの名無しさん
2007/11/02(金) 08:11:20なんかプレフィックスつけてる?
0534デフォルトの名無しさん
2007/11/02(金) 08:14:08それがさ、うっかりスタックに確保されるもんだと勘違いしてたんだ。
C++だと基本的に自分でメモリ確保しないようにやってたから。。。
0535デフォルトの名無しさん
2007/11/02(金) 08:23:28Class hoge;
//D
scope hoge = new Class;
0536533
2007/11/02(金) 08:26:58みんなはどうしてるかなと思って。
俺は構造体にはSをつけて、クラスにはなんもなし。
0537デフォルトの名無しさん
2007/11/02(金) 08:30:01なるほど、なるほど。
new恐怖症なもんでね。
だから、GC万歳ってかんじなんだけどね。
0538デフォルトの名無しさん
2007/11/02(金) 08:36:490539532
2007/11/02(金) 08:41:34俺は特にプレフィックスはつけない。何にでも。
でも、命名規則は割りと変数の使用イメージにそってつけてるかなぁ。
まぁ、しばらくすると、わすれちゃうんだけどね。。。XP
>>538
勇者はD言語を手に入れた。LvUP!!new恐怖症が多少和らいだ。deleteを忘れた。
徹夜しちゃったからそろそろ寝るかなぁ。
今作ってるの、もうちょっとで完成するんだけどねぇ。あえて寝る!
そんじゃまた〜。
0540デフォルトの名無しさん
2007/11/02(金) 08:44:070541デフォルトの名無しさん
2007/11/02(金) 08:48:51a = c;
b = d;
に変換されるようなやつってD言語にある?
0542デフォルトの名無しさん
2007/11/02(金) 10:36:20無くは無い。tuple。
0543デフォルトの名無しさん
2007/11/02(金) 16:22:560544デフォルトの名無しさん
2007/11/02(金) 16:34:290545デフォルトの名無しさん
2007/11/02(金) 18:09:21v1.015なんですけど、以下のコードが変なエラー吐いて止まっちゃうんです。
Error: non-constant expression new stack_t(true)
これって、グローバル変数に直にnewすることってできないんですか?
private import Stack;//自作のstack_t(T)。引数はboolのみ。
struct dummy{
int x,y;
}
alias stack_t!(dummy) stack;
auto st =new stack;
int main(char[][]){
static dummy d={10,20};
st.push(d);
return 0;
}
0546デフォルトの名無しさん
2007/11/02(金) 18:41:50private import Stack;//自作のstack_t(T)。引数はboolのみ。
struct dummy{
int x,y;
}
alias stack_t!(dummy) stack;
stack st;
static this(){
st=new stack
}
int main(char[][]){
static dummy d={10,20};
st.push(d);
return 0;
}
0547デフォルトの名無しさん
2007/11/02(金) 19:03:56わかりました〜。レスありがとう。
0548デフォルトの名無しさん
2007/11/02(金) 19:51:37クラス内enumの仕様が悩ましい。
class Foo {
enum FooEnum {}
}
enum GlobalEnum {}
class BarA(T : FooEnum){} // NG
class BarB(T : GlobalEnum){} // OK
class BarC { // OK
FooEnum t;
}
BarAが宣言したいのだがなんとしたものか。
0549デフォルトの名無しさん
2007/11/02(金) 19:56:02class BarA(T : Foo.FooEnum){}
0550デフォルトの名無しさん
2007/11/02(金) 20:09:310551デフォルトの名無しさん
2007/11/02(金) 20:28:040552デフォルトの名無しさん
2007/11/02(金) 20:46:56すんません間違えました……でも両方とも
class Foo is forward referenced when looking for 'FooEnum'
でコンパイルエラーとなるという。
シンボルの意味が定義される順番が
A群
Foo, GlobalEnum, BarX(とテンプレート引数)
↓
B群
Fooの内部、BarCの内部……
というふうになっているからかな、とは思うのですが。
0553デフォルトの名無しさん
2007/11/02(金) 22:11:25つながらない。
0554デフォルトの名無しさん
2007/11/03(土) 00:20:56そこら辺、実装が微妙だよな。
内部関数も前方参照できないと使えないし。
0555デフォルトの名無しさん
2007/11/03(土) 09:15:56Oct 31, 2007
New/Changed Features
* Functors now supported by std.traits.ReturnType().
* Transitive const now leaves invariants intact in the tail.
* Added overloadable unary * operation as opStar().
* Full closure support added.
* Data items in static data segment >= 16 bytes in size are now paragraph aligned.
0556デフォルトの名無しさん
2007/11/03(土) 09:17:010557デフォルトの名無しさん
2007/11/03(土) 09:26:280558デフォルトの名無しさん
2007/11/03(土) 09:54:04いやあんまり要らん気がするが
0559デフォルトの名無しさん
2007/11/03(土) 09:59:50どうしたらコンパイルできるんでしょうか。
0560デフォルトの名無しさん
2007/11/03(土) 10:08:290561559
2007/11/03(土) 10:23:38UTF-16は選べなかったので、UTF-8で保存したらできました。ありがとうございます。
ただUTF-8なので??となりました。
0562デフォルトの名無しさん
2007/11/03(土) 10:27:120563デフォルトの名無しさん
2007/11/03(土) 11:15:20今のところ、Windows上で出力内容を化けさせずに見たい場合は
1、テキストファイルに出力して確認
2、printfでUTF-16を使う
のどちらかじゃないですかね。コンソールでCHCP 65001とかやる手もありますが、
これだとなんか表示がおかしくなる上にコンソールのサイズが強制的に変更されるので使いづらいです。
2の方法の場合、下のようにするとうまくいきます。
//↓こんな感じ
import std.c.locale;
void main() {
setlocale(0,"jp.932");
printf("%.*ls\n","日本語"w);
}
ただこれ日本語版のWindows環境以外について全く考慮してないプログラムになるんで、
もう一工夫した方が良いと思います。単なるテストプログラムと割り切ってるなら
そんなん考えないでも良いと思いますけど。
0564デフォルトの名無しさん
2007/11/03(土) 11:28:430565デフォルトの名無しさん
2007/11/03(土) 12:14:15とうとうきたのか!?
0566デフォルトの名無しさん
2007/11/03(土) 13:47:29windows2kでdmd 2.007なのだけれど・・・
R delegate(U) Curry(R, A, U...)(R delegate(A, U) dg, A arg) {
return (U u) { return dg(arg, u); };
}
0567デフォルトの名無しさん
2007/11/03(土) 13:49:57D\(^o^)/ハジマタ
import std.stdio;
uint delegate() counter() {
uint i = 0;
return {return ++i;};
}
void main() {
auto c = counter();
writeln(c()); // 1
writeln(c()); // 2
writeln(c()); // 3
}
0568デフォルトの名無しさん
2007/11/03(土) 13:53:57構文的には間違ってないと思うから、
まだバグ餅と考えたほうがいいかもね。
0569デフォルトの名無しさん
2007/11/03(土) 13:56:50ttp://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=61016
0570デフォルトの名無しさん
2007/11/03(土) 14:02:32それともなにがしかのコンカレントGC?
0571デフォルトの名無しさん
2007/11/03(土) 15:27:050572デフォルトの名無しさん
2007/11/03(土) 16:24:31やべえwwww
0573デフォルトの名無しさん
2007/11/03(土) 16:25:47ネストした関数なら使うことあるけど。
0574デフォルトの名無しさん
2007/11/03(土) 16:25:56といいつつもクロージャがサポートされるとなにが嬉しいのかよくわからない俺。
0575デフォルトの名無しさん
2007/11/03(土) 16:27:310576デフォルトの名無しさん
2007/11/03(土) 16:32:500577デフォルトの名無しさん
2007/11/03(土) 16:35:250578デフォルトの名無しさん
2007/11/03(土) 16:38:52pure関数の導入も予定してるし、関数型的に行く気まんまんという感じ。
0579デフォルトの名無しさん
2007/11/03(土) 16:43:240580デフォルトの名無しさん
2007/11/03(土) 16:59:140581デフォルトの名無しさん
2007/11/03(土) 17:04:34発展途上というかバグだらけなうえに仕様が迷走してるだけに
2.0はまだ使う気にならんのだよな。
0582デフォルトの名無しさん
2007/11/03(土) 17:15:52enum FooEnum {}
class Foo {
alias .FooEnum FooEnum;
}
class BarA(T : FooEnum){} // NG
これで目的は果たせるけど、きっちりしておきたいところではある。
0583デフォルトの名無しさん
2007/11/03(土) 17:19:01仕様が迷走してるっていうんじゃね?
0584デフォルトの名無しさん
2007/11/03(土) 17:21:020585デフォルトの名無しさん
2007/11/03(土) 17:27:31このあたりと関係してるかも
ttp://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=58483
0586デフォルトの名無しさん
2007/11/03(土) 17:28:08pure関数入れるとどうなるんだろう
>>581
ちょっと待てw
0.xのときは早く安定させてって言われてたから1.x系作って安定させたんだろうに
ちゃんと進んでるぜよ
0587デフォルトの名無しさん
2007/11/03(土) 17:53:532.x系は未来への布石。
俺ってかっこいい!?
0588デフォルトの名無しさん
2007/11/03(土) 17:54:410589デフォルトの名無しさん
2007/11/03(土) 17:56:450590デフォルトの名無しさん
2007/11/03(土) 18:32:000591デフォルトの名無しさん
2007/11/03(土) 18:33:0690年先を見据えた言語ってことさ
0592デフォルトの名無しさん
2007/11/03(土) 18:35:530593デフォルトの名無しさん
2007/11/03(土) 18:57:13それか、結果のキャッシュかな。
とりあえずたらい回しが速くなる?
0594デフォルトの名無しさん
2007/11/03(土) 19:03:06おぉ!かっこいいね!!
0595デフォルトの名無しさん
2007/11/03(土) 19:11:53>>580
>>580
0596デフォルトの名無しさん
2007/11/03(土) 19:54:140597デフォルトの名無しさん
2007/11/03(土) 20:26:160598デフォルトの名無しさん
2007/11/03(土) 20:56:560599デフォルトの名無しさん
2007/11/03(土) 21:13:05CTFEの一種であることに変わりはないが。
0600デフォルトの名無しさん
2007/11/03(土) 21:29:500601デフォルトの名無しさん
2007/11/03(土) 21:57:31modfをfmodの代わりだと思って使ってた間抜けがきましたよ。っと。
なんて紛らわしいんだ。
0602デフォルトの名無しさん
2007/11/03(土) 22:01:040603デフォルトの名無しさん
2007/11/03(土) 22:07:24右手が右側にwwww
0604デフォルトの名無しさん
2007/11/03(土) 22:12:540605デフォルトの名無しさん
2007/11/03(土) 22:21:520606デフォルトの名無しさん
2007/11/03(土) 22:23:56ぶよぶよ贅肉にも見えるが
0607デフォルトの名無しさん
2007/11/03(土) 22:24:56本人から見ればそうだな。
0608デフォルトの名無しさん
2007/11/03(土) 22:27:120609デフォルトの名無しさん
2007/11/03(土) 22:33:02普通にコンパイルするときは問題ないんだけど、
コードカバレッジ解析(-cov)を有効にするとエラー出る。
Error: circular initialization dependency with module A
0610デフォルトの名無しさん
2007/11/03(土) 22:45:15静的コンストラクタの順序
import宣言の循環(モジュールがお互いをimportしあう、循環依存)は、 どちらか一方が静的構築の不要なモジュールであれば、問題ありません。 双方とも静的構築が必要であった場合は、 実行時例外が発生します。
0611デフォルトの名無しさん
2007/11/03(土) 22:52:370613デフォルトの名無しさん
2007/11/03(土) 22:55:50問題なく実行はできるし・・・
0614デフォルトの名無しさん
2007/11/03(土) 22:58:24バグだろバグ
0615610,613
2007/11/03(土) 23:03:15そう思う。バグだよねぇ〜。
それならそれでいいんだ・・・
D言語の思想に合ってないコーディングをしているのかと少々疑ってしまった。
0616デフォルトの名無しさん
2007/11/03(土) 23:03:480617デフォルトの名無しさん
2007/11/03(土) 23:04:560618デフォルトの名無しさん
2007/11/03(土) 23:08:54それに元々循環importは推奨されてないんじゃなかったっけ?
どっかで見た気がしてて>>610見るまで循環importやったらダメだと思ってたけど・・・
記憶違いならスマソ
どっちにしても循環しないようにしたらいいとおもた
0619609,613,615
2007/11/03(土) 23:19:02610,613→609,613 間違えた。すまぬ。
>>618
>どっちにしても循環しないようにしたらいいとおもた
えぇ。循環したいよぉー
0620デフォルトの名無しさん
2007/11/03(土) 23:27:370622デフォルトの名無しさん
2007/11/03(土) 23:48:57モジュールコンストラクタがある場合に循環依存できないって制約は、
初期化順序を一意に定めるためのものであって、
循環依存自体に何か問題があるわけじゃないと思う。
コンパイラが挿入するカバレッジ解析コードに
モジュールごとの初期化順序が何らかの影響を及ぼすとは考えづらいから、
やはりバグだと思う。
0623デフォルトの名無しさん
2007/11/04(日) 00:09:52int opProperty(string key, int val) {
return 0;
}
}
auto hoge = new Hoge;
hoge.test = 22; // どうにかして => hoge.opProperty(test, 22);
こんなキモいことできないかなー
0624デフォルトの名無しさん
2007/11/04(日) 00:11:580625デフォルトの名無しさん
2007/11/04(日) 00:16:28それってさ、opPropertyの中で、keyとvalに応じて分岐とかするの?
それなら普通にメンバ関数の方がいいでしょ。
単にメンバ変数に値を設定するだけならテンプレートで増殖させるとかできるし。
0626デフォルトの名無しさん
2007/11/04(日) 00:18:40opIndex(string key, int val)ってしてhoge["test"]=22で良くね?
0627デフォルトの名無しさん
2007/11/04(日) 00:19:380628デフォルトの名無しさん
2007/11/04(日) 00:22:46ソースの外見をきにしてしまったアホだった/(^o^)\
0629デフォルトの名無しさん
2007/11/04(日) 00:24:03template attr_reader(T, string name)
{
mixin( "private T _" ~ name ~ ";" );
mixin( " public T " ~ name ~ "(){ return _" ~ name ~ ";}" );
}
class Point
{
mixin attr_reader!(int, "x");
mixin attr_reader!(int, "y");
this(int ix, int iy) { _x=ix; _y=iy; }
}
で十分。
でも、普通に書いた方がいいと思うぞ。
0630デフォルトの名無しさん
2007/11/04(日) 00:27:390631デフォルトの名無しさん
2007/11/04(日) 00:39:490632デフォルトの名無しさん
2007/11/04(日) 01:48:16アーカイブの中に結果画像入ってる。
これぞ、コンピュータグラフィックってかんじで面白いね。
windows専用です。
http://www9.uploader.jp/dl/sukiyaki/sukiyaki_uljp00004.zip.html
0633デフォルトの名無しさん
2007/11/04(日) 01:58:08それをこんなむげに扱いよって。ぷんぷん。
え?ビーム??でないよそんなの。
0634デフォルトの名無しさん
2007/11/04(日) 02:10:270635デフォルトの名無しさん
2007/11/04(日) 04:02:59array.length += 2;
ってやったら
array.length = array.length + 2;
って変換してくれりゃ良いだけなのに。
演算子オーバーロードとの競合を防ぐため?
0636デフォルトの名無しさん
2007/11/04(日) 04:14:420637デフォルトの名無しさん
2007/11/04(日) 04:31:270638デフォルトの名無しさん
2007/11/04(日) 04:52:390639デフォルトの名無しさん
2007/11/04(日) 05:01:50もう忘れてるんじゃないのw
0640デフォルトの名無しさん
2007/11/04(日) 06:49:24各自array.length = array.length + 2;ってかけばいいのに
とかおもってたりは・・・ないか
0641デフォルトの名無しさん
2007/11/04(日) 11:09:390642デフォルトの名無しさん
2007/11/04(日) 11:27:390643デフォルトの名無しさん
2007/11/04(日) 12:39:51と思ってるに違いない。
0644デフォルトの名無しさん
2007/11/04(日) 12:44:590645デフォルトの名無しさん
2007/11/04(日) 16:16:420646デフォルトの名無しさん
2007/11/04(日) 17:35:530647デフォルトの名無しさん
2007/11/04(日) 19:14:060648デフォルトの名無しさん
2007/11/04(日) 22:12:350649デフォルトの名無しさん
2007/11/04(日) 22:31:110650デフォルトの名無しさん
2007/11/04(日) 22:41:14このVSつかうデバッグできてる人いますか?
VS2005でやってみたけど、どうもうまくいかないです
0651デフォルトの名無しさん
2007/11/04(日) 22:52:32delegateまわりがとくに
closure関係だろうな
0652デフォルトの名無しさん
2007/11/04(日) 23:21:18A!(int) a;
a.f();
}
struct A(T){
T t;
A!(A!(int)) f(){
A!(A!(int)) a;
return a;
}
}
これってやっちゃいけないことなのかな。
エラーになる。
Aをコンテナとして、リストのリストと言う具合に、
入れ子にするのは良くあることだと思うのだけど。
0653デフォルトの名無しさん
2007/11/04(日) 23:46:58A!(A!(int)) をtypedefしたりなんやらしてたらDMDが無限ループに入っちまった。
怖い怖い
0654デフォルトの名無しさん
2007/11/05(月) 00:05:24普通に無限ループしないか?
テンプレートをインスタンス化すると、その内部のテンプレートがインスタンス化され、
さらにその内部のテンプレートがインスタンス化され、、、
0655デフォルトの名無しさん
2007/11/05(月) 00:09:452.003と2.007の動作は同じよう。変化なかったよ。
1.023と2.007の動作はぜんぜん違った・・・
要素3つの配列をソートするだけの処理で・・・
1.023は、配列初期化時にopCmpを20回、ソート時に3回呼び出してる。
2.007は、配列初期化時にopCmpを3回、ソート時には呼び出しなし。
2.007は降順で1.023は昇順という大きな違いが←既知事象?
0656デフォルトの名無しさん
2007/11/05(月) 01:11:38だめじゃん
0657デフォルトの名無しさん
2007/11/05(月) 01:35:23なんで最新のやつをでかでかと表示したりしないんだろ
0658デフォルトの名無しさん
2007/11/05(月) 01:39:02最終的にはintで止まるはずだから、無限ループはしなさそうだけど
C++でやってみたら大丈夫だったし
0659デフォルトの名無しさん
2007/11/05(月) 02:06:120660デフォルトの名無しさん
2007/11/05(月) 02:46:11関係ないだろ
0661デフォルトの名無しさん
2007/11/05(月) 03:53:510662デフォルトの名無しさん
2007/11/05(月) 04:03:570663デフォルトの名無しさん
2007/11/05(月) 12:07:40でも、lines :: [char] -> [[char]]が書けなくてショボーン。
getContentsとか、zipWith使ってフィボナッチとかはできたお。
0664デフォルトの名無しさん
2007/11/05(月) 12:39:25考えてみてもintで止まるということがよく分からんかった。
A!(int)はA!(A!(int))型戻り値の関数を持ち、
そのA!(A!(int))型はA!(A!(A!(int))))型戻り値の関数を持ち、…
となるように思える。(intから始まって、止まらない)
A!(int)の実体化中にA!(A!(int))を実体化しようとすると、
無限リストよろしく永遠に型の実体化が終了しないんじゃなかろうか。
で、A!(A!(int))の実体化のタイミングをA!(int)の定義後にしようと思って
struct A(T){
T t;
A!(TA) f(TA=A!(T))(){
A!(TA) a;
return a;
}
}
としてみたけど、それでもコンパイラ様は再帰展開だとおっしゃる。
で、小手先の変更として f(TA=A!(T))() を f(TA=typeof(this)) と変えてみたら
dmdがsemantic3でオチタ\(^o^)/
0665デフォルトの名無しさん
2007/11/05(月) 13:19:30今まで追い続けたんだけど、今回は2.006にもどすよ。。。
>>663
面白そうな雰囲気
まったくわからんおいらに説明おねがいします
0666デフォルトの名無しさん
2007/11/05(月) 13:41:58よく見ようよ。
A!(A!(T))だと確かにとまらないけど、上のコードはA!(A!(int))。
どう見ても有限の展開しかしない。
単に動かないのはdmdのバグでしょ。
0667デフォルトの名無しさん
2007/11/05(月) 13:46:10static List!(List!(T)) listOfList() {
return null;
}
}
alias List!(int) t;
0668デフォルトの名無しさん
2007/11/05(月) 13:59:06なるほど、A!(A!(int)).fの戻り値型はA!(A!(int))そのものになるのね。
0669デフォルトの名無しさん
2007/11/05(月) 15:35:010670デフォルトの名無しさん
2007/11/05(月) 15:55:090671デフォルトの名無しさん
2007/11/05(月) 16:11:39俺ショボスwww
0672デフォルトの名無しさん
2007/11/05(月) 16:47:13なんせ、C++ではこれが正常に動くのだから。
C++でできることはDでもできてほしい。
using namespace std;
template<class T> struct A{
T t;
A<A<T>> f(){
A<A<T>> a;
a.t.t = 2;
return a;
}
};
int main(){
A<int> a;
A<A<int>> b = a.f();
cout << b.t.t << endl;
return 0;
}
0673デフォルトの名無しさん
2007/11/05(月) 18:04:20この板ではC/C++, Javaについで3番手だということに気づいた。
PerlやJavaScriptやPHPはここではない場所でやってそうだが、
それでもずいぶん上に来たものだ。
0674663
2007/11/05(月) 18:24:56Haskellに標準搭載されてる遅延リストを、Dでどれだけ実現できるか、という試み。
実行コストが高いから実用性は無くて、お遊びでしかないけど。
ttp://www9.uploader.jp/dl/sukiyaki/sukiyaki_uljp00005.zip.html
ここに上げたから、詳しくはこれを見てみて。
linesとgetContentsとzipWithは、Haskellにある関数。
linesが書けないのは>>652がエラーになるせい。
0675デフォルトの名無しさん
2007/11/05(月) 18:31:51ウォルたんから新ネタがどんどん届くからな
間違いなく勢いはある
0676デフォルトの名無しさん
2007/11/05(月) 18:47:320677デフォルトの名無しさん
2007/11/05(月) 19:01:11>>773
をををっありがとうございます
拝見します
0678デフォルトの名無しさん
2007/11/05(月) 19:04:44//ごめんなさい
0679デフォルトの名無しさん
2007/11/05(月) 19:21:490680デフォルトの名無しさん
2007/11/05(月) 20:04:120681デフォルトの名無しさん
2007/11/05(月) 21:04:150682デフォルトの名無しさん
2007/11/05(月) 21:10:47なんかね、久しぶりに心から「へぇ〜」っていっちゃった。
やっぱ、ネットはこうでないと。
そうそう、俺タートルとかやってた奴ね。
0684デフォルトの名無しさん
2007/11/05(月) 21:22:04やけに楽しそうだw
0685デフォルトの名無しさん
2007/11/05(月) 21:44:05とかはちょっとニヤリとしてしまう
0686デフォルトの名無しさん
2007/11/05(月) 21:51:410687デフォルトの名無しさん
2007/11/05(月) 22:23:480688デフォルトの名無しさん
2007/11/05(月) 22:32:070689デフォルトの名無しさん
2007/11/05(月) 23:01:15以下のようなコードを組んでみたのですが、失敗しました。
そもそも自己を動的に派生クラスに書き直せるのかちょっと疑問になったのですが、
こういうことは可能なのでしょうか。
class Hoge {
this() {}
void rewrite() {
this = new Huga;
}
}
class Huga : Hoge {}
void main(){
auto a = new Hoge;
a.rewrite;
writefln(a); // -> Hoge
}
0690デフォルトの名無しさん
2007/11/05(月) 23:02:37sakuraiさんがずっと前に作ってなかったっけ
0691デフォルトの名無しさん
2007/11/05(月) 23:12:28変数aのアドレスなり参照なりがわからないと無理でしょ。
メモリのインスタンスが存在する部分を書き換えるわけにはいかないから、
変数aが指しているものを書き換えるしかない。
0692デフォルトの名無しさん
2007/11/05(月) 23:17:570693デフォルトの名無しさん
2007/11/05(月) 23:18:58import std.stdio;
class A{
void change(ref A a){
a = new B;
}
}
class B : A {}
void main(){
auto x = new A;
writefln(x); // a.A
x.change(x); // a.B
writefln(x);
}
0694デフォルトの名無しさん
2007/11/05(月) 23:21:26あとインデント見やすく
import std.stdio;
class A{
void change(ref A a){
a = new B;
}
}
class B : A {}
void main(){
auto x = new A;
writefln(x); // a.A
x.change(x);
writefln(x); // a.B
}
0695デフォルトの名無しさん
2007/11/05(月) 23:26:15だから、this をいくら書き換えても呼び出し元の変数(ポインタの値)は変わらないまま。
this が元から lvalue にならなきゃ混乱しないのに。
0696デフォルトの名無しさん
2007/11/05(月) 23:31:15求めているものは仮想メソッドの動的書き換えで、
かつオーバーロードできればいいなあという感じ(なのでデリゲート不可)で、
それが理想なんですが、さてどうしたものかと。
>>691 >695
なるほど。。少し分かってきました。
この辺を突破できるトリックをぼちぼち探してみます。
0697デフォルトの名無しさん
2007/11/06(火) 00:10:16ひとまずこれベースで行ってみます。
ありがとうございました。
0698デフォルトの名無しさん
2007/11/06(火) 01:03:34って言ってみる
0699デフォルトの名無しさん
2007/11/06(火) 01:37:400700デフォルトの名無しさん
2007/11/06(火) 01:57:340701デフォルトの名無しさん
2007/11/06(火) 02:31:15Has-a使ってやってみるのは?
ttp://www9.uploader.jp/dl/sukiyaki/sukiyaki_uljp00006.zip.html
なんでこの線路 .d がアップロードできんのん?
0702デフォルトの名無しさん
2007/11/06(火) 03:39:170703デフォルトの名無しさん
2007/11/06(火) 04:43:040704デフォルトの名無しさん
2007/11/06(火) 08:01:51dupは複製される。[]はされない。
int[] x = [1,2,3];
int[] y = x[];
y[0]=999;
writefln(x); // 999 2 3 (y=x.dupなら1 2 3)
0705デフォルトの名無しさん
2007/11/06(火) 08:35:14という夢をみた
0706デフォルトの名無しさん
2007/11/06(火) 13:49:41[]は配列全体のスライス。
dupはミュータブルな複製。
したがって、型が違う場合がある。
static assert(is(typeof("foo") == invariant(char)[3]));
static assert(is(typeof("foo"[]) == invariant(char)[]));
static assert(is(typeof("foo".dup) == char[]));
0707デフォルトの名無しさん
2007/11/06(火) 14:57:39・自己インスタンス書き換え
外部の自身を指すポインタのアドレスを渡す必要がある=複数あった場合は厄介
newでコンストラクタを呼び出すと厄介
・delegateスイッチング+可変データアダプタ
オーバーロードできない
プロパティ風呼び出しができない
・Has-a
オーバーヘッドはあるが、無視できることが多いかも
ExchangerとInterfaceで2回定義を書くのがやや冗長
・分岐
オーバーヘッドが大きい
・Factory
動的な変更が内部的には行えない
自身を指すポインタが複数あると厄介
自分の目的だとHas-aかデリゲートスイッチングの2択になりそうですが、
もう少し煮詰めてみて面白そうなら報告いたします。
0708デフォルトの名無しさん
2007/11/06(火) 15:37:02レンタルなんですけど、ちょっと不便だなぁ。
>>684
お察しのとおり、たのしくて!
えぇーっと、多少自重します〜。
0709デフォルトの名無しさん
2007/11/06(火) 15:39:36あったけど、いま使えるっけ?
0710デフォルトの名無しさん
2007/11/06(火) 18:12:19別のインスタンスにすり替えるんじゃなくて、インスタンス自体を書き換えてみた
import std.gc, std.stdio;
class A{
void change(){ // A to B
if(B.sizeof > capacity(cast(void*)this)){
if(extend(cast(void*)this, B.sizeof-A.sizeof, B.sizeof-A.sizeof)){
throw new Exception("std.gc.extend failed");
}
}
size_t ptrsize = (void*).sizeof;
with(B.classinfo){
(cast(byte*)this)[0..init.length]
= init[0..init.length];
}
}
}
class B:A{
void change(){ // B to A
...省略...
}
}
void main(){
A a = new A;
a.change();
writefln(a); //B
a.change();
writefln(a); //A
}
0711デフォルトの名無しさん
2007/11/06(火) 19:31:300712デフォルトの名無しさん
2007/11/06(火) 19:43:00ちょっと使える場面が限定されそうなので、しっかりメモしてそれにとどめておきます
しかしgcがありながらこれができてしまうDの変態さには感心する
0713デフォルトの名無しさん
2007/11/06(火) 19:44:550714デフォルトの名無しさん
2007/11/06(火) 23:46:58なんとなくstatic ifに書き換えてますが、無駄を感じるもので。
0715デフォルトの名無しさん
2007/11/06(火) 23:51:290716デフォルトの名無しさん
2007/11/06(火) 23:56:53他にあったっけ?
0717デフォルトの名無しさん
2007/11/07(水) 00:06:160718デフォルトの名無しさん
2007/11/07(水) 00:47:35...
#else
...
#endif
これが書きづらい。
static ifは定義済みでないと扱えないので、これをすっきり表現するには、
versionで定義されてるかどうかを真偽値とする定数を作って、……とやってるんだが、
このへんがどうにかならんもんかなあと。
0719デフォルトの名無しさん
2007/11/07(水) 00:59:10に変わるものがなあああいい
0720デフォルトの名無しさん
2007/11/07(水) 01:07:02const FOO = true;
static if(FOO){
const HOGE = true;
}
else{
const HOGE = false;
}
0721デフォルトの名無しさん
2007/11/07(水) 01:07:08version=FOO;
0722デフォルトの名無しさん
2007/11/07(水) 01:44:30「バグだとは認識されてるけど、『直す手間の割に実がない』とウォルターが言ってた」
とのこと。
まあ回避できるし特にいいかなと。
0723デフォルトの名無しさん
2007/11/07(水) 02:07:56mixin宣言で「hoge1&&!hoge2ならversion=hoge3」とかやろうとしてみたけど
mixin宣言で生成したversion文より先に素のversion文が解決されてしまうっぽくて、
mixin("version = hoge3;");
version(hoge3){
int x = 5;
}
と書いても
version hoge3 defined after use
と言われてしまう。
mixinがversionの評価の前に通れば、もうちょっとましにはなりそう。
(そうなるよりは、version文が進化する方がありえそうな話だけど)
version(foo)version(bar){ // foo && bar
}else{ // foo && !bar
}else version(bar){ // !foo && bar
}else{ // !foo && !bar
}
これは書きづらい上に読みづらいな。
現状では、718の言う通りversion+static ifというのが一番マシなやりかただろね。
0724デフォルトの名無しさん
2007/11/07(水) 11:52:12なるほど
>『直す手間の割に実がない』
これがすべてだなw
0725デフォルトの名無しさん
2007/11/07(水) 12:46:290726デフォルトの名無しさん
2007/11/07(水) 12:51:300727デフォルトの名無しさん
2007/11/07(水) 15:55:550728デフォルトの名無しさん
2007/11/07(水) 16:06:18それはウォルターには普及させる気がないっていう不具合ですか
0729デフォルトの名無しさん
2007/11/07(水) 16:34:370730デフォルトの名無しさん
2007/11/07(水) 20:15:040731デフォルトの名無しさん
2007/11/07(水) 20:24:46void rebuild(E,T)(ref T[E] array) {
T[E] result;
foreach(i, k; array.keys)
result[k] = array.values[i];
array = result;
}
テレビと同じで叩けば動くらしい。
0732デフォルトの名無しさん
2007/11/07(水) 20:24:560733デフォルトの名無しさん
2007/11/07(水) 21:08:440734デフォルトの名無しさん
2007/11/07(水) 21:58:03逆にC++でいうstatic(ファイル内スコープ)なクラスはどうやったらできる?
---- b.d ----
module b;
private class B {}
private void hoge() {}
---- a.d ----
module a;
import b;
void main()
{
B b = new B; // OK
hoge(); // Error: function b.hoge is not accessible from a
}
0735デフォルトの名無しさん
2007/11/07(水) 22:05:43Cのstaticと同じ意味になるはず。
B b = new B; もエラーにならないといけないはず。
0736デフォルトの名無しさん
2007/11/07(水) 22:30:14サンクス。
まぁ、それほど困らないバグだしほっとくか・・・
0737デフォルトの名無しさん
2007/11/07(水) 22:32:53flectionedをD2.007でコンパイルを通して使ってみたけど、
ちゃんと動いてないっぽい。
main関数直下でArrayBoundsError例外を発生させたら、
スタック表示はされたけど、関数名がでない。
(std.array.ArrayBoundsError) ArrayBoundsError main(80)
0x0012FD34 0x004046B3 <?>
0x0012FD4C 0x00404651 <?>
0x0012FDC4 0x004236E2 <?>
0x0012FF30 0x004023BC int main(char[][])
自前のクラスのメンバ関数でArrayBoundsError例外を発生させたら、
main関数が表示されてないし。
(std.asserterror.AssertError) AssertError Failure dbuffer.d(158)
0x0012FCDC 0x0040341F <?>
0x0012FCF4 0x004033BD <?>
0x00000043 0x0042244E <?>
ていうか、さっき初めて使ったので、なんか使い方を間違ってるのかも。
とりあえず[わなD]を見ながら使ってみたよ。
http://www.kmonos.net/alang/wnd/topics/flectioned.ja.html
flectionedがちゃんと使えるようになると便利いいんだけどな。
それにしても[わなD]はいつも助かるぜー。ありがたい。
0738デフォルトの名無しさん
2007/11/08(木) 00:55:02うp
0739デフォルトの名無しさん
2007/11/08(木) 02:04:41///Params:x=aaa
void func(int x){}
///ditto
void func(double x){}
↓
void func (int x);
void func (double x);
Params:
int x aaa
ってかんじに、xの型がintってあたりが納得いかないんだが…と地味に思った。
この場合どうしたらいい感じに出力できるのかな?
CandyDocとか使うと結構きれいに出てくれて素敵なんだけど…こういう細かいところがなぁ…
0740733
2007/11/08(木) 02:34:43(std.array.ArrayBoundsError) ArrayBoundsError bug(25)
0xBFB35C74 0x08052158 extern(C) void _d_array_bounds(char[], uint)
0xBFB35C88 0x0804B389 void bug.__array
0xBFB35CA0 0x0804B2F6 void bug.foo()
0xBFB35CB8 0x0804B31E int main(char[][])
なんかちがうね?なんでだろ?>>737
当方 linux
0741デフォルトの名無しさん
2007/11/08(木) 13:08:56それもきっと>>722ってことなんだろうなぁ。
もう>>722の金言は「D言語の哲学」として>>1に張っとくといいんじゃね?
0742デフォルトの名無しさん
2007/11/08(木) 13:42:070743デフォルトの名無しさん
2007/11/08(木) 14:11:54stream.read(l);
array.length = l;
これ地味に面倒じゃねwwww
array.length = stream.read!(size_t);
とかで簡単にかけたら便利そうだなあああああああ
0744デフォルトの名無しさん
2007/11/08(木) 15:40:260745デフォルトの名無しさん
2007/11/08(木) 16:40:240746デフォルトの名無しさん
2007/11/08(木) 16:59:450747デフォルトの名無しさん
2007/11/08(木) 17:08:310748デフォルトの名無しさん
2007/11/08(木) 17:09:28をるたんにその便利さを説けば入れてくれるんじゃね?
0749デフォルトの名無しさん
2007/11/08(木) 17:24:180750デフォルトの名無しさん
2007/11/08(木) 17:29:470751デフォルトの名無しさん
2007/11/08(木) 17:32:25どこをイジるかってのは完全にリソースの振り分け、優先順位の問題なのだろうし、
もうしばらくは優先順位の極めて高いwktkなアイディアが常に溢れた状態だろうから、
よっぽどの相対的価値をアピールしない限り、振り向いてはくれないだろうね。
0752デフォルトの名無しさん
2007/11/08(木) 21:31:57コンパイルが通るだけで動作確認ができてないですけど、
もしどこかに簡単にアップできる先があればアップしますよ。
>>740
おー、ご自分でポートされたんですね。
ちゃんと動いてるっぽくていいなー。
[わなD]を見ると、私のほうでちゃんとでてないのは、
-gオプションで再コンパイルしたphobos使ってないからかも。
ちなみにうちは、WindowsXP / dmd2.0007 / phobos / dsss で稼動させてます。
0753デフォルトの名無しさん
2007/11/08(木) 21:54:20ご、ごめん
0754デフォルトの名無しさん
2007/11/08(木) 22:57:23phobos のコンパイル通すのですら、をるたんにとって優先順位低そうでイヤン
0755デフォルトの名無しさん
2007/11/09(金) 00:14:050756デフォルトの名無しさん
2007/11/09(金) 00:15:40>>753
気持ちわかるw
0757デフォルトの名無しさん
2007/11/09(金) 03:30:530758デフォルトの名無しさん
2007/11/09(金) 03:44:520759デフォルトの名無しさん
2007/11/09(金) 06:32:260760デフォルトの名無しさん
2007/11/09(金) 07:26:590761デフォルトの名無しさん
2007/11/09(金) 07:43:000762デフォルトの名無しさん
2007/11/09(金) 09:33:560763デフォルトの名無しさん
2007/11/09(金) 18:19:130764デフォルトの名無しさん
2007/11/09(金) 21:13:59>>461
0765デフォルトの名無しさん
2007/11/09(金) 22:23:070766デフォルトの名無しさん
2007/11/09(金) 22:27:220767デフォルトの名無しさん
2007/11/09(金) 22:31:110768デフォルトの名無しさん
2007/11/10(土) 00:21:440769デフォルトの名無しさん
2007/11/10(土) 01:00:31tango.text.Text が機能的に一緒に見えるんだが、何なんだ、これ?
ttp://www.dsource.org/projects/tango/docs/current/tango.text.String.html
ttp://www.dsource.org/projects/tango/docs/current/tango.text.Text.html
名前変わったけどそのまんま残してあるとかそんなの?
0770デフォルトの名無しさん
2007/11/10(土) 01:03:54何でStringからTextにしたんだろ…
StringはStringで別のものを提供するつもりなんだろうか…
あとText.toUtf8()がおかしい。バグっぽい。Object.toUtf8()の「オーバーロード」関数になっちゃってるみたい…
0771デフォルトの名無しさん
2007/11/10(土) 06:25:530772デフォルトの名無しさん
2007/11/10(土) 08:49:49たしか、カンファレンスのスライドだったかで、配列以外にも拡張するようなことが書いてあったと思う。
0773デフォルトの名無しさん
2007/11/10(土) 09:04:59void func(Class c) {
}
auto c = new Class;
c.func();
なんてことになるのかな
0774デフォルトの名無しさん
2007/11/10(土) 09:43:150775デフォルトの名無しさん
2007/11/10(土) 09:53:36http://s3.amazonaws.com/dconf2007/WalterAndrei.pdf
9ページだな
まさに>>773のことが書いてある。
0776デフォルトの名無しさん
2007/11/10(土) 10:39:560777デフォルトの名無しさん
2007/11/10(土) 10:42:11全部構造体でいいじゃん
0778デフォルトの名無しさん
2007/11/10(土) 10:44:040779デフォルトの名無しさん
2007/11/10(土) 10:48:25非推奨になってたのか。サンクス。
機能的にテキストエディタを意識しているように見えるから Text に名前変えたんかな。
0780デフォルトの名無しさん
2007/11/10(土) 11:25:42……関数・メソッド・プロパティじゃそれぞれ相応しい名前が違ってくるから、
あんまり安直にごっちゃに出来て欲しくはないなぁ、というのは神経質というか今更かしらん。
0781デフォルトの名無しさん
2007/11/10(土) 12:20:32import Conv = std.conv;
"12345".Conv.to!(int);
とか。使ってる関数がどのモジュールに属するのか簡単に分からないのは嫌いだし
呼び出してるのがメソッドなのか関数なのか区別つかないのは精神衛生上よろしくない。
0782デフォルトの名無しさん
2007/11/10(土) 12:27:450783デフォルトの名無しさん
2007/11/10(土) 13:13:39>>781
自分的にもそれはほしいけど、なんかわかりにくくなるね…
…ここでスコープ解決演算子::の登場。
import Conv = std.conv;
"12345".Conv::to!(int);
とか。何でも.でアクセスするのはC++使ってた身としてはコード的に見にくくなる気がしている。
0784デフォルトの名無しさん
2007/11/10(土) 13:19:09↑ここで意味の切れ目がある感じがして好きじゃないなあ
"12345".(Conv.to!(int)); とか。
0785デフォルトの名無しさん
2007/11/10(土) 13:22:09角括弧のほうが見やすそう。
0786デフォルトの名無しさん
2007/11/10(土) 13:40:50安全に書きたいときは普通の形式で書けば良いんだし。
0787デフォルトの名無しさん
2007/11/10(土) 15:14:34"12345".to#Conv!(int)
または
"12345".to!(int)#Conv
こんな感じかな
0788デフォルトの名無しさん
2007/11/10(土) 16:55:10ERROR >>> Wrong DMD Path!!
とか出てコンパイルできないんだがどうすればいいんだ?
DMDのパスを指定してるのにできない
0789デフォルトの名無しさん
2007/11/10(土) 17:00:58無駄じゃないよ。
さっきも言ったように関数なのかメソッドなのか、関数ならどのモジュールの関数なのか
ぱっと見て分かるのは非常に保守しやすい。
自分の作ったものを自分で見る分には効果は薄いかもしれんが他人のソースコードを
見る時は非常に助かる。
Hoge hoge = new Hoge;
hoge.foo();
という記述があって、fooで何してるか見たい時に Hoge の定義見て、「あれ foo が無い」
となり、次は関数探すのにインポートしているモジュール見てそこから探し出すか、grep
かけた結果から探す羽目になる。
hoge.Bar.foo();
って記述してありゃ、Bar モジュールの foo()関数を読んでいるってのがすぐ分かる。
0790デフォルトの名無しさん
2007/11/10(土) 17:04:56dmd の1個上のフォルダ指すんじゃなかったっけ。
c:\dmd なら c:\ を指定する。
0791デフォルトの名無しさん
2007/11/10(土) 17:06:54ヒント: class Hoge{class Bar{void foo(){}}}
0792791
2007/11/10(土) 17:07:340794デフォルトの名無しさん
2007/11/10(土) 17:13:55bin の1個上のフォルダ指すんじゃなかったっけ。
c:\dmd\bin なら c:\dmd を指定する。
0795デフォルトの名無しさん
2007/11/10(土) 17:26:33ありがとう。おかげでIDE環境で初コンパイル出来たよ(つД`;)
0796デフォルトの名無しさん
2007/11/10(土) 17:27:13まぁ、基本的にはそうだけど。
でも根本を無くすにはdmdがcallgraphを生成できるようになるのが一番だと思う。
0797デフォルトの名無しさん
2007/11/10(土) 17:34:260798デフォルトの名無しさん
2007/11/10(土) 17:56:28そりゃ、理想なんだけどさ。そのときは無駄な冗長になっちゃうね。
0799デフォルトの名無しさん
2007/11/10(土) 18:09:46このBarの部分が省略可能だったらいいのではないかと。
明示したいときは明示すればいいし。
0800デフォルトの名無しさん
2007/11/10(土) 21:20:07プロパティなのかメンバ変数なのかが区別つかなくなって読みにくいコードになりそうだな。
…っておもったけどいざとなったらtypeofとかis式とか__traitsとかpragma(msg, ...)とか
stringofとかですぐに見つけられそうだな。
0801デフォルトの名無しさん
2007/11/11(日) 05:52:35>783のhoge.bar::foo()形式だと、mylib.barとかいうモジュール名とか考えると破綻する気が。
ありえるとしたら>784とか>785あたりのhoge.(bar.foo)()系じゃね?
>799の任意省略方式だと、static importとかで完全修飾を強制することによる
bar.foo(hoge)って記法に対して存在意義がないから、>800の言うような
混乱要素を無用に増やすだけになると思う。
>786で言われてることかな。
0802デフォルトの名無しさん
2007/11/11(日) 09:13:28関数呼び出し式は今も
IdentifierList '(' ParameterList ')'
IdentifierList:
identifier
IdentifierList '.' identifier
だから、結合順序的には問題ないよ。意味論のフェイズで正しく処理できるようにしてやるだけ。
0803デフォルトの名無しさん
2007/11/11(日) 09:17:07ttp://python.matrix.jp/apps/code_blocks.html
0804デフォルトの名無しさん
2007/11/11(日) 15:46:41いやいや、お前が間違ってるよ。よく考え身。
0805デフォルトの名無しさん
2007/11/11(日) 16:05:22間違ってるとかいうなら根拠しめそうぜ
モジュール名は識別子じゃないとか間抜けなこと言う?
0806デフォルトの名無しさん
2007/11/11(日) 16:12:14結合順を考えろ。間抜け。
0807デフォルトの名無しさん
2007/11/11(日) 16:14:03abc.efg.hij()
これを結合順に括弧でくくってみろ。
それが既存の文法と矛盾しないか考えろ。
0808デフォルトの名無しさん
2007/11/11(日) 16:31:400809デフォルトの名無しさん
2007/11/11(日) 16:34:120810デフォルトの名無しさん
2007/11/11(日) 16:42:14結合順に依存するコードは誤り。
0811デフォルトの名無しさん
2007/11/11(日) 17:05:44お前頭大丈夫か?
そんなわけないだろ。
仕様で結合順は決まってるよ。
0812デフォルトの名無しさん
2007/11/11(日) 17:12:040813デフォルトの名無しさん
2007/11/11(日) 17:38:22はぁ…月曜日が待ち遠しい…
0814デフォルトの名無しさん
2007/11/11(日) 17:41:220815デフォルトの名無しさん
2007/11/11(日) 17:41:24ttp://c-production.com/special/04092101.html
これは、Cのものだけど、Dも基本的なものは同じだよ。
0816デフォルトの名無しさん
2007/11/11(日) 17:44:100817デフォルトの名無しさん
2007/11/11(日) 18:01:49とりあえず、ここを読んでみようか
http://www.digitalmars.com/d/expression.html
Evaluation Order
Unless otherwise specified, the implementation is free to evaluate the components of an expression in any order. It is an error to depend on order of evaluation when it is not specified. For example, the following are illegal:
アホ多くてワロタ
0818デフォルトの名無しさん
2007/11/11(日) 18:09:25(abc.efg).hij()と解釈されることはあっても、
abc.(efg.hij)()と解釈されることは無いな
0819デフォルトの名無しさん
2007/11/11(日) 18:11:47明らかにアホはお前。
評価順と結合順を勘違いしてる大バカ野郎。
0820デフォルトの名無しさん
2007/11/11(日) 18:17:15hoge.foo@Bar()
とかどうだろう。
これでFugaモジュールにfooがある場合も
hoge.foo@Fuga()
っていけるし。
けど重複していない場合は
hoge.foo()
と省略して書けるとか。
0821デフォルトの名無しさん
2007/11/11(日) 18:17:51そうだけど、typeof(abc)からefgを探して、無ければグローバルから辿るでおk。
0822デフォルトの名無しさん
2007/11/11(日) 18:19:09式(expression.module)がexpressionとmoduleをpackしたデータを返すことにして、
それに対して.memberを呼び出したときに、module.member(expression)と解釈される。
ただし、(expression.module)のデータ型はコンパイル時にのみ存在し、変数等に保持することは出来ない。
と定義すれば何の矛盾もなくね?
0823デフォルトの名無しさん
2007/11/11(日) 18:29:12何でそんなに無意味に複雑にする必要がある。
というか、そんな風にしたら foo.Bar.hogeという式のBarが何なのかを探すのが困難すぎる。
モジュール名を記述させたい理由は
>って記述してありゃ、Barモジュールのfoo()関数を読んでいるってのがすぐ分かる。
ってことじゃなかったのかよ。
まるっきり逆効果になることを言って何がしたいんだよ。
0825821
2007/11/11(日) 18:36:400826デフォルトの名無しさん
2007/11/11(日) 18:38:31一行目しか読めないのか?
つーか、実装的にも自然じゃねーよ。。
aaa.bbb.ccc.ddd.eee()
これがどういう探索をしないといけないのか、よく考えてみろ
bbb.ccc.dddというモジュールがあったら?
ccc.dddというモジュールがあったら?
0827デフォルトの名無しさん
2007/11/11(日) 18:41:20module util;
int sum(int[] array) { ... }
...
sum = a.sum;
関数が定義されてるモジュール名を書くようにするには、どうすればいいか、という話だったよね。
関数なら、util.func(array);で問題ないが、プロパティ的に呼び出すときには、
array.util.func;
なのか、
array.uitl::func;
なのか、とか云々。
一人、訳の分からない人がいて混乱してるけど、元々はこういう話だったということで。
0828デフォルトの名無しさん
2007/11/11(日) 18:46:24array.(module.func)でいいと思うんだけど。
これが気に入らない人の意見が聞きたい。
0829デフォルトの名無しさん
2007/11/11(日) 18:49:560830802
2007/11/11(日) 20:46:36予想してた斜め上の回答がきててワロタ
構文解析とか意味解析とか知らないくせに左結合とか右結合とか
結合規則だけでコンパイラ語ってんじゃねぇ、ヴォケw
例えば、hoge モジュールの中に foo クラスがあって、bar っていうメソッドがあったとして、
hoge.foo.bar っていう字句列が何を意味するか分かる?
0831デフォルトの名無しさん
2007/11/11(日) 20:50:39何にも分かってないのはお前だけー
0832デフォルトの名無しさん
2007/11/11(日) 20:53:06まぁ、納得できないんじゃなく、理解できないんだからしょうがないが。
0833デフォルトの名無しさん
2007/11/11(日) 20:55:24つーかさ、なんで>802クンは>830で突然戻ってきた風なくせに、
突然>830でキレ気味に「ヴォケ」とかあおってんの?
そんなに悔しい出来ことがあったのですかー?
0834デフォルトの名無しさん
2007/11/11(日) 20:57:090835デフォルトの名無しさん
2007/11/11(日) 20:57:400836デフォルトの名無しさん
2007/11/11(日) 21:00:090837デフォルトの名無しさん
2007/11/11(日) 21:01:230838デフォルトの名無しさん
2007/11/11(日) 21:02:320839デフォルトの名無しさん
2007/11/11(日) 22:11:43偉そうにクイズ出してごまかすに限るよな。
0840デフォルトの名無しさん
2007/11/11(日) 22:12:290841デフォルトの名無しさん
2007/11/11(日) 22:23:200842デフォルトの名無しさん
2007/11/11(日) 22:38:350843デフォルトの名無しさん
2007/11/11(日) 22:49:47自演ってことにしたいの?そんなに悔しかったのかい?
0844デフォルトの名無しさん
2007/11/11(日) 23:26:43オマエガナー
0845デフォルトの名無しさん
2007/11/11(日) 23:27:48と言うとこのレスも無駄だろと言われるんだろうけど。
0846デフォルトの名無しさん
2007/11/11(日) 23:31:37自演乙
0847デフォルトの名無しさん
2007/11/11(日) 23:31:480848デフォルトの名無しさん
2007/11/12(月) 00:10:00くやしいのうwwwくやしいのうwww
0849デフォルトの名無しさん
2007/11/12(月) 00:58:02今日は802は悔しくて眠れないだろうなこりゃ。
0850デフォルトの名無しさん
2007/11/12(月) 00:59:360851デフォルトの名無しさん
2007/11/12(月) 00:59:390852デフォルトの名無しさん
2007/11/12(月) 01:01:420853デフォルトの名無しさん
2007/11/12(月) 01:44:38自演乙
0854デフォルトの名無しさん
2007/11/12(月) 01:51:56いい加減にしたらどうだ?
そこまでして勝ち誇りたいかね
0855デフォルトの名無しさん
2007/11/12(月) 02:04:02せっかく俺が>>834を書き込んでやったというのに。
0856デフォルトの名無しさん
2007/11/12(月) 02:13:060857デフォルトの名無しさん
2007/11/12(月) 02:20:070858デフォルトの名無しさん
2007/11/12(月) 02:21:060859デフォルトの名無しさん
2007/11/12(月) 06:01:30最後に書き込んだやつが、悔しくて最後まで起きてた奴ってことでいいかね?
0860デフォルトの名無しさん
2007/11/12(月) 07:33:140861デフォルトの名無しさん
2007/11/12(月) 09:22:08悔しくて、朝一番に書き込んじゃったお前が NO.1だよ。寝てないんじゃない?
0862デフォルトの名無しさん
2007/11/12(月) 10:27:380863デフォルトの名無しさん
2007/11/12(月) 10:53:310864デフォルトの名無しさん
2007/11/12(月) 12:32:11おはよう>>802
0865デフォルトの名無しさん
2007/11/12(月) 13:18:39lazyとか、macroが導入されたら使い物にならなくなりそうな気がするな。
いまでもdelegateとか使えば表現できるし、使い道的にはぶっちゃけいらないんじゃね?
最適化のために使われたりするのかなぁ…
>>864
もういい加減その話題引っ張るのやめようぜ。
0866デフォルトの名無しさん
2007/11/12(月) 18:00:380867デフォルトの名無しさん
2007/11/12(月) 18:21:08やめようぜ、頼むよ。
再帰には終了条件を設定すべきだろ。
0868デフォルトの名無しさん
2007/11/12(月) 18:25:410869デフォルトの名無しさん
2007/11/12(月) 18:56:510870デフォルトの名無しさん
2007/11/12(月) 19:31:00D言語_Part15.pause;
0871デフォルトの名無しさん
2007/11/12(月) 19:52:44もう諦めようよw
0872デフォルトの名無しさん
2007/11/12(月) 20:13:260873デフォルトの名無しさん
2007/11/12(月) 20:16:290874デフォルトの名無しさん
2007/11/12(月) 21:56:520875デフォルトの名無しさん
2007/11/12(月) 22:13:13dsss build でexeファイルができない・・・
1>Creating imports for DD-Debug
1>Creating imports for DD-dsss_objs
1>Debug => DD-Debug
1>WARNING: Section Debug has no files.
1>dsss_objs => DD-dsss_objs
1>WARNING: Section dsss_objs has no files.
ってでます。
dsss build main.d ってやればできるんだけど
ルートディレクトリでコマンド一発ってのがdsssの機能をつかいたいです
0876デフォルトの名無しさん
2007/11/13(火) 00:40:31void hoge(void delegate() func){
func();
}
void main(){
hoge({goto End;});
End:
return;
}
をコンパイルするとError: label End is undefinedってなるのと
mainのreturn;をはずすと(ラベルの後がすぐ}だと)エラー出すのは仕様通り?
0877デフォルトの名無しさん
2007/11/13(火) 00:51:03End: ; ってしてみるといい。
0878デフォルトの名無しさん
2007/11/13(火) 00:58:46gotoで飛べるのは同じ関数の中のラベルだけで、
関数から飛び出したり別の関数へ飛び込んだりは出来ないよ。
0879デフォルトの名無しさん
2007/11/13(火) 01:38:38(´;ω;`)ぶわっ
0880デフォルトの名無しさん
2007/11/13(火) 05:34:500881デフォルトの名無しさん
2007/11/13(火) 17:50:380882デフォルトの名無しさん
2007/11/13(火) 22:03:080883デフォルトの名無しさん
2007/11/13(火) 23:32:211.xは実質的には、単なる「試行錯誤の跡地」であり、要らない子かもしれないな。
そこに何かを求めるのは、ついうっかりDの安定性に賭けて何か作っちゃった人くらいだな。
0884デフォルトの名無しさん
2007/11/14(水) 00:13:010885デフォルトの名無しさん
2007/11/14(水) 00:13:12ヒドスwwwww
でもそんな感じだな・・・
2.0もそうなるんだろうな・・・
0886デフォルトの名無しさん
2007/11/14(水) 00:19:542.xには最初からなかったと思うけど
1.xにもなくなっているのかな
0887デフォルトの名無しさん
2007/11/14(水) 00:22:540888デフォルトの名無しさん
2007/11/14(水) 00:26:532.001から
0889デフォルトの名無しさん
2007/11/14(水) 23:48:23Tango入れたらこんなん出てきたんですが、
これはどっか設定変えないと駄目なんでしょうか。
0890デフォルトの名無しさん
2007/11/14(水) 23:52:020891デフォルトの名無しさん
2007/11/15(木) 00:41:190892デフォルトの名無しさん
2007/11/15(木) 00:52:35そうだったんすか。
ありがとうございました。
0893デフォルトの名無しさん
2007/11/15(木) 02:07:06import std.stdio;
void main()
{
auto A = new Object();
auto B = A;
delete A;
delete B;
writefln("end of process");
}
を実行すると、end of processは表示されるけど、
プロセスが終了しないんだが、
1.そういうことしちゃだめ。
2.今、gcがもっすごがんばってるからもうちょい待て。
3.delete式なんてただの飾りですよ。エロい人にはそれが分からんのです。
4.バグだけど直すほどの価値がない。
どれ?
0894デフォルトの名無しさん
2007/11/15(木) 02:15:540895デフォルトの名無しさん
2007/11/15(木) 02:19:45これはやっちゃだめでしょう。
0896デフォルトの名無しさん
2007/11/15(木) 04:25:33「ポインタ、動的配列、参照変数は、 delete のあと null にセットされます。」
と言う一文が。
しかしこの場合nullがセットされるのは参照変数としてのA自体で、
Aの実体を参照してた参照変数のBはそのまんま(つまりゴミ参照してる)じゃないでしょうか。
なのでやっぱり複数の参照変数で参照されてる大元消したあとにdeleteするのはまずいかも。
0897デフォルトの名無しさん
2007/11/15(木) 09:24:20http://www.kmonos.net/alang/d/expression.html#DeleteExpression
> それ以外の場合はガベージコレクタが呼び出され、
> インスタンスに割り当てたメモリは直ちに解放されます。
とあるから、 delete A; でBが無効な参照になるのは確実だと思う。
ただ、解放済み(だけどもともとGCで確保した)領域への参照に対する
deleteについては仕様に言及がないと思うので、これは実装依存だと思う。
(つまり、実装によっては未定義動作となる可能性もあるということ)
実装依存となると、実装がどうなってるか分からない(今回の場合)なら
やっちゃ駄目な操作(選択肢の1)になるかな。
0898デフォルトの名無しさん
2007/11/15(木) 15:19:41dfl使ってツリービューとかにドラッグオーバーを何度か繰り返すと
例外吐くんですが、それがどこなのかわかりません。
0899デフォルトの名無しさん
2007/11/15(木) 15:59:140900893
2007/11/15(木) 16:09:45あ、やっぱそっか。さんくす。
どうも4から疑ってしまう自分がいて、反省。
でも、例外とか吐いてくれるような仕様にならんかなあ。
0901デフォルトの名無しさん
2007/11/15(木) 17:18:37あれはTangoが無いと動かないみたいで。
dflとTangoの組み合わせは自分でやった限りでは出来なかったので。
0902デフォルトの名無しさん
2007/11/15(木) 20:52:500903デフォルトの名無しさん
2007/11/15(木) 21:26:28module a;
private import std.stdio;
module b;
import a;
void main()
{
std.stdio.writefln("hello");
}
>dmd b.d a.d
が通るって初めて知ったんだけど、キモくね?
0904デフォルトの名無しさん
2007/11/15(木) 21:32:410905デフォルトの名無しさん
2007/11/15(木) 21:34:310906デフォルトの名無しさん
2007/11/15(木) 22:43:37>デフォルトでは、import は private です。
>これは例えば モジュール A がモジュール B を、
>モジュール B はモジュール C をimportしていた場合、
>Cの名前はAでは探索されないということです。
>ただし、 import を特別に public と宣言すると、
>その import が取り込むモジュール内の全ての名前が、
>現在のモジュールを外からimportするモジュールにも見えるようになります。
未定義になるべきなのでは
もしかして実はデフォルトがpublicなのかなーとか思って明示的にprivate import aにしてみたがやっぱり通るね。
0907デフォルトの名無しさん
2007/11/15(木) 23:09:590908デフォルトの名無しさん
2007/11/16(金) 00:00:36それ、モジュールAとimport a;が無くても通るんだよね。
だから、仕様だと思ってた。
フル修飾だとimport不要、みたいな。
0909デフォルトの名無しさん
2007/11/16(金) 00:01:330910デフォルトの名無しさん
2007/11/16(金) 07:49:58Windowsなんだけど、なんでかな〜。いまのとこ、無いファイルを作ろうとしてるんだけど。
コンソールに違反だよ〜ってでるからAPI内部の犯行ではないはずなんだけど。
あ、コンパイラのバージョンは1.015です。
bool Save(char[] name, bool IsIgnor = false){
BitmapFileHeader bmh;
bmh.bfType = 0x4d42;// 'B'<<8 + 'M';
if(exists(name) == true){
if(IsIgnor == false) return false;
}
static if(IsDebug) writefln("file:",name);
File fo;
fo.open(name,FileMode.OutNew);
/* if(fo.isOpen == false) return false;
fo.writeBlock(cast(void*)&bmh,bmh.sizeof);
fo.writeBlock(cast(void*)&bih_,bih_.sizeof);
fo.writeBlock(cast(void*)Palette_,uint.sizeof*Palette_.length);
fo.writeBlock(cast(void*)Pixel_,ubyte.sizeof*Pixel_.length);
*/ fo.close();
0911デフォルトの名無しさん
2007/11/16(金) 08:22:130912デフォルトの名無しさん
2007/11/16(金) 08:55:43ぐあ。はずかし!またやってしまった!!
くそー。癖って抜けないね。
なんにせよ、レスありがとう!!!!
0913デフォルトの名無しさん
2007/11/16(金) 18:16:100914デフォルトの名無しさん
2007/11/16(金) 18:53:240915デフォルトの名無しさん
2007/11/16(金) 19:05:070916デフォルトの名無しさん
2007/11/16(金) 21:15:530917デフォルトの名無しさん
2007/11/16(金) 21:21:30vs6だとうまく行くんだけど、vs2005だと作業フォルダ指定しても
ブレークポイントに反応してくれない。
0918デフォルトの名無しさん
2007/11/16(金) 21:21:370919デフォルトの名無しさん
2007/11/16(金) 21:46:480920デフォルトの名無しさん
2007/11/16(金) 22:20:400921デフォルトの名無しさん
2007/11/16(金) 23:16:220922デフォルトの名無しさん
2007/11/16(金) 23:32:45>unrecognized switch '-debuglib=tango-base-dmd.lib'
自分もその現象が発生しました。Tango 0.99.3になってそのスイッチを使い始めたみたいです。
調査の結果、rebuildが-debuglibに対応できていないのが原因のようで、dsss最新版のrebuildを使ってみてもだめみたいです…
というわけで、dsssやrebuildを用いないでコンパイルするとうまくいくことがわかりました。
レスポンスファイルを作ってやるか、makeを活用するとよいかと思います。
というわけでそれを踏まえてDFL 0.96.01を使ってみたのだけど、いくつかはまったので使いたい方は以下を参考するとよいかと思います。
import\dfl\makelib.bat(23)にinternal/_stdcwindows.dを追加
import\dfl\makelib.bat(25)に_stdcwindows.objを追加
import\dfl\makelib.bat(34)の-v1を削除
でgo.batを実行してライブラリをビルドすることで解決したので参考までに載せておきます。
0923デフォルトの名無しさん
2007/11/16(金) 23:39:00ああそういうことだったのかな
前はソースレベルデバッグできてたのにいつの間にかできなくなったと思っていたら
0924デフォルトの名無しさん
2007/11/16(金) 23:45:01いたらバージョンを教えてほしいのでスが。
0925デフォルトの名無しさん
2007/11/17(土) 01:39:57static void opBrace(void delegate() v){v();}
}
A{printf("brace");}
みたいなのが欲しい。
0926デフォルトの名無しさん
2007/11/17(土) 01:44:010927デフォルトの名無しさん
2007/11/17(土) 01:48:39あれは、{code();}.stringof とかの方がよかったと思うのにな。。
0928デフォルトの名無しさん
2007/11/17(土) 01:48:48tanbo
botan
popotan
bosan
0929デフォルトの名無しさん
2007/11/17(土) 01:53:37a(b)があるけど、opCallもあるから大丈夫だ。
0930デフォルトの名無しさん
2007/11/17(土) 01:55:55いや、そういうことじゃなくて…
0931デフォルトの名無しさん
2007/11/17(土) 02:12:340932デフォルトの名無しさん
2007/11/17(土) 02:20:01printf(q{A{"huga\n"}});は通る
0933デフォルトの名無しさん
2007/11/17(土) 02:43:14ドラッグドロップ系使う時は
Application.run(...) を呼び出す前に Application.autoCollect = false; として、
頻繁にGCが走らないようにすると、とりあえず落ちるのは回避できるみたい。
必要な領域までGCに解放されてしまってるのかも…
0934デフォルトの名無しさん
2007/11/17(土) 02:55:40助かりましたありがとうございました。
0935デフォルトの名無しさん
2007/11/17(土) 03:21:23//error!
0936デフォルトの名無しさん
2007/11/17(土) 07:50:540937デフォルトの名無しさん
2007/11/17(土) 08:15:23simeji
enoki
shitake
0938デフォルトの名無しさん
2007/11/17(土) 10:27:00・DMD builds no longer generate libphobos.a/phobos.lib, but instead utilize the -defaultlib switch.
This enables phobos to install side-by-side with Tango
・Also note that there is an experimental D2.0 branch in our repositories now.
0939デフォルトの名無しさん
2007/11/17(土) 11:22:110940デフォルトの名無しさん
2007/11/17(土) 11:35:17頭悪いのな。お前。
0941デフォルトの名無しさん
2007/11/17(土) 12:08:260942デフォルトの名無しさん
2007/11/17(土) 12:14:43よく言い、よく陰で思われる940
0943デフォルトの名無しさん
2007/11/17(土) 13:23:45よく言い、よく陰で思われる940
よく言い、よく影で思われ、それに気づかない942
0944デフォルトの名無しさん
2007/11/17(土) 14:17:02static string opBrace(void delegate() d){return d.stringof;}
}
class q{
static string opBrace(string s){return s;}
}
とかできれば、q{}はいらないと
0945デフォルトの名無しさん
2007/11/17(土) 14:58:130946デフォルトの名無しさん
2007/11/17(土) 15:01:260947デフォルトの名無しさん
2007/11/17(土) 17:09:11ありがとう
えーとじゃあ↓じゃなくて
mixin("some_valid_code_here;");
そうしたい場合ってのはどんなとき?
0948デフォルトの名無しさん
2007/11/17(土) 17:39:110949デフォルトの名無しさん
2007/11/17(土) 17:43:54mixin(q{ this is not valid tokens; }); // error
mixin(q{ this_is_valid(); });
ってことじゃね。
0950デフォルトの名無しさん
2007/11/17(土) 17:49:33std.conv.to!(string)
0951デフォルトの名無しさん
2007/11/17(土) 17:59:29でもエラー出ね?
出るエラーが違うのかな
0952デフォルトの名無しさん
2007/11/17(土) 18:12:02変数に格納したりするなら、エラーの出る場所が違うな。
0953デフォルトの名無しさん
2007/11/17(土) 18:26:50q{}の意義が全然わからなくて俺涙目
>>949 それをどういうときに使うのかと
0954デフォルトの名無しさん
2007/11/17(土) 18:48:380955デフォルトの名無しさん
2007/11/17(土) 19:00:36Dの字句解析をパスしなければならない。
つまり、文字列が、Dのソースとして解釈可能であるかどうかを判別できる。
0956デフォルトの名無しさん
2007/11/17(土) 19:01:46コードを文字列として渡すときに、ダブルクォートの中にコードを書くなんていう、
エディタ支援が受けられない(どころかむしろ邪魔になる)苦行に挑まんで済むわけね。
0957デフォルトの名無しさん
2007/11/17(土) 19:04:00俺は、変態なことやってる場所を簡単に検索できるためだと思ってた。
0958デフォルトの名無しさん
2007/11/17(土) 19:50:02void main() {
const a1 = "\"hoge\"";
mixin("string c1=mixin(\"mixin(\\\"\\\\\\\"huga\\\\\\\"\\\")~\\\"hoge\\\"\") ~ mixin(a1);");
writeln(c1);
const a2 = q{q{hoge}};
mixin(q{string c2=mixin(q{mixin(q{q{huga}})~q{hoge}}) ~ mixin(a2);});
writeln(c2);
}
どっちがいいかとか
0959デフォルトの名無しさん
2007/11/17(土) 20:19:35void main() {
const C = q{ mixin(A) + mixin(B) };
const A = q{ a };
const B = q{ b };
int a = 10;
int b = 20;
writeln( mixin(C) );
}
こんなことできたりとか
0960デフォルトの名無しさん
2007/11/17(土) 20:39:420961デフォルトの名無しさん
2007/11/17(土) 20:49:09void main() {
const s = q{mixin(s)};
writefln(mixin(s));
}
0962デフォルトの名無しさん
2007/11/17(土) 20:59:160963デフォルトの名無しさん
2007/11/17(土) 21:00:15alias string symbol;
template add(symbol o, symbol v) {
const add = `mixin( q{`~o~`} ) + mixin( q{`~v~`} )`;
}
void main() {
const c = add!(q{a},q{b});
int a = 10;
int b = 20;
writeln(mixin(c));
a = 100;
b = 200;
writeln(mixin(c));
}
0965デフォルトの名無しさん
2007/11/18(日) 03:48:38q{int int class class invalid;}とかやっても大丈夫だし。
0966デフォルトの名無しさん
2007/11/18(日) 04:33:280967デフォルトの名無しさん
2007/11/18(日) 04:39:230968デフォルトの名無しさん
2007/11/18(日) 07:46:51int a,b,c;
Tuple!(a, b, c) = Tuple!(10, 20, 30);とかって無理じゃね?
0969デフォルトの名無しさん
2007/11/18(日) 09:04:33template Tuple(T...) { alias T Tuple; }
0970デフォルトの名無しさん
2007/11/18(日) 09:07:400971デフォルトの名無しさん
2007/11/18(日) 11:12:391.023/2.006 でバグフィックスされてできるようになったのでそれより古いとダメ
0972デフォルトの名無しさん
2007/11/18(日) 13:26:30はopAssignでオーバーロードできるけど、
obj[index] += value;
みたいな複合代入をオーバーロードする方法ってある?
0973デフォルトの名無しさん
2007/11/18(日) 13:36:380974デフォルトの名無しさん
2007/11/18(日) 13:39:55opIndexでオブジェクトを返すとか
()がいるけど
0975デフォルトの名無しさん
2007/11/18(日) 14:22:191.020使ってたよ・・・(´・ω・`)
バージョンうpしたいけどgdcがなあ・・・
0976デフォルトの名無しさん
2007/11/18(日) 14:39:31opStarAssign
opStarOpAssign
このあたり追加して欲しい
0977デフォルトの名無しさん
2007/11/18(日) 15:00:410978デフォルトの名無しさん
2007/11/18(日) 15:27:530979デフォルトの名無しさん
2007/11/18(日) 15:29:19opCallAssign
opCallOpAssign
もお願いします!
0980デフォルトの名無しさん
2007/11/18(日) 16:26:29…さすがに要らんと思う。
0981デフォルトの名無しさん
2007/11/18(日) 16:27:55きんもーwww
0982デフォルトの名無しさん
2007/11/18(日) 16:34:26まあ、下駄雪駄を合わせたプロパティ的用途か、スライスへの代入の用途が主だから、
Dなら別の機能で間に合ってるけど。
0983デフォルトの名無しさん
2007/11/18(日) 16:51:250984デフォルトの名無しさん
2007/11/18(日) 23:02:43D言語 Part16
http://pc11.2ch.net/test/read.cgi/tech/1195394435/
0985デフォルトの名無しさん
2007/11/19(月) 08:06:43公式で、ユーザライブラリコンテストとかやらないかねぇ。
一回総集編を作ってほしい。
現状、フレームワークは決定打ないし、グラフィックライブラリはないし、サウンドライブラリも無い。
でもなぜかZIPはあるし、細かいスパイスのきいたライブラリがそろってるのもまー事実。
Tangobosの問題もあるし、V2系のラストで是非やってほしいと結構おもてる。
問題はいつV2系が安定するかだなぁ。。。
0986デフォルトの名無しさん
2007/11/19(月) 08:23:400987デフォルトの名無しさん
2007/11/19(月) 08:31:00ファイルフォーマットの内容しらないし、ライセンスがどうなってるかは知らないけど。
プログラムの場合ってラスタフォントのほうが相性いいのかなぁ。
0988デフォルトの名無しさん
2007/11/19(月) 08:41:07現状、Bitmapのインターフェースの設計をてきとーにやってるんですけど、
うまく全部(1〜32びっと)に当てはまるインターフェースが良くわからないです。
総合あーかいばプロジェクトは割りとその辺の設計が良かったから普及したようなもんだし。
なんか、いい手はないもんかなぁ。
0989デフォルトの名無しさん
2007/11/19(月) 09:04:060990デフォルトの名無しさん
2007/11/19(月) 13:47:25perlのlvalueってあれ単に参照返してるだけに見える俺は異常?
0991デフォルトの名無しさん
2007/11/19(月) 16:26:040992デフォルトの名無しさん
2007/11/19(月) 16:41:260993デフォルトの名無しさん
2007/11/19(月) 16:47:31よくわからんが、
void[]でビットイメージを保持しておいて、
インデクサを用いて適切に変換するようにすればいいんじゃなかろうか。
0994デフォルトの名無しさん
2007/11/19(月) 17:04:36>707だけど同じ目的なので設計を話し合ってみませんか?
私はピクセルに触る部分だけ専用の関数を作って、これをピクセルフォーマットごとに変えるようにし、
それ以外の塗りとかその他は必ずその関数経由で触るように設計しました。
あとで自分がやった内容についてファイルをうpしてみます。
0995デフォルトの名無しさん
2007/11/19(月) 17:23:34参照返してるだけだな。
ただの構文糖
0996デフォルトの名無しさん
2007/11/19(月) 18:17:27* プロパティに対する複合代入
* ラムダ式
をるたん、クリスマスプレゼントまってます。
0997デフォルトの名無しさん
2007/11/19(月) 18:33:380998デフォルトの名無しさん
2007/11/19(月) 20:28:25http://pc11.2ch.net/test/read.cgi/tech/1195394435/l50
0999デフォルトの名無しさん
2007/11/19(月) 20:30:25D言語 Part16
http://pc11.2ch.net/test/read.cgi/tech/1195394435/l50
1000デフォルトの名無しさん
2007/11/19(月) 20:30:4510011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。