| |
| Posted by İsmail Emre ARIKAN in reply to Ali Çehreli | PermalinkReply |
|
İsmail Emre ARIKAN
Posted in reply to Ali Çehreli
| On Friday, 18 February 2022 at 16:35:03 UTC, Ali Çehreli wrote:
> On 2/18/22 07:37, İsmail Emre ARIKAN wrote:
>
> >> Yani bu otomatik tür dönüşümlerinin gariplikleri bitmez. :)
> > Bunu bilmiyordum hocam. :)
>
> Tamsayı terfileri (integer promotions) ve otomatik dönüşümler C++ ve D'ye C'den geçmiştir. Hep kafa karışıklıklarına ve hatalara yol açarlar.
>
> Aşağıdaki programın çıktısını çalıştırmadan yanıtlamaya çalışın:
>
> import std.stdio;
>
> void main() {
> int[10] dizi;
> writeln(-11 + dizi.length);
> }
>
> dizi'nin uzunluğu 10 olduğuna göre, -11'e 10 eklersem herhalde -1 yazılır. Yazılmaz! :)
>
> Burada, şurada anlatılan kurallardan biri uygulanıyor:
>
>
> http://ddili.org/ders/d/tur_donusumleri.html#ix_tur_donusumleri.terfi,%20tamsay%C4%B1
>
> (Kitabın ileri bir noktasında olsa da oradaki hem int terfileri hem de aritmetik dönüşümler önemlidir.)
>
> Eğer 64 bitlik bir ortamdaysanız, uygulanan kural, oradakilerin en sonuncusudur:
>
> 4. Hiçbirisi değilse işaretli tür işaretsiz türe dönüştürülür
>
> Dizilerin .length niteliği size_t'dir. size_t, 64 bitlik ortamda ulong'dur. -11 int'tir, int işaretli türdür; o yüzden -11 önce ulong'a dönüştürülür, kocaman bir değer olur ve o değerden 10 çıkartılır.
>
> Bu saatten sonra yapacak bir şey yok. İşin kötüsü, bu dönüşümlerden daha iyisi de bulunamıyor. Kurallar başka türlü olsaymış başka saçmalıklar oluşurmuş. Yani, bunlar işin doğasında var.
>
> Ali
Haklısınız Ali hocam. Biz düşünmeden kararsız tür dönüşümlü işlemleri derleyiciye yollayınca dmd 'nin yaptıklarına bakınca aslında DMD 'nin ne kadar akıllı tasarlandığını anladım. Bu işlemler biz insanlar arasında da var bir örnek olarak: Az evvel ailemin kendi arasında konuşurlarken " Üç ceviz kırıldı dördüncüde kırıldı." demeleri ilgimi çekti. Bu kelimeyi hafızam anlamaya çalışırken " üç tane kırılmayan ceviz vardı ya hepsi dört defalık denemenin sonucunda kırıldılar ya da sonuncusu dördüncü denemede kırıldı sonucuna varıyor. Daha sonra sonuç olarak cevizlerin kırılması ve galiba kabuklarının sert olduğu ya da onları kırma yöntemini son denemede bulduğu sonucuna ulaşıyor. " İşte, insanlar konuşmalarında bunu çok dert etmezken insanların tasarladığı bir derleyici bunu yapıyor. Bu söylediğiniz konu da bana bu nedenle de ilginç geldi.
|