...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

D言語

core.sync.*を使ってみる

色々教えてもらってすごくありがたいけれど,全然理解できなくてしょんぼり.勉強が足りなさすぎる・・・orz とりあえず動いているように見える・・・が? import std.stdio, core.thread, core.sync.condition, core.sync.mutex; class Actor { private con…

Issue 5328 - The addressof-expression that should be rejected is accepted

本文では全然説明してないですが「"m"がインスタンスメソッドなのに"&A.m"と書けてしまっているけどこれバグじゃないの.クラス定義の中ではちゃんとエラーになるけど外ではエラーにならないで実行時にならないと問題が発覚しなくなっているよ」というつもり…

non-static member functionのアドレスを取る

import win32.windows; import core.thread; import std.stdio; class A { this() { EnumWindows(&A.enumWindowsProc, 0); // ここではコンパイルエラーになるのに } /*static*/ BOOL enumWindowsProc(HWND hwnd, LPARAM lparam) { return TRUE; } } void ma…

std.concurrency.spawnで実行しているスレッドでのassertが捕捉されない

ずっとassertが使えなくて困っていたのですが,ふと思いついて試してみたところ, AssertError型を自分で捕まえるtry-catchを自分で書かないといけないことがわかりました. import std.stdio; import std.concurrency; void f() { //try //{ writeln("1"); …

Null object Pattern

メソッドを呼ぶ前にnullチェックを呼ばなくてもよくするパターン. import std.stdio; // 誰かが作って中身を変えられないコード //////// enum 乱数 = 1; interface I { void m(); } class A : I { override void m(){ writeln("hi"); } } I foo(){ if (乱…

Decorator pattern

インスタンスを包含して機能を拡張するパターン. import std.stdio; interface Ice { string name(); } class VanillaIce : Ice { override string name() { return "バニラアイス"; } } class ChocorateSomeIce : Ice { Ice ice; this(Ice ice) { this.ice…

Composite pattern

入れ物と中身を同一視するパターン. import std.stdio; interface Element { uint countChilds(); void append(Element c); } class Folder : Element { private Element[] elems; override uint countChilds() { uint sum; foreach (c; elems) { sum += 1 …

scopeがなくなるらしいので

色々お話しましたがもう自分用にこれでいいやと思った. import std.stdio; struct AutoDeleted(T) { private T t; public this(Args...)(Args args) { t = new T(args); } public ~this() { delete t; t = null; } private @disable this(this){} public al…

std.concurrency.receiveってそういうもんじゃねえし

というわけで,頑張った割りに意味なかったらしいorz receiveに複数のdelegateを与えたら分岐するんだね. via. http://www.curoles.com/j/dstdconcur.html import std.stdio; import std.concurrency; struct A { int v; } void test() { for(bool fun = tr…

とある学生の仮想端末《ジョークコード》

とある高校にて 誰かがコンピュータ室にある1台のPCに,あるBASICプログラムを置いておいた. しばらく経ち,ひとりの学生がそのプログラムの存在に気づき, 何気なく実行してみた. すると,こともあろうに,FDDのアクセス音と,FDDのすべてのファイルを削…

USTでD言語生放送

何日か前に第一回みたいなものをやりましたが,だらだらとD言語の仕様を思いついたものから説明した後,D言語自体のデバッグをしてただけでしたw

UST試験配信終了

Vol.0ということで試験配信してました. 次は音声を入れられるようにしたいです.

dmd r627とdfl r97でdmdがクラッシュ

nextがnullになっていてアクセス違反で落ちてる. 何が原因だろう. std.socket.dが怪しい? type *TypeFunction::toCtype() { type *t; if (ctype) return ctype; if (1) { param_t *paramtypes; tym_t tyf; type *tp; paramtypes = NULL; size_t nparams =…

dsource.orgのプロジェクト活性度ランキング(完全版)

http://dsource.org/projects/ の全プロジェクトの最終更新日時から,プロジェクト活性度ランキング(完全版)を作ってみました*1. ではどうぞ. *1:C++とboostで(ボソッ

dsource.orgのプロジェクト活性度分布

縦軸がそのプロジェクトの最終更新日時で,横軸がそのプロジェクトの全プロジェクト中における最終更新日時順位(=活性度ランキングの順位)です. こうしてみると,割と普通な感じがします. 何か面白いグラフにできないですかねえ.

dsource.orgのプロジェクト活性度ランキング(暫定)

追記:完全版ができました(dsource.orgのプロジェクト活性度ランキング(完全版) - ...ing logging 3.0). http://dsource.org/projects/ の全プロジェクトの最終更新日時から,プロジェクト活性度ランキング(暫定)を作ってみました*1. ではどうぞ. *…

typename

まずはC++. #include <iostream> template <typename T> struct A { typename T::X v; }; struct B { typedef int X; }; void main() { A<B> x; x.v = 42; std::cout << x.v << std::endl; } 次にD言語. import std.stdio; struct A(T) { T.X v; } struct B { alias int X; } void m</b></typename></iostream>…

通らなくなっている inout

inout(type)[] or inout(type[])? - ...ing logging 3.0 dmd 2.037ではダメっぽい.

@disableな関数をmixinするとどうなるか

mixin template Foo(T) { void f(){} void f(T){} } template Bar(T) { mixin Foo!T; @disable void f(){} @disable void f(T){} } mixin template Boo(T) { @disable void f(){} @disable void f(T){} } template Woo(T) { mixin Boo!T; void f(){} void f(…

(Dis)patchがあるならば

(Dis)patchがあるならdiffがあっても・・・というわけで,いらんことを思いついた. template Hoge(T) { void f(){} void f(T){} } template Fuga(T) { void f(T){} } diff Hoge!int Fuga!int Diff; void main() { Diff.f(); Diff.f(int); // Hoge!intにもFu…

FiberRange

特に意義はない. import std.stdio; import std.conv; import std.range; import core.thread; class A { int x, y; string toString() { return "(" ~ to!(string)(x) ~ "," ~ to!(string)(y) ~ ")"; } } void fun(A a) { // writeln a.x++;//1,0 Fiber.yi…

メンバ初期化子

youxkei D言語はメンバーの初期化子が使えないのかぁ、まあ確かに使えたら初期化の順番とかが曖昧になるけどね。けど冗長な気がしてならない http://twitter.com/youxkei/status/13793155517 import std.stdio; class A { this(int i) { } } class B : A { t…

仮想関数のディスパッチ

import std.stdio; interface I { void f(); void g(); } class A : I { class B { void f() { writeln("hello"); } void g() { writeln("world"); } } private B b; this() { b = new B; } auto opDispatch(string name)() { mixin("b." ~ name ~ "();"); }…

dmd2.045

そろそろD2.xの開発が終わりに近づいていますね. 以前はunittest内で1つのassertに失敗するとそこで実行が止まってしまいました. 現在では,既に,すべてのunittestを検査してくれるようになりました. これで,これまでよりもさらに開発に使いやすくなり…

shared static this モジュールコンストラクタ - dmd2.040

Added shared static constructors/destructors, regular static constructors/destructors now deal with TLS import std.stdio; import core.thread; class X { int v; } static X a; static this() { a = new X; a.v = 1; } shared static X b; shared st…

@disable - dmd2.040

Add @disable attribute import std.stdio; struct A { @disable this(this) {} // コピー禁止 } void main() { A a, b; a = b; // error } C++ではコピー禁止にするためにコピーコンストラクタやoperator=をprivateメンバにする方法がありましたが,D言語で…

interfaceにstatic/finalメンバ関数 - dmd 2.040

added static/final function implementations to interfaces import std.stdio; interface I { static int f() { return 1; } } class A : I {} void main() { I i = new A; writeln(i.f()); } staticメンバー関数を配置するために,IとAの間にそのためのク…

D基礎文法最速マスター

というタイトルではないですが, Perl基礎文法最速マスター Ruby基礎文法最速マスター というのが流行っているようなのでD言語をいじってみたい人はどうぞw http://rayerd.plala.jp/pukiwiki/ingwiki/index.php?C%2FC%2B%2B%E3%81%AB%E7%96%B2%E3%82%8C%E3%…

inout(type) or inout(type)?

http://www.digitalmars.com/d/2.0/function.html inout(int)[] foo(inout(int)[] a, int x, int y) { return a[x .. y]; } ふむ. import std.stdio; inout(int)[] f(inout(int)[] a, int x, int y) { return a[x .. y]; } void main() { auto b = f([1,2,3…

enumに対するforeach (2)

import std.stdio; import std.typecons; import std.typetuple; template OddElements(T...) // 省略 template EvenElements(T...) // 省略 alias TypeTuple!( //要素定義 / 表示用テキスト "Read", "読み込みモード", "Write", "書き込みモード", "Append"…