Jump to page: 1 2
Thread overview
February 18, 2011

HTML5 desteği helper kısmında işe yaramaz.Çünkü her fonksiyonda uygun kod parçacığını elle oluşturuyoruz.

Öbür kısımlarda HTML5'in işe yarayacağını zannetmiyorum.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 18, 2011

Yeni/Değişen Özellikler:

-Linux için 64 bit desteği

-Uygulanan exception chaining, TDPL'de açıklanan Şu anda yalnız windows için. (Ne olduğunu bilmiyorum.)

-std.random: rasgele Xorshift üreticisi eklendi.

-Html5 elemanlarına destek.(Web framewrok için bir işe yarar mı?)

-Tarihler ve saatler kullanım için std.datetime eklendi.(Diğerleri yani std.date ve std.gregorian önerilmiyor.)

-Std.file Çeşitli fonksiyonları (isfile yerine isFile gibi) Phobos'un adlandırma kurallarına uygun olarak yeniden adlandırıldı.(Eski adların kullanılması önerilmiyor.)

Bir çok hata düzeltilmesi var.

Değişikler tam liste :http://www.digitalmars.com/d/2.0/changelog.html
İndirme Bağıntısı :http://www.digitalmars.com/d/download.html

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 18, 2011

std.xml modülüne şöyle bir baktım. Ne kadar kapsamlı... :) Kullanışlılığı konusundan hiçbir fikrim yok ama kod iyi ve okunaklı yazılmış.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 19, 2011

Bu sürüm sanki dersanedeki cstream kodlarının kalkması gerektiğini veren bir sinyali gibi değil mi :-P

Örn: Kadir Can'ın hatırlattığı karakterler dersinin 3.sorusunun yanıtı doğru çalışmıyor. Artık şöyle olması gerekiyor:

import std.stdio;
import std.uni;

void main()
{
   dchar harf;
   dchar sonuç;

   write("Dönüştürülecek harf? ");
   readf("%s",&harf);

   if (isUniLower(harf)) {
       // Küçükmüş; büyütmemiz gerekiyor; i'yi kendimiz
       // dönüştürmeliyiz

       if (harf == 'i') {
           sonuç = 'İ';
       } else {
           sonuç = toUniUpper(harf);
       }

       writeln("Büyüğü: ", sonuç);

   } else if (isUniUpper(harf)) {
       // Büyükmüş; küçültmemiz gerekiyor; I'yı kendimiz
       // dönüştürmeliyiz

       if (harf == 'I') {
           sonuç = 'ı';
       } else {
           sonuç = toUniLower(harf);
       }

       writeln("Küçüğü: ", sonuç);

   } else {
       writeln("HATA: ", harf, " bir harf değil");
   }
}

Bu arada Andrei Alexandrescu'nun röportajını okumaya çalışıyordum. Orada D3 gibi bir şey planlamadıklarını söylüyordu sanırım. Tam ona sevinecektim ki sonra farkettim. D3'e gerek yok. Şuan bile her sürümde bizim projeler derlenemez hale geliyor. :-P Yani ben Tangocu larsiviye neden D2'ye taşımıyorsunuz dediğinde verdiği yanıt gibi oldu bu sürüm :-D

Etkilen projeler: dkv(ve tabiki üst sürüm dkvG). trileri. ve turnada çok basit bir hata vardı. Onu saymasakta olur :-D

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 19, 2011

Ben cstream'i kaldırmaya 2.051'de başlamıştım ama bir noktadan ileriye gidememiştim. Durum 2.052'de daha iyi ama doğrusu inanılmaz hatalar da var. Kızıyorum ama kızmaya hakkımız da yok gibi geliyor. Bedava bir ürün alıp oynuyoruz; kızmaya hakkımız var mı? Veya ben niye bu güne kadar oturup stdin'den okuma işini kendim halletmedim?

Şu kod ikinci sayıyı okuyamıyor:

import std.stdio;
import std.conv;

void main()
{
   foreach (i; 0..3) {
       int sayı;
       writef("%s: Lütfen bir sayı girin: ", i);
       readf("%s", &sayı);
       writefln("   Okudum: %s", sayı);
   }
}

Nedeni, C'den beri bilinen davranış: bir önceki girilen sayının sonundaki '\n' karakteri hâlâ girişte durduğu için onunla başlayan karakterler int olarak okunamıyorlar.

