1 :
デフォルトの名無しさん :
2008/02/10(日) 15:06:12
2 :
デフォルトの名無しさん :2008/02/10(日) 15:07:24
3 :
デフォルトの名無しさん :2008/02/10(日) 15:07:51
4 :
デフォルトの名無しさん :2008/02/10(日) 15:09:00
乙
うは乙ww めちゃめちゃ補完されてるな ABA Gamesが入ってないのが不思議なくらいだ
>>1 芝のゲーム面白いね。俺はちょっと作れない。待つのがだめなんで。
>>7 最近はC#+XNAいってるぽい。
_2ch[1202623572][1].otsu
_2ch.write(["board_id": "tech",
"thread_id": "1202623572",
"content": "
>>1 乙",
"mail": "sage"]);
D言語終了のおしらせときまして、久々に飛んできました。
Microsoftは他をつぶすのは本当に得意ですね・・・
>>1 芝ゲー入れて、ABA games入れないとかどんだけwww
13 :
デフォルトの名無しさん :2008/02/10(日) 21:59:26
>>11 GCは小ざかしいテクニック使わずにハンズフリーであるべきだよなあ。
C++風に完全に自分で管理するバージョンとか、
昨年のD言語フォーラムの例にあったフリーリスト使いまわし(配列のスライス返しとかで非常にうまくいくようで)とか、
いろいろあってもいいと思うけどね。
必要性を感じないから誰も作ってないだけじゃないかね。 phobosのGC部分をすっかり入れ替えてしまえば、何とでもなる筈だけど。
ごく少数のプログラムで各自持ってきたGCが使われるだけなのと、 ほぼすべてのプログラムで処理系お仕着せGCのみ自動的に使われるのと、 どっちが現実的にマシになるか、って判断をするとして 後者を選んだのがDだ、ってことだね。 GC停止できるしmalloc類も使えるしnewのオーバーライドできるしautoもあるし、 で実用上も問題ない感じか。
一時代を支えたセコイ技術をいつまでも信奉してしまうのは要素を変えながら度々繰り返されてきたことだからねぇ。
2.011がまだウォルタソの脳内にとどまっているので おまいらは話題がないのですね
てーかD言語とDMDってをるたんが一人で開発してるの?
芝は最近見つけたから記憶にあたらしかった。 ABAは……ごめんなさい、すっかりわすれてたorz
もうコンパイル通らないよね、たぶん。
テキストファイルから最後の50行だけを抜き出す方法で一番オーバーヘッドが少ない方法ってなんだろう。 今はstd.file.readでいったんファイルを全部読み込んで改行文字の個数を調べているが、 もう少し良い方法がないものか。
全部読み込むのは明らかに無駄だろう。 少しずつ読み込んで改行数えればいい。
リングバッファに突っ込むとか
一気に末尾まで移動して逆に辿っていくとかは?
一行の文字数を見積もっておおよそ50行分を末尾から読み込み 足りなければどんどん前に進んでいけばおkっていうかD関係ねえwww
ところで、 version(Tango) { } else { } を、 version(!Tango) { } とか書けるようにならないかなあ。
できるならversion_notとかになりそう
だれか2007/02/17あたりにこのスレに貼られてた std/thread.dの修正ファイル持ってない?
>>29 ほんとだ
で、ちょっといろいろテストしてみたんだが新しいバグを見つけた
Thread.start()内の
state = TS.RUNNING;
hdl = _beginthreadex(null, cast(uint)stacksize, &threadstart, cast(void*)this, 0, &id);
31 :
30 :2008/02/11(月) 21:41:42
途中で送ってしまった state = TS.RUNNING; とスレッド作成の間にGCとかでpauseAll()が呼ばれると、 stateはRUNNINGなのにスレッドハンドルが入ってないためにpause()で例外が起きてデッドロックした 上記の二行を synchronized(Thread.classinfo) で保護したら大丈夫だった それとstart()のなかの synchronized (Thread.classinfo) allThreads[idx] = null; って synchronized (Thread.classinfo){ allThreads[idx] = null; nthreads--; } の間違いじゃね? あと Thread.setPriority()ってNORMALにも設定できるようにするべきだと思う
それ以前にWindows版の std.thread はスレッドハンドルを CloseHandle してないからな。 生成可能なスレッド数も4000までなんて制限ありそうなつくりっぽかったし。 std.thread 見て tango 使う決心した。
33 :
32 :2008/02/12(火) 00:13:56
ソース見たら同時に実行可能なスレッド数が1024までだった。
>>30 29を見ると、修正パッチが投稿されるまで、をるたん11ヶ月もバグ放置してる。
こちらから修正パッチ投稿しないと、なおしてくれないのかも
35 :
30 :2008/02/12(火) 00:57:35
>>36 30じゃないけど、テラ乙
あといつもお世話になってます
39 :
30 :2008/02/12(火) 11:39:51
>>36 ありがとうございます
英語勉強しとこうλ....
>>39 英語って文法知ってるだけじゃ書けないよね。
さらにプログラムの話になってくると普通にはない用語とか言い回しとかあるし、どこで勉強すればいいのやら;
>>40 それこそ、DのニュースグループやらBugzillaやらを毎日読んでみればいいんじゃね?
digitalmars.D.announce辺りなら流量もそんな多くないし、
ほとんど "すげー" とか "乙" だけみたいな短いレスが多いから、
楽に読み始められると思う。
学術論文とか技術英語のほうが単純な構文で楽なんだけどね
「楽なんだけど」……続きがあるわけだ。
phobosをどっかのレポジトリに入れてもらって みんなで気楽に修正できるようにならんかなー をるたんはコンパイラで忙しいみたいだし、 みんなでやればphobosの完成度も飛躍的に向上すると思うんだが
>>43 禿げ同
そっちの方が断然楽
短い口語的な英語はノリが分からなさ過ぎる
今のphobosはSVNで管理されてるわけだが たまにウォルターとアンドレイ以外の名前でコミットされてるよね あれのメンテナになるには直接掛け合わないといかんのかね
synchronized {}とsynchronized (o) {}って何が違うの?
>>49 48のページの Login → Register で登録して、ログインするのかな?
>>50 synchronized {} == synchronized(this){}
>>53 それは間違いだろう
synchronizedだけだとそのスコープ内のみ保護される
55 :
53 :2008/02/12(火) 17:58:33
あーそうか。その通りだ。スマソ
>>50 ・全国で同時に一人だけ、貯金を引き出せる。
・全国で同時に一人だけ、同じ口座番号から貯金を引き出せる。
この2つ、待ち時間がどう違うかを考える。
文字列にコードを埋め込みたいんだけど、なにかいい方法ないかな? たとえば、下の1)を2)にしたい。 1) "a == ${a}, a/2 == ${a/2}" 2) format("a == %s, a/2 == %s", a, a/2)
CTFEで文字列を処理してmixinすればいいだけじゃないの?
>>57 これで良くね? 未テスト注意。
string myprint(string code){
return "format(\"" ~ code.replace("${", "\",").replace("}", ",\"") ~ "\")";
}
void main(){
mixin(myprint("a == ${a}, a/2 == ${a/2}"));
}
scopeの効能ってアクセス保護だけ?
いくらGCが働くと言っても80MBもメモリを使ってるのを見ると精神衛生上良くないな。 なんとかならんもんか。
>>60 どのscopeのことだい?
変数に指定するscopeストレージクラスなら、変数の書き換えを抑制し、
変数がスコープアウトするときに、変数の指すオブジェクトをdeleteする。
仕様上は。
>>61 定期的にGC走らせてやればいいんじゃないか?
GUIアプリケーションならユーザの入力がないときとか。
>>63 fullCollect();
これを使えば良いのかな?
これを処理する関数が終わったところに書いてみたけどタスクマネージャーから見てわかるような開放はしてくれなかった。
std.gcのなかで >>void minimize(); >>物理メモリの使用量を最小にします。 って言うの見つけた。試してないけど。
>>64 fullCollectの後minimizeかな。phobosのGCはこれ実装してないけど。
tangoのほうはつい数日前に実装されたっぽい。
>>62 回答どうもです。
scope の書きかたって
scope クラス インスタンス = new クラス;
で良いんですよね。
今作成中のプログラムで↑で書くと
OPTLINK (R) for Win32 Release 8.00.1
Copyright (C) Digital Mars 1989-2004 All rights reserved.
D:\Programs\ProgLang\D\dmd\bin\..\lib\phobos.lib(winsock) Offset 25A8BH RecordType 00C3
Error 1: Previous Definition Different : _htons@4
--- errorlevel 1
とリンカがエラーを吐きます。
ためしに今作ってみた↓だと問題なくコンパイル、リンクが出来たのですが。。。
import std.stdio;
void main(){
for (int i = 0; i < 5; i++){
scope win w = new win();
w.wl("test");
}
}
class win{
void wl(char[] s){
writefln(s);
}
}
>>64 fullCollect()でもminimize()でも一度増えたメモリ使用量は減ってない気がするな
これってこういうもんなの?それともバグか何か?
>>66 と思ったら実装されてないのかよ。。。
>>66 うわっ
実装されてなかったのか…
どおりで何も起こらないわけだ。
>>67 んー、それはリンカエラーだからscopeとは関係なさそうだ
WS2_32.LIBリンクするのやめてみたら。
fullCollect()は参照されてないもののデストラクタを呼ぶ minimize()は参照されてないところのメモリを開放する って感じか。でminimize()は未実装と
>>70 リンクしないとプログラム動きません。。。
class A{ this(){ writefln("A:constructer"); } ~this(){ writefln("A:destructer"); } } void main() { scope A a = new A(); a = null; } こうするとデストラクタが呼ばれないんだけどこういうもの?
>>73 それずいぶん前にもここで見た気がするんだが、まだ直ってないのか
>>73 そういうもの。スコープの最後でdestructorを呼ぶから。
>>74 コードが不正だって結論じゃなかったっけ……と思ったけど
> scope への初期化以外の代入も禁じられています。
> Rationale: これらの制限は、 もっともな理由が見つかれば将来的には緩和されるかもしれません。
なんて書いてあるな。緩和された? ……これは緩和せんでもいいような。
>>75 スコープの外れた時点で入ってるもののデストラクタを呼ぶってのはわかるんだけども、
scope A a = new A(); って感じに変数宣言と同時に代入したもののデストラクタが二度と呼ばれなくなるっぽい
scope A a;
a = new A("a");
a = new A("b");
こんな感じにわけると"b"の方のデストラクタがスコープ外れたときに呼ばれて
""
78 :
77 :2008/02/13(水) 01:05:57
途中で送ってしもうた scope A a; a = new A("a"); a = new A("b"); こんな感じにわけると"b"の方のデストラクタがスコープ外れたときに呼ばれて "a"のほうはプログラム終了時にちゃんとデストラクタが呼ばれた
>>75 a = null; を無くすと、デストラクタが呼ばれるんだが・・・。
>>76 なるほど そしたらコンパイルエラー出してくれればいいのにな
デストラクタが呼ばれないことがあるのはきついな。
どう考えてもコンパイラのバグだろ。
>>76 緩和されてなくて、scope変数の中身を変えるコードの時点で未定義動作だろね。
エラーが出ないのは前からなんだけど、scopeはfinal扱いにすりゃいいんじゃないかと思う。
…って、もしかして変数宣言のfinal属性って仕様は消滅してる?
constな伝播性のない定数的扱いで使いがありそうだったのに。
どっかで話があった、「宣言時やコンストラクタ以降でも構わない、
一度だけ代入する変数」って概念を与える属性として復活してくれりゃいいなあ。
finalはなかった事になりました。
finalは最初からなかったです
finalは生きてるよ、enumの心の中で。
え?いつの間に final なくなったの? それ2.0の話?
まじか
>>71 phobosには実装されないんでしょうか…。
なんかphobosの整備はをるたんの中で優先度最低っぽいから……
TangoがDの命名規約守ってくれればをるたんもTango任すんじゃないのかなあ
std.randomがクラスじゃなくて構造体で実装されてるのはなんで?
値型で十分だからじゃないかな
軽いからでしょ。
早いw いや、十分だし実際値型で実装できてるんだけども。 UniformDistributionとかで使うから各エンジンのインターフェースは揃えてるわけで、こういうのって継承でやるのが普通だよね? まあ軽いのかもしれないが、わざわざ値型を選択する理由になるのかなーとか思っていた。結構違うもんなのかね。サンクス。
乱数は速度が要求される事もあるし、 仮想関数の呼び出しコストを嫌ったんじゃね。
たかだか関数一つでクラス化されたら、使うのが面倒くさくなる。。。
面倒くささは一緒だろう。
構造体にインターフェースを適用させようぜ的な話があった気がするんだけど、どこで沸いた話だっけ。
カンファレンスのスライドじゃなかったか
もう関数はタプル返せるようになった?
返せないときがあったの?
104は未来人か何かか
104はあたしの所に来なさい、以上。
"Learn to Tango with D" がアマゾンから届いた。 索引は欲しかったな...
108 :
104 :2008/02/14(木) 13:07:03
Tuple!(uint,"w", uint,"h") size(); こういうことじゃなくて?なんか勘違いしてたらごめん
std.typeconsのタプルという名前の汎用構造体型じゃなくて、 template Tuple(T...){ alias T Tuple; }の方のタプルだよ。
typeconsなんてあったんだ今知ったです
tangoでGCを切って、GCコードを含めずコンパイルする方法ってどこかに載ってる?
そんなことしたらそもそもTango自体が使えなくなるんじゃないか?
>112 そういえばそうだな。 フックさせるDLLはGC切りたくて、gcstub.objリンクする方法試してみたけど上手くいかなかった。 というかそもそもgcstub.objがtango+dmdのセットに入ってなかったからphobosの方から取ってきてた。 tangoは使えなくなるんだし、別にtangoセットのdmd使う必要もないな。...試してくる。
/⌒ヽ
/ ´_ゝ`)すいません、ちょっと場所お借りしますよ・・・
| /
| /| |
// | |
U .U
D言語BOF
オープンソースカンファレンス2008 Tokyo/Spring
http://www.ospn.jp/osc2008-spring/ サイトにて参加登録が始まりました。
空きがあれば当日参加できますが、申込数に応じて部屋(の大きさ)が変わるらしいので登録お願いします。
import std.c.stdio; void main(){ printf("Hello"); } を dmd main.d -c dmd main.obj gcstb.obj ってしたら、exeが出来たんだけど、実行しても何も表示されない。
エントリポイントがないから。 extern(C) int main(int argc, char* argv) { main(); return 0; }
>>116 を追加したらちゃんと表示された。サンクス。
ってことはGCのコード外すとDプログラムの前処理や後処理のコードも消えるってことか。
Dのプログラムはどこにエントリポイントがあるのかと思ってたけど、そんなところにあったのか。
gcstubリンクすると連想配列使えないとかforeach使えないとか、 様々な悪夢が起きるからやめたほうがいいと思うよ。
>>117 エントリポイントはphobosが持ってる。
http://www.kmonos.net/alang/wnd/topics/winapi.ja.html この辺を参考にしてwin32プログラムに挑戦してるんですが、
以下のプログラムを実行すると、強制終了してしまいます。
これって何が悪いんでしょうか。
import win32.core, std.string;
extern (Windows)
int WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
format("%d", 2);
return 0;
}
コンパイラはDMD v2.010です。
できました!ありがとうございます。 自分でWinMainを書くと、phobos側でやってくれたGCの初期化処理が行われないんですね。 納得です。
自分でWinMainってなんの為に書くの? 公式だと書いてるけどわなDには「書く必要はない」ってあるし。引数が欲しいから?
>>123 あ、そこら辺俺も知りたい。
普通の言語で、エントリポイントは何をしてからmainに回ってくるのか、mainの前にいくつ経由してくるのか、
WinMain/DllMainだとどう違うとか。それで、D言語だと他のと違ってこれをする。とか。
エントリポイントあたりを解説してるサイトとかないかな。
あと自分で調べたこともちょっとメモ。間違ってたら指摘ください。
GC切ったプログラムに挑戦してる中で、DllMain()で自分で呼んでる_minit()/_moduleCdtor()/_moduleUnitTests()/_moduleDtor()が何をしてるか知りたくてソース見てきた(Phobos)んだけど、
_minit()はModuleInfoって奴をD言語形式に変換してる。おそらく_moduleCdtorとか呼ぶ準備。アセンブリでたった数行だった。
_moduleCtorはコンストラクタ実行らしい。ソース読んでも良く分からなかったけど、コンストラクタ/デストラクタ/単体テストの準備をしてたと思う。あと中でnewが使われてたから、GC切った環境でこれ呼ぶと落ちる。
残りの二つはおそらく_moduleCtorの準備したデータにアクセスしてる。_moduleDtorはデストラクタ実行。_moduleUnitTestsは単体テスト実行。他のことはしてないっぽい。
というわけで今はモジュールコンストラクタも単体テストも書かず、↑の関数一つも呼ばずにDLL作ってます。
ちょっと解説してみようか。 たとえばCのスタートアップでは、コンソールハンドル(stdinとかね)のopen、 例外機構を持つ言語ならそのセットアップ等、プログラムを実行するために必要な準備をしてから、 ユーザープログラムの開始点を呼び出す。 もちろん、後処理(開いているハンドルのcloseとかatexitの関数実行など)も含まれている。 DMDの場合、Dとしてのスタートアップの前に、DMCのスタートアップがあるのが少しややこしいところ。 DMCのスタートアップ→DMDのスタートアップ→ユーザープログラムという三段構えになっている。 DMCでは、ソース中に含まれるmain、WinMain、DllMain等を判別し、 それに応じた(DMCの)スタートアップを自動的にリンクするようになっている。 この仕組みをDMDから使用した場合、Phobosに含まれるextern(C)のmainがDMCからみたmainということになり、 そちらが呼び出されることによって、Dのスタートアップが実行されるという仕組みになっている (DMCからは、いわゆるextern(D)な関数の変名規則は未知なので、Dのソースコードのmainは、DMCからmainとして認識されない)。 ライブラリのリンク優先度は低いので、先にWinMain等が見つかると、 そちらのスタートアップが使用されるため、Phobos内のextern(C)のmainは呼び出されず、 Dのスタートアップは実行されない。 WinMain等で手動でスタートアップの関数を書かなければいけないのは、この仕組みのため。
構造体のポインタにwithしてもパラメータ呼び出せるようにならないかなー
言葉間違えすぎわらったです パラメータじゃないメンバー
>>127 *付けて with(*p) とかにすると大丈夫みたいだよ。
最近このスレ寂しいな。 ところで、Cスタイル可変個引数関数を使おうとしたんだけど、 extern(C) void foo( int a, ... ){ void* p = _argptr; } って感じで_argptrを使おうとすると、 Error: undefined identifier _argptr とエラーが出た。多分バグかと。 とりあえずC言語で可変個引数のメモリ配置とか調べてみると 単純に引数が順番に置かれてるだけだった。 だから解決策として、 void* p = cast(byte*)&a + int.sizeof; って自分で求めてこれを_argptrとして使ったら今のところ上手くいってる。これって既出? あとついでにDスタイルの可変個引数のメモリ配置も調べてみたんだけど、どうやらCスタイルと一緒っぽい。
>132 おぉーこれは…… ってかTangoってなぜあのへんてこな構文なのか誰か教えてorz
>>133 どのあたりが変?
実はphobosあまり知らずにtangoから入ったからあまり使いにくさを感じない。
結構すっきりしてて使いやすいと思う。
確かにモジュール名が大文字始まりなのは最初は変だと思ったけれども。
2.0の対応予定無いのかなあ。 モジュール名のこととか、なんかもうちょい足並みが揃って欲しい。
136 :
133 :2008/02/18(月) 09:55:02
あー、それは確かに驚いたけど、そんな書き方自分は使わないからあんまり気にならないかなw というかいつもStdout使ってる。あれ?Coutってもしかして\n使えない?
>>131 そういや仕様書のCスタイル可変個引数の例文の方でも、
Cのリンケージと言いつつextern(C)しない_argptrのコード例しか
載ってないんだよな。
2.010で再現した。バグだろね。たぶんスレでは初出。
139 :
131 :2008/02/18(月) 10:22:47
1年でそんなに変わるもんじゃないですね
ここで聞くか、win32apiのところで聞くか迷ったけどここで。 ウインドウを左クリックしたら、メニューを出すプロシージャを書いたんだけど ちゃんと”終了”というメニューが出てこない。(何か短いメニューのようなものが出る) どこが悪いんでしょう。 wndは項目がクリックされたらメッセージを送るウインドウのハンドルです。 case WM_LBUTTONDOWN: POINT nowPoint; GetCursorPos(&nowPoint); SetForegroundWindow(wnd); hMenu = CreateMenu(); AppendMenu(hMenu, MF_ENABLED | MF_STRING, 1, cast(wchar[])("終了")); TrackPopupMenuEx( hMenu, TPM_RIGHTALIGN | TPM_BOTTOMALIGN, nowPoint.x, nowPoint.y, wnd, null ); break;
143 :
デフォルトの名無しさん :2008/02/19(火) 01:19:20
cast(wchar[])じゃなくてcast(wchar*)とか?
>142 CreateMenu() じゃなくて CreatePopupMenu() じゃないでしょうか。
>>142 cast(wchar[])でも問題無いが、cast(wchar*)を使うべき。
cast(wchar[])"終了"と書くと文字列が配列として作られるから、長さ情報とかも生成される。
cast(wchar*)"終了"と書くと文字列へのポインタとして作られるだけで、配列の情報は生成されない。
"終了\0"w.ptrが一番カッコいい気がするのは俺だけ?
いや、お前だけじゃないw でも毎回そう書くのは面倒だけどな。
>>140 Phobosいろいろ修正されてるんだな
>>146 ゴルフ的な理由で俺はこう書いてる。
&*"終了"w
関連質問かもしれないんですけど、 cast(wchar*)"ほげ" って末尾にナル文字は含まれてるんですか?
そういうケースの場合自動的にNULL終端になったと思います。
D言語用のまともなDirectInputのポーティングってないんでしょうか? 調べても古いのしか出てこなくて。
real x = real.nan; assert( x == real.nan ); なぜこれが通らないんだ… @ DMD 1.026
nanとの比較は常に成り立たないんじゃなかったかな。 std.math.isnanを使うべし。
> 1は何乗しても1だが、NaN乗しても1と言えるのか (;´Д`)
>>162 wikipediaの中にあんな一文があると
どうしても声出して笑っちまうよな。
ちくしょう。油断してた。
0を何乗しても0だが、何を0乗しても1 では0を0乗したら0か、それとも1か? という話と同じ匂いがするな
166 :
デフォルトの名無しさん :2008/02/19(火) 20:45:17
Java潰しにやっきになってたときと同じ匂いがするの
>>165 3! = 6
2! = 2
1! = 1
0! = 1 ?
>>168 0! = 1 はいちおう数学的に証明できますから
証明というか定義の問題のような
0^0 0/0 どちらも未定義なの?
lim[x→+0] 0^x = 0 lim[x→0] x^0 = 1 lim[x→0] x^x = 1 あるえー?
lim[x→-0] 0^x = ?
lim[x→0] x^x って 0 じゃね?
0.00001^0.00001=0.9998848773724686...
数学板でも0^0が1か0かの論争よくやってるね。
テンソルの次は0^0かよ・・・w
>>132 ,140
なんかこういうの出てくると、いよいよ作りかけの俺製XMLライブラリを世に出しがたい雰囲気になってきた。
n=0のとき lim[x→0] n^x = ? n<0のとき lim[x→0] n^x = ?
>>131 バグじゃなくて仕様でしょ。
_argptr は _arguments から計算されるけど、extern(C) だと _arguments が渡されない。
つまり _argptr が使えない。
>>180 仕様書に_argptrが使えるって書いてあるから、
「バグじゃねえの」って話になってるんでしょ。
まあ、普通にstd.c.stdarg使うえばいいんだろうけどね。
>>182 tangoだとstdargがまだ未実装みたいだった。
Phobosも使い方が良く分からない。
Cでも可変個引数は使ったことなかったから知らないんだけど、とりあえずCの解説サイトに載ってるように書いても使えなかった。
184 :
183 :2008/02/19(火) 22:38:02
すまん、 >tangoだとstdargがまだ未実装みたいだった。 の行は無視してくれ。多分全然関係ないところで勘違いしてる。
クロスプラットフォームなGUIを使いたいんだけど、wxDがいいのかな? でももう更新されてないみたいだし、D->wxD->wxC->wxWidgetって中継が多いけど、実行速度は大丈夫なのかとか気にしてるんだが。
Version D 2.011 Feb 18, 2008 New/Changed Features * std.typecons: fixed code bloat issue; added Tuple.toString; added function tuple(); fixed unlisted bug in enumValuesImpl. * std.process: added function shell(). * std.math: minor change in approxEqual. * std.contracts: added functions pointsTo() * std.numeric: minor unittest fixes. * std.bitmanip: fixed code bloat issue, reintroduced FloatRep and DoubleRep. * std.conv: minor simplification of implementation. * std.regexp: added reference to ECMA standard in the documentation. * std.getopt: changed return type from bool to void, error is signaled by use of exceptions. * std.functional: added unaryFun, binaryFun, adjoin. * std.string: updated documentation, changed code to compile with warnings enabled. * std.traits: changed FieldTypeTuple; added RepresentationType Tuple, hasAliasing; fixed bug 1826; added call to flush() from within write; fixed unlisted bug in lines(). * std.algorithm: added map, reduce, filter, inPlace, move, swap, overwriteAdjacent, find, findRange, findBoyerMoore, findAdjacent, findAmong, findAmongSorted, canFind, canFindAmong, canFindAmongSorted, count, equal, overlap, min, max, mismatch, EditOp, none, substitute, insert, remove, levenshteinDistance, levenshteinDistanceAndPath, copy, copyIf, iterSwap, swapRanges, reverse, rotate, SwapStrategy, Unstable, Semistable, Stable, eliminate, partition, nthElement, sort, schwartzSort, partialSort, isSorted, makeIndex, schwartzMakeIndex, lowerBound, upperBound, equalRange, canFindSorted. * std.thread: fixed so it compiles with warnings enabled. * std.file: made getSize() faster under Linux. * std.random: fixed so it compiles with warnings enabled; improved function uniform so it deduces type generated from its arguments. * std.format: added fixes to make formatting work with const data. * std.path: minor documentation changes.
# Added std.xml # Added std.complex # Added std.iterator # Added std.c.linux.tipc # Added std.c.linux.termios # Added nothrow keyword # Re-enabled auto interfaces. # Now allow static arrays to be lvalues. # Now allows implicit casting of null to/from const/invariant. # Now allows implicit casting of StructLiterals if each of its arguments can be implicitly cast. # Now allows implicit casting of structs to/from const/invariant if each of its fields can be. # Added pragma startaddress. # .tupleof can now access private fields of a struct/class
Bugs Fixed * Fixed D/66406 Remaining const niggles #1 - Custom POD types * Fixed display of ddoc template parameters that were aliased * Fixed bug in std.file.readln() for Windows in translated mode * Bugzilla 1072: CTFE: crash on for loop with blank increment * Bugzilla 1435: DDoc: Don't apply DDOC_PSYMBOL everywhere * Bugzilla 1815: foreach with interval does not increment pointers correctly * Bugzilla 1825: local instantiation and function nesting * Bugzilla 1837: Make dmd stop flooding the console: prints content of passed parameter file * Bugzilla 1842: Useless linker command line output during compilation on Linux
Version D 1.027 Feb 18, 2008 New/Changed Features * Re-enabled auto interfaces. Bugs Fixed * Fixed display of ddoc template parameters that were aliased * Bugzilla 1072: CTFE: crash on for loop with blank increment * Bugzilla 1435: DDoc: Don't apply DDOC_PSYMBOL everywhere * Bugzilla 1815: foreach with interval does not increment pointers correctly * Bugzilla 1825: local instantiation and function nesting * Bugzilla 1837: Make dmd stop flooding the console: prints content of passed parameter file * Bugzilla 1842: Useless linker command line output during compilation on Linux
作者はりきってるな
ちょ、すごい量だなw
193 :
デフォルトの名無しさん :2008/02/20(水) 06:28:32
MSがD言語作り始めたから対抗してるんだな
ライブラリ強化期間? tangoの立ち位置がよくわからなくなってき……
assert( x == x );こうすればisnanできるんじゃね?
同時に使用できないなんてことはさっさとやめて TangoはC++に対するboostのような道を模索した方がいいと思う
D言語ってC言語出来るんならすぐ使えるの?
文法はちょっと違うけど、Cの標準関数もそのまま使えるから簡単。
ver1で本家dmd、phobosを使っています。 "windows.h for D"を使いたいのですがエラーが出てワケワカランです。 パスの通ってるとこにライブラリなどを配置して private import win32.ansi.windows; こんな感じでインポートして >dmd hoge.d win32a.lib こんな感じでコンパイルすると (ry)\winbase.d(50): Error: identifier 'HANDLE' is not defined (ry)\winbase.d(50): Error: HANDLE is used as a type (ry)\winbase.d(50): variable win32.winbase.INVALID_HANDLE_VALUE voids have no value (ry)\winbase.d(62): Error: identifier 'STATUS_WAIT_0' is not defined こんなのがずらずらと出ます。 なにかが足りないのでしょうか? PlatformSDKをDに対応するように変換してどうのこうのという作業をしていないのですが、 それが原因でしょうか?win32a.libでは足りない?まさかHANDLEを定義しろと?
あと
>>200 の使っても今はコンパイラがエラー吐いて止まるはず
過去ログに話出ていて原因は定義順だったと思う
ちなみに解決済みのバージョンがどこかで公開された様子はない
>>185 クロスプラットフォームのGUIライブラリって今あるのかねえ
今はDFLをGTKベースに書き直しているはずだからそのうちこれが使えるかもしれないけど
速度は実測しかない
203 :
199 :2008/02/20(水) 12:10:02
>>200 入れたらすんなり通りました。
ありがとうございます(・∀・)
>>201 いまんとこエラー吐いてないです。
と言ってもショボイAPIしか呼んでませんけど・・・
>>202 dwtの新しいのってどうなんだろ。Tango前提なので試せてないんだけど
>>194 強化期間というより、dsourceで検証まで終わった新コードをまとめて承認したという感じじゃないのかな
しかしxml読みにこのスレでの頂き物を活用してた俺涙目
でも骨子は同じだからstd.xmlに切り替えてみる
omegaの方ありがとうございました
3/1のBoF、時間が前に延びて10:15開始になってるね。
ws2_32.libの中にはWSAAsyncSelectがちゃんとあるんだけど、 WSAAsyncSelectを使おうとすると未定義のシンボルって言うリンクエラーがでる。 何ででしょう。
std.xmlて入力がInputStreamじゃなくてstringなんだな。 でっかいXMLファイルもとにかく一度全部読み込む必要があるのか……
>>210 それはきちぃ・・
けど、使いどころはあるけどね
>>210 配列のように扱えるStreamがあればちょっと改造して使えるんじゃない?
BoFで 「Walterだけど何か質問ある?」 というネタをやるとしたら何か質問ある?
const 関連の仕様に迷いはありませんか?
標準ライブラリを tango に頑張ってもらう気は?
もうかりまっか?
マイクロソフトさんになにかひとこと
>>217 どう訳せと?
「Dの開発は収入になりますか」とかそんなん?
「CD売れてますか?」とおもったけどこれDじゃなくてC++だな
よく見たらTシャツとマグカップ売ってた
火星柄の時計もなかなか
文字列の扱いをもう少し国際化するつもりはありませんか?とか。 折角の機会だから、「ヲルタンに好き勝手要望・提案を伝えてもらえるコーナー」 なんてあったらすげー行きたくなるなぁ、と思いつつも 自分じゃ何も貢献出来なさそうなのであった。
ICU並のUnicode処理を標準ライブラリに入れろってのも無理な話しだしなあ
>>210 SAX 風のイベントモデルで DOM 風に一括読み込み必須というのはアレだな
この段階ではあんまり気にすることもないと思うけど
>>213 あれそれ何かなかったっけーと思ったら std.stream.TArrayStream は逆か
データを受け取るときは全てStreamで受け取るべきだ!
しかしinvariant stringで受け取るとpureにできたり(予想)速度的な利点がありそうなかんじ。 うまくラップするのが賢そうだな
ICU使ったことないけど、あれってコア部分だけ組み込んで、 各エンコーダやユーティリティは別途入れるとかの使いかたはできへん?
>>227 ICUは糞でかいから普通はDLLにして動的リンクする。
dmd 2.011で,配列 arr の中から条件に合致する要素だけを 画面に表示するにはどうしたらよいのだろう auto arr = [1,2,3,4,5]; assert(find!("a > 3")(arr) == begin(arr) + 3);//このfindは最初に見つかった要素しか返さない foreach (i; /*findの結果を配列で返す方法があるとか?*/) { writefln(i); }
foreach(i; arr.filter!(q{ a > 3 })) { writefln(i); }
なるほどfilterを使うのかthx
標準ライブラリが文字列mixinを大々的に使い始めたんだな。怖い怖い
うひょー
234 :
デフォルトの名無しさん :2008/02/21(木) 07:15:36
D言語関係無いけど、インデントするときタブとスペースどっち使ってる? やっぱスペース4個にするのがベターだろうか。
アンチスペースインデント、タブインデント信者の俺に対する挑戦だな。
タブインデント信者だが、たまにスペースインデントを使いたくなる しかし俺の伝説のIDEは行頭から連続したスペースは4文字ごとにタブに自動変換される仕様 スペースインデント派とのソース交換でもにゃる
>>236 お前とソースを交換するスペースインデント派にはいい迷惑だな。
バージョン管理も狂うし。ダメダメじゃん、お前の伝説のIDE wwww
>>234 本当に文頭のタブ桁ごとのインデントしか行わないならタブもありかもしれないけど、
大抵関数引数の整列とかでもインデント使ってて、それゆえにスペースが
混入してたりするから、結局そいつのタブ間隔以外では表示が崩れるんだよね。
>>238 タブ派だがスペース混入とかしないぞ。
混在されるとタブストップによって表示が崩れるのが嫌ってのは同意。
インデントは全部スペースか全部タブかにしてほしい。
Phobosは基本スペースだけどもたまにタブ混じってるな。
phobosはtab幅が8なのが気に食わない
>482-483 タブ幅とインデント幅は別物なので注意な。 Windowsしか知らない連中はそこの区別が付いてないことが多いけど。 タブ幅は8で固定。WindowsのDOS窓とかもそうなってる。 インデントは主義によって4とか8とか2とか色々ある。
ソースはソニー?
245 :
デフォルトの名無しさん :2008/02/21(木) 13:07:31
ここを読む人はLinux使える人のが多いんじゃないか?
コーディングスタイル論争で、 「タブ幅は伝統的に8だから、8以外は間違ってる」 とか言い張る子が必ずいるよね(´・ω・`)
いまどきタブ幅変えられないエディタなんかないだろ…
248 :
デフォルトの名無しさん :2008/02/21(木) 13:12:41
つnotepad.exe ・・・そんな目で見るなって。
パッチ作るときとか面倒だからタブ幅は1でお願いします。
>247 でも、ソースコードを扱うのはエディタだけじゃないからね 端末ソフトとかプリンタとかあるし
いずれにしてもインデントにタブを使うなら、 インデント幅ははタブ幅の整数倍にしてくれないと困る。
インデント幅だかタブ幅の単発スレがム板かマ板にあった気がするけど、
とっくに落ちたのか、コーディング規約スレの方に統一されたのか…
>>239 そういえば、スペース混入が無くても、行頭以外でタブ使ってて
幅によって整列が崩れることもよくあるんだよね。行末コメントの整列とか。
結局、スペースによる桁揃えの併用か、簡素なインデント以外の
桁揃え整形を諦めるか、って方向になっちゃうんだよな。
「インデントの幅」というコーディングスタイルの好みの違いたった一つを
緩和するためだけに他の整形を放棄するのは、可読性の点で
コーディングスタイルとして合理的なじゃない気がする。
完結してる環境で規約として採用するにしてもナシじゃない?
void func() body { } か int func() body { } みんなはどうしてる?
俺は後者だな。 前使ってたエディタが前者だとアウトラインを生成できなかったから。
255 :
デフォルトの名無しさん :2008/02/21(木) 14:57:24
void func() body { } でいいじゃん
後者だ
後者だね、インデントはほしい。
どっちにしろなんかインデント汚くなるし in 使わないで最初に assert() 入れればよくね? out 使わないでscope(exit) assert() 入れればよくね? って思うのは俺だけかな…
>>224 昔書いたソース漁ってたらそれっぽいのあった。D1.0だけど
class StreamAsArray(T) : FilterStream {
this(Stream source){ super(source); }
size_t length(){ return super.size; }
T opIndex(size_t index){
T ret;
super.position(cast(ulong)index); super.read(ret);
return ret;
}
void opIndexAssign(T value, size_t index){
super.position(cast(ulong)index); super.write(value);
}
T[] opSlice(){
T[] ret;
ret.length = super.size;
super.position(0UL); super.readBlock(&(ret[0]), super.size);
return ret;
}
T[] opSlice(size_t x, size_t y){
T[] ret;
ret.length = y-x;
super.position(cast(ulong)x); super.readBlock(&(ret[0]), cast(uint)y-x);
return ret;
}
void opSliceAssign(T v, size_t x, size_t y){
super.position(cast(ulong)x);
for( size_t i = 0 ; i < y-x ; i++ ) super.write(v);
}
void opSliceAssign(T[] v, size_t x, size_t y){
super.position(cast(ulong)x); super.writeBlock(&(v[0]), cast(uint)y-x);
}
}
むしろせっかく契約を実装と分けられるのに、それを生かしきれてない気がする。 関数の使い方を表すドキュメントの一部なんだから、ddocにくらい出すべきだと思う。 ドキュメントに自動変換しようと思えば、いろいろ進化の方向が見えてくるんじゃないかと。 俺は前者派。body, in, outだけに1段階字下げを使うのが、なんか割りに合わない気がしてなー。
>>247 ソースコードを見るのはテキストエディタだけだと思ってるのか?
ターミナルや、ブラウザの<pre>タグ内のタブ幅は弄れないことが多いし、弄れたとしてもいちいち設定を変えるのが面倒。
スペースインデントなら、タブ幅の違う環境に持っていっても問題がおきない。
逆に、プログラマがインデント一段文のスペースをまとめて処理できないテキストエディタなんて
使わないんだから、ハードタブ使う必要が全く無い。
double pi=3.14159265358979823846; if((fp=fopen("PI.bin","wb"))==NULL) printf("\aファイルをオープンできません。\n"); else{ fwrite(π,sizeof(double),1,fp); fclose(fp); } C言語で↑のようにpiをバイナリファイルに書き込んで、 BZというバイナリエディタで開いたのですが”$-DT・ @”(文字部)と表示されました。 その後にfread関数でPI.binの内容をプログラム上で出力すると3.1415926……とさきほどの数字に限りなく近い数字できちんと表示されたのですが バイナリエディタで見ると変な文字に変わってしまうのは、何が原因なのでしょうか?これをバイナリファイルとして正しく見れる方法はあるのでしょうか。
ここはD言語のスレなんだが、IEEE 754とかでぐぐっとけ
>>261 コンテクスト的にそういう話じゃないだろ。
265 :
デフォルトの名無しさん :2008/02/21(木) 20:22:20
>>262 D全く関係無いなw
ファイルの読み書きは出来るのに、文字列と数値の違いを理解してないってのは珍しいな。
それにパイを読み書きする必要があるって、学生か?
PC内で文字がどのように表現されているか、調べるべし。
>>261 >247は>243の「タブ幅は8で固定」ってのに対するレスだと思うよ。
「お前はどんだけ限定された環境に棲んでるんだ」っていう感じの。
>>253 switch文のcaseに倣って前者だなあ。後者は意味のないインデントだし。
(ただ、>254みたいな場合には話は違うけど。)
>>258 一箇所にしか出現しない処理を、関数に分離するか直で書いちゃうか、って話と同じじゃね?
つまり両論あると。IDEでリアルタイムにドキュメント生成するくらいやってくれれば
その辺の処理分離もコード上の意思表示を超えた有用性を発揮するだろうけど…
というかリアルタイムにドキュメント生成して、しかも整形の仕方をHTMLの手書き
レベルでカスタマイズできたりしたら、本当に楽しいだろうなあ……
ソースがXMLになると想像しただけで御免蒙りたい
前も書いたけど、契約ってのは宣言や定義に密着してるべきだと思うんだよね。 bool nonNull(T)(T that) { return that !is null; } bool lessThan(T)(T that, T x) { return that < x; } Class get(Class[] items @nonNull, size_t index @lessThan(items.length)) @nonNull { return items[index]; } これが、 Class get(Class[] items, size_t index) in { assert(items !is null); assert(index < items.length); } out(o) { assert(o !is null); } body { return items[index]; }
それで制約関数に /// nullでない /// $(var x) より小さい とかコメントとつけとくと、IDEがこんな感じで表示してくれるの。 Class get(Class[] items, size_t index) items: 〜 制約: nullでない index: 〜 制約: items.length より小さい 戻り値: 〜 制約: nullでない
なんかMicrosoftがD言語作るんだって
271 :
デフォルトの名無しさん :2008/02/21(木) 20:58:48
>>270 もうそれは既に何度も書き込まれた情報。
これ、塗るでない
では煮るぞ
>>267 現状と比べて、ソースがXMLになるという意味が分からんね。
ソースやコメント記法自体は変わらんわけだし、そこからの
ドキュメント生成ってのもなにか目新しい話じゃないし…?
>>268 indexとitemsの間に成り立つ条件のはずが
indexの条件になっちゃってることに違和感が
void nonNull(T)(T o){ assert(o is null); } /// Contract: $(B $0) は null でない
Class get(Class[] items, size_t index)
in(items) : nonNull
in(index, items){
assert(index < items.length);
} /// Contract: $(B $0) は $(B $1).length より小さい
out(o) : nonNull
out(items){ ...itemsに関わる条件... } /// ...Contractセクション...
body{ return items[index]; }
とかそんな感じの方が好みだなあ。
>>268-269 ドキュメンテーションコメントに結びつけたほうが見やすくない?
特定のセクションをコンパイラが展開してくれるとかで。ついでにBehaviorとか追加してみたり。
/**
* Params:
* items =
* 取得するClassオブジェクトのリスト。
* Contracts: nonNull
* index =
* Contracts: lessThan(items.length)
* Returns:
* Contracts: nonNull
* Behavior: 基本的な動作サンプル
* Class[] items = [new Class("alice"), new Class("bob")];
* assert(get(items, 1).name == "bob");
*/
Class get(Class[] items, size_t index){ return items[index]; }
あとIDEのエディタでコードを表示するとき、ドキュメンテーションコメントの部分は
その場でフォーマットされて表示されても良くね?と思った。こんな風に。
----------------------------------------------
| Class get(Class[] items, size_t index)
| items: 〜
| 制約: nullでない
| (略) |編集|
----------------------------------------------
Class get(Class[] items, size_t index){ return items[index]; }
編集ボタン押すとソース表示に切り替わるの。
コメントが実行されるってのは違和感ありまくり
interfaceとかabstractのメソッドに契約付けることって、ひょっとして出来ない?
ドキュメント化コメントってのは自然言語な説明を書く部分だと思ってるからなんか違う気がする。 動作そのものを左右する契約はコード本体に書いてあるべきだよ。
>>278 仕様では、bodyを持たない関数には契約つけれない。
抽象関数でもbodyがあれば契約はかける。
そんな契約、Mayerが見たら悶絶しちまうなwww
さっきちょっと複雑なmixin組んできたけど、コンパイル時実行可能ってのは難しいな。 なんかもうmixinの制限ありで書くより、自動生成プログラム一つ組んで走らせた方が早いんじゃないかと思えてきた。 動的配列作れないとか、添え字に変数使えないとかが厳しい。
>277, >279 Pythonの標準ライブラリにはユニットテスト用モジュールがいくつかあるんだが、 その中のdoctestという奴では、テスト内容をコメント部分に書くようになってる。 簡単なテストを書きたい場面ではよく使われてるよ。ご参考まで。 でもまあDではin/out/bodyとか用意されてるから、 そっちを素直に使う方がいいとは思うね。
>>272 if( this !is null ) {}
変数の型を調べるにはどうすれば良いんでしょうか。
typeofとかis式とか
可変個引数関数で受け取った引数をそのまま別の可変個引数関数に渡すってできない?
可変長タプルつかうのじゃあかんの。 それか、_argptrと_argumentsを引数に取るオーバーロードを用意するか。
asmでスタックコピーする
>>290 asmまでいかなくても出来るんじゃないか?メモリ確保して、コピーするだけだし。
シングルスレッドで再帰なしなら何とかなりそうだが、 再帰やマルチスレッドだと死亡しそうだな。 メモリ確保するにしても、その確保したアドレスを保持するポインタが必要だし。 静的な領域に複数のポインタの置き場所を作って 何とかやりくりすればましにはなるだろうが。
あーそうか、_argptrは簡単にごまかせるが、_argmentsは難しいな。 Cの可変個引数関数の事考えてた。
その関数の中で何もしていなければ、 jmp するだけでおk。 asm なら。
>>298 タプルって可変個引数関数にそのまま渡せるんだな。知らんかった。
テンプレートってすごいけど、使いこなせない。
D言語始めようと思うんですが何から始めればいいんでしょうか。 一応ヨガ教室には一とおり通いました。
あとは腹筋200回とスクワット500回と走り込み50m20回をそれぞれ3セットずつ1ヶ月続けて基礎体力を身につけないと。
とりあえずブリンカーを何処かで調達してきて 話はそれからだ
ビリーズブートキャンプおすすめ
D言語本格的に使ってるやつって日本に10人もいなそうだな
本格的って言葉の定義が微妙だな。 学生で趣味のプログラミングでDに惚れ込んだ俺はどうなるw
ノーカウント
orz
趣味が高じて卒業論文にD言語コード載せちゃいましたって俺は?
卒論のtoy program程度じゃ ノーカウント
BOFで発言する方々で10人にはなるのではなかろうか
D言語 孤高の10人
今の時期Dを"本格的に"使うのって心中と近い意味になりそうで怖くないか。 ホビープログラマが遊びつつ、バグや要望を出していく段階だと思うが。
>>310 少なくとも客を納得させるのは難しいな。
Dで作ったプログラムを納品したあの人は10人のうちに入るわけだ
ところでふと思ったんだが、 foreach(i; 0 .. 100) { switch(i) { case 42: break foreach; // !!! default: writeln(i); } } とか書けたら便利じゃね。
構造変わった時にヤバいかもしれない。 例えば foreach の2重ループの中にそう書いてあって、 中の foreach を for に変更したくなった時とか。 現状のラベル付きの方がいいんじゃないかな。
そうか。確かに。バグを誘発しやすいかも知れない
たしかVBってその書き方できたよね。 昔はFORとNEXTの対応があってなくてもよかったBASIC処理系あってカオスだったけど。
>>316 つーか、大抵の処理系ではNEXTの変数は省略可だったような。
>>313 Javaかなんかで多段breakできなかったっけ。
>>316 学生時代につかってたポケコンがそんな感じで、
if i>0 than for j=0 to 100
-hogehoge-
if i<0 than next
てな感じで、C系ではできないforの宣言ができたりしてた。next を最初に見つけるととまるんだよなぁ。
なつかしい。
>>317 いや
>>316 が言ってるのは
for i = 0 to 10
if hoge then next
next
とか書けたという意味かと
gosubで呼ばれた先にnextがあったらどこに戻るんだろうか
>>310 asm C C++とどっぷりつかってた。
んで、D言語であそんでたくちだが、C#がすんなり使えた。
D言語しかつかわないようにするわけでは無い。
「現代的な言語」(プログラミング言語Dより引用)にふれることは
そう無駄じゃないと思う。
>>323 Dを本格的に使う、という話からだいぶ横滑りしてるかと。
というか、それは最初からC#とか使ったほうがいいんじゃね?
向こうのが開発環境も充実してるし、現代的な言語に触れるって目的なら各種スクリプトも手軽……
……なんか悲しくなってきた。でもDが好きだよ、俺。
>>324 > ……なんか悲しくなってきた。でもDが好きだよ、俺。
好きならイイジャマイカ
Dの設計思想に触れる事によって、どういった機能が他の言語に欠けてるか、あれば便利か、要らないかといったことも知ることが出来るわけで。 まあ他にもインスピレーションを得るために、変わった環境に触れていくのは悪いことではないかと。 今のところDってそういう位置付けでもいいと思う。言語の成長とともに使う側も成長していける言語みたいな。
でもほかの言語と比べてもメリットいっぱいあるとおもうけど…… C#(.net系全部)はネイティブはけないし、Javaは遅いし、C++は汚いし…… 趣味にはぴったりジャマイカ。コードと仕様が美しいし(C++と比べて) まぁぶっちゃけC#が高速で起動するネィティブ吐き出したら勝てないと思うが。
>ネイティブ つngen
でもngenって各ユーザが実行しないといけないやつだよね。たしか。 開発者側でネイティブ吐きたいよな。
>>328 C#で作ったソフトの起動が遅すぎるんだが俺の何かがまずいのか?
ngen使っても起動時間は長いんだが
Dで作ったソフトは軽快だから好きだ!
D言語で積み木シューティングってゲーム作ってるやついたよな あれくらい使いこなせてるんなら本格的っていえるか
でもDは基本ゴッタ煮だから言語設計の勉強には向かないと思われ
>>328 ngen使っても遅いのがちょっと速くなるくらいであまり変わらんよ。
ABA始まったな
次はまさしくんハイ!だな まあ冗談だがWiiの操作性には割とマッチすると思わなくもない
関数の中のswitch文の中でreturnを使った場合はその後にbreakはいらないよね?
プログラムの動作上はなくても問題ない。 保守・改変まで考慮する場合(それがよい習慣か否かとか)は話が別だけど。
ふと思った 関数にデストラクタ機能欲しくね? quitでユーザー定義なデストラクタへ抜けてreturnでdefaultなデストラクタへ処理を渡す。
デストラクタ作るなら return したら常に呼ばれるべきだと思うが。
goto と同じ問題が発生するな。 変数の初期化を飛び越える事ができない。 解決するにはコンストラクタと称して デストラクタで使用可能な変数を宣言する場所が必要になるな。
scopeじゃいかんの?
scope(exit) か。
>>339 撒き戻しとか後片付けならスコープガードや例外を使えばいいと思うよ。
>328 ngen使っても完全なネイティブじゃないでしょ。それに.net frameworkで動くからやっぱり遅い(初期起動が特に) 趣味で作る小さなプログラム起動するのに時間かかってたら腹が立つ。Office大きいものならば許せるが。その点Dは高速だし好きだ。IDEさえ何とかなれば……orz
例外ってロジック的になんか美しくないじゃん
普通にtry{} finally{}で何の問題があるんだろう…
処理のフローが、各関数の呼び出し関係から暗黙に決まる、 ってのが美しくないところだと思う。 関数を合成して処理を作ること、処理を連結してフローを作ること、 これはそれぞれ別のまとまりとして定義されないと、処理フローが ぐちゃぐちゃになると思うよ。
tryはDだとWinMain内部でしか使ったことが無いや。
>>310 俺もそう思ってたけどBOFのBillさんとか本気でつかってるぽい
まあ研究職だからできるのかもしれんが
>>222 伝えるだけなら
ココで出たバグ報告をnewsにポストする人と手間はかわらん
しかしその後の議論についていきつつ説得するのは正直めんどい
あと
>>214 はあまり集まらないので没りそう
scope 関連は記述もわかりやすくなるし、 try ~ finally と違ってネストが深くならないしでかなり好きだ
たった一段のネストがそんなに気になるのかなあ?
印刷することを前提に、80桁以上にならないように注意すると 途端に一段のネストが憎たらしくなるよ。
ネストが深くなりすぎるプログラムはダメなプログラム。
finallyとかscopeは、ドキュメントいわく 「実行される箇所ではなくそれが概念的に属する場所に配置されている」 というのがいい点だが、概念的にスコープに属している実行保障を わざわざtryブロックに付け替えるのは分かりにくくなる原因だよなと思う。
デバッグ用じゃないin、out、bodyみたいなのがあればいい感じ?
そろそろCLOSからbefore/afterをパクるのもいいな
void hoge() in { } out { } before { } after { } body { } 上から読むとなかなかbodyにたどり着けないな
361みたいにするのは358な理由で分かりにくくなるだけじゃね?
>>354 自分は基本的にタブ8でインデント + 80桁でコーディングしてるのですごく気になる。
あと、
step1();
scope (failure) step1_end();
/* なんか処理 */
step2();
scope (exit) step2_end();
こんな感じのを try~finally で書くと鬱にならないか?
364 :
363 :2008/02/25(月) 16:43:40
>>363 それ、いわゆるtry…catch…finallyなパターンじゃない?
DMDがコンパイル中にエラーで落ちるのは良くあること?
なんのエラーだ
内部エラー
>>363 これと等価かな
try {
step1();
step2();
} catch {
step1_end();
} finally {
step2_end();
}
371 :
363 :2008/02/25(月) 21:55:24
また書き間違いだ…… なんでこんなミスを step1(); scope (exit) step1_end(); /* なんか処理 */ step2(); scope (exit) step2_end();
面倒なのはfailureやexitがたくさんあるときだよね、きっと。 例外が発生した位置によってやるべきことが変わるから。 各段階にあわせた例外処理をするために別々のtry文を用意するか、 深くネストしたtry文で…って感じになるんじゃないかと。
>>371 try-finallyがネストするのがそんなに嫌か?
巻き戻す環境が違うんだから、ネストして当然だと思うが。
むしろ
>>371 のほうが妙な制御依存が発生して嫌だ。
tab8で80桁て普通だよな。 マジでプログラムの質が悪いからネストした時辛くなるんだろ。
TAB8でもインデントは4だってさ
それでも
>>371 みたいな書き方を推奨してるわけじゃないよね。
その辺の話は本家にあるよね。
http://www.kmonos.net/alang/d/2.0/exception-safe.html >>373 > try-finally による方法は、 概念的に関連している値のセットと復元コードが、
> 間に関係のないコードが挟まることでいくらでも離されてしまう危険性を含んでいます。
>>374 > try-finally による解決は、 リソースの初期化コードと巻き戻し処理のコードが分離して記述され、
> 実際ソースコード上で視覚的に大きく離れてしまします。
> しかし、密接に関連した処理は一カ所にまとまっているべきです。
>>377 > scope文だけでは例外のcatchはできませんから、try-catch も必要です。
> try-finally は、scope文によって冗長な構文となったと言えます。
配列の要素の任意の組合せでイテレイトしたいのですがどうかけばいいでしょう ary = [1,2,3,4] から二個含んだ組合せなら foreach(e; combination(ary, 2)) { e; // [1,2],[1,3],[1,4],[2,3],... } こんな感じの処理にしたい. 参考にRubyで書くと def each_combination(ary, k) if k == 0 yield [] return elsif k == ary.size yield self return end duped_ary = ary.dup x = duped_ary.shift each_combination(duped_ary, k-1){|y| yield [x]+y } each_combination(duped_ary, k){|y| yield y } end each_combination(ary, 2){|x| p x } 御存知でしたら教えて下さい
直訳した int delegate(int delegate(ref T[])) each_combination(T)(T[] ary, int k) { return (int delegate(ref T[]) yield){ if( k==0 ) { T[] empty = []; if(int r = yield( empty )) return r; } else if( k==ary.length ) { if(int r = yield( ary )) return r; } else { T x = ary[0]; foreach(y; each_combination(ary[1..$], k-1)) { T[] plus=x~y; if(int r=yield(plus)) return r; } foreach(y; each_combination(ary[1..$], k)) { if(int r=yield(y)) return r; } } return 0; }; }
>>374 いつの時代の人間だよ。
こういうこと言う奴って ts とか hmi とか訳分からん略した変数名使ってんだよな。
そっちのほうが最悪だっつーの。
2chにコードとか投稿すると著作権持っていかれるんだよなあ…
実質「公知のもの」になって委譲されるわけではないと思われ。 独占権は当然なくなるが。
>>384 著作権は「創作性」なるものがないと認められないんだが、
Dスレで張られてる程度のサンプルないし言語仕様の検証コードなら、
創作性なしと判断されるのが通例と思われ。
委譲できる分だけ全部委譲させられるから問題なんだけど。 > 無償で非独占的に複製、公衆送信、 頒布及び翻訳する権利を投稿者に許諾します。 > また、投稿者は掲示板運営者が指定する第三者に対して、一切の権利(第三者に > 対して再許諾する権利を含みます)を許諾しないことを承諾します。 あたりのせいで、ここでコードを聞いて流用するとなると適用できない ライセンスが結構出てくる。 20行を越えるようなコードでも創作性はないってのが通例だってのは初めて聞いた。 そうなると、それよりはるかに大きい著作物の20行の断片だけを流用する場合でも、 その断片はもはや創作物として原形をとどめてないないんだな。
try{ Database database = MySQLDatabase.connection(); try{ Query query = database.compileQuery("select * from books"); try{ Result result = query.execute(); foreach(Row row; result){ ... } } finally { query.close(); } }finally{ result.close(); } }finally{ database.close(); } これがscope(exit)ですっきり上から下に書けるから嬉しい。 最初にnullで初期化してclose()前にnullチェックすればtry-finallyは1段階で済むけど、 出来れば変数は宣言と同時に初期化して、再代入したくない。 まぁデストラクタ使えばscope statementすら不要だけど。
あ、やべ。コードが全然違った……。 Database database = MySQLDatabase.connection(); try{ Query query = database.compileQuery("select * from books"); try{ Result result = query.execute(); try{ foreach(Row row; result){ ... } } finally { result.close(); } }finally{ query.close(); } }finally{ database.close(); }
>>386 このスレで張られるサンプルって、ほとんどが機能的なものではなく「言語仕様の検証」であって、
言語仕様からほとんど一意に決まるものだから検証サンプルそのものには創作性は認められないのではないかと。
何らかの機能性を有していれば3行のコードでも創作性が認められるとは思うけどね。
>>390 いずれにしても裁判所がそう認めない限りはわからないんだよね。
不確実なことを避ける考え方にも一理ある。
こういう話は嫌いじゃないけど、どうせ結論出せないんだし
気にする人だけ気にしてればいいんじゃね。
>>390 気にする人だけ気にすればいいというのは同意かな。
多少気になったので裁判例を調べてみた。
ア プログラムの著作物性
プログラムは,その性質上,表現する記号が制約され,言語体系が厳格
であるため,計算式をプログラム言語で記述したような場合にはプログラムにおけ
る記述が相互に類似することがあり得る。仮に,簡単な内容とごく短い表記法によ
って記述したプログラムをも,著作権法上の保護対象とすると,コンピュータの広
範な利用を妨げ,経済活動や研究活動に多大な支障を来すことになる。また,著作
権法は,プログラムの具体的表現を保護するものであって,機能やアイディア,あ
るいは科学的な計算式やその採用を保護するものではない。当該プログラムがある
目的における公知の計算式の採用を保護対象とすることになると,結果的には計算
式そのものを独占させることとなるからである。
したがって,コンピュータに対する指令の組合せであるプログラムの具
体的表現がこのような記述からなる場合は,作成者の個性が発揮されていないもの
として創作性が否定されるべきである。
http://www.courts.go.jp/hanrei/pdf/683C8598E4E61EC4492570DF001C9775.pdf 図表又は図表の使用例に示される思想ないし
アイデアそのものは,著作権法によって保護されるものではない。また,このよう
な図表又は図表の使用例は,次に述べるとおり,かかる思想ないしアイデアを表現
する際にその個性が表れず,定型的な一般的にありふれた表現としかならないよう
な場合には,著作権法によって保護し得る表現上の創作性があるということはでき
ない。
http://www.courts.go.jp/hanrei/pdf/A04C1CFADEB110E7492570BD001A9BE1.pdf
コーディングスタイルやらインデントの話は不毛すぎる
>>371 だと、コードのどの部分でどんなハンドラが付いてるかが制御依存しちゃうんだよな。
そもそもデストラクタ使えよって話だ。
>>396 どういう意味なのか、アホな俺にもう少し噛み砕いて説明してくれまいか。
>>389 だと、openなどに対応するcloseがえらく離れちゃうし、
connection, compileQuery, executeという「本筋」の実行パスが分かりづらくて、
可読性の面で問題があるとおもうのだけど。
こう、gotoを忌避するあまり、関数呼び出しの度にif(!error){ ... が重なっていくCのコードみたいに。
>>396 そりゃあ、どんな処理をしたかによって後始末の処理を予約・保証したいんだから、
処理によって動的に定まるのが自然じゃね?
switch(x){
case 1:
f1(); scope(exit) _f1();
break;
case 2:
f2(); scope(exit) _f2();
break;
default:
f0(); scope(exit) _f0();
}
とかtry-finallyだとどうなるんだろう。
結果的に静的に定まる場合なら、静的に定めるtry-finallyなコードに直訳できるけど、
こういう場合はよく分からん。フローの状態を記録する変数とか用意したりするのが
セオリーなんだろうか。でもそれじゃ結局フロー依存だしなあ。
単純なサンプルのつもりで書いたコードがボコボコにされててなんか辛いんだぜ
どんまい
言語仕様に著作権が認められたらサンプルコード載っけるだけで著作権侵害になるのかな。
>>402 著作権は親告罪だから言語の作者がよほどの基地外じゃなかったら真っ白だよ
でも今居るGPL厨みたいな人間がしつこく言ってきて結果的な被害は変わらないだろうけどw
>著作権法 >第十条 この法律にいう著作物を例示すると、おおむね次のとおりである。 >(中略) >九 プログラムの著作物 >3 第一項第九号に掲げる著作物に対するこの法律による保護は、その著作物を作成するために用いるプログラム言語、規約及び解法に及ばない。この場合において、これらの用語の意義は、次の各号に定めるところによる。 >一 プログラム言語 プログラムを表現する手段としての文字その他の記号及びその体系をいう。 >二 規約 特定のプログラムにおける前号のプログラム言語の用法についての特別の約束をいう。 >三 解法 プログラムにおける電子計算機に対する指令の組合せの方法をいう。 なので少なくとも現在の日本では著作権法の保護は言語仕様に及ばないはず。
じゃ実用新案辺りで手を打とうか
言語仕様そのものには及ばないが、言語仕様を説明する文章は当然保護されるよな。 ニュースの内容と、ニュース本文のような感じで。
Rubyみたいにソースコードが仕様な場合はどうなんだろ。
tryの中でfinallyをscope(exit)と同じように機能させるとか try { starthoge(); finally endhoge(); }
{ starthoge(); scope(exit) endhoge(); } これと等価?
catchがあるときに本領を発揮すると思う
Entice は日本語が使えないのが惜しい……
static foreachはまだなのか
>>415 Dの場合win.defをですね、
EXETYPE NT
SUBSYSTEM WINDOWS,4.0
って書き換えてみましょう。
>>416 あっはっは。
前にそれどこかで見つけてそういう風にしていたのになぜか今見てみたら4.0が消えてたほうに変わってた。OTL
どうもです。
DFLでウィンドウアプリを弄っています。 メインのFormをいわゆるSW_HIDE状態にしたいのですが・・・できませんorz visible=false; とか ShowWindow(cast(HWND)this.handle, SW_HIDE); とか試したがうまくいかないです。 やりかたご存知の方いらっしゃいませんか?
DFLってかなり.netに似てるから使いやすそうだと思ったけど、情報が少ないっていうのはかなり不利だよな。
>>418 で、.netに似てるなら.netを調べたらいいんじゃないだろうかと思って調べて来たら、.netでフォームを非表示にするには
FormクラスのHide()を呼び出すみたいです。
DFLを見るとhide()があるので、これでいけるかも知れませんね。試してませんが。
>>416 のdefを適用してもコンソールウインドウを出しっぱなしにするにはどうしたら良いのでしょうか。
421 :
418 :2008/02/29(金) 10:45:48
>>419 とりあえずhide()を呼び出して見ましたが変わりませんでした。
.netのHide()メソッドはvisibleをfalseにするのと同じとありました。
DFLにおいてvisibleプロパティについてはEnticeDesignerのメインformのvisibleプロパティのところに
"whether or not this form is visible"
と説明がでますのでどっちにしろ表示される・・・・( ;´Д`)ぇー!?
て思ってたんですが、hide()もこれと同じ結果のようです。
なんか方法ないもんですかねぇ;
422 :
419 :2008/02/29(金) 10:46:49
もう少し調べてみた。
MSDNによると、.netではvisible=falseとHide()は全く同じ動作らしい。DFLでも同じ可能性大。
それと、DFLで試してきたけど、
一つFormを作り、そこにボタンを置き、ボタンをクリックするとフォームのvisibleをfalseにする。って組んでみたら普通に非表示にされた。
だけど、フォームの生成(Application.run(form);)の前にform.visible=falseを設定しても非表示にはされなかった。
これは多分.netと同じ挙動。
http://natchan-develop.seesaa.net/article/18029500.html というわけで、
>>418 がいつvisible=falseしてるのか知りたい。
とりあえず
>>418 が生成前にvisible=falseしていると仮定して話を進めるが、
↑のURLにあるとおりの回避法をDFLでしようとして、formの生成前に
form.windowState=FormWindowState.MINIMIZED;
form.showInTaskbar=false;
としても上手くいかなかった。(showInTaskbarを指定し、MINIMIZEDにするとデスクトップの左下に小さくなったウィンドウが表示されてしまう。それぞれ単独では上手く動作する。)
ので、Application.run(form)を使うなら、非表示のまま起動は出来ないと思う。
ただもちろんApplication.run()を使えばフォームを表示しないことは出来る。その場合フォームを表示したければform.show()を使えばOK。
423 :
419 :2008/02/29(金) 10:54:09
つまり、hide()とかvisibleは生成前に設定しても意味無いけど、 生成後ならちゃんと機能するってことだと思う。
424 :
418 :2008/02/29(金) 11:27:24
>>419 生成前に設定しているのが原因でした。
生成後に設定するにはどうしようかと考えていましたが、
わたしがやりたかったのはApplication.run()で実現できそうです。
使い方がよくわからなくてすみません。
ありがとうございました(・∀・)
DFLに関して検索するとC#とかの情報が役に立つのでその辺を意識して作られてるのだと思いますが、
.NETとかC#とかやらずにC++あたりからDにきた者にはDflDocはひどいです><;
俺も初心者の頃に訳も分からずC#のフォームデザイナ使っただけだから、ほとんど覚えてないな。 プログラムの流れやメッセージループも理解してないのにデザイナ使うと訳分からず混乱するw
>>420 EXETYPE NT
SUBSYSTEM CONSOLE,4.0
あー。そーいえば俺もDFL使ってた時に同じようにはまったかも。 確認してないけど初期設定はonLoadとかloadとかでやったらどうだろう。
428 :
419 :2008/02/29(金) 18:40:40
>>427 まあいいかと思って書かなかったけど、追記。
load内でvisible=false;をするとフォームが一瞬表示された後に消えます。
D言語って日本語の変数名使えたのね。全く知らなかった。 使わないけど。
明日はBOFか。 ここんとこ忙しくて予約とかさっぱり忘れてた でも行ってみる
人数のカウントは、部屋の大きさの目安をとるためだけらすぃよ
433 :
427 :2008/03/01(土) 02:09:54
>>428 あーそうだった。俺もそうなって、そこで妥協したんだった。
いい加減なこと言って申し訳ない。
しかしDFLのコード読んでみたら、初期化の最中にWinProcを介して
あっちこっち飛んでは3種類くらいの可視フラグを立ててはチェックしてで頭が爆発した。
C++0xでこんなことできるらしいんだけど、Dではどう書けばいいのだろうか。 template<typename... T> class C: T... { C(const T&... t): T(t)... {} }
あ…インターフェイスにコンストラクタないから、これはかけないか。
template<class ... Args> void g(Args ... args) { f(const_cast<const Args*>(&args)...); } こういうのはちょっと羨ましいかも
BOFはじまるよ
BOFたのしそうだな
BOFおわったよ
BOFたのしかったな
仕事早ぇー
BOF乙 ところで"Tuple"が複数のモジュールにあって それらが全然違うものだから混乱したぞ
あるある object.dみたいなところにひとつTupleが書いてあればいいのに
タプルリテラルを作れば解決するのになあ
>>441 もしかしてABAさんと、をるたんの謝辞だけ?
気づいたら終わってた 誰か録画してないのー?
勇者はやっぱ勇者だった だがDでSIGGRAPH発表する伝説の勇者が出現
>>447 GJ!
概要はなんとなくわかった。
読めば読むほど拝聴したかっただぜ!Orz
例の納品した人出てたのかw ちくしょー見たかったぜ。
更新されてる。 >>Walterだけど何か質問ある?
>>447 プレゼンまとめうpとかあったら神なんだが
Dの更新追うのに疲れてここ一年くらい新機能弄くって遊ぶようなことしてなかったけど今日のでちょっと興味戻ってきたわ
>>449 >だがDでSIGGRAPH発表する伝説の勇者が出現
kwsk
ニコニコに上がってるのか。 話題に乗り遅れてるが、ぼちぼち見てくる。
おおお素晴らしい ちゃんとスライドが読める画質っぽいwww
コメント少なすぎだろw
最初鼻の穴見えすぎ
エロくね?
鼻のタグが付いてるな。
うーむ、コメントしにくいなぁ。 コメントが少ないからじゃなく何となく。
聞き取りにくいところに字幕をつけるとかどうだろう。
いいね
やろうと思ったけど自分の耳じゃ復元できなかった…。 実際会場行った人、お願いします。
ushort型をasmでAXに入れようとしたらサイズが違うと怒られたんですが、 import std.stdio; void main(){ ushort n = 0x3132; writefln("ushort.sizeof = %dbyte", ushort.sizeof); writefln("before:0x%x",n); asm{ mov AX, n; rol AX, 8; mov n, AX; } writefln("after:0x%x",n); } こういうのは駄目なんですか?
見てきた。微妙にウォルタンには伝え辛い発言があって困るw
>>459 しゃべってる人が俺の脳内イメージとは、悪くない意味で違ってた。・・・当たり前か。
理解できてるかはべつとしておもしろかた。
お願いがあるのだ ニコ動以外の所に上げて
>>469 asmの話題はあんまり見たこと無いな。
俺はアセンブリ系はわかんないし。
word ptr がいるんじゃない?
>>472 アカウント取ったほうが早い
異論は認める
だなぁ。異論はあるだろうが、とりあえず登録はしておいたほうがいい。
いちいちページ切り替えるの面倒だったからflvファイル連結してみたけど40MB超えてて\(^o^)/オワタ
ttp://www.kmonos.net/alang/dee/diki7/brainfuck2d BOFのコンパイル時コンパイラに触発されて、
brainfuckを、Dの
delegate void(std.stream.InputStream, std.stream.OutputStream)
なデリゲートに変換するモジュールを書いてみた
以前D言語における日本語利用の話題になったときにインタプリタまで書いてたやつです
今度はきちんとDソースコード表現を経由してネイティブコードにコンパイルされます
文字列mixinを使うと素直な表現になりますね
>>473-474 自己解決しました。と言うかあまりにあれだった。
結果として
>>469 だとコンパイル通りました。
通らなかったのは下のコード。(ちなみにやってることは全部エンディアン変換)
import std.stdio;
void main(){
ushort unknown = 0x3231;
testa(unknown);
}
ushort testa(inout ushort n){
asm{
mov AX, n;
rol AX, 8;
mov n, AX;
}
}
inoutのものをそのままレジスタには渡せないってことですね。
inoutも内部ではポインタ渡しみたいになってるから、
void testa(inout ushort a){
asm{
mov EAX, a;
mov BX, [EAX];
rol BX, 8;
mov [EAX], BX;
}
}
こうしないといけないみたい。
でも、これより↓の方がわずかに速かったのには脱力した。
ushort testa(ushort n){
return (n << 8) | (n >>> 8);
}
tango.core.Thread.Thread には、 phobosのstd.thread.Thread.pause/resume 相当の機能はないのでしょうか? 見た感じないのだけど、どうしてだろう? void thread_suspendAll() 内には void suspend( Thread t ) なるものが見えるけど外からは使えない…
pauseでスレッドを停止させる設計が間違ってるからじゃないか
>481 Thread.yield ではダメ? 実行権が勝手に戻ってきちゃうと都合悪いのかな。 だったらtango.core.Thread.Fiberで yield/callするコードを書いといて、 そのファイバーをスレッドで駆動するという手はある。
484 :
481 :2008/03/03(月) 13:18:00
>>482 そうなんですか?初めて聞きました。浅学なもので…
でも、使いたくなる時もあるんじゃないかと思うので、
設計の良し悪しは別にして、あってもいいような気がしないでもないのですが…
>>483 それはなんとも強引ですねw
とりあえず使うところはWindowsなので、スレッド内でGetCurrentThreadとかすればなんとでもなる…
けど、なんかスマートじゃない感じが…
動けばいいのだ
Internal error: ..\ztc\cgcod.c 1522 ってなんですか?
コンパイラのバグ。 bugzillaに報告しとけば一年ぐらいで直るよ。
一年後かよ!
あるある
490 :
イーペーコー :2008/03/03(月) 19:20:47
D言語はVB.NETよりできることがすくなと聞いたのですが本当ですか??
少なくは無いけど、遠回り。
492 :
デフォルトの名無しさん :2008/03/03(月) 19:43:55
D言語で書くくらいならアセブラで書いたほうがいいと効きました なにやらアセブラはなんでもできるそうでD言語より高機能だそうです
494 :
デフォルトの名無しさん :2008/03/03(月) 21:24:05
>>490 あの膨大なライブラリを誰が書いたかってハナシだな。
キャパシティはあんま変わらん。
>>492 アセンブリ言語でガリガリ効率的に書けるなら,確かに他の言語なんていらないなw
チューリング完全(ry
アセンブリがあればという奴にかぎってアセンブリでまとまったモノを書いた経験がない。 チューリング機械があればという奴にかぎってチューリング機械でプログラミングした経験がない。
僕は、ラムダちゃん!
____ / \ / _ノ ヽ、_ \ / o゚⌒ ⌒゚o \ また明日から無限に長いテープを前後に動かす仕事が始まるお | (__人__) | \ ` ⌒´ /
絶望的な仕事だなぁ
チューリングマシンより量子コンピュータの方が出来ることが多いそうですが、 D言語は量子コンピュータ上で動きますか?
量子コンピュータなんてろくにできることないぞ。
どっかの研究者が並列実行可能な生体コンピュータ(分子生物学的な)を使って 現在のノイマン型だと非常に時間の掛かる問題(確か年単位オーダー)を解いたそうだが、計算は一瞬で終わっても解を取り出すのに数週間掛かったそうだ。 質的な差は確かに違うしできること、奥の深さの違いもあるだろうけど、現時点では量的な差がそれを打ち消してしまうほど使い物にならない。 例の様な特殊な事例でなければね。 というか量子的な動作を記述する言語ってどんなものになるんだろうな。 D言語は言語使用自体の例外的なものをできるだけ排除して、できるだけ簡素なものに帰納的に表現できるように 工夫がされているはず。 その“帰納的”という性質そのものがノイマン型コンピュータに依存するわけだから、勿論互換性なんてない。 量子コンピュータはその動作を確率的に、並列コンピュータはその動作を並列的つまり動的計画法バリバリに記述するんだろうねきっと。
三行で
今のプログラムに比して超巨大なステートマシンが 大量に右往左往する量子コンピューティングには テキストでしこしこ記述する手法では太刀打ち出来ない。
量子コンピュータは一応チューリング完全だけど、 NOT, CNOT, CCNOT, SWAP っつー可逆な操作のみを使って計算する、 古典コンピュータとは根本的に異なる原理に基づいた計算になる。 その性質をフルに発揮するには、そもそも古典コンピュータ用の言語は向いていない。 さらには重ね合わせとかあるしね。
> D言語は言語使用自体の例外的なものをできるだけ排除して、できるだけ簡素なものに帰納的に表現できるように > 工夫がされているはず。 正気か?
でっていう
このスレ、なんか今年入ってからか全然関係ない話題で盛り上がる運命にあるのか?
> 全然関係ない話題 運命についての質問とかな
これから盛り上がるっていう予言かw
DコンパイラをDで記述すれば大いに盛り上がるはず 頑張れ↓
2への完全移行とDMD/GDCの互換性を上げるほうが先だろ
記述に使用する言語と同じ言語のコンパイラって作って何が楽しいの?
>>517 そんなこと言ってたらCコンパイラすら作れなくなるな
マシン語とかアセンブリ言語とかで作れと?
作るのが楽しいんだよきっと
でも、そんなもの作る暇あるなら、 何か便利なライブラリでも作って欲しいわ。
動的コンパイルできるライブラリ作れるじゃん
>>520 でも同じ言語で新しいバージョンのものだったらまだ話は分かるけど、
同じバージョンなんて作っても・・・。
その言語がよい言語なら、その言語のコンパイラ自身も
その言語で書かれてる方がいいよね。
移行の過程を無視すれば、だけど。
> 複雑でデバッグ済みで既に完成しているアプリケーションを
> わざわざ他言語に 移植することにあまり利点はありません。
> 新しい Digital Mars のアプリは Dで実装されています。
http://www.kmonos.net/alang/d/2.0/faq.html#cpp_to_D >517のような、新しくコンパイラを書き起こす場合は、Dで書くのも
普通に選択肢に入るんじゃない?
「すでにD言語のコンパイラは2つもあるのに、新しく作って何が楽しいの?」
ならともかく、D言語のコンパイラをD言語で書くこと自体はとくにおかしくないでしょ。
Streamクラスのseekableなストリームは絶対にreadableなストリーム、と言い切れるのでしょうか。
さあてね、どうだか
D 3.0からDで作ります。とかならあり得ない話じゃないかな。
じゃあ最初のD3.0はD2.xxで作られるわけか
コンパイラ作ってる間に仕様が変わって、新しいコンパイラでは自分自身をコンパイルできなくなると。
>>526 readableとseekableが分かれているのだから言い切れないんじゃない.
ソースを上から全部読んでないので確証はないけど.
そう言えば量子コンピュータって量子テレポの原理を使って理論上は 人間が思ったとおりの動作を自動的にしてくれるんだって? LL(0) 何世紀後の話になるやら・・・。
??
LL(0)というのは誤爆です・・・
Version()掛けてD2.xで出来上がったD3.0でD3.0を作ってそのD3.0でコンパイルしてみて確認。
D言語でデバイスドライバはC並に作れますか?
お約束だが「C並」を定義しないと誰も回答できない
長時間存在するものをモダンでないGCに投げるのは不安があるところだな。 その辺の工夫をすればかけるのではなかろうか。
539 :
デフォルトの名無しさん :2008/03/07(金) 14:47:19
つまりCでできることは9割がたDでできるのか否かちょいうこと
D言語終わったな
541 :
デフォルトの名無しさん :2008/03/07(金) 15:22:35
>>540 ハゲ同
今じゃVisual Basicですら簡単にC++並みのドライバが書けるのにD言語ときたら・・・
>>542 キタ━━━━━━(゚∀゚)━━━━━━!!!!!!
これで安心してマルチスレッドのコードが書けるわ
>>539 アッパーコンパチなんで、やろうと思えばできるはず。効率的かはまた別だが。
まー、ビットフィールド位しかできないことおもいつかん。
アラインもいじれるし。ポインタもいじれるし。
>>541 なに?ドライバ入れるのに.NET入れないといけないの?
フロントエンドじゃなくて?
vbでデバイスドライバとな!? ランタイムも全部sys 凄すぎるけどネタじゃないか
>>545 Windows限定なら俺も書いたことがある
仕様が公開されてるキーボードのドライバをvb.netで
547 :
デフォルトの名無しさん :2008/03/07(金) 21:42:17
ubyteの配列をスライスしてuintの配列として解釈するのはマズいですか auto ub = new ubyte[0x10]; auto ubs = ub[4..11]; uint* ui = cast(uint*)ubs; 要するにバイト列を任意の値型で再解釈するというモノです。 もっと安全な方法があるぜ!とかあったら教えてください
エンディアンにさえ気をつければやっていいと思う。
>>547 VBの場合リトルエンディアンは静的なデストラクタとして扱われるから気をつけて。
uint* uiじゃなくてfile*uint[ui]の方がいいよ
>>549 547じゃないけど、もう少し噛み砕いた説明plz
551 :
549 :2008/03/07(金) 23:04:25
つまり、Dの場合はリトルエンディアン(パソコンでプログラムを使う際に使用される16進数の形式のネイティブWinAPI関数)は 静的(ガベージコレクタによって関数がオーバーロードされ変数のスコープからはずれたりするのを防ぐコア関数) なデストラクタ(使い終わったオブジェクトをユーザーからのイベントパンドラ無しにイベント駆動型のラムダ式) として扱われると言うこと。 uint* uiにするとβ変換(変数をグローバルなスコープから外し新しいシステム型変数として使うための変換) が正常に行えなくなるのでfile*uint[ui]にしておいたほうがいいということ
すごいバグつぶしっぷりだな・・・
普及させるにはやっぱD言語製の優秀なアプリが無いと駄目だろうな ゲームはあるみたいだが
554 :
547 :2008/03/08(土) 00:09:13
>>551 すいません全然意味がわからないです
エンディアンとガベージコレクタに何の関係が?
>file*uint[ui]
??file型のポインタの配列??
>VBの場合
???
アプリよりまずライブラリだろ。 そして、ライブラリよりまず言語仕様の安定を・・・。
安定なんか糞喰らえだ。 Walterたんの突発的な変更に右往左往するのがD言語だ。 と俺は思っているが少数派だろうなぁ。まぁこんな考えだと一生D言語が流行らんけど
まあ、それはそれで楽しいからいいんだけど、 早く実用したいという欲求もあるしなあ。
つまり実用的なD言語と実験的なD言語に分離すれば… ってそれが1.0系列と2.0系列か。
2.0系列に入った機能で ある程度賛否の賛の方が大きい機能を 1.0系列にマージした系列も欲しい所だな。
2.012と1.028きてたのね。 dmd_2.012-030608_i386.debってのもあるけどなんだろうこれは。
debパッケージなんじゃないの。
dmd、リンクのときのメッセージが出なくなってるんだな。
>>551 ×イベントパンドラ
○イベントプロシージャ
×関数のオーバーロード
○関数のオーバーライド
>>486 のエラーを避けるために
原因のコードを普通のブロックで囲んでも意味無かったので
(){
原因のコード
}();
こんなことしたらエラーでなくなった
でも顔はぐにゃってなった
{ ( ^ | { (
567 :
547 :2008/03/08(土) 11:37:37
>>567 なんだこの6章だけデムパで残りはパクリのサイトは...?
file*uintってなんですか?
570 :
547 :2008/03/08(土) 12:29:42
これ以上詐称するのであれば酉付けます
IDもなしに後からつけるトリップに何の意味があると
573 :
547 :2008/03/08(土) 13:37:07
すいません質問はあきらめます 自分で調べてきます 以降の547人は偽認定でお願いします
574 :
デフォルトの名無しさん :2008/03/08(土) 13:43:06
>>574 その偽サイト作るのにどれだけ時間掛けたの?
すでに時代遅れになっているから、読まないほうがいい 混乱するだけだ
自演乙
578 は 暇人
Dスレでこんなのを見るとは思わなかった
>>578 文章は何年も前から変わってない。
C++だったらそれでもいいけど、Dじゃ駄目。
ジョークサイトにしてももうちょっと知性の感じられるジョークをだな
構ってもらえてよかったな坊主
>>582 そのサイト
>>567 がついさっき作ったんでしょ?、と汲み取ってもらいたかったんだが
文章はWisdomSoftのパクリ
587 :
デフォルトの名無しさん :2008/03/08(土) 14:27:06
おじゃすー printgokkoとかアホかと・・・ ptって感じで短くして欲しいぐらいだよ
588 :
デフォルトの名無しさん :2008/03/08(土) 14:27:11
589 :
◆bNGw8Q1jYg :2008/03/08(土) 14:27:59
いつのまにかVIPでこのスレがパートスレ化している件
これを面白いと思うセンスが理解できない
まあ、547自体が釣りだったということでFA
VIPからきますた
VIPから(ry ww
徹夜までして偽サイト作ったもんだから、引くに引けなくなったのか・・・
VIPの方からきますた
静岡県在住の高校一年生か なるほどこりゃ痛い
2章ひでえ。何がやりたいんだこれ
こういうのが沸く程度にはメジャー化したということで 順調に発展できたならば、5年後くらいには Java vs C# vs D とかでもできてるに違いない(と信じたい)
>>599 逆に5年後、JAVAとC#があるのかどうか、という感じだな。
JAVAはマジで死滅するんじゃないかという危惧と
C#はMSが次の言語出してきたらどうなるかと。
MSは"D言語"出すしな
mjd?
D言語いくつ作られるんだよw
>>600 5年後に日本のIT業界がJAVAを捨てられるほど熟練者が増えてるとは思えんがな……
2章より引用 >細かい説明は後述するので、この場ではとりあえず文字を表示する方法を試してみましょう。 >文字を表示するにはprintgokko命令を使います >printgokko ("表示したい文字列");
必死に貼らなくてもいいから
JAVA無くなって困る人は大勢いそうだけど C#無くなって困る人は少ない気が
俺はCOBOLとDなくなったら死んじゃう。
それはぜひ半分死んでくれ
610 :
◆bNGw8Q1jYg :2008/03/08(土) 18:40:35
ごめん消しちゃった 今度はもっとちゃんとした教材作るね
じゃ俺はDとC++の勢力が入れ替わるのなら100年生きる。
在る程度メジャーになった言語は、 衰退することはあっても、完全に無くなることは滅多に無いと思うけどなあ。
COBOLもそろそろ死んで欲しいんだけど、あと1世紀は生きるよね。
もういいよ
なにやってんだろうね
つれたw
そこら中にマルチしてやがるから通報しときました
同一性保持権の侵害で訴えられんようにな 知ったこっちゃねーけど
人格権以前に普通の著作権侵害だろ
芝ゲーでニコニコから流れてきてるんだろ
pythonや なでしこ とか他にもう少しメジャーな言語スレあるのにキチガイ何でDに来るかね
Dも有名になったもんだな あんまり嬉しくないけど
ウォルたん「pythonの生産性 + Cの速度 + C++の自由度 = D」 一般的なプログラマー(昔)「Dはこける」 〃(今)「そろそろDもやっておくか」 C++「C++かわいいよC++」 0x「C++が使いやすくなってからD涙目wwwwwwwwwwwwwwwwwwwwwwww」 やねうらお「超素敵!!私の処女あげちゃう!」
>>625 やねうらおwwwwwwwww
しかし正直俺あの人居なかったらDに興味持たなかったな。
DのGCについての情報が有るページを教えてください。
俺はやねうらおのおかげでしばらく敬遠してたな・・・ なんか知れば知るほどろくでもないとこが見えてくる人物だから
ABAさんの所でD使ってるというのを見て、かなり興味持ったんだが 俺もやねうらおでちょっと敬遠してしまった。
>>626 おれも
>>625 ウォルたん(昔)「Boost対応めんど。新しい言語つくろ。」
〃(今)「バグ生まれすぎワロタ。」
一般的なプログラマー(昔)「D言語? 何それ?」
〃(今)「D言語? (Sun | Microsoft)が出してたやつ?」
C++「高給なのもC++のおかげ。むしろ皆は感謝すべき。」
0x「やっぱ後方互換と知名度が重要だよな。」
Java「結局ライブラリが全てなんだよね」
やねうらお「C#マンセーwwww」
あれ、ここって 真面目な D言語の板じゃなかったっけか……orz ま、おわったぽいからいいけどさ。 >632 C#かwwwww ってかDFLとかだとほぼC#だしなw
C#というか、.NETだね。 Windows Formsはデザインがよく出来てると思う。 実装が悪くてもっさりしてるのがどうしようもないけど
637 :
636 :2008/03/09(日) 12:58:17
ってAPI Bindingの更新だけかよ……orz RSSでとちったorz
>>636 そのページどこか変わった?
前見たときから何も変わってないと思うのだけど。
639 :
デフォルトの名無しさん :2008/03/09(日) 13:13:16
最新: 2007/03/07 ってあるが。
ちょっと大きめ(最大60MB位)のデータを扱うようなウインドウプログラムを組んだんだけど、 処理するたびに仮想メモリを開放せずに食いつぶすんだがどうにかする手法はないかな。 このままだと他のアプリケーションのメモリをスワップアウトさせてしまう。 タスクマネージャで見てみるとメモリ使用量はウインドウを最小化させると減るみたいなんだけど、 仮想メモリは握ったまま。200MBとかしゃれにならん。 GCの挙動も良くわからないし…。
>>641 >タスクマネージャで見てみるとメモリ使用量はウインドウを最小化させると減るみたいなんだけど、
それページアウトしてるだけだよ。実際には減ってない。
>>641 ヤマカンでどこら辺があやしと思う?
GC?ライブラリ?自前?
現在の実装では、GCが確保した領域は解放されないとか、誰か書いてた覚えがある。
>>641 TangoのGC使うとちょっとはマシになるかも(minimize実装されてる)。
phobosのGCの実装はプログラム終了時以外に確保したメモリを返却しない。
>>645 >>646 ということはGCあってもfreeしろってことか。
freeつうかdelete
648 :
647 :2008/03/09(日) 17:21:28
つまり、Dの場合はリトルエンディアン(パソコンでプログラムを使う際に使用される16進数の形式のネイティブWinAPI関数)は 静的(ガベージコレクタによって関数がオーバーロードされ変数のスコープからはずれたりするのを防ぐコア関数) なデストラクタ(使い終わったオブジェクトをユーザーからのイベントパンドラ無しにイベント駆動型のラムダ式) として扱われると言うこと。 uint* uiにするとβ変換(変数をグローバルなスコープから外し新しいシステム型変数として使うための変換) が正常に行えなくなるのでfile*uint[ui]にしておいたほうがいいということ
つまりサブプロセスを立ち上げて不要になったら殺すしかいないと。
>>647 プロセスとして確保した領域を解放する話と、
各オブジェクトに使っていた領域を解放する話が
マゼコゼになってるぞ。
>>652 ごめん、あまり読まずにレスしてた。
穴があったら埋まりたい・・・
みんなスルーしててワロス
自分で開放するにはmalloc&freeしかないってことでおk?
レスどうも。
>>643 そうだったんですか。
最小化されるとページアウトさせるのはOSですよね。
>>644 疑おうと思えば全部と言えます。
ただ、自動で回収されるとなってる以上、malloc,freeを使わなきゃいけないのもおかしい気が。。。
>>645-646 以前同じようなことを聞いたときも同じような回答でした。
確かstd.gcの話だったと思います。
minimizeが動かないと言う結論でした。
>>655 mallocでメモリを確保することは出来ても、freeで開放されません。
リリースビルドしてる? 解放されてると思うんだけど
いや、freeは解放されるだろ。GC関係ないんだから。
メモリが解放されないって事はD言語で作られてるゲームとかどうなってるんだろう
import std.stdio; import std.c.stdlib; void main(){ writef("malloc "); void* p = malloc(104857600); writef("ok"); readln(stdin); writef("free "); free(p); writef("ok"); readln(stdin); } #include <stdlib.h> #include <stdio.h> void main(){ void* p; printf("malloc"); p = malloc(104857600); printf(" ok\n"); getch(); printf("free"); free(p); printf(" ok\n"); getch(); } こんな感じで試してみました。 Cのほうはもちろん開放されましたが、 Dの方は開放されませんでした。
>>657 dmd -release main
これで良いんでしょうか?
freeでは開放されませんでした。GCの方はまだ試してません。
DMDのパージョンは1.028です。
Dのmalloc&freeはプロセスとしてOSからmalloc&freeしているのではなくて、 Dのプロセスが一括してmallocしてきたメモリプールから小分けしているだけでは。 だからプロセスとしては使用メモリは増加する一方。minimizeしないから。
んー、卒研のプログラム書いた時は newとdeleteでメモリ開放されてた気がするなぁ。 少なくとも増え続けることはなかった。 @Linuxだけど。
卒研でD言語か・・・無茶しやがって(AA略
メモリの解放をどのような意味で使ってるかよくわからない
ガベコレだよ?
GCは必要なメモリをOSから確保するが、必要のなくなったメモリをOSに解放することはしていない。
C#やC++/CLIと同じ様にOSの提供するメモリ管理機能にメモリ管理を任せてるだけ
「メモリの解放」 は何を意味するか 1. デストラクタが呼ばれる。 2. 内部的に free の処理が走る。 3. free したメモリが実際に OS に返される。
襲いかかる(笑)
671 :
670 :2008/03/09(日) 23:43:29
ごめん誤爆
4. 襲いかかる
std.c.stdlib.mallocはCのラインタイムライブラリとリンクされるから、
おそらくfreeした領域は可能であれば適当な時期にOSに返還されるはず。
std.gc.mallocはGCの管理領域から割り当てられるから、
phobosの実装だと、freeしても永久にプールされつづける、と思う。
>>663 deleteした領域は、空き領域としてプールされて再利用されるから、
new/deleteの繰り返しで増え続けることはないよ。
674 :
637 :2008/03/10(月) 00:02:51
ちょっと付け足しとくと、 > おそらくfreeした領域は可能であれば適当な時期にOSに返還されるはず。 って書いたけど、Windows版DMDの場合は、DMCのsnn.libを使って、 linux版やGDCはglibcを使うと思うから、そこで実装の差が出てくる可能性はある。
675 :
デフォルトの名無しさん :2008/03/10(月) 00:33:17
すぐ返還 import std.stdio, std.loader; void main() { scope ExeModule msvcrt = new ExeModule("msvcrt.dll"); extern(C) void* function(size_t) malloc; extern(C) void function(void*) free; malloc = cast(typeof(malloc)) msvcrt.getSymbol("malloc"); free = cast(typeof(free)) msvcrt.getSymbol("free"); writef("malloc "); int size = 32*1024*1024; ubyte* p = cast(ubyte*)malloc(size); for( int i = 0; i < size; i++ ) p[i] = 0; writef("ok"); readln(stdin); writef("free "); free(p); writef("ok"); readln(stdin); }
D言語終了のお知らせ
どのD言語?
ばかやろう、まだはじまってもいねぇよ
さっさと開始してくれ
3.0になったら始動する
型が同じ連想配列の結合ってできないの?
できないね。 キーが重複した場合に左右オペランドのどっちを優先するかって問題があるし、 自分で実装したほうが安心なんじゃない? K[V] merge(K, V)(K[V] a, K[V] b) { K[V] c; foreach(k, v; a) c[k] = v; foreach(k, v; b) c[k] = v; return c; }
AAに.dupがなかったことに今更きづいた
dup欲しいよねdup
tangoでsprintfみたいな文字列の整形が出来るのはどの関数ですか?
>>687 tango.text.convert.Sprint かな??
>>688 どうもです。C#の文章整形というものははじめて見ましたが、結構使えそうですね。
phobosに比べてclassいっぱい日本語資料ほとんどなしで、
英語の資料もあるには有るけどなれない言語なので情報にたどり着くのが大変です。
Tangoはクラス名と関数名だけでだいたい何をするかわかるから、慣れればかなり楽だよ。 細かい挙動は英語読まなきゃいけないけど。 ただ、opCallのオーバーロードがキモイ。それだけ。
tangoのopCallは本当に不人気だな
俺の中ではあれのせいでかなり印章悪いけど他は割と強いのかなあ
そろそろgdcも新しいの出して欲しい
sf.netのSVNリポジトリからチェックアウトすればいいんじゃね? 今どうなってるのかは俺は知らんが
あまり使わないんで気が付かなかったけど Tangoだとphobosと違ってmainへの一個目の引数がフルパスにならないんだな。 呼び出しに使ったコマンドそのものになる。 たとえばコマンドプロンプトで tango使ってdmdでコンパイルしたmain.exeのあるディレクトリをカレントにして mainと入力して実行すると、第一引数が"main"になる。 windows上での話だけど。
TangoはGetCommandLineWで取ってるけど、 phobosはCのargvをそのまま使ってるね。 ということは、phobosはマルチバイト文字でおかしくなる可能性があるのかも。
その辺はガイシュツ
import tango.io.Console; import tango.core.Memory; void main(){ GC gc; Cout("malloc").newline; Cin.copyln; void* p = gc.malloc(104857600); Cout("free").newline; Cin.copyln; gc.free(p); Cout("finish").newline; Cin.copyln; } TangoだとGCがしっかり動いてると言うので書いてみた。 やっぱりと言うかなんと言うか、仮想メモリはTangoでも開放されないな。 Cのmallocとは等価じゃないってことか。 Win32API使ってphobosのstd.file.readのような関数を作って30MB位のファイルを読み込んで それに一文字半角スペースを~で足してscope char[]に読み込みcollectとminimizeをやると言うループを作って Cout.copylnでウエイトを入れながらまわしてみたけど260MBまで遠慮なくメモリを使うぜ。 多分これが効率的だからそうなってるんだろうけど、collectやminimize使っても制御が出来ないのはなぁ。
どっちのGCもcompaction機能もってないし、 GC周りはどうにかしないといけないよなあ。
リンカがGCライブラリを切り替えられるようにすればいい。
Windowsのdmcも、即OSに返還されないね。orz #include <stdlib.h> #include <stdio.h> #include <string.h> void main(){ printf("malloc"); void* p = malloc(104857600); memset( p, 0, 104857600 ); printf(" ok\n"); getch(); printf("free"); free(p); printf(" ok\n"); getch(); }
タスクマネージャのプロセス一覧で見えるメモリ消費量は、 そのプロセスが使ってるメモリ領域を正確に表示した物じゃないらしいので、 freeしたら即減るかっつーとそう言うもんでもないようです。 あとDのメモリ管理ってメモリプールみたいな感じで一度メモリ領域拡張されると縮小されにくい物なんじゃ?
なあんだ、結局Dのnew&deleteとほぼ同じかもしれないってことかー
>707 ほぉ〜勉強になったさんくす
>>706 VCのclやgccだとfreeですぐに減ってるので、多分2段落目のとおりだと思う。
これも実装の違いなんだろう。
結局、Cみたいにある程度管理しながらうまいことメモリを使わないといけないのは変わらないわけかな。
ガベージコレクタのおかげで、うっかりdelete忘れてプロセス起動中に延々と メモリを圧迫し続ける心配がないっていう程度ですかねえ。
基本的にはDでメモリをOSには返せないってこと? VC++だかgccだかでDLL作ってそっちのmalloc/free使えばいいのか。
自前でHeapAllocすればいいんじゃ
返還する目処のある処理を別プロセスにすりゃいいんじゃ? すりゃいいってほど簡単じゃないけど。
プロセスにオブジェクトを渡してオブジェクトを受け取る、とか出来ないから モジュール化がだいぶしょぼくなるな。 出来ればいいのになー。.NET環境だとそういうのもあるのになー。 OSはメモリもオブジェクトのメタデータも管理しちゃえばいいのに。
tangoにシリアライザなかったっけ。
>>715 モジュールをDLLとして作れば、Dのオブジェクトを渡したり
GCをプロセス間で共有したりできるみたいよ。
>>718 Fxで開いたらrundll32.exe url.dll,TelnetProtocolHandlerとか出てきたが何をするつもりなんだ。
720 :
デフォルトの名無しさん :2008/03/14(金) 10:22:03
>>718 正確に「潰す」とは言ってないんだろ?
だったら問題ないと思うが
ブラクラです
別にE言語になってもイーっすよ
Dって元々Mars言語って名前だったのを、 をるたんの友人がD言語って言い張るもんでいつの間にかDになったんじゃなかったっけ。 MSに名前押さえられても元のMars言語って名乗れば問題ないよね。
>723 マスコットキャラかわいそう・・・・・・
>>724 あんなゴキブリみたいな顔してるムカつくマスコットなんだから
どこか別の場所に生きる術を見出せるさ。
>in パラメタ記憶域クラスを scope const の意味としました あれ、finalは・・・
finalはみんなの心の中で生き続けるよ
むしろ「かぶっちゃったけどどうしてもこの名前使いたい」って言って MSがお金払ってくれたら棚ぼたなのにw
>>728 最初からそれ狙いでしょ。
つーか、世の中にD言語って、このD言語以前からも色々あるわけだが。
なるほど、D言語と名づけたのは金狙いか 思惑通りMSが金払ってくれるのは、むしろいいことじゃあないか めでたしめでたし
??????????
このスレもやたらレベルがさがったな
733 :
デフォルトの名無しさん :2008/03/14(金) 16:12:38
だってD言語だもんな
なんかマイクロソフトの"D言語"の話題を何回も蒸し返したがる子がいるのね。
MSにあのマスコットキャラ売っちゃえばいいんじゃね?
MSならきっと立派に育ててくれる
マイクロソフトに期待してる人が結構いるんだね Linux使ってる俺にとってはどうでもいい話だが
M$ が主導しても自分では Windows でしかコンパイラ作らないんだろ? 価値ないよ。
そろそろxamlでDFLフォームを作るコンバータをだな
WPFのDバインディングとかは使ってみたいよね。 Dから.NETのリフレクション機能をさわるのはできたけど、 CLRのGCとDのGCを上手いこと動かしてリークを防ぐのがめんどい。
Iron DなのかD.NETなのかD#なのかが問題だ。
どうでもいい
D.NET はもうある(正確にはあった)
744 :
デフォルトの名無しさん :2008/03/14(金) 22:23:18
静的に文字列を置換する方法てないですかね const string foo = "pal = 5;"; class Hoge{ int val; void DoSomething(){ const string myfoo = static_replace(foo,"p","v");// <-こんなかんじ mixin(myfoo); // val = 5; に展開して欲しい } }
F#はもうある。
>>737 、向こうで噴いた
200 :login:Penguin :sage :2008/03/14(金) 18:53:16 ID:mDbK1QBH
マイクロソフトに期待してる人が結構いるんだね
Linux使ってる俺にとってはどうでもいい話だが
201 :login:Penguin :sage :2008/03/14(金) 18:54:22 ID:mDbK1QBH
↑誤爆
>>744 ないんだったら作ればいいんだ。
string static_replace(string text,string from,string to){
string result;
while(text.length >= from.length){
if(text[0..from.length] == from){
result ~= to;
text = text[from.length .. $];
}else{
result ~= text[0];
text = text[1..$];
}
}
return result ~ text;
}
あと、const string myfooだとなぜかdmd君は落ちやがったのでstatic付けてみた
const static string myfoo = static_replace(foo,"p","v");
CTFEあるからstd.string.replaceでイケるっぽくない?
>>748 残念ながらstd.string.replace君の中のstd.string.findはCTFEで対応していない機能(memchrとか)を使ってるんだよね。
個人的にはversion(compileTime)相当のものを処理系が用意するなりなんなりで、
std.stringとかはCTFE時にも動作するように作り直してほしいなあとか思ってたり。
pure関数はCTFEされるとかいう風になると思うんだがどうだろう
751 :
744 :2008/03/14(金) 22:50:11
>>747 >>748 >>749 ありがとうございます
CTFE・・ 初めて聞く単語だ(実はD言語習いたて)
ググってきます
家の環境にはD言語入れてないのでこれからインスコして試してみます
CTFE の条件てどこにかいてありますか?
CTFEでwithが使えないってのはどういう理由なんだろう
757 :
737 :2008/03/15(土) 00:35:21
>>746 ヽ( ・∀・)人(・∀・ )ノナカーマ
>>756 シンボルの検索は兎も角として、ポインタ使えないのにwithが使えてどうするという気が。
多くのメンバを持つ構造体にアクセスするときとか、 with(std.stdio)みたいに普段は使わないモジュールを導入するとか 便利だと思うんだけどなあ。 withとポインタが使えないことに何の関係があるのかはよくわからない。
MacOSX 10.5 Leoprad でD言語の環境をそろえようと思って sudo port install gdc して、簡単な HELLO WORLD つくって test.d で保存して gdc test.d したんだけど object.d が見つからんと言われたので、ひとまずインポートパスを指定して gdc -I "/opt/local/include/d/4.1.2" test.d ってやったら、 ld: file not found: crt.o てエラーが出たんだが。。。これってリンカエラーだよね。 crt3.o ってファイルは dmc 関係のフォルダでいくつか見つかったんだけど、 どこでパスを指定するの? というか、gdc のリンカに dmc のオブジェクトファイル渡してもいいのかな??
761 :
760 :2008/03/15(土) 17:26:03
いや、よく見たら gcc のフォルダにも crt3.o がありました
file not found: crt.o なのになんでcrt3.oを探してるの?
763 :
760 :2008/03/15(土) 17:53:03
あ、しつれい ld: file not found: crt3.o だった
Phobosのboxer.dの中に TypeInfo type() const { return cast(TypeInfo)p_type; } こういうメソッドがあるけど、constがメソッド名の後ろにあるのってどんな意味があるんでしょう?
それはC++風の書き方で、普通はconst TypeInfo type()と前置する。 constをつけたメンバ関数はconstメンバ関数とみなされて、 thisポインタを経由してオブジェクトの状態を変更しないことが保障される。
>>765 なるほど、C++だとこういう風に表記するんですね。
わざわざ後ろにあるので何か特別な意味があるのかと思いました。
有難う御座いました。
Tangoについての質問です。 やりたいことは正規表現でstr中のURLをハイパーリンクにすることなんですが、 auto replaced = Regex(r"((?:f|ht)tp://[\w\.$,;:&=?!*~@#\(\)/]*)").replaceAll(str, "<a href=\"$1\">$1</a>"); こういうコードにしてみたら戻り値が無いんですが、perlの $str =~ s/((?:ht|f)tp\:\/\/[a-zA-Z0-9.$,;:&=?!*~@_\(\)\/#]*)/<a href="$1">$1<\/a>/g; のようにするにはどうすれば良いのでしょうか。
>>767 Tango使ってないけどソース見てみた.
>戻り値が無い
ということはnullということなんだろうけど,
ただ単にその正規表現だと見つけれてないだけな気がする.
ソース見る限りはsearchやってるだけだし.
Phobosのregexp.dの中にURL用の正規表現文字列があるからそれ使ってみるとか.
Phobosのregexp.dだと後方参照しないグループ化は出来なかったと思うんだけど(余り使ってないので自信なし),
TangoのRegexp.dだと出来るのか.
>>767 俺もTangoは使ってないんだが、マニュアルを見る限り、
(?:ht|f)の所は(?ht|f)が正しいのではないかと思う。
あと、replaceAllで$1とかは使えないかもしれない。
ソースを見てみると単純に連結していて、$1とかでどうこうという処理はしていないようだから。
>>768 searchやってるだけじゃないよ。
>>767 なんとか動いた。 $1とかは置換してくれないみたいだね
固定した文字列との置換なら、delegateのいらない方のreplaceAllでもOK
(?:)は使えないので()を使用する。 phobosのregexpもそうだったはず。
//tango-0.99.5 で新しくなったRegex用
import tango.text.Regex, tango.io.Stdout;
void main() {
char[] s = `hoge
http://pc11.2ch.net/ hoge
http://www.digitalmars.com/d/ fuga`;
auto re = RegExpT!(char)(`((ht|f)tp\:\/\/[a-zA-Z0-9.$,;:&=?!*~@_\(\)\/#]*)`,`g`);
auto dg = delegate char[] (RegExpT!(char) re) { return `<a href="`~re.match(1)~`">`~re.match(1)~`</a>`; };
char[] result = re.replaceAll(s, dg);
Stdout(result).newline;
}
aliasがあるから、わざわざRegExpT使わなくてもいいみたい
import tango.text.Regex, tango.io.Stdout;
void main() {
char[] s = `hoge
http://pc11.2ch.net/ hoge
http://www.digitalmars.com/d/ fuga`;
char[] result = Regex(`((ht|f)tp\:\/\/[a-zA-Z0-9.$,;:&=?!*~@_\(\)\/#]*)`,`g`).replaceAll(s, (Regex r) { return `<a href="`~r.match(1)~`">`~r.match(1)~`</a>`; } );
Stdout(result).newline;
}
>>770-771 どうもです。
そのソースをまるまるコピペして動かしてみたんですが、
object.Exception: Access Violation
となってしまいました。
うーん。
>>772 とりあえずTangoを入れて動かしてみたけど
>object.Exception: Access Violation
となるのはStdoutのせいっぽい(俺の環境では).
tango.io.ConsoleのCoutを使ったら,771のソースでちゃんと置換されたのが表示された.
Stdoutでこのエラーになる原因は面倒なので追ってない.
tango.text.Regex の compileToD すごいな。 出力されたコードを少し書き換えたらCTFEでも動いた。 CTFEで正規表現使いたい時にいいかも。 単純な処理しかしてないから、 Cやアセンブラに書き換えるのも容易かも。しかし長いw
>>772 Stdoutでバグるのは,Regex.dでdebug時にStdout.dをimportしてたから
コンパイル時にdebugオプションをつけたら動くようになった.
といってもdebugなしで普通にimportしてもエラーが出るので,
この辺の原因はよく分からない.
static thisとかの初期化とかで何か問題が発生してるのかも.
力になれなくて申し訳ない.
PhobosとTangoが仲良くなりますように(-人-)
っTangobos
>>773 >>775 うーむ、
Stdoutはデバッグで使いたいので、こうなると正規表現でURLを抜き出すのは面倒ですね。
別の手法も思いついたのでそっちで一度試して見ます。
どうもでした。
>>778 もういいかもしれないけど,とりあえず追加で書いとく.
Stdoutがどうこうとか書いたけど,自分でもよく分からなくなってきたw
771のソース前提で,とりあえず出力される方法.
・Cout/Cerrを置く
色々試してたら,Cout/Cerrを置くと普通にStdoutでも出力されるようになった.
・Stdout(Stdout);
これを置いても出力された.Stdoutの型も出力されるので使えない.
・Stdout.dと同じことをやる
Stdout = new Print!(char) (new Layout!(char), Cout.stream);
同じことしてるのに効果が違うのはよく分からないんだけど.
どれも根本的な解決策じゃないので応急処置的な感じ.
>>770 は動いているようだし,環境も関わってるのかなぁ.
それにしてもStdout(Stdout)がまともに動くのは何故…
日本語うめえ
誤爆
なんかネタないの?
783 :
770 :2008/03/18(火) 17:35:48
>>779 こちらでも、dmdでビルドしたものはAccessViolation出ました。
budで、tango-user-dmd.libを使わずにビルドすると正常動作するけど、
使う設定でビルドだと、AccessViolationでした。
tango-user-dmd.libを再makeすれば直るのかな??
>>783 budでOKということで,試しにDSSSでビルドしたら普通に動いた.
これくらいは昨日試しておくべきだったorz
770の言うとおり,生成済みライブラリになんらかのバグ(コンパイル状況による?)があるっぽいね.
Tangoのソースからのビルドが英語だらけで挫折.
>>782 ソースを落として、dmd.exeとdmc.exeにパスが通っている状態でlib内のbuild-tango.batとかを実行
…だと思うのだけど、再コンパイルできなかったりできてもやっぱりバグったリ…何かがおかしい。
786 :
785 :2008/03/19(水) 06:47:12
今のところ2.0で動くGUIライブラリってない?
wxDの履歴にinvariant string対応とかあるけどどうなんでしょ
tangoのDateTimeとかはどこに消えたんですかね・・・ 似たようなクラスって何かありますか?
tango.time.Timeの中にあるようだけど
久しぶりにPoseidon落としてみたが、キーボードショートカットでrun_projectの割り当てが出来るようになってた。 軽いし、やっぱり気軽にプログラミングするにはいいエディタだな。
D言語をMac OS Xで始めました。 目的はWin/Linux用のD言語で書かれたコンソールアプリの移植です。 最初に既存のソースコードをXcodeからコンパイルして勉強できる環境を構築しようと思い立ち いろいろ調べていますが、参考になるサイト等見つかりません。 どなたかMacでその道に足を踏み入れた方はいらっしゃいますか?
D1/D2どちらでもいいので
C++のstringstreamみたいなのが欲しいんだけど
ありませんでしたっけ?
>>792 Macのは見かけたことないなー
MemoryStreamに書いて、readStringとか。
OutBufferに書いて、toBytesとか。 というかOutBufferの存在価値が昔から空気過ぎるんだけど必要なのかこれ。
>>794 こうだと何も表示されないんだけど何が足りないのでしょう?
import std.stdio;
import std.stream;
void main(){
Stream ms = new MemoryStream;
ms.writeLine("hello");
string s = ms.readLine().idup;
writefln(s);
}
>>795 OutBufferはいらないよな・・・
Streamは読み書きでpositionを共有してるからpositionのリセットが必要。 import std.stdio; import std.stream; void main(){ Stream ms = new MemoryStream; ms.writeLine("hello"); ms.position = 0; string s = ms.readLine().idup; writefln(s); }
これでできたようです import std.stdio, std.stream; void main(){ Stream ms = new MemoryStream; ms.writeLine("hello"); ms.writeLine("world!"); string s = ms.toString(); writefln(s); }
>>797 もしかしてそうじゃないかなと思ってpositionを再設定しようと
思ったんだが 0 を入れればいいのかわからなかったので
発見した toString() を試してみたらいけました
ありがとう
>>799 toStringでもOK。
ただ、toStringはread可能,seek可能かによって微妙に動作が変わるから注意な。
>>795 std.openrjと同じくらいは役に立つんじゃね?
>>790 これは・・・・・
もしかしてまだ作りかけなのかな・・・・
壮絶な勘違
単に.NETみたいにしたいだけなんじゃ…
Poseidonが入力補完出来るようになってる; どこまで補完できるんだろ。
Descentdでdsssを使う場合の設定って どうやればいいんでしょうか。 External toolsではbuild -gui -clean ${resource_loc}って いれても上手く動かないんですが。
Poseidonの補完だけど、出来たり出来なかったり、どこまで出来るのかわからん。 でもクラスメンバの補完は出来た。
enum型に範囲外の値を入れたときに例外出すようなことはできないのかなあ。
要素数が多く、しかも値がトビトビだった場合に大変になるな。
ノ L____ ⌒ \ / \ / (●) (●)\ / (__人__) \ だからPascalライクな | |::::::| | 列挙型と集合型を \ l;;;;;;l /l!| ! 寄越せって言ってンだよ! / `ー' \ |i / ヽ !l ヽi ( 丶- 、 しE |そ ドンッ!! `ー、_ノ 煤@l、E ノ < レY^V^ヽl
提案してみたら?
Poseidonの手軽さに超きたい
Descentの更新がないなぁ・・・
>>808 その挙動をデフォルトにするのは無理だし値型の変数への代入に副作用とかまっぴらごめんだが、
テンプレート+traistとかmixinとか使えば全てのenumに対して有効な汎用性の高いもん作れる
とりあえずPoseidonはbudじゃなくてrebuildも使えるようにして欲しいね
全てのenumに対してではないな 名前付き限定
debug 時は assert() になり release 時にはコードの実行文だけ残る verify() マクロみたいなものが欲しいんだが 何か代わりになるような方法はない?
void verify(T)(lazy T dg) { debug assert(dg()); else dg(); }
和訳の更新履歴のdmd 2.012のURLが2.011のになってるね。 >817を見て作ろうとしてみたんだけど、 template verify(T...){ debug{ void verify_(typeof(T) t){ assert(t); } }else{ alias T[0] verify; } } void main(){ auto o = new class{ bool f(){return false;} }; verify!(o.f, "debug assert"); printf("done\n"); } って書いたら Error: need 'this' to access member f って言われてだめだった。メンバ関数のエイリアスをとっただけなのが だめなのは分かるけど、これはどうにもならないんだろうか。
久々にD言語に手を出してみようと思うんだけど、バージョンが1とか2とか、 ライブラリもphobos使うのかTangoなのか迷うんだけどどの組み合わせがオススメですか?
いつのまにかenum定数のaliasが作れなくなってるな
すんません。作れますね。 作れなくなったのは以下のパターン enum Hoge {x, y}; class Foo { alias Hoge Bar; alias Bar.x X; } 定数の評価順が変わったのかな
評価順に依存してしまうバグは早々に直して欲しいね 組み合わせは目的による 何か作りたいならD1とphobosが一番ライブラリの選択肢が広い Tangoに対応してるライブラリも若干存在する(DFLは両方対応) D2だとライブラリはほぼ全滅だけどフルクロージャとかis式の拡張とか使えるね 最新の機能で遊びたいならD2で決まり フルスクラッチで書いてなお仕様変更に着いていく気があるならD2でものを作ってもいい
>>821 tangoは1にしか入れられない。
1を使うのを決めた上で、命名規則&解説英語が気にならんなら入れてみてもいい。
まあ、オススメを聞かれたらD2なわけだが。
みんなで一緒に新バージョンマダー?したいならD2しかないよな。 ところで2.013マダー?
わ、ほんとだ
なんかRubyとかPerlのWWW::Mechanizeみたいな便利なものってないかな? 例え話だけど OpenPNEで構築されたサイトにログインして、自分や友達が書いたレビューやらなにやらを取得してきたい みたいなイメージなんだけど GUIの構築やらEXEでの配布やらがしたいのでRubyやらPerlでやるのはイヤなんだ 助けてくれおまいら
そもそもまともな通信ライブラリがない。
>>830 スレ違いだけど、Rubyならexerbとか使えるんじゃないの?
tangoにはmango由来のHTTPライブラリあるみたいだけど、
そういう便利なのはきいたことないねえ。
>>831 あなたが神か
>>833 そもそもexe化して使う言語じゃないしなぁ…
一応Rubyで動くもんは作ったんだけど、やっぱりCかDで書き直したいなぁと思ったのよ
自分でなんとかこしらえるしかないかなぁ
OpenPNEとかでログインだったら、 RubyではNet::HTTPとか使えばそれなりのが作れるのだし(Mechanizeに拘らなければ)、 TangoのNetを使ってほぼ同じような形で作れるんじゃない? TangoのNetパッケージがどこまで使い易いかにもよるだろうけど、 PhobosだとSocketとか使って一からHTTP話すクラスを構築しないと駄目かも。
D→C→Ruby って具合にC経由でRubyを使えないかね
ところで、日本語の "あ" の文字って正規表現で "." とマッチするべきだよな? UTF8だとあやしいけど、UTF16なら… //@ dmd 1.028 //@ Tango 0.99.5 Jascha import tango.text.Regex; void main(){ auto regex = new RegExpT!(wchar)("."); assert(regex.test("あ"w)); } これで表明失敗するのおかしいよな?
英語圏以外は考慮してないのかよ。使えねー。 Regex.d#L4036の decode(input, next_p); 部分も c = decode(input, next_p); にすべきなんじゃないかな 新Regex.d、まだバグ沢山ありそうだね
だれかミックスインの良い例見せてくれないか。 コンパイル時実行可能にするのが難しくてうまく組めないし、組んでも、これならコピペのが分かりやすい、って思うくらい複雑なコードになってしまう。
文字列mixinを使ったコード生成の話でいいのかな。 シンボルのmixinならそこそこ使ってるが。
std.typeconsのコードとかは? てか、下手にCTFEで書くよりstd.metastrings.Format+αでどうにかする方が簡単だと思う。
>>840 複雑でも再利用できるなら(ry
ってことで正規表現を事前にコードに落としこむとかが良い例。
オーバーロードしてる関数のデリゲートってどうなるの? そのデリゲート自体も引数によって呼び出される関数変わるの?
__FILE__と__LINE__を自動付加する例外スローとかどっかでやってた。 結構便利な気がする。やっぱ気分悪くてなかなか使えないが。
デリゲートに入れる時点で 引数の同じ奴が選択される。
今2系でTangoってどうなの? TangoでPhobosが公式にリプレースされることってねーのかなー?
>>842 metastrings使いやすそうだな。でもtangoにはないみたい?
D言語のテストコード書いたり、簡単な実行したりコードさらしたりするにはここへカモン。
http://codepad.org/ コードを書いて実行した時のURLを記録しておけば、
実行結果も一緒にさらす事が出来て幸せです。
>>846 デリゲートには型があるからそうなるよね
逆にデリゲートのオーバーロードがしたいなあと思ってちょっと考えたが、
衝突の回避がまた面倒そうだとか思った覚えが。
オーバーロードセットに取り込めるかな?
ところで、デリゲートにデフォルト引数を与えることは可能ですかね。
宣言部でやればいちおうできそうな気もする。
>>849 2.0系の新し目の機能を使ったコードは動かんかったけど、
実行せずにコードを単に貼ってURLを得る、というのも出来るみたいね。
ちょっと試すつもりで、表示されてたフォームにコードをコピペして
Just Pasteってボタンを押したら、それでURLができてしまってビビった。
http://codepad.org/jWRH15Hy Edit欄を書き換えてPasteボタンを押す度に新しいURLが次々と生成されるっぽい。
けど、
> By default, pastes will be available for at least 24 hours.
> Save this paste permanently
って表示を見る限り、放っておけば消えるみたいね。saveとやらは怖くてやってない。
なんにしろ便利そう。空白を に置換したりせずに済むし。
>>848 Tangobosの方使ってみたら?
入ってるみたいだけど
void hoge(){} void hoge(int i){} auto dg = &hoge; ↑これはどっちになるの?
>>853 コンパイルエラー
Error: cannot infer type from overloaded function symbol & hoge
デリゲートへのデフォルト引数いけますね。 ちょっと感動。
856 :
デフォルトの名無しさん :2008/03/26(水) 19:46:11
質問いいですか? 引数に'in'を指定した場合↓ void func(in int param){...} 記憶域クラス'in'は'const scope'と等価だと言語仕様の所にも書いてありますし、 typeof(param).stringof とすると、文字列"const(int)"が返ってくるんですけど、 実際、引数paramを書き換えてもコンパイルエラーになってくれません。 void func(const(int) param){...} こう書き換えるとちゃんとコンパイルエラーになってくれるんですけど、 どうしてでしょうか? dmd v2.012
バグじゃね 前からinの挙動はおかしいと言われてたような希ガス PODの型じゃなくて参照型でも同じなのかな
858 :
856 :2008/03/26(水) 20:32:19
>>857 レスありがとうございます。やっぱりバグですかねー。
引数にクラスや動的配列を渡した場合は、うまく機能するみたいです。
2.0のPhobosのソースにstd.encodingってのがさりげなく増えてるんだけどこれなんだろう
1.0のphobosでstd.zlibやstd.stream系を使うと 呼び出すたびにメモリ使用量が増えて一向に減りません。 (1回の呼び出しで10〜20Mくらいずつ) なにか開放処理とかいるのでしょうか・・・
862 :
860 :2008/03/27(木) 17:51:48
>>861 読みました。
「仕様です。」ってことでいいんでしょうか;
863 :
860 :2008/03/27(木) 18:35:46
fullCollect()とminimize()も効いてないようなのですが、 Tangoにすれば効きますか?
865 :
860 :2008/03/27(木) 18:47:25
もう一回読んでくる。 3回目だけど
866 :
860 :2008/03/27(木) 19:12:14
わけわからんっ。 void[] pln = uncompress(enc); これをコメントアウトすると増えないが、いれるとここを通るたびに増える。 MemoryStreamなんかを使ってるとこも通るたびに増える。
GCてのはメモリが足りなくなった時に初めて動くもんだと思ってたが
868 :
860 :2008/03/27(木) 19:55:15
deleteを明示したら一定で止まるようになった。 が、そこで無関係なfirefoxを立ち上げるとえらーが出るまで消費しやがる。 どうなってんだ・・・
>>867 Dの場合は他のアプリケーションの領域までスワップアウトさせてくれるよ。
ずーっと起動して何らかの処理をするアプリケーションには向いてないかも。
そりゃOSがやってるんだろ
ところでもう関数は多値返せるようになった?
素直にoutつかえば?
構造体を返せば?
Tuple使えば?
タプルルルー
タプル返せるようになったの?
std.typeconsのTupleテンプレートで生成する構造体型のことじゃね? でもTuple!(int, string)ってやっても受け付けてもらえなかった。
import std.typecons; Tuple!(int,double,char[]) func() { return tuple(cast(int)19, cast(double)40.6, "abcde".dup); } void main() { auto val = func(); assert(val._0 == 19); assert(val._1 == 40.6); assert(val._2 == "abcde"); }
組み込みのタプルで同じこと実装するのは簡単だと思うんだけどなあ。。 名前つきタプルとか使えれば色々あそべそうなのに。
shinhさんのところにあるSDLのportは1.0用ですが 2.0用のものはありませんか?
htod使えばすぐできるんじゃないかな
>>881 じゃあメジャーなのはないんですね
ありがとうございました
883 :
デフォルトの名無しさん :2008/03/28(金) 22:51:27
D言語って、ライセンスはどうなっているの? 商用利用しても問題ない?
どなたかDescent+Ddbgでデバッグ中変数見れてる人いますか? いたらバージョンおしえて欲しいインですが。
コンパイラとリンカの両方に-gつけてるか?
すいません。 自分の勘違いでした。 consoleをvariableと同じタブに入れたのが原因みたいです。 エラーでConsoleが反応してると思ったら、 単にVariableを表示するたびにConsoleが反応してただけみたいです。
MinGWのGDCで簡単なHello worldコンパイルしようとしたら C:/MinGW/lib/libgphobos.a(cmain.o):(.text+0x19): undefined reference to `_Dmain' こんなエラー出るんだけどなんで?
889 :
888 :2008/03/29(土) 07:06:00
リンクだけgccに任せたらいけました・・・なんでだろう
テキストファイルを読み込んで加工して出力する場合、一番メモリを使わずに済む方法はどんな方法だろう。 作ってるものはread.cgiみたいに2ちゃんねるのdatを読み込んでhtmlに変換するもの。 今はファイルをreadでchar[]に読み込んで加工してchar[][]に加工したデータを順次入れていってjoinで結合してる。 結合するときにデータのコピーがあるのでそこで大きいコピーが有るだけだけど、 大体もとのデータの三倍強のメモリを消費してる。もうすこしへらせないだろうか。 参考までに、 元はchar[]に ~= で結合していくようにしていたんだけど、そのときには6倍程度のメモリを消費していた。
加工処理の内容によるだろうけど、メモリ消費だけ考えるなら逐次出力していくようにすれば少なくなるんじゃね?
>>891 出力先がネットワーク(http)なので、出来ることなら作成されたデータをそのままメモリ上に配置したいのです。
あまり何度も小分けされたデータを送りたくは無いですし。
そこはバッファリング勝手にされたりするんじゃないか
>>890 俺はMemoryStreamに適当にreserveしてから、だらだら出力してる。
2ちゃんねるのdatだったら、1レスずつ読み込んで加工したものをバッファに書き込んで行けば、 元のデータの三倍強ものメモリを消費することは無いと思うが。 実際にどんなテキストファイルで、どんな加工をするのかが分からんとね。 だが、D言語とどう関係ある?
896 :
890 :2008/03/29(土) 20:17:37
そもそもどんな環境で動くプログラムなんだよ Web鯖でCGIとして動くのかそのプログラムが直接接続を受けるのか
>>897 物自体はCGIの処理を組み込んだ簡易的なweb鯖といった感じです。
read.cgiの機能はひとつの関数になっています。
結果を全部メモリに積もうと思ったら、 元データと変換後データで3倍弱はいるんじゃねえの。 変換したところからストリーミングするしかないと思うが。
900 :
888 :2008/03/30(日) 23:30:46
いろいろ試してたら -ladvapi32 オプションつけたらGDCからのリンクも失敗しなくなりました ますますなんでだろう・・・
__stdcall(wndproc)の中でDのクラスを生成すると落ちるんですが、 これはやっちゃいけないことなんでしょうか。
もっと詳しく書けと
西海岸が4月になるのは15時間後か
いやそこで嘘をつかれても…と思いつつ大いに期待
D8.0の登場ですね。わかります。
D3000だろ
D2系列が嘘だったんです
D言語はこれからは後方互換性を維持しながら進化していきます。
909 :
901 :2008/04/01(火) 12:15:01
Dの構造体ってalign(1)を指定したときにパディングがなくなることは保障されてる?
保障ってもしなってなかった場合バグ報告すれば修正されるってこと?
うん なってなかったの?
914 :
911 :2008/04/01(火) 15:20:07
私は「言語仕様で規定されてる」という意味で保証と書いたよ。 処理系のバグをすぐ修正してもらえるかどうかは別問題。 この辺でバグあるんなら、ぜひ報告してくれ。 ソケットから取ってきたデータをalign(1) な構造体にキャスト、とか時々やるけど まだ問題おきたことない (gdc 0.24 x86_64)。バグあるんなら教えてほしい。
>>911 ありがとう。
いろんな箇所に散らばってて探しづらいね
OSXにて、GDCが入ってる場合、CodeBlocks 8.0.2 patch2からビルドできるようになりました。 Xcode用の拡張を書くのがだるいので、これはこれでいいかも。 あとはGDCのSVNから2系対応版を……と思ったら2.008止まり。 コミットするのは大変そうだなあと思ってできない俺ガイル。
マジかと思って焦った
わろたww
is used as a type ってエラーはどういう意味なんでしょうか。 定義されてないって言われるならわかるんですが。
知らんがそのまま読んだら 「そのシンボル名は既に型として使われています」 ってことじゃまいか?
ああ、なるほど。 Pointクラス作ってgetter/setterでやりとりしようと思ったんですが 名前そのまま使っちゃ駄目なんですね。
どんなコード?
class Point { int x,y; } class Test { Point _point; void Point(Point point) { this._point = point; } Point Point() { return this._point; } } こんな感じです。
構文解析上で宣言とかテンプレートの形式になっていて型名が入るべき場所で、 そこにあるシンボルが型として定義されたもののリストに入ってない場合、という感じらしい。 詳しくはフロントエンドのソース(parse.*, mtype.*, statement.*, template.*)でも眺めればいいかと。 俺もちゃんと読んだわけじゃないけど。 典型的にはこんなケース。 1)未定義なシンボルを含む単純な例 Hoge hoge; Error: identifier 'Hoge' is not defined Error: Hoge is used as a type 2)型以外の意味で宣言されたシンボルを型として使っている場合 int foo; class Foo(X : foo); Error: foo is used as a type
>>924 class Point
{
int x,y;
}
class Test
{
.Point _point;
void Point(.Point point)
{
this._point = point;
}
.Point Point()
{
return this._point;
}
}
>>924 class Test内で`Point'というシンボルが与えられたとき、
スコープの関係でTest内で定義されたPointという名前の関数が優先されるので、
外側のスコープのPointを示すにはスコープ解決演算子を使う
ttp://codepad.org/xm6Ed4Ae 926とだだかぶりなのは勘弁してくれ
>>927 へえ
シンボル名をフルネームで指定すればいいのか
勉強になった
codepad綺麗だけどすぐ消えてしまうらしいから ここのログとしての価値が失われてしまわね?
テンポイントにすればいいのか
なるほど。シンボルの問題だったんですね。 コンパイルもあっさり通りました。 ありがとうございました。
ユニークな文字列作るにはどうしたらええですか?
どういう意味でユニーク?
芸人のネタ帳にいっぱい書いてありそうだな
2つ先ぐらいまでのテストビルドがあるのはよくあるが(最近の有名どころでFirefox2と3)、 DMDはどうだか知らんな。
更新まだー?
phobosのstd.stringがもっぱらstringなのが気になる wstringが使えるといろいろ便利なのだが。
tangoつかえばおk
なぜこのスレに・・・?
静かだねえ
嵐の前の静けさ…ならいいけどねえ。
荒らしの前だったらやだな。
>>945 とても読み易かった。
流石アンドレタン
Pure記憶域クラスを使うとそれによる最適化ができる -- ドキュメントより 確かにD言語のコンパイラが最適化するとはどこにも書いてない とか言うことになったらがっかりだぜ
Cとかの_TマクロってDではこんなん version (UNICODE) wchar[] _T(wchar[] s){ return s; } else char[] _T(char[] s){ return s; } で大丈夫?
>>948 Win32APIに渡すならポインタ返したほうがいいんじゃないか
kinaba氏とharu-s氏のところで見たよ
あと、wcharはそのままでいいけどcharはUTF-8だから変換しないと。
複素数型が組み込み型からライブラリ方式に格下げされるって本当?
これって組み込み型の複素数型が消滅するって意味なのかな? このモジュール使うと基本型の複素数よりも拡張されたものを使えるって 風にも読めるんだけど・・・
組み込みの複素数の利点をあれだけ語っておきながら削除とかちょっとどうかと思う。
言語拡張で、組み込み並のことができればいいんじゃまいか
言語拡張は最小限なのが理想だからな。 ライブラリに出来る事を言語に組み込むのは無駄。 ただ、複素数は数値計算やってた身としては、 速度的な観点から見て組み込みな方がいいとは思う。
0xの取り入れたユーザ定義リテラルはあまりに汚いから、 複素数ぐらいは言語組み込みでなんとかしてほしい。
Walterタソ、昔言語仕様をライブラリに分割して個別にimportできるようにすると言ってたような言ってなかったような。
言語仕様のインポートかw おもしろそうだな。
Pythonの from __future__ みたいな感じか
perlもそんなのあるよね。 use feature 'switch';
面白そうだけど実利あるのかな。
動的言語なら処理を減らして軽くする効果はあるだろう。 静的言語だと・・・コンパイル時間は減るかも?
version(none)の中も構文解析される現状から考えると当分は無理だろう
面倒って言っても 1.2i が 1.2*I みたいな感じになるだけでしょ。
前に複素数が組み込み型でなければいけない理由を書いてたのに その問題はライブラリにしても実は解決できたっていうのかな テンプレートとか増えて解決できるようになったのか?
creal x = 1 + 1i; こう書くの気に入っていたんだけどなあ 複素数対応の数学関数周りとか鬱陶しくなりそう
ライブラリごとに仕様が違っていたりしたら どのライブラリパッケージを使うかって話にならね? 数値計算だけのやつはC言語やFortranに戻れってこと?
ユーザー定義のリテラル接尾辞が作れるようになったら神 static invariant(Complex) opPostfix("i")(real n) { return Complex(0, n); } とかできたらちびっちまうぜ 角度をあらわすリテラルでdegを使うかradを使うかで困るときがあるから、 こういう単位系を接尾辞で指定できるとすごくよい。
deg(180.0)とrad(pi)でよくね?
>>972 class i{
static invariant(Complex) opCall(real n){
return Complex(0, n);
}
}
として、i(10)のシンタックスシュガーとして10iで良くね? lexer/parser分離の問題も無いし。
>>973 実際そうやってるけど読みづらいのは確か。
>>974 その方法だとシンボルの衝突が結構面倒そうだというのが私見。
見つけにくいバグの原因になりやすいかと思う。
独自の後置演算子が定義できれば 180.0 deg てな感じにできるかな。
>>975 オーバーロードセットもあるし、シンボル衝突は問題ない気ガス。
>>976 deg,radが予約語になっちゃうのも如何な物かと
予約語にはならないでしょ。よく考えなよ
ユーザ定義リテラルがまともに使えれば C++の言う「intがふるまう様にすれ」が完全に実践できるな
ユーザ定義のリテラルが使える既存の言語ってある?
言語仕様を好き勝手拡張できるようになると、コードの可読性がすんごいことになりそうで恐い。 今でも既にmixin周りとか、コード文字列の断片が入り乱れて大変なのに。
D2.013が出た夢を見た。 ニヤニヤしながら新しく出たバグをつぶしている俺がいた。 俺はマゾかもしれん。
仕様がかわって、コンパイルエラーがでまくってるのを 修正する気持ちよさとみた
1.0のソースを2.0でコンパイルですね わかります
乙
Dおつ
static乙
_2ch[120262357][989].otsu();
lazy乙
auto スレ立て = 乙();