D

暗黙の関数テンプレート

D

dmd v0.149 D言語の新バージョンです 今回は楽しげです。ひゃっほー暗黙の関数テンプレートが来たぜー うひょー(この機能を切望していたのでテンションが無駄に上昇しています) struct pair(A,B){A first;B second;} template make_pair(A,B){ pair!(A,B) ma…

V.148

D

D言語の新バージョン。 今回はなかなか破壊的な変更が多めです。 なんか無駄に長くなったので続きを読む記法を採用

v0.147

D

正規表現のマッチ演算子が実装されたらしい。 A ~~ B //B はAを正規表現としたときにマッチする A !~ B //B はAを正規表現としたときにマッチしない あと、-runの引数のルールの変更とか。 -runの直後にファイル名をおく様になったらしい。 つまり #!dmd -ru…

D

http://www.digitalmars.com/drn-bin/wwwnews?digitalmars.D.announce/2645 I plan on integrating shinchiro's stuff. It's just too cool. お、なんかWalterさんが気になる事言ってる。 id:shinichiro_h:20051216#1134740218でのbacktraceの話ですね。ちょ…

dmd v0.146

D

D言語の新バージョンが出たわけなのです。 注目すべき新機能として なんと、識別子にinstanceが使えるようになりました。 古の時代にtemplateの実体化のキーワードとして、 採用されて以来ずーと予約語だったわけですが、ついに識別子へと進化しました。 こ…

D言語の心底どうでも良い話

D

さーてと、今日もまた、D言語のどうでもいい話でも書くか。dmdの有名だけどドキュメントされていない(はず、調べてないけど...)仕様に、 配列は自身を適用できる、第一引数に持つ関数はメソッドのように扱えるっぽい。 というのがあります。 import std.stri…

D言語のどうでも良い話。

D

D言語にはis式というのがあります。 is(Type) という式はTypeが型として正しければ真を返します。 次にtypeofというのもあります。 typeof(Exp)はExpの式の型を返します この2個を組み合わせると面白いことができます。つまり、 is(typeof(Exp)) という式はE…

D言語v0.142

D

さて、D言語の新バージョンが出たわけですが微妙です。 Added D interface file support, with much help from Dave Fladebo.とのことなので試してみましたが class A{this(){}} こんなソースで、コンパイラが死ぬ*1のでは、まだ機能として評価も出来ません…

メタプログラミング大好き

D

さてと最近はコードの短縮化を話題にしていましたがD言語の話題へ戻りましょう。 いまさらですが、dmd v 0.140が出ました。特に楽しそうなのはtemplateの引数に文字列と浮動少数が使えるようになった点。 今までだとtypedefを使う微妙なコードを書かなくては…

V0.138

D

とりあえずD言語V0.138のオモシロそうな機能として, "string"[constant]と"string"[constant..constant]が 定数になるというのが追加された。これを応用すると[id:kurimura:20050521]に書いた奴がよりスマートに書ける。 template ULtoString(ulong n,int b:…

v0.137

D

D言語に型推論 キタ━━(゜∀゜)━━ドキュメントを参考にすると、こんな風にやるみたい。 static x = 3;// x は int 型 auto y = 4u;// y は uint 型 const s = "string";// s は char[6]型 class C { ... } auto c = new C();// c は Cのハンドルのインスタン…

D

D言語のv1.33が出たみたい。 std.mathの関数にC言語の関数が追加されたらしい。あとは微妙なDdocの微妙な変更。(まだ試してないんでよく知らんけど)

D言語 v1.32

D

今回は非常に微妙なDdocが追加されたのみ。 使ってみたけど正直微妙。 今の段階では、まだDoxygenのほうを自分なら使う。

""c in a

D

void main(){ void[char[]]a; ""cin a; }これが通るのは、バグのような気もするが、 仕様のような気もするので気にしないでおこう。

Dに望むもの

D

関数テンプレートが欲しい。 関数内関数を関数外に出ても有効になるようにして欲しい。 *演算子(参照外し)のオーバーロードを出来るようにして欲しい。 functionとdelegateを統一して欲しい。別に今あげた機能は無くても問題無いですが、凄く欲しい機能。 た…

D

昨日の物(http://www.kmonos.net/wlog/52.php#_0212050903)は 継承を使うのが一番自然と気づいたので追加。 template fix(T){alias T fix;} class memo(T):T{ int memo[int]; int opCall(int a){ int*p = a in memo; return !p?memo[a] = super.opCall(a):*p…

D

http://www.kmonos.net/wlog/52.php#_0212050903 この記事をみて面白そうなのでD言語で書いてみた。 memoの部分も綺麗に書きたかったが方法が思いつかなかったので断念。 でもfixの部分を綺麗に書けたから満足としておくか。 template fix(alias f){alias f …

末尾再帰

D

int main(char[][]args){return main(args);}このプログラムを実行すると当然スタックオーバーフローになる。 ......と思ってたのだが、実行するとなぜか、そうならない。*1どうやら、dmd は末尾再帰の最適化を実装しているようだいままでD言語でプログラム…

D

D言語v0.128 おー新バージョンだ。 んーと、std.stream.Stream.scanfの代わりにstd.stream.Stream.readfを使うようになったのか。 ......それでも引数の手前に&を付けてポインタにしないと駄目なのはscanfと同じか。それが少しめんどくさいな。 まー文字列を…

v0.126

D

あーiftypeが即座に非推奨になってますねぇ。 というか全体的に変更を多いなぁ。 今回のバージョンで印象に残ってるのは とりあえず、!is演算子の追加ですね。それにともなって===と!==が非推奨にもなったみたいです。 個人的には、a!==bと書くべきかそれと…

D

D言語の新たに追加されたiftype文ですけど、これは暗黙的な変換を許容します。 たとえば template eq(A,B){ iftype(A:B){pragma(msg,"0");} else{pragma(msg,"1");} }というコードを実行すると0が表示されます。 暗黙的変換を許容するって便利なことも多いけ…

D

さてと前回書いたtemplateだけじゃ何の役に立つか全然分かりません。 なのでどういう時に使うか書いておきます。 まず一番の利点は、pragma(msg)に出力できることです 残念ながらpragma(msg)は文字列しか出力できません。 なので前回のtoStringによって文字…

D

さてと、D言語でメタプログラムの練習がてらに、こんなん書いてみました template toString(ulong N){ static if(N>=10)const char[]toString = .toString!(N/10) ~ .toString!(N%10); //else const char[]toString=['0'+N]; //なぜかエラーtemplate toStrin…

v.0.124

D

うわー。 iftypeとstatic ifってなにそれw コンパイルタイムプログラミング万歳 あとはboxingも追加か。 こっちは暗黙的ではなくて自分でboxingするのがメンドクサー 気持ち的にはboost::anyみたいな感じですね 今回のバージョンは面白そうですね 追記 えー…

v1.23

D

いつの間にかバージョンアップしてた コンパイラが落ちないって素敵ですね

v0.122

D

最近std.streamへの変更が多いなあ。 まぁ問題が出るようなところはないんで問題なし。 あとはstdinに日本語入力してもエラーが出なくなると良いんだけどなぁ。 現状だとMBSとしても受け取ることが出来ないから追記 Stream stdin = new BufferedStream(std.s…

疑問

D

プログラム書いてて思ったこと OutBufferとMemoryStreamって役割被り過ぎ。 どう考えてもOutBufferは不要な気がする。 というかphobosって結構ライブラリが重複しているところがあるなぁ。

D

v0.121 特に自分の使用上の変化無しっと。

D

D言語って ポインタのメンバを示すには->演算子を使わずに.だけでできるような言語仕様ですよね。 でもポインタのポインタだと無理なんです。 struct hoge{ int hage; } void main(){ hoge a;//まずは実体から a.hage;// OK hoge*b=&a;//つぎはポインタ b.ha…

v.120

D

とくに面白いネタ追加はなかった。 少し嫌なのは定義済みversionのAMD_64がX86_64に変更されたこと。 まあ後で適当に書き直すか。 追記: ちゅうかphobosのAMD_64の部分書き換えてないやん。 まぁ実害はないからもう放置で良いか。