Çözüm, C'nin scanf'inde de olduğu gibi '" %s"' kullanmak. Düzen dizgisi içindeki boşluk karakteri bütün boşlukları (tab ve '\n' dahil) yutar. O zaman çalışıyor. Tamam, bu o kadar önemli bir konu değil; anlatılır. (Sanırım artık ddio.d modülünün Phobos'a alınmasını teklif edeceğim; bu kadar beklediğim kabahat. (Ama siz bana söylemiştiniz. :)))

Asıl önemli hata şu:

import std.conv;
import std.string;

void main()
{
   char[] giriş = "1.5e3".dup;
   double beklenen = 1500;
   double d = parse!double(giriş);
   assert(d == beklenen, format("%s umduk; %s çıktı", beklenen, d));
}

O program şu hatayla sonlanıyor:

'core.exception.AssertError@deneme.d(27781): 1500 umduk; 15 çıktı'

Dün akşam kapsamlı bir birim testi yazmaya başladım. Bir hata açıp "şu birim testlerinin hepsinin geçmesi gerekiyor" diyeceğim.

Kendim çözebilirsem kod değişikliğini de hataya ekleyeceğim.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 20, 2011

Alıntı:

>

Bedava bir ürün alıp oynuyoruz; kızmaya hakkımız var mı?

Yok ama biz de o kadar emek harcıyoruz(Tamam kabul biz değil :-D Siz. ). Eğer onların işine gelmese neden bedava sunsunlar? diye sorulabilir. (
Ayrıca para vermiyoruz demek hatta emek vermiyoruz demek bedava kullanıyoruz demek değildir! Eğer biz kullanmasak onlarda yapmayacaktı. Demek ki bizden bir çıkarları vardır. Egodan başka bir şey :-) ) Onlar başka bir şey der bizde başka bir şey. Bu konu uzar hatta çocukca bir hal alır :-) Ancak tabiki onlar düzeltmeye çalışıyor. Bizde kullanmaya. O zaman sorun yok. Nerden geldik ki bu konuya :-P

Alıntı:

>

import std.conv;
import std.string;

void main()
{
char[] giriş = "1.5e3".dup;
double beklenen = 1500;
double d = parse!double(giriş);
assert(d == beklenen, format("%s umduk; %s çıktı", beklenen, d));
}

Bende olması gerektiği gibi çalışıyor :-D Hatta e+ ve e- ilede denedim yine olması gerektiği gibi çalıştı :-)

Ancak şu biçimde derleyemedim. dup ile ilgili unuttuğum ne var ki anlayamadım.:

   double f = parse!double("1.5e3".dup);

Alıntı:

>

Dün akşam kapsamlı bir birim testi yazmaya başladım. Bir hata açıp "şu birim testlerinin hepsinin geçmesi gerekiyor" diyeceğim.

Göndermeden bir gün önce bizede göstrerirseniz belki bizimde aklımıza bir iki şey gelir ve ekleriz. Belki.

Alıntı:

>

(Sanırım artık ddio.d modülünün Phobos'a alınmasını teklif edeceğim; bu kadar beklediğim kabahat. (Ama siz bana söylemiştiniz. :)))

Yok ancak sizde haklıydınız. Dedikleriniz:
Alıntı:

>

Bu konudaki bir soruyu çözemiyorum: C ve C++ gibi, D'de de aslında konsol diye bir kavram yok. Var olan, standart giriş ve standart çıkış akımları. (Bunları daha önce konuştuğumuzu biliyorum.)

O akımların klavye ve ekrana bağlanmaları, programı başlatan ortamın bir marifeti.

Sonuçta, konsol diye bir kavrama sahip olmayan bir dilin standart kütüphanesinde bir insanla konsoldan iletişime yönelik modüller bulunmalı mı?

Bence bulunmamalı. Zaten herhalde o yüzden de C ve C++'ta da yok.

İşte böyle bir çelişki içindeyim. :)

Başka bir sakınca, ya programı başlatan kişi programın çıktısını başka bir dosyaya gönderdiyse? Bizim programımızın bundan haberi olmuyor. Biz ekrana "Yaşınız kaç?" diye sorsak, konsolda oturan insan bunu görmüyor.

Bence en doğrusu Phobostan farklı ikinci bir kütüphane daha yazılması. Bu standart kütüphanede bulunmaması gereken özel sorunlar ve çözümler için kullanılabilir. Aslında bunun hakkında Andreinin ve bir kaç tango geliştiricisinin fikri alınabilir. Yoksa biz burada sadece bir çok şey için eklenmeli ya da eklenmemeli diye papatya falı bakacağız.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 20, 2011

Alıntı:

>

Konunun onunla ilgisi var ama kendi yazdığım işlevlerde aynısını gözlemleyemiyorum. .dup'un bir özelliği ile ilgili olabilir. Öğrenince yazacağım. Ya da hızlı olsun istersen sen D.learn'e sor. :)

Kendi yazdığınız işlevide buraya koyarsanız onuda, ama bakın bu çalışıyor diye koyarım.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 20, 2011

Alıntı (canalpay):

>

Alıntı:

>

import std.conv;
import std.string;

void main()
{
char[] giriş = "1.5e3".dup;
double beklenen = 1500;
double d = parse!double(giriş);
assert(d == beklenen, format("%s umduk; %s çıktı", beklenen, d));
}

Bende olması gerektiği gibi çalışıyor :-D Hatta e+ ve e- ilede denedim yine olması gerektiği gibi çalıştı :-)

Yani d'nin değeri 1500 mi oldu? Güzel. :) Ben 64 bitlik Ubuntu üzerinde .deb pakedinden 2.051 kurmuştum. 2.052'yi ise .deb pakedini göremediğim için bir klasöre açarak kurdum. (Şimdi baktım: .deb pakedi hâlâ yok.)

Belki de benim tarafta klasör karışıklıkları ile ilgili bir durumdur. Biraz daha deşeceğim.

Alıntı:

>

Ancak şu biçimde derleyemedim. dup ile ilgili unuttuğum ne var ki anlayamadım.:

>     double f = parse!double("1.5e3".dup);
> ```


Şu şekilde yanıt vermeye başlamıştım ama ispatlayamadığımı farkettim. Bu bilgiler doğru ama ilgisiz de olabilir:

'parse, yan etkisi olan bir işlev olduğunu belgeliyor. İşini yaparken kendisine verilen dizgiyi tüketir. Böylece çağıran taraf parse'ın okuduğu yerden ve belki de başka biçimde devam edebilir.

Yukarıdaki kullanımda parse'a gönderilen parametre bir geçici değişkendir. C++'dan gelen bir kural: "geçici nesneler, const olmayan referanslara bağlanamazlar" (temporaries cannot be bound to non-const references).

Aslında daha doğrusu, "geçici nesneler" değil, "rvalue'lar"dır. Yani "rvalue'lar const olmayan referanslara bağlanamazlar." Ama yukarıdaki gibi "geçici nesne" örnekleri anlatım açısından yeterli oluyor.

Bu kuralın nedeni şu: parametre const olmadığında işlevin onda değişiklik yaptığı düşünülüyor. Geçici nesneler durumunda ise o değişikliklerin çağıranın tarafında görülebilmesi olanaksız. Örneğin senin yukarıdaki satırında parametre olarak giden değişkende oluşan değişiklikleri, işlev döndükten sonra gözlemleyemeyiz. Oyüzden ben 'giriş' diye bir değişken kullanmak zorunda kaldım. (Benimki rvalue değil, lvalue olmuş oldu.)

Zaten özellikle bu konuyla ilgili olarak, işlev parametrelerini olabildiğince 'const' seçmemiz gerekir. Yoksa işlevin kullanışlılığı azalır. Yanlış tasarlanmış bir işlev:
'

Konunun onunla ilgisi var ama kendi yazdığım işlevlerde aynısını gözlemleyemiyorum. .dup'un bir özelliği ile ilgili olabilir. Öğrenince yazacağım. Ya da hızlı olsun istersen sen D.learn'e sor. :)

Ali

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
February 20, 2011

Gerek kalmadı çünkü aklım başıma geldi. :)

Yukarıda anlattıklarım geçerli. Aynı durumu kendi işlevimizde görebilmek için parametresini ref yapmak gerekiyor.

void noktala(ref char[] metin)
{
   metin ~= '.';
}

void main()
{
   noktala("merhaba".dup);
}

O kod derlenemez çünkü .dup'un döndürdüğü char[]'da yapılan değişikler kaybedilir. C++'da olduğu gibi, dil buna izin vermiyor. İşlevin bir lvalue ile çağrılması için:

   char[] d = "merhaba".dup;
   noktala(d);

O çalışıyor.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 23, 2011

Alıntı (canalpay:1298222839):

>

Alıntı:

>

import std.conv;
import std.string;

void main()
{
char[] giriş = "1.5e3".dup;
double beklenen = 1500;
double d = parse!double(giriş);
assert(d == beklenen, format("%s umduk; %s çıktı", beklenen, d));
}

Bende olması gerektiği gibi çalışıyor :-D Hatta e+ ve e- ilede denedim yine olması gerektiği gibi çalıştı :-)

dmd'yi '-m64' seçeneği ile mi çalıştırıyorsun? Öyle yapınca bende de doğru çalışıyor. '-m64' kullanmayınca çıktı şu:

'core.exception.AssertError@deneme.d(28123): 1500 umduk; 15 çıktı'

İşin garibi dmd'nin ekrana döktüğü seçenekler arasında '-m64' yok! :-/ Ama şu sayfada var:

http://www.digitalmars.com/d/2.0/dmd-linux.html

Amatör bunlar... ;)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

« First   ‹ Prev
1 2