読者です 読者をやめる 読者になる 読者になる

D言語のデータ構造

最近気づいたことがある。D言語には基本的なデータ構造がまったく揃っていない。queue, stack, set, priority queue, unordered_set, unordered_mapなど、C++に用意されている極めて重要かつ基本的なデータ構造がないのだ。これは困った。どうしてこんなこと…

テンプレートと型の制約

関数の基本的なスタイルはシンプルだ。関数には名前があり、引数があり、そして戻り値がある。それだけだ。 しかし、人は時に強欲で、これよりもさらに高級なことがしたいと思うことがある。その最たるものがテンプレートである。テンプレート自体は今や極め…

foreachでインデックスが取得できる喜び

昔ながらのfor文が煩わしい場合があるというのはよく言われることである。for文を使いたいよくあるシチュエーションとして、配列等のデータ構造の要素に順にアクセスしたい場合が挙げられる。この場合、後でデータ構造を変更する度に要素へのアクセス方法が…

契約プログラミングとエラー処理

関数のシグネチャは、その関数がどのように使われるべきものかを規定する。これはその関数を使うユーザとの間の取り決めのようなものである。しかし、シグネチャだけでは表現の幅に限界がある。例えば以下の関数を考えてみる。 double sqrt(double num); こ…

unittestのすすめ

unit testは数あるテストのうち、最初に行われるテスト工程である。これをきちっと行うのはソフトウェア工学的にはとても重要なことだと思うのだが、私はどうにもこれがめんどくさくて仕方がない。大学院時代にコードを書いていたときには、単体テストモドキ…

D言語の動的配列

私は大学院時代にずっとC++で開発をしていたのだが、その時に一番重宝したのはstd::vectorである。要素の追加・削除が簡単であるのに加え、at()関数を使えばメモリ境界のチェックもしてくれる。境界チェックに時間を割きたくなければ[]演算子で高速にアクセ…

dmdとgdcのあれこれ

さて、D言語を書こうと思った時にまず必要なのはコンパイラだ。私の知る限り、D言語のコンパイラは3つある。 dmd : 公式 gdc : gccのD言語フロントエンド ldc : LLVMがなんちゃら(よく知らない) 私はgccやg++に慣れ親しんでいたので、まずgdcを使ってみる…