Thread overview
"D'nin Saflık Kavramı" makalesi
Oct 18, 2013
Salih Dinçer
Oct 18, 2013
Salih Dinçer
October 17, 2013

David Nadlinger'ın saflık makalesini çevirdim:

http://ddili.org/makale/saflik.html

Ali

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

October 18, 2013

Hocam eline sağlık; zor bir makale!

Şöyle orijinalinin ilk paragrafına baktım da sürdürülebilirlik (maintainability)'den girmiş faydacı (pragmatic) anlayıştan çıkmış. Üstelik bu sadece başlangıcı, devamında neler var kim bilir demeyeceğim, sen bilirsin...:)

Okumaya devam ediyorum ama 2-3 güne yayabilirim...

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

October 18, 2013

Aslında bu yazar için tebrik edilmesi gereken bir konu. Şöyle bir fotoğrafına baktım da yaşıtımız gibi duruyor; genç bir arkadaşmış. Halbu ki insan şöyle kelli felli biri bekliyor. O sözcük dağarcığı ile insan aya gider, ne bileyim kürsüsü olan profesör yaparlar yahu...:)

Şaka bir yana makale güzel...

Ancak ilk örnekte vurgulanmak istenen konuyu tam anlayamadım. Yoksa "++" işleçini değişkenden önce olacak şekilde yazdığımızda "pure" kavramı için işimize gelen bir kararlılık mı sağlıyor; dediğim gibi anlayabilmiş değilim?

Makaledeki ilk örneği azıcık geliştirerek buraya taşıyayım:

import std.stdio;

char[] addO(ref char[] s)
{
 s.length++;
 s[$-1] = 'O';
 return s;
}

int incOne(ref int x)
{
 return x++;
}

void main()
{
// Sample 1 (number):
 int num = 1;
 int rs1 = num.incOne() * num.incOne();
 num.writeln("-> Result: ", rs1);
// Sample 2 (string):
 char[] str = ['o'];
 char[] rs2 = str.addO() ~ str.addO;
 //            'oOO'        'oO'
 str.writeln("-> Result: ", rs2);
 //oOO-> Result: oOOoO
}

Dikkat ederseniz (ben de yeni öğrendim), aslında D, kodu işlemeye sağdan başlıyor. Bunu 2. örnekte anlayabiliyoruz. Çünkü işaretlerin diziliş şekilleri bize bunu gösteriyor. Asıl meselemiz olan ilk örneğe gelince:

Evet, bu şekilde 3/2 sonucunu elde diyoruz. Yani rs1'in işlem sonucunun değeri 2. Şaşırtıcı ama kaynak değerimiz 2 defa artmış ve 3 olmuş. Görünüşe göre sağdaki ilk işlevin oraya, "1++" kodunu kaynak ile ilişkili bir şekilde yerleştiriliyor; solunda ise onun işledikten sonra "2++" kodu yer alıyor...

Böylece 3 yaşındaki çocuğun bile cevaplayabileceği, "2 x 1 işlemi kaç yavrum? 2 baba" oluyor...:)

Ancak, "++" işleçini başa aldığımızda ise değerler önce 1 arttırılıp ondan sonra aralarında işlem yapıldığı için, sonuç 6 çıkıyor. Tıpkı ilk örnekte önceden "sonuna eklemeli" (cascading) bir şekilde karakterleri birleştirmem gibi.

Peki bu anlattıklarım dışında "pure" kavramı ile ilgili ne anlamalıyız?

Sevgiler, saygılar...

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

October 18, 2013

Yazarına söylemeyin ama gerçekten çok ağır bir yazı olmuş. :) Cümleleri öyle uzun uzun bağlamak yerine temiz kısa cümleler çok daha etkili olurmuş. :-/

Bazı yerlerde aslına sağdık kalmamaya çalıştım ama Türkçesi yine de zor oldu.

Buna rağmen, saflık konusu aslında çok basit bir kavram: pure olarak işaretlenmiş olan bir işlev evrensel verilere erişemiyor. Dolayısıyla, aynı işlevi aynı parametrelerle tekrar tekrar çağıracağımıza tek kere çağırıp onun sonucunu tekrar tekrar kullanabiliyoruz.

Ek olarak, D'nin saflık kavramı parametrelerde değişiklik yapmaya da izin verecek derecede esnek.

Daha da ek olarak, bir işlevin saf olup olmadığını derleyici çoğu durumda otomatik olarak anlıyor. Örneğin, şablonlarda ve temsilcilerde öyle.

Ali

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

October 19, 2013

Alıntı (Salih Dinçer):

>

yaşıtımız gibi duruyor; genç bir arkadaşmış.

David, DConf 2013 sırasında şoförlüğünü yaptığım kişilerden birisi. Avusturyalı. Hatırladığıma göre İsviçre'deki iyi bir üniversitede okuyor. LDC'nin geliştiricisi ve sorumlusu.

Alıntı:

>

ilk örnekte vurgulanmak istenen konuyu tam anlayamadım.

Orada göstermek istediği tek şey, başka dillerdeki saflık kavramının yan etkilere kesinlikle izin vermemesi, D'nin ise parametrelerin değiştirilmesi izin vermesi.

Alıntı:

>

Yoksa "++" işleçini değişkenden önce olacak şekilde yazdığımızda

O karışıklık yaratan bir şey olmuş ama onunla ilgisi yok.

Alıntı:

>

Makaledeki ilk örneği azıcık geliştirerek buraya taşıyayım:

Senin örnekte hiç 'pure' yok ama. :)

Alıntı:

>

Dikkat ederseniz (ben de yeni öğrendim), aslında D, kodu işlemeye sağdan başlıyor.

O C ve C++'ta belirsizdir. D'de kesin olarak belirli olmasının istendiğini duymuştum ama bildiğim kadarıyla henüz doğru değil. Başka derleyicilerde farklı olabilir.

Alıntı:

>

"pure" kavramı ile ilgili ne anlamalıyız?

  • Bir işlev saf ise onu tekrar çağırmak yerine daha önce elde ettiğin sonucunu kullanabiliyorsun. Bunu sen de yapabiliyorsun derleyici de. Bu, mixin veya başka olanaklarla kod üretildiği zaman da yararlı olabilir.

  • Saf işlevin döndürdüğü immutable olmayan sonucu bile immutable değişkeni ilklemek için kullanabiliyorsun.

  • D şablonların ve temsilcilerin saf olup olmadıklarını kendisi anlayabildiği için onları pure diye işaretlemeye gerek yok.

Aslında o kadar. :)

Ali

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

November 12, 2013

Şu konu ilgili:

http://ddili.org/forum/thread/1295

Ali

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