Forum: Duyurular RSS
"D'nin Saflık Kavramı" makalesi
acehreli (Moderatör) #1
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: "D'nin Saflık Kavramı" makalesi
David Nadlinger'ın saflık makalesini çevirdim:

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

Ali
Avatar
Salih Dinçer #2
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
acehreli (Moderatör) #3
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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
Avatar
Salih Dinçer #4
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
acehreli (Moderatör) #5
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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.

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.

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.

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

Senin örnekte hiç pure yok ama. :)

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.

"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
acehreli (Moderatör) #6
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Şu konu ilgili:

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

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Duyurular RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-21, 15:22:34 (UTC -08:00)