Reddit'teki tartışması:
https://www.reddit.com/r/programming/comments/6xf77f/version_20760_of_dmd_the_d_reference_compiler/
dmd sürümleri artık belirli bir düzene oturuyor:
Bir önceki sürümden bu yana fazla zaman geçmediğinden bu sürümde alışık olduğumuzdan daha az değişiklik var ama bunlardan iki tanesi çok önemli:
-
static foreach
-
Geliştirilmiş -betterC
D'de static foreach zaten var gibi bir şeydi: AliasSeq gibi derleme zamanı düzeneklerinin normal foreach ile kullanımları sonucunda foreach bloğu her döngü için açılıyordu. static foreach en azından iki farklılık getiriyor:
-
foreach'in kullanılamadığı yerlerde de kullanılabiliyor. Örneğin, modül kapsamında veya bir yapının içinde kullanabiliyoruz.
-
Derleme zamanı düzeneği olmayan (ama tabii ki derleme zamanı bilinmesi gereken) ifadelerle de kullanılabiliyor.
Aşağıda iki farklı biçimde kullanılıyor.
import std.stdio : writefln;
import std.meta : AliasSeq;
import std.range : iota;
alias Türler = AliasSeq!(int, double);
// Modüle iki işlev ekleniyor
static foreach (Tür; Türler) {
Tür ikiKatı(Tür değer) {
return değer * 2;
}
}
unittest {
assert(ikiKatı(42) == 84);
assert(ikiKatı(1.25) == 2.5);
}
void main() {
// Buradaki iota ifadesi normalde çalışma zamanında
// işletildiğinden eskiden olduğu gibi foreach ile kullansak,
// döngü çalışma zamanında ilerletilirdi. Adı üstünde, static
// foreach, döngünün derleme zamanında işletilmesini şart
// koşuyor. Sonuçta, alt alta 3 writefln yazılmış gibi derleniyor.
static foreach (i; 3.iota) {
writefln("Merhaba %s", i);
}
}
-betterC dmd seçeneği, D çalışma zamanını (D runtime) iptal ediyor. Çok basitçe, çöp toplayıcı gibi güzellikler kullanılamıyor ve dmd'nin ürettiği kod C kadar küçük boyutlu olabiliyor. Walter'ın söylediğine göre, bu olanak C programlarındaki işlevlerin ek bellek masrafı getirmeden teker teker D'ye geçirilmelerini sağlıyor.
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]