D

v2.018

D

配列演算びみょー というか役にたたなすぎ。 a[] = a[] + b[]も出来ないなんて悲しすぎる。 おいおい配列同士で演算できないなんてゴミやん? あと a[] = a[] * 2 + 3もできないのが悲しい。 何が悲しくて a[] = (a[] * 2)[] + 3 とか書かなあかんねん。 と…

template thisはどうやるんだろう

D

D言語で急にコンストラクタをテンプレート関数にしたくなったんだけど、 どうすりゃいいんだろう? class Test{this(T)(T value){...}} 上のような書き方だとコンパイル通らないし。 とりあえずstd.boxer.Boxのclassを使ったような感じの実装しようとして悩…

D

わーいD2.013 D言語君の__FILE__と__LINE__は大分話が分かるやつになったらしい。 void check(T)(lazy T v,string file=__FILE__,int line = __LINE__){ if(!v)printf("Error: AssertError Failure %.*s(%d)\n",file,line); } void main(){ check(0); check(…

std.typecons.Tupleが使えない。

D

D言語(v2.012)のstd.typecons.Tupleがだめ過ぎる。 ええと、std.typecons.Tupleってのは簡単に言うとboost::tupleみたいなもんです。 ところが、こいつには問題があって、むちゃくちゃ大雑把に実装を説明すると struct Tuple(type){//説明のために1要素限定…

this(this)と~thisは死ねば良いと思うよ

D

D言語の新バージョンで遊んでみた。 struct S{} struct T{~this(){}} struct U{this(this){}} struct V{V opAssign(V x){return*this;} ~this(){}} void main(){ S a;a=a=a;//OK T b;b=b=b;//NG U c;c=c=c;//NG V d;d=d=d;//OK } ~this()かthis(this)が定義…

よくわからんけど通らない(win dmd v2.011)

D

とりあえず最小限のえらー発生コード void main(){ int[string]x=["AA":0]; cast(void)x["AA"]; } 連想配列リテラルなんて普段使わんから、 自分が悪いのかコンパイラ(+ライブラリ)が悪いのかよくわからん。 とりあえずは急場を凌ぐために void main(){ int[…

std.algorithm.mapが使えねー

D

久しぶりにD言語の愚痴を。 とりあえずstd.algorithm.mapがイマイチ。 なにが使えないかってmapの返す型です。 Ranges[0] map(string fun,Ranges...)(Ranges rs); 具体的にはこれ書こうとしてエラー出るのが嫌 map!(toInt)(words);//文字列の配列を数値の配…

v2.007

D

わーいD言語にopStarが来たー くろーじゃくんも嬉しいなっと ACM/ICPCアジア予選後に知って早く遊びてーとうずうずしてました。

D言語でのゴルフはコンパイラ等のバグとの戦い std.c.stdlib.d long strtol(char *,char **,int); /// ditto uint strtoul(char *,char **,int); /// dittostrtoulは正しいけどstrtolは間違ってる。 そんなわけでstrtolは使うな危険。というかなぜピンポイン…

D2.0

D

なんか色々追加されてるー

そういえば

D

D言語のはてなグループ(http://dprogramming.g.hatena.ne.jp/)が出来たみたいなので、 自分のD言語ネタはこれからはそちらで書くことにしてみました(http://dprogramming.g.hatena.ne.jp/kurimura/) まぁどうでもいいですがー

lambda?

D

D言語の無名関数って皆さんご存知ですか? これって便利っちゃあ便利なんですけど、 1行程度の関数を書くときに一々関数の引数の型書いたり、 {return hoge;}()のreturnって書くの面倒だったり色々不便です。 そんなわけで関数リテラルを簡易に書けた気分に…

v1.005

D

あ、あほだー。あほがおるー。 Walter氏はv1.00になっても暴走っぷりは変わらなそうで大安心。 個人的には安定より混沌のほうが好きだしね。 しかし、まぁ変態な機能を投入してきたなぁ。 とりあえずid:kurimura:20070126とかが完全にゴミと化したあたりに素…

文字列からシンボル取りたい。

D

文字列からシンボルがほしいときがたまにあります。 たとえば a = 2; b = 3; assert(u!("a + b = #{a+b}") == "a + b = 5"); みたいな物を作りたいときとか。 というか今日の更新はそんなのを作ろうとして、あまりにめんどくて挫折した残骸だったり が、そん…

tie

D

絶対誰かが既に書いてそうな気がするboost::tieっぽい奴。 import std.bind : Tuple , tuple; import std.typetuple : TypeTuple; template add_pointer(T){alias T*add_pointer;} template map(alias F){alias TypeTuple!() map;} template map(alias F,T..…

const構造体のメンバ変数がconstにならない問題

D

struct Point{int x,y;} const Point p = {0,0}; const x = p.x;//error! を解決しないと構造体をtemplateに渡しても旨みがないのは言うまでもない。

D言語の欠陥

D

D言語は、なんと関数の引数に構造体を渡せません!! 以下のようなコードを実行してみましょう struct X{} template id(X x){const id = x;} const x = id!(X.init); 上のようにid関数の引数を構造体にしてインタプリタを起動してみましょう。 インタプリタ…

うーむ

D

とりあえず、std.bindで遊びたくなって、関数のmemo化を実装してみたけどうまくいかない。 private import std.traits; private import std.bind; ReturnType!(F) memoize(alias F)(ParameterTypeTuple!(F) a){ auto t = tuple(a); static ReturnType!(F)[ty…

v.176

D

std.bindっていうboost::bindをインスパイアしたライブラリが出来たみたいです。 import std.bind; import std.stdio; import internal.qsort; void sort(T,Cmp)(T[]a,Cmp cmp){ auto ti = new class TypeInfo{ size_t tsize(){return T.sizeof;} int compar…

v0.175

D

なんかscope付けたらスタックに確保してくれるようです。 >type con > a.d class X{int a[1000000];} void main(){scope x = new X;} ^Z >dmd a.d >a.exe Error: Stack Overflowおー本当だー。 これで効率を気にして import std.c.stdlib; class X{ new(uint…

v0.168

D

outerとか微妙に便利な機能が搭載。 内部クラスで外部のthisに触りたいときがたまにあったので地味に嬉しい。あと、ローカル変数を配列リテラルで初期化できるようになりました。 void main(){ double[] x = [1.0,2.0,3.0]; }おーうまくいった じゃあ次はaut…

v0.167

D

D言語もついに配列リテラルがサポートされたー 記法は[exp1,exp2,exp3,...expN]みたいに書く。 配列の型は最初の要素の型の配列になる。 expは非定数式でも良いので結構便利です。 class A{} class B{} class C{} void main(char[][]args){ foreach(x;[new O…

可変長テンプレート関数

D

D言語の関数テンプレートはこういう書き方ができません T[] array(T)(T []dgs...){ return dgs.dup; }まぁ嫌だけど仕方がないかと思っていましたけど、 こういう誤魔化し方が通用するみたいです。 T[] array(T)(T a,T []dgs...){ return a ~ dgs; }インチキ…

さらに

D

某所でも紹介されていたscaseとcondもせっかくだから、値を返すように。 void f(T)(T[]...)は無理なので適当に~を使って回避。 struct Pair(F,S){ F first; S second; Pair[]opCom(){return this[0..1];} } Pair!(F,S) make_pair(F,S)(F f,S s){ Pair!(F,S)r…

dmd v0.165

D

ひゃっほー新バージョンは相変わらずヘンテコだなぁ。 とりあえず、boost::spiritっぽいコードが手軽に書けて素敵 id:shinichiro_h:20060822 最後に評価した値を返すifとかはテンプレート関数との併用でどうでしょ? T if_(Pred,T)(Pred delegate()p,T deleg…

暇つぶし。

D

D言語を使う人なら誰でも作りそうなコンテナ操作用の関数を自分も作ってみた。 まぁようするにC++の#includeみたいな感じです。 sequence.d traits.d 使い方の例として、素数を延々と表示してみます。 import sequence; import std.math; // 素数? bool isPr…

dmd v0.161

D

なんだかD言語の新バージョンが凄いです。 関数周りが大幅強化です。 とりあえず無名関数と関数テンプレートが凄い強化。 大体使い方はこんな感じ。 //関数の引数の手前にテンプレートパラメータを書く T map(T,Fn)(T a,Fn f){ auto x = a.dup; foreach(inou…

v0.155

D

新しいバージョンがいつの間にか出てるなぁ。 デバッガが付属するようになったみたいですね。 といっても自分にはあまり役に立たなそう。 自分はエラーはassertとunittestの嵐で殆ど打ち落とすからなぁ。 そんなわけでデバッガが必要になる場面に殆どならな…

RAII

D

直ぐに使い終わる一時オブジェクトをスタックに確保したい。 というのはよくあるんですけどD言語では簡単には出来ません。 なぜなら、new演算子がクラスのメンバとしてしか定義出来ないからです。 まぁ、それでも自前のクラスならnew演算子を定義してスタッ…

入れ子の定義

D

今日はD言語の関数テンプレートでふと思った。 関数テンプレートって入れ子に出来るのだろうか? というわけで、実験実験。 private import std.stream; template lexical_cast(To){ template lexical_cast(From){ To lexical_cast(From from){ To to; auto …