Forum: Duyurular RSS
Walter Bright'ın "Component Programming in D" 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ı: Walter Bright'ın "Component Programming in D" makalesi
Çok güzel anlatmış:

  http://www.drdobbs.com/article/…?articleId=240008321&…

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-whi…

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

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

Ve tabii D forumları:

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

Bir de şimdi bu konu! :-p

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ı
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:

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...
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ı
Salih Dinçer:
Bugün Zafer ile 1 saati aşkın telefonda konuştuk.

Zafer'i özledik! :)

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.

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.

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
Avatar
Salih Dinçer #4
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #2
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?
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Bu mesaj 2 defa değişti; son değiştiren: Salih Dinçer; zaman: 2012-10-04, 13:57.
Değişiklik nedeni: Bir iki küçük yazım hatası...
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:
Ö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. :)

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
Avatar
Salih Dinçer #6
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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.

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...

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...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
acehreli (Moderatör) #7
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:
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
Avatar
Salih Dinçer #8
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
acehreli (Moderatör) #9
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ı
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
Avatar
Salih Dinçer #10
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
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-18, 04:10:14 (UTC -08:00)