April 12, 2013

Alıntı:

>

Bu 2.'si gerçekten çok hoş görünüyor. Elbette kısalık ve diğer dillere göre özgünlük önemli. Ama bunun ayarını belli kriterlere göre ayarlamalıyız. Yani temelde %50 özgünlük, %50 geleneksellik ise dilin kişiliğine ve yapısına uygun olacak her tür oran kaymaları (bir kefeden alıp diğerine verme) mübahtır...

Bu yapıyı ilk defa Rust dilinde gördüm çok hoşuma gitti o yüzden RhS ye uyguladım. Ama kullanıcı isterse zaten parantezleri de kullanabilir sonuçta while(((((i--))))) gibi ekstra parantezler ekleyerek kullanabilir. Bu ifadede sadece while den sonra parantez gelmeli zorunluluğunu ortadan kaldırmış oluyoruz.

Kümeleme karakterleri için;
if( true ) writeln(1); şeklinde bir ifade yapabiliyoruz C, D, php de ama rhs 1.0 da mümkün değil yani tek bir ifade için { } yazmak zorundasınız. 2.0 da bunu kaldırmaktan bahsediyordum. Koşul için de parantezleri kaldırdığımızda ortaya biraz değişik bir kod çıkıyor tabi bu şekilde olunca :)
if true writeln(1)
gibi :)

Alıntı:

>

Dil değişkenden önce ++ işaretleri ile sonraki arasında farkı anlayabiliyor mu?

Maalesef şu an için bu mümkün değil ama D deki çalışma mantığını inceledikten sonra uygulayabilirim :) Şu anda ++i nin tam anlamıyla hangi kurallara göre çalıştığından bihaberim :)

Alıntı:

>

Dip Not: Aslında D'nin ruhuna yakışan i.print() gibi bir özelliğini (UFCS) de ekleyebilseydik çok iyi olurdu. Hep arzuluyorum ya;

Aslında çok hoş olur bence ama o zaman şöyle bir soru geliyor aklıma;

Function x(z){
}
2.x()
"aa".x()

D de tür tanımlamaları olduğu için her tür doğru işlevle eşleşiyor. Burada karışıklık olmasın?
Ve bir de
Function toString(z){
}
toString(z) ile z.toString() farklı şeyler ifade ediyor. Bu dediğiniz şeyi yapabilirim ama tür tanımlamaları olmadığı için karışıklıklara sebep olmasın?

Alıntı:

>

RhS D'yi, temsilen de olsa onu yansıtan bir script olabilse. Belki bir süre sonra Ali hocam yurt dışında bunu tanıtarak çoğunluğun kullanımına vesile olur ve hatta dilin geliştiricileri bu script'i sahiplenerek resmi D script'i ilan edebilirler. Bunlar hep hayal ettiğim şeyler, bakarsınız olur...

Bunu hiç düşünmemiştim, olmasını çok isterim ama D'nin bu anlamda DMDSCRIPT'i var.

Zekeriya

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

April 12, 2013

Yani Ali hocam şunu demek istiyor...

Eğer bu işleçler, değişkenden önce olursa tıpkı bulunduğu yerdeki anlamı gibi önce o değişkenin değeri 1 birim değişir. Tersinde ise sonra değişir. Bunu en iyi assembly komutları ile açıklayabiliriz. Örneğin bir ''int'' i'' varsayılan değeri (0) ile kuruluyor. Sonra hemen alt satırda bunu, ''writeln(++i);'' şeklinde ekrana yazdığımızı farz edelim. Assembly kodu üç aşağı beş yukarı şu şekilde olur:
'
inc dword ptr -0Ch[EBP];
mov EAX, -0Ch[EBP];
call _D3std5stdio14__T7writelnTkZ7writelnFkZv@PC32;'

Tersinde ise inc komutu call satırından hemen sonraya yerleştirilir. İşin esprisi aslında bu kadar basit. Tabi varyasyonları yok değil. Örneğin bir dizi tanımladık ama bu şekilde (''dizi[++i];'') kullandığımızda dizinin ilk elemanını değil 2.'sini çağırmış oluruz.

Bu konu çok temel ve bence olmazsa olmaz. Tabi teorik olarak olmasa da olur çünkü işimizi 2 satır ile de halledebiliriz. Ama öyle durumlar var ki (örneğin bir stack yapısında), işlevin return ile dönüşünü sağlarken, hem sayaçı (index'i) bir arttırıp hem de bunu geri döndürmek tek satırda yapabilmemiz bence büyük kolaylık.

Başarılar...

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

April 12, 2013

Çok teşekkür ederim Ali hocam ve Salih hocam :)

Ben bu ++ özelliğini çok yanlış biliyormuşum :)

Haliyle rhs üzerinde de yanlış işlemiş oluyorum :)

print(i++) dediğinde opcode olarak aşağıdaki çıktıyı veriyor
load i
inc
loadparam
load print
call

https://github.com/Rhodeus/Script2.0/blob/master/test/loop.rhs buradaki görmüş olduğunuz kodlar çalışıyor şu an :) Çok ilginç bir sentaks ortaya çıktı :)

Zekeriya

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

April 12, 2013

Alıntı:

>

for'un arttırma bölümüne birden fazla ifade yerleştirilebiliyor mu? O zaman parantez kullanmak zorunda mı oluyoruz?

Şu anki halinde tek 1 ifade kabul ediyor.

Alıntı:

>

Yanlışlıkla yukarıdaki gibi yazılırsa j++ for'a mı dahil olur ve print(i) for'un dışında mı kalır?

Evet. for a dahil olur ve print(i) for dışında kalır.

for ; i<9 ; (i++; j++) print(i)

şeklinde olacak şekilde ekleme olabilir.

Zekeriya

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

April 12, 2013

Belki bu sorun virgül ile aşılabilir, ha keza D'de şöyle yapmıyor muyuz?

   double j = 3.1415;
   for(double i = 0; i * j < 100; i++, j++) {
       printf("%f,", i * j);
   }

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

April 12, 2013

Alıntı (zekeriyadurmus):

>

++i nin tam anlamıyla hangi kurallara göre çalıştığından

++i: i'yi arttır, ifadenin değeri olarak i'nin değerini kullan.

i++: i'nin şu andaki değerini sakla, i'yi arttır, ifadenin değeri olarak saklamış olduğun değeri kullan.

Ali

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

April 12, 2013

Alıntı (Salih Dinçer):

>

Tersinde ise inc komutu call satırından hemen sonraya yerleştirilir.

Temel türler için öyle açıklanabilir ama işin içine kullanıcı türleri gelince dilin bu davranışları açıkça belirlemesi gerekir.

Örneğin, senden alıntıladığım çözüm doğru olmaz çünkü işlem sıraları değişmiş olur:

   // Asıl kod
   writeln(i++);

   // Bir eşdeğeri
   {
       writeln(i);
       ++i;
   }

   // Başka eşdeğeri
   {
       auto eskiDeğer = i;
       ++i;
       writeln(eskiDeğer);
   }

Eğer i'nin türü bir struct veya class ise ve opUnary!"++" işlevinin yan etkisi varsa bu iki eşdeğer farklı sonuç üretebilir.

O yüzden dilin ifade kavramını tanımlaması (kabaca: değeri olan program yapısı) ve ++ gibi ifadelerin ne anlama geldiklerini açıkça belirlemesi gerekir.

Bu arada, yukarıda görüldüğü gibi post-increment işlecine aslında gerek yoktur. Olmasa, programcı yalnızca pre-increment ile yetinebilir ve istediği anlamı sağlayabilir.

Alıntı:

>

return ile dönüşünü sağlarken, hem sayaçı (index'i) bir arttırıp hem de bunu geri döndürmek tek satırda yapabilmemiz bence büyük kolaylık.

Ben öyle kodları okumaya başından beri alışamadım. :) Aşağıdaki gibi kodları hiç anlamam:

*p++

Ali

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

April 12, 2013

for'un arttırma bölümüne birden fazla ifade yerleştirilebiliyor mu? O zaman parantez kullanmak zorunda mı oluyoruz?

for ; i<9 ; i++ j++ print(i)

Yanlışlıkla yukarıdaki gibi yazılırsa j++ for'a mı dahil olur ve print(i) for'un dışında mı kalır?

Şöyle yazınca yasal mı?

for ; i<9 ; (i++ j++) print(i)

Ali

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

1 2
Next ›   Last »