September 16, 2009

Alıntı (canalpay):

>

Emre senin kodlarına düzenlerken birden Uni_tr lerle kodları yazmak geldi. Sen ne dersin ? Hızdan bir şey götürmeyecekse uni_tr ile yazmak kodların sadeliği açısından daha iyi olacağı için kesin öyle yaparım. Hemde phobos ile olan bağı da azaltırız. Sonra phobosdan bağımsız bir kütüphane olarak ihtiyaçlarımıza göre genişletir kullanırız.

Şuan bir fonksiyonu switch ile yazdım. Biri aynı duruyor birinide uni yerine uni_tr ile ile yazacağım. Sonra Ali Bey'in verdiği şablonu fonksiyonların hızlarını denemek için kullanılıp en hızlısına bakıp onda karar kılacağım. Eğer eşit yada eşite yakın ise uni_tr yi kullanacağım.

Yani tabi ki kendi yazdığımız fonksiyonları kullanmak daha iyi olur ancak toUniUpper_tr veya toUniLower_tr'de kendi içinde std.uni import ediyor :). Yani bu phobos'a olan bağımlılığımızı azaltmaz. Sadece 'I'->'i' hatasını düzeltmiş olur.

Not:
canalpay = Can (Aynı yaştayız galiba)
acehreli = Ali hocam
esatarslan52 = Esat bey
erdem = Erdem bey

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

September 16, 2009

Alıntı:

>

küçükHarf = (büyükHarf == 'I') ? 'ı' : toUniLower(büyükHarf);

Ama bunla switch hız açısından çok farkeder bence. Çünkü switchde ben gereksiz yere iki kontrol yapmıştım ama bir kontrol yetiyor sanırım. E ikinci kontrolün gereksiz olduğunu derleyici anlayabilir mi? anlayamaz.

Dediğim doğru çıktı. Birine 35 bin diyor diğerine 31 bin. aradaki fark oldukça fazla. Derleyici ne kadar akıllı olursa olsun benimle boy ölçüşemez :-D

Bu arada önerimi tekrar dile getiriyorum. Doğrusu susma hayır demek olur ama ben yinede siz hayır diyene kadar söyleyeceğim.
Alıntı (canalpay):

>

Bu arada bütün yazdığımız fonksiyonların hız testini yapalım mı ?

Yok ben iki saat bekleyemem diyorsanız deneme normal durur. Hıztesti diye ayrı bir tane açarız. Oraya hız kodlarını ekleriz. İlerde hız için düzenleme yaptığımızda bile daha çabuk bakarız.

Sizce nasıl olur.

Bu arada stringin yeni toupper_tr ile tolower_tr şeklini göndereyim mi ? Bu şekli gereksiz kod tekrarı olacağını bildiğim halde ı i kontrolünden geçirerek yapıyorum. Önemli bir kod tekrarı olmadığı için ve daha kod farkına bakmadığım halde sanırım daha hızlı çalıştığı için (Fark azımsanacak bir fark değil. ) böyle kalması taraftarıyım.

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

September 16, 2009

Alıntı (emre413):

>

Yani tabi ki kendi yazdığımız fonksiyonları kullanmak daha iyi olur ancak toUniUpper_tr veya toUniLower_tr'de kendi içinde std.uni import ediyor :). Yani bu phobos'a olan bağımlılığımızı azaltmaz. Sadece 'I'->'i' hatasını düzeltmiş olur.

Merak etme farkındayım. Ama bir gün olurda kütüphanemiz taşınabilir olsun dersek ve toUniLower ile toUniUpper'ımızi kendimiz yazarsak tolower ile toupper'ı tekrar yazmayalım diye söyledim. Ama hız farkı bana göre aynı olmadığı için kendi yazdığım şekilde göndereceğim. Tabi Ali Bey göndereyim mi ? Daha capitalize'yi yazmadım. Farklar dstring olması ve fonk. adı değişmesi.
KONU DIŞI
Alıntı (emre413):

>

Not:
canalpay = Can (Aynı yaştayız galiba)

Evet aynı yaştayız. Ben sanırım Erdem Bey'ede bir kaç kere Erdem dedim. Neyse ben nedense Bey lafını çok severim.

Bu arada farkettimde müzik dinleyerek daha kolay kod yazıyorum :-) Sizde de öyle mi ?

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

September 16, 2009

Alıntı (acehreli):

>

switch'te yukarıda hissedildiği gibi iki case mi var? Çünkü madem iki kontrol gereksiz, onunkini de kaldırmak gerekir herhalde.

Dikkat ettiyseniz Emre'nin kodu iki ifliydi. Biri İ biri I için. Ama biri bir fonsiyonda diğer fonksiyonda ise diğeri gereksiz. Ben ilk İf i switchli hale getirdim. Sonra

küçükHarf = (büyükHarf == 'I') ? 'ı' : toUniLower(büyükHarf);

şekle.
Alıntı (acehreli):

>

Bu arada önerimi tekrar dile getiriyorum. Doğrusu susma hayır demek olur ama ben yinede siz hayır diyene kadar söyleyeceğim.

canalpay:
Bu arada bütün yazdığımız fonksiyonların hız testini yapalım mı ?

Bence bir sakıncası yok.

Hız fonksiyonu yaparken yollamadan önce yapalım demek istemedim, yolladığımızda denemeyi çağırdığımızda Hız testi yapsın. Hatta beklemek istemezseniz ne yapacağımız hakkında öneride getirdim.

Alıntı (acehreli):

>

Eğer birim testlerden geçiyorsa, istediğin gibi gönderebilirsin. :)

stringi en baştan yazdım ama unittest'i kopyala yapıştır yaptım. soruyu sormamın asıl nedeni gereksiz güncelleme yapma demenizden ötürü.

Konu Dışı

Bu C'yi öğrenmemek başıma dert açacak gibi. Daha 10 dakika önce global değişken tanımlayamıyordum :-) Phpde kullancağınız yerde global değişkenadı; yazıp orada da kullanıyorduk ama D'de yemedi. Sonra C'nin global değişken tanımlama yöntemini buldum ve o işey yaradı. Sadece mainin ve diğer şeylerin dışında kullanacağız. Ama bu kadar kolay bir şeyi bilmiyordum :-)

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

September 16, 2009

Alıntı (acehreli):

>

Bu fonksiyonu 7-8 kat hızlandırmanın başka yolları varken %3-4 hız kazancına bakmaya henüz sıra geldiğini düşünmemiştim. ;)

Yani boşuna mı uğraşıyorum ? Kısaca fonksiyonu hızlıca yazayım sonra düzeltiriz demek oluyor herhalde. Ayrıca bu hızlandırma yöntemi nedir merak ettim doğrusu.
Alıntı:

>

Evet, ?: işleci daha hızlı kod üretiyor. Ama temelde ve genelde buna yardım eden hiçbir şey olmadığına göre, ben bunu dmd'nin bir garipliği olarak kabul etmek zorundayım. Çünkü sonuçta ?:, if, ve switch; bu fonksiyonda hep iki durumdan birisini seçmeye yarıyorlar. Derleyicinin üçü için aynı kod üretmesini beklerdim.

Doğru söylüyor olabilirsiniz. Hatta keşke bunu sorabileceğimiz bir ortam olsa. Ama açıkca if varken ben switch'in sadece dilde başka bir olanak olsun diye yaratıldığına inanmıyorum. Ama dediğiniz doğru çünkü hızları aynı. Aslında teker teker switch ile ? : ve ifli hallerini derleyip notepad++ gibi editörle açmak lazım. Her ne kadar içeriği doğru göstermesede içerdiği şekiller farklı ise derleyici farklı şekiller aynı ise derleyici aynı derlemiştir.

Evet bu katlarca hızlandırma yolunu merak ediyorum. Phobos kütüphanesinin yazdığını tekrar yazmayacağız değil mi ? sonuçta teorik olarak öylede yapsak hız aynı olmalı.

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

September 16, 2009

Phobos uni.d de başka Türkçeye uygun hale getirilecek fonksiyon yok kalmadı. isUniUpper() ve isUniLower() "İ" ve "ı" için doğru sonuç veriyorlar.

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

September 16, 2009

Alıntı:

>

Bu arada farkettimde müzik dinleyerek daha kolay kod yazıyorum :-) Sizde de öyle mi ?

Daha önce bir makalede programcılar için müzik dinlemenin kod yazımında iyi olmadığını okumuştum. Derin ve ayrıntılı düşünmeyi engellediğinden bahsediyolardı. Yazıyı bulursam burda paylaşırım.

string.d içinde Türkçe karakterlerde sorun çıkartan başka fonksiyon varmı?

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

September 16, 2009

Alıntı (canalpay):

>

if elseif yerine switch kullansak daha hızlı olmaz mı

switch'in if'lerden daha fazla hız kazandıracağını ölçmeden bilemeyiz. Eğer ölçer de bir hız kazancı görürsen tabii ki bilmek isteriz. Bu deneyin senin için de ilginç olacağından eminim.

Bunu genel olarak tekrarlamak isterim: "şu daha iyi olur, şöyle yapalım" gibi ifadeler çoğunlukla işe yaramazlar. Şu anlamlı olur: "ben denedim, fonksiyon switch kullanınca %5 daha hızlı çalıştı". O zaman elimizde bir dayanak olduğu için, ama %5 kazanç karşısında neleri kaybedeceğimize baktıktan sonra kabul ederiz.

Evet, gerçekten switch'le denersen sonucunu görmek isteriz. Hızlı da olabilir, hiçbir fark da getirmeyebilir...

Ali

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

September 16, 2009

Alıntı (canalpay):

>

foreach ama sizin gibi düşük seviyeli dillerle uğraşanlar için ne kadar bulunması zor bir nimet bilmiyorum :-)

Hey! C++ da, D de yüksek seviyeli dildir. Düşük seviyeli de olabiliyorlar diye küçümsemeyelim. :)

Şaka bir yana, C++'da for_each bir kütüphane şablonu olarak var.

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

void karesini_goster(int sayi)
{
   cout << sayi * sayi << '\n';
}

int main()
{
   vector<int> v;
   v.push_back(5);
   v.push_back(7);

   for_each(v.begin(), v.end(), karesini_goster);
}

C++'nın STL'i erişici [iterator] kullandığı için aralığı begin() ve end() diye iki erişici ile belirtmek gerekiyor ama var işte... Başka kütüphanelerde D'ninki gibi olanı da var galiba:

baska_for_each(v, karesini_goster);

Ali

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

September 16, 2009

Alıntı (canalpay):

>

Emre senin kodlarına düzenlerken birden Uni_tr lerle kodları yazmak geldi. Sen ne dersin ? Hızdan bir şey götürmeyecekse uni_tr ile yazmak kodların sadeliği açısından daha iyi olacağı için kesin öyle yaparım.

Çok daha önemlisi, zaten yazılmış olan fonksiyonu kullanmak kod tekrarını yok edecek. Eğer yazılmış olanı kullanmasan, kendin aynı işi yapmak zorunda kalırdın...

Kod tekrarı, hararetle uzak durulması gereken bir hatadır! :)

Ali

Not: Can mı demeliyiz, Alpay mı, yoksa canalpay mı? :)

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