2013-01-01から1年間の記事一覧
Ubunt 13.04環境下でdmdをソースコードからビルドしてみます。g++やgitが必要です。 $ mkdir D && cd D $ git clone https://github.com/D-Programming-Language/dmd.git $ git clone https://github.com/D-Programming-Language/druntime.git $ git clone h…
前回は、LINEとFILEの挙動を修正するPull Requestについてでしたが、 http://codelogy.org/?p=960 最近、そのPull RequestがMergeされ、LINEとFILEの挙動が修正されました! LINEとFILEの挙動が修正されると、例えば import std.conv : to; import std.stdio…
以前、テンプレート引数として使われるLINEとFILEがバグっぽい挙動をするという記事を書きました。 http://codelogy.org/?p=471 が、つい最近、それを修正するPull Requestが来ました。 https://github.com/D-Programming-Language/dmd/pull/2617 ドキュメン…
std.exceptionにはifThrownという関数があります。ifThrownは、例外が投げられた時、投げられた例外に応じて任意の値を返すことができるものです。通常のtry catchよりも関数型な書き方ができます。 module main; import std.conv : to, ConvException; impo…
前回の記事では、どちらかというとビルドツールとしてのdubの紹介になりました。今回は、パッケージマネージャとしてのdubを見てみます。 code.dlang.orgに、dubで使用出来るパッケージの一覧があります。vibe.dや、derelictなどの名前が見られます。 前回の…
D言語のパッケージマネージャ兼ビルドツールであるところのdubが便利なので、導入しつつ軽く使ってみます。 Windowsの場合 ここに、インストーラがあります。 Ubuntuの場合 ここにLinux用のバイナリがあります。D-APTからでもインストールできます。 OS Xの…
無名再帰と言えば不動点コンビネータですね。 D言語だと、定義のとおりに不動点コンビネータを書けます。 R delegate(Args) fix(R, Args...)(R delegate(R delegate(Args), Args) f) { return (Args args) => f(fix(f), args); } ラムダ構文があるので、少し…
dmdのリリースサイクルが変わっていたようで、dmd 2.063.2がリリースされています。 http://dlang.org/download.html 2.063.1との変更点は、主に大きいバグ修正です。新しい機能などは含まれていません。 とりあえず、アップデートしておくといいですね。 担…
今、@k3_kaimuさんを中心に、D言語の入門記事である、d-manualが作られています! https://github.com/k3kaimu/d-manual/blob/master/readme.md まだ製作途中なので、「D言語の入門記事を書きたい!!」という方は是非Pull Requestを送ってみてください。 担…
unittestを取得する、__traits(getUnittests)が追加されました。 取得したunittestは呼び出すこともできます。 module hoge; import std.stdio; unittest { "test".writeln(); } void main() { __traits(getUnitTests, mixin(__MODULE__))[0](); // このモジ…
非テンプレート関数とテンプレート関数のオーバーロードが可能になりました。 今までは、 import std.stdio; string hoge(T)(T t) if(!is(T == int)) { return "template"; } string hoge(int i) { return "function"; } void main() { 12.0.hoge().writeln(…
Ubuntu 13.04環境でLDCをビルドしてみました。 LDCは、フロントエンドにdmd、バックエンドにLLVMを使う、D言語のコンパイラです。 まず、必要なものを用意します。 $ sudo apt-get install llvm g++ git cmake libconfig++9 libconfig++-dev ソースコードを…
パッケージを、モジュールとしてインポートする機能が追加されました。
dmd v2.063がリリースされました! 主な変更点を挙げていきます。
ふと、
構造体を比較する際、今までは、opEqualsが定義されていなければビット比較されていました。 ですが、ビット比較だと、
const教信者の方などは、すべての引数にinを付けたくなるかと思います。 が、引数にInputRangeを取る場合、それができません。 正確に言うと、出来ますが、InputRangeのはずなのに、InputRangeのように使えません。
local importでもUFCSが動くようになりました!!
関数内テンプレートが書けるようになりました!!
DIPに、Uniform tuple syntaxなる提案があります。
Health 2.0 Fukushima Chapter/Medical × Security Hackathon 2013の中の一つのイベントとして、D言語勉強会「Dの日」を開催しました!!
基本的に、-releaseでコンパイルすると、assert式は消えます。 が、assert(false)やassert(0)など、コンパイル時に絶対に失敗するとわかるassertは、-releaseを付けても消えません。
MODULEとFUNCTIONとPRETTY_FUNCTIONが追加されました。
無くなりました。 むしろ、今まで出来てたほうが不思議です。
rdmdにはすでに --main がありましたが、 dmdにも -main なるコンパイラスイッチが導入されました。
今までは、パターンマッチのあるis式は
今のところ、
D言語を使ってると、C++の名前空間のようなものが欲しくなる時があります。 D言語に名前空間なる仕様はありませんが、それっぽいことを実現する方法はいくつかあります。
先日、仕事でD言語を書いたのですが、ちょっとstd.jsonが使いづらくて困りました。
前回の記事に書いた通り、const(const(int))みたいなのは全部 const(int) immutable(int) shared(int) shared(const(int)) のどれかに収まります。 で、現状のstd.traits.Unqualは