Thread overview
Walter Bright'ın "Component Programming in D" makalesi
Oct 04, 2012
Salih Dinçer
Oct 04, 2012
Salih Dinçer
Oct 04, 2012
Salih Dinçer
Nov 23, 2013
Salih Dinçer
Nov 23, 2013
Salih Dinçer
October 04, 2012

Bu kadar mı tesadüf olur...:)

Sanırım bu durum forumumuzda çok sıklıkla oluyor!

Bugün Zafer ile 1 saati aşkın telefonda konuştuk. Elbette başlangıçta hasret giderdiğimizden böyle uzun olmuş olabilir. Ama sonra söz (laf değil, çünkü o iyi bir şey değil!) dönüp dolaşıp programlama olayına geldi. Gerçi bu konunun gündeme gelmesi ile Ali hocanın başlık yoluyla iligli bağlantıları haber vermesinin saati birbirine yakın olsa da makale ve yorum tarihleri birbirinden farklı. Neyse çok abartılacak bir şey yok...

Maalesef tam da bu konuyu konuşuyorduk ve olayı Walter'dan daha iyi bir yönünden aldık, hatta ileriye de götürdük (!) diyemeyeceğim. Ama bağlantısı olduğunu düşünüyorum. Belki de Zafer'in katkı sağlayıp benim anlamak da zorlandığım şu "soyutlama" olayına ilk ağızdan okuyacaksınız.

Önce Walter'ın makalesine bir soru yöneltmeliyim; umuyorum Ali hocam yanıtlayacak ve daha sağlıklı şekilde devam edeceğiz:

Alıntı:

>

Makalede "sink" olarak bahsettilen verinin akışı tek yönlü mü?

Yani veri kaynağını bir veritabanı olarak düşünsek ve bu kaynağa erişimi sadece algoritma bilse; biz algoritma vasıtasıyla veriyi alıp işlerken kendimizi ona emanet ediyorken aynı şekilde kullanıcıdan aldığı veya geliştirdiğimiz kodun meydana getirdiği veriyi tekrar "Sink" vasıtasıyla kaynağa geri gönderebiliyor muyuz?

Not: Makalenin tamamını okumadım, belki de cevabı vardı. O yüzden kusura bakmayın...

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

October 04, 2012

Bu arada Zafer'le telefonun şarjını bitiren (2. bir telefona geçti!) neler konuştuk:

Önce yemek masası örneğini verdi! Üzerinde tabak, bardak, kaşık, çatal...; artık aklınıza ne geliyorsa/gerekiyorsa olan bir masa var. Ancak masada Sinbad'ın sihirli halısına benzeyen bir örtü de var. Kuramsal açıdan tüm bileşenler (component) örtünün üstünde çünkü verdiğimiz emir ile taşınıyorlar! Ama biz örtü ile içe içe geçtiğini düşünmeliyiz. Hatta gördüğümüz şey sadece uçan bir örtü...:)

Sonra Zafer geliyor!

-Yahu hava sıcak, şimdi kapalı mekanda da yemek mi yiyeceğiz!

Ekliyor, "Gel bahçeye çıkalım" diyor. Ancak önemli bir sorun var: Vakit...

Neyse ki sihirli örtümüz var! Oturduğumuz yerden sesleniyoruz ve göz açıp kapamadan örtü masaya uğruyor, bırakacağını bırakıyor ve gidiyor...:)

Tabi ben bunu Zafer'den dinlerken anlamadım, telefon da zart zurt edince (herhalde o da anlamadı!) yeni bir örneğe geçtik: Veritabanı...

Biz projemizi yazmaya başladık. Epey de bir yol katetmişiz! Bakın Allah'ın işine ki işveren de zart zurt ediyor...:)

Diyor ki:

  • Bu veritabanı çok yavaş! Ben lisans ücretini veririm, yeter ki şu Oracle'a geçirelim.

Bizim de güvendiğimiz bir çatımız (framework) var,

  • Hay hay...:)

Biz sadece IP adreslerini değiştiriyoruz ve o sunucudaki VTYA (Veri Tabanı Yönetim Arabirimi) ile varsayılan ayarları yapıyoruz. Hatta güvendiğimiz çatımız, VTYA ile bizim için haberleşip gerekli kurulum işlemlerini de üstleniyor. Belki de bunu müşteri yanında yapıyoruz ve "al bakalım, karşılaştır diyoruz!"...:)

Özetle güvendiğimiz öyle bir soyutlaşmış alan (algoritma geliştirme/haberleşme bölgesi) var ki çevresel değişikliklere adaptasyonda bize yardımcı oluyor. Biz sanki çok temel olan yığıt'a (stack) veri gönderip/alıyormuşuz (push/pop) gibi uygulamamızı geliştiriyoruz ve gerisi bizi ilgilendirmiyor. Sanki OS'a veya GC'ye verilerimizi emanet etmemiz gibi.

Çok mu uzattım?

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

October 04, 2012

Alıntı (acehreli):

>

Evet. Hem bahsedilen UNIX konsol programları hem de programcılıktaki sink hep veriyi alan taraftır. source ve sink, kaynak ve delik/çukur anlamına geliyorlar. Kaynaktan çıkan veri deliğe doğru akıyor.

Belki biraz elektronik mantığı ile karışıtırıyor olabilirim. Belki de bunun sebebi elektron akımının elektrik akımının tersi olduğu içindir. Çünkü biz elektronikte, bir birime (örneğin MCU) veri kaynağından (bataryadan) gelen akıma "sink", o birimden çıkan (GND ile buluşan) uca da "source" demekteyiz.

Alıntı (acehreli):

>

Verinin kaynak ve hedef taraflarını nasıl bağlıyorsun? Tek hat üzerinde bağlanabilen biçimde gösterebiliyorsak bu modele uyuyor demektir.

Sanırım aynı hat üzerinden geri dönebilmeyi kastetmeye çalıştım...

Alıntı (acehreli):

>

Bu notu belki de gereksizce ekledim çünkü sen de belki bunu kasdetmedin ama soyutlamanın topluluklara (veri yapılarına) uygulanması artık yanlış kabul ediliyor.

Estağfirullah Ali hocam, her biri ufkumuzu açıyor...

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

October 04, 2012

Çok güzel anlatmış:

http://www.drdobbs.com/article/print?articleId=240008321&siteSectionName=architecture-and-design

Yazılımların tekrar tekrar kullanılabilen parçalar olarak görülebilmeleri için UNIX konsol programlarından alıştığımız 'kaynak => algoritma => başka_algoritma => hedef' modeline uymaları gerektiğini savunuyor ve bu modelin D'nin aralıkları tarafından nasıl desteklendiğini gösteriyor.

Hatırlarsanız, oradaki konular daha az teorik bilgiyle ama daha fazla örnekle Türkçe olarak şurada da vardı:

http://ddili.org/ders/d/araliklar.html

Makale genel olarak güzel eleştiriler aldı:

John Cook:

http://www.johndcook.com/blog/2012/10/02/pipelines-and-whirlpools/

O bağlantıyı da içeren Reddit:

http://www.reddit.com/r/programming/comments/10u6sk/component_programming_in_d/

Ve tabii D forumları:

http://forum.dlang.org/thread/k4fm8e$1mf4$1@digitalmars.com?page=1

Bir de şimdi bu konu! :-p

Ali

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

October 04, 2012

Alıntı (Salih Dinçer):

>

Bugün Zafer ile 1 saati aşkın telefonda konuştuk.

Zafer'i özledik! :)

Alıntı:

>

Belki de Zafer'in katkı sağlayıp benim anlamak da zorlandığım şu "soyutlama" olayına ilk ağızdan okuyacaksınız.

Hatta, meta soyutlama diyebiliriz. :) Belirli bir türden olmak değil, belirli bir kavrama uymak yetiyor. Yani örneğin "yalnızca Hayvan'dan türeyenler kullanılabilir" değil, "InputRange gibi davranabilen bütün türler" demeye benziyor.

Alıntı:

>

Makalede "sink" olarak bahsettilen verinin akışı tek yönlü mü?

Evet. Hem bahsedilen UNIX konsol programları hem de programcılıktaki sink hep veriyi alan taraftır. source ve sink, kaynak ve delik/çukur anlamına geliyorlar. Kaynaktan çıkan veri deliğe doğru akıyor.

Alıntı:

>

Yani veri kaynağını bir veritabanı olarak düşünsek ve bu kaynağa erişimi sadece algoritma bilse; biz algoritma vasıtasıyla veriyi alıp işlerken kendimizi ona emanet ediyorken aynı şekilde kullanıcıdan aldığı veya geliştirdiğimiz kodun meydana getirdiği veriyi tekrar "Sink" vasıtasıyla kaynağa geri gönderebiliyor muyuz?

Verinin kaynak ve hedef taraflarını nasıl bağlıyorsun? Tek hat üzerinde bağlanabilen biçimde gösterebiliyorsak bu modele uyuyor demektir.

'SqlYanıtı -> algoritma -> stdout'

gibi olabilir mi?

Tabii bunlar bütün programı tek satırda yazacağız anlamına gelmiyor. Şu da olur:

'// Önce girişten okuma
stdin -> sqlSorgusu
sqlYanıtı = SqlYanıtı(sqlSorgusu) // (bu bir aralık olsun; kendisi iş yapmasın)

// Sonunda çıkışa gönderme
SqlYanıtı -> algoritma -> stdout'

Ali

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

October 04, 2012

Alıntı (Salih Dinçer):

>

Özetle güvendiğimiz öyle bir soyutlaşmış alan (algoritma geliştirme/haberleşme bölgesi) var ki çevresel değişikliklere adaptasyonda bize yardımcı oluyor.

O ve daha önce söylediklerin tamam. :)

Alıntı:

>

Biz sanki çok temel olan yığıt'a (stack) veri gönderip/alıyormuşuz (push/pop) gibi uygulamamızı geliştiriyoruz ve gerisi bizi ilgilendirmiyor.

Eğer topluluklar ile ilgili olarak söylüyorsan o artık eski bir fikir. Hatta, Andrei de sunumlarında şakaca "Big-O() encapsulation should be a crime in 48 states" (Algoritma karmaşıklığının sarmalanması 48 eyalette suç kabul edilmelidir) der.

Anlatmak istediği, arkasında hangi tür veri yapısı olduğu bilinmeden kullanılmaması gerektiğidir:

VeriYapısı vy;
vy.ekle(veri);    // <-- Ne kadar zaman alır? Eleman sayısına nasıl bağlıdır?

Program o işlemin karmaşıklığını bilmek zorundadır. Bunu bilmeden .ekle() işlemini örneğin bir döngü içine alamaz. Çünkü eğer .ekle() zaten O(N) ise, döngü içine girince programın işlemleri birden bire O(N*N) oluverir.

Bu notu belki de gereksizce ekledim çünkü sen de belki bunu kasdetmedin ama soyutlamanın topluluklara (veri yapılarına) uygulanması artık yanlış kabul ediliyor.

Ali

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

October 04, 2012

Alıntı (Salih Dinçer):

>

aynı hat üzerinden geri dönebilmeyi

O da çok kullanılan bir model. Sunucu ile istemcinin haberleşmesi gibi... Veya NYP'de iki nesnenin birbirleriyle iletişimleri gibi... Veya üst sınıfı alt sınıf ile etkileşimi de olur...

Ama Walter'ın burada gösterdiği modele uymuyor. Walter yalnızca bilginin kaynaktan hedefe doğru aktığı model üzerinde duruyor.

Ali

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

November 23, 2013

Ali hocam,

Sanki Walter'ın bir makalesi daha vardı ya da ben kişileri karıştırıyorum. Bu olayı anlatır gibi şekiller vardı. UFCS'yi mi anlatıyordu şimdi tam çıkaramadım. Gerçi aradığımı buldum ve FB'de az önce paylaştım ama ötekini bulamadım iyi mi...:)

Bu makaleleri Wikipedia'da madde madde toplamamız lazım...

Sevgiler, saygılar...

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

November 23, 2013

Benim bundan neden haberim yok...:)

İlk defa görüyorum ve okuma listeme alıyorum. Bu konu hakkında şurada "çok pis kod" yazmıştım:

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

:D

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

November 23, 2013

Bu makaleden sonra H. S. Teoh'un çok daha kapsamlı ve çok iyi yazılmış bir makalesi yayınlandı.

Bileşenli programlamayı (component programming) bir takvim çıktısı oluştururken kullanıyor ve karşılaştığı kolaylıkları ve güçlükleri anlatıyor:

http://wiki.dlang.org/Component_programming_with_ranges

Ali

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