Merhaba,
Bu sınıfta gerçekten yetenekli şablonlar var ve elbette, artık yavaş bilgisayarlar ve depolama sıkıntıları yok. Şimdi Ali hocam bu ve benzeri nedenlerden dolayı bu başlığı gereksiz görebilir. Çünkü daha önce bu tür optimizasyonların gereksiz olduğunu konuştuk. Ayrıca Phobos kütüphanesinin, bize getirdiği sağlam güvenlik önlemleri sayesinde daha az yan etkisiz programlar üretebiliriz. Tıpkı printf'in hassasiyeti ve writef'in muazzam esnekliği (ama tam güvenliği) gibi...
Neyse, aradaki farkları göstermek için 3 sürümle derlenebilen (-version=... parametresi kullanılmalı) küçük bir deneme yaptım. Çünkü insan ister istemez soruyor aynı işi yapıyorsa, neden? Elbette cevaplarını önceki paragrafta işaret ettim. Gerçi önceden de basit ekrana yazan uygulamalar için çekirdekteki printf'i kullanılmasını önermiş ve benzer bir analiz yapmıştım...:)
/*
converter.d (26.07.2012)
*/
version(std_yok) {
import core.stdc.stdio: printf;
uint pow10 (uint i) {
uint p = 1;
foreach(x; 0..i) p *= 10;
return p;
}
int toNum (string args) {
int n, magicNum = 48;
foreach(a, arg; args) {
n += (cast(int) arg - magicNum) * pow10(args.length - a - 1);
}
return n;
}
}
version(stdio_yok) import std.conv, core.stdc.stdio: printf;
version(std) import std.conv, std.stdio;
void main() {
string sayı = "123";
version(std_yok) { // Linux32'de 249.306 bayt
int i = sayı.toNum;
printf("%d x 3 = %d\n", i, i * 3);
}
version(stdio_yok) { // Linux32'de 373.641 bayt
int i = to!int(sayı);
printf("%d x 3 = %d\n", i, i * 3);
}
version(std) { // Linux32'de 426.686 bayt
int i = to!int(sayı);
writef("%d x 3 = %d\n", i, i * 3);
}
}
Şahsen std.stdio sınıfını çok şişkin buluyorum. Bunu ikiye bölseler ne güzel olurdu. Ayrıca bu sınıfı kullanmayınca ^^ matematiksel işlemi için std.math'ı import etmem gerektiği uyarısını aldım. O yüzden 'pow10()' diye bir işlev yazdım. Hoş bu sayede %100 C uyumlu hale geldi. Çünkü onda da bu işarete hata vermekteydi. İşin ilginci bu basit denemeyi C'de yazsanız 7-8 KB...:)
Başarılar...
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]