Forum: Projeler Rhodeus Script RSS
Sentaks önerileri
Sayfa:  önceki  1  2 
Avatar
Salih Dinçer #16
Üye Ock 2012 tarihinden beri · 1908 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj ID 9243
Scala'dan bahsetmiştim; foreach() döngüsünden...

Biraz önce bir tutorial sitesine (-bknz. Scala Quick Guide) denk gelince, şöyle hızlı bir bakış yapmak istedim. Meğer öyle bir komut yokmuş ama for() ile iç içe girmiş. Yani, yine aynı şekilde başlayıp dilersek aralıklarda, dilersek şart(lar) belirleyip bu harika ve esnek yapıyı kullanabiliyormuşuz. Bunu sayfanın ortalarına gelip veya sayfa içi arama (kw: "for(" ) yaparak kolaylıkla bulabilirsiniz.

Gerçi bir de yield olayı var ve D ile benzer olanakları da ama birebir denemediğim için ilerleyen bir zamanda D ile karşılaştırma yapmak üzere bu konuyu rafa kaldırıyorum...:)

Son olarak üzerine basarak (gerçi İstanbul'a geldiğinde konuşacağız inşaallah) belirtmeliyim...

Sözdizimi (syntax) konusunda, RhS'ye özgün bir tarz belirlemek hoş olabilir. Ancak diğer yandan, herkesin alıştığı gibi işlev veya döngü tanımlamak dilin yaygınlaşmasını sağlayacağı su götürmez bir gerçek. Beraberinde D'yi temsil edecek niteliklere (örneğin döngülerde aralıklar, dizilerde dilimler kullanmak gibi olanaklara) yer vermemiz yakışır diye de düşünmeden edemiyorum.

Acaba tıpkı Scala'da olduğu gibi aynı komutu farklı şekillerde kullanabilmemiz mümkünse, dileyen hızlı şekilde (speed mode) yazarken, başka biri ise geleneksel şekilde (classic mode) yazsa ve bunu ilk yorumlanan satırda bir parametre ile RhS'ye bildirse nasıl olur? <---- Çok uzun bir soru ve öneri oldu...:)

Özetle, özgünlükten ve hızdan ödün vermeden bir çözüm öneriyorum...

Hız için ise aklıma sadece 'interpret parameters' geliyor. Böylece yorumlarken daha çok 'parse' işlemi elenmiş olur; ne dersin (?) ya da hiç bulaşmayalım, tek bir düzende olaya devam mı dersin?
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Avatar
zekeriyadurmus #17
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Ben şurada buldum ama?

http://www.artima.com/forums/flat.…?forum=283&thread…

Son olarak üzerine basarak (gerçi İstanbul'a geldiğinde konuşacağız inşaallah) belirtmeliyim...
İnşallah görüşebiliriz hocam, sizinle ve Ali hocamla görüşmeyi çok istiyorum.

Gerçi bir de yield olayı var ve D ile benzer olanakları da ama birebir denemediğim için ilerleyen bir zamanda D ile karşılaştırma yapmak üzere bu konuyu rafa kaldırıyorum...
yield e pythondan aşinayım çok güzel bir özellik RhS ye katabilirim yield. Hatırlattığınız çok iyi oldu

örneğin döngülerde aralıklar, dizilerde dilimler kullanmak gibi olanaklara
Dilimlemeler olmazsa olmaz doğru diyorsunuz ama döngülerde aralık derken neyi kast ettiniz anlayamadım

Acaba tıpkı Scala'da olduğu gibi aynı komutu farklı şekillerde kullanabilmemiz mümkünse, dileyen hızlı şekilde (speed mode) yazarken, başka biri ise geleneksel şekilde (classic mode) yazsa ve bunu ilk yorumlanan satırda bir parametre ile RhS'ye bildirse nasıl olur? <---- Çok uzun bir soru ve öneri oldu...
Bu ne zamandır aklımda var, fonksiyon çağırma işlemlerinde düşünüyordum bunu. Hızlı ama özelliksiz ve yavaş ama gelişmiş çağırma diye :) Sizin kafanızdaki fikir tam olarak nasıl hocam açabilir misiniz?

Hız için ise aklıma sadece 'interpret parameters' geliyor. Böylece yorumlarken daha çok 'parse' işlemi elenmiş olur; ne dersin (?) ya da hiç bulaşmayalım, tek bir düzende olaya devam mı dersin?
Bunu tam anlayamadım ne demek istediniz?

Bu arada asm deki pop push olaylarını iptal ettim :) bir dizi oluşturdum, asm nin olanaklarını kullanmak çok saçma bir fikir ama olsun test etmiş oldum :) Bir kaç şeyi daha değiştirdim, mesela label adresi alma. Şunu fark ettim label adresi alma çokta fazla etkilemiyor hızı tamam direk adres alsam hızlanır ama çok küçük bir hızlanma bu, bundan ziyade daha farklı şeyler uygulamalıyım hız için. Ayrıca fonksiyon çağırma işlemlerinde ayrı bir interpet işlemi çağrılıyor artık.

Zekeriya
Bilgi meraktan gelir...
Avatar
Salih Dinçer #18
Üye Ock 2012 tarihinden beri · 1908 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
zekeriyadurmus on 2013-04-25, 11:52:
Bu ne zamandır aklımda var, fonksiyon çağırma işlemlerinde düşünüyordum bunu. Hızlı ama özelliksiz ve yavaş ama gelişmiş çağırma diye :) Sizin kafanızdaki fikir tam olarak nasıl hocam açabilir misiniz?
Şöyle düşünüyorum:

Bizim elektronikte, PIC programlarken, başlangıçta bazı compiler parametreleri vardır...
Hemen ilk bulduğum bir örneği yapıştırayım:

;Tutorial 1.6 - Nigel Goodwin 2002
    LIST    p=16F628       ;tell assembler what chip we are using
    include "P16F628.inc"  ;include the defaults for the chip
    __config 0x3D18        ;sets the configuration settings (oscillator type etc.)

    cblock     0x20        ;start of general purpose registers
        count1             ;used in delay routine
        counta             ;used in delay routine
        countb             ;used in delay routine
    endc

    LEDPORT Equ PORTB      ;set constant LEDPORT = 'PORTB'
    LEDTRIS Equ TRISB      ;set constant for TRIS register
   
    org    0x0000          ;org sets the origin, 0x0000 for the 16F628,
                           ;this is where the program starts running


Yukarıda tek PIC assembly komutu var o da org, diğerleri derleyicinin HEX kodu oluştururken kullandığı kolaylıklar. Ayrıca include (bu "inkulud" olarak telafuz ediliyor değil mi?) bizim C'deki gibi D'deki import karşılığı. Ama o bir kütüphane değil ve içinde assembly komutlarından çok equ'da olduğu tanımlamalar var. Örneğin Carry bayrağı için C harfi 0'a eşitlenmiş, Zerro bayrağı için ise Z harfi 2'ye eşitlenmiş. Hepsi bu gayet net ve açık, gerçi her şey bir büyü de neyse...:)

Şimdi... ( yabancılar so veya now diyor değil mi...:) )

Bir de yukarıda __config isminde özel bir değişken var. Bu da aslında bayrakları barındıran bir enum diyebiliriz. İşte tıpkı bu değer  gibi ilk satırda bunu (interpret/configuration parameters) yorumlayıcıya bildirelim. Yorumlayıcı, henüz tüm kodu ayrıştırmadan çok çok basit bir şekilde parametreler ışığında 'mode' değiştirsin. Bu modlar:
  • Speed Mode
  • Classic Mode
  • Stretch Mode

Son sözcük "stretch"den emin değilim. Yani demek istediğim, ufak tefek yazım hatalarında bile zart zurt hata veren bir durumdan bahsediyorum. Böylece yüksek doğrulukta ama biraz daha yavaş (çünkü hatalar derinlemesine denetlenecek) yorumlama elde edilir.

Farz edelim noktalama işaretlerinin fazla olmayacağı ve olası kullanıcı hatalarının önemsenmedi bir web sayfası düşünelim. Amaç hızlı bir şekilde sunum yapmak. Örneğin bir çizelge HTML kodlar ile defalarca tekrar içerdiği için yazılması zordur. Sayfanın tamamı statik HTML kodlar ile bezenmiştir ama hızlı bir şekilde bir foreach() döngüsü ile tekrar ifadelerini ekranda görüp tasarımına devam etmek istiyordur. Karşımıza "Speed Mode" çıkacak ve bunu kodun başlangıcında yorumlayıcıya bildireceğiz.

Varsayılan (default mode) ise klasik, yani C'den alıştığımız şekilde olabilir. İşte bu durumda yorumlayıcı eskisi gibi çalışmasına devam eder. Eğer mode değiştirme yönergesi ile karşılaşırsa bu sefer farklı bir sınıfı (parser'ı) çağırır ve her şey yeni düzene göre ayrıştırılır.

Özetle elimizde birden fazla parser sınıfı olması gerekiyor sanırım. Ayrıca henüz parser işlemine başlamadan evvel HTML kodu filitre eden bir regular expression ile en baştaki configuration bit'leri (mode flag) alırız pat diye. Sonrası bir switch case veya if()'e bakıyor zaten.

Biraz uzun ve geç cevap oldu ama n'olur kusura bakma; ancak...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
acehreli (Moderatör) #19
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4508 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Salih Dinçer:
include (bu "inkulud" olarak telafuz ediliyor değil mi?)

Evet. Sanki ikincisi biraz daha uzun iki hece gibi: ink-luud.

Ali
Avatar
zekeriyadurmus #20
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #18
Ne kusuru hocam olur mu öyle şey :)

Demek istediğinizi çok iyi anladım ancak bu modların işlevleri tam olarak ne olacak birbirinden farkları ne olacak onu tam olarak anlayamadım.
Bilgi meraktan gelir...
Avatar
Salih Dinçer #21
Üye Ock 2012 tarihinden beri · 1908 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Çok basit...

Biz dile ne kadar çok özellik:

  • parantez ve noktalama işaretleri kullanmadan bir döngü kullanımı: while i++ <= 10 {print(i) print("değişken")}
  • üyeleri kurucu işlevde tanıtarak sınıf kurulması: Class Foo { Fn this() { self.index = 0 self.data = "" } }

eklersek, bunların yorumlanması o kadar çok süre alır. Başlangıçta yapılacak bir süzgeç değeri (configuration parameter) ile, örneğin esnek yazım şeklinden (speedMode) alışılmış yazım şekline (classicMode) geçiş yapabiliriz. Bu kısa ve örnekli açıklama da yeterli olmadıysa senin örneklerin üzerinden gidelim...:)

Orada döngülerin esnek kullanımlarını işlerken şu başlıklara ayırmışsın:
  • C style for loop
  • non parentheses for loop
  • non-brace for loop

Bütün bunlar gerçekten güzel özellikler, seni kutlarım. Ancak, "ne kadar ekmek o kadar köfte" hesabı, her eklenen özellik sanırım daha geç yorumlamaya sebep olacak. Sen daha iyi bilirsin, benim hiç "parse" deneyimim yok; acaba elinde 2 parse sınıfı (C ve RhS style) olsa ve her birini farklı derleyip test etsen hız farkı olacak mıdır, dener misin?

Yani bir tarafta senin dile özgü pratik geliştirmelerin olurken (C style'ı anlamayacak), diğerinde sadece C kodlarını algılayacak şekilde yorum yapan 2 denememiz olacak. Belki aralarında hiç hız farkı olmayacak. Ancak bunların her ikisinide dile kattığımızda ikisinin toplamı olmasa da biraz daha geç yorumlama yapacağını zannediyorum. Eğer işin aslı böyleyse, yorumlama öncesi basit bir komut ile bunun "ön seçimli" olması sağlanabilir. Tabi nihai RhS sürümünde, birden fazla parse sınıfı mevcut olmalı.

Başarılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Avatar
zekeriyadurmus #22
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 701 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Bir ton yazı yazdıktan sonra sayfanın yanlışlıkla kapanıp bütün yazdıklarının silinmesi kadar kötü bir durum yok :) Neyse tekrardan yazarsak eğer;

parantez ve noktalama işaretleri kullanmadan bir döngü kullanımı: while i++ <= 10 {print(i) print("değişken")}
Burada parantezler bir özellik yani ( yapılarının kullanılması parse süresini uzatır.

Bütün bunlar gerçekten güzel özellikler, seni kutlarım. Ancak, "ne kadar ekmek o kadar köfte" hesabı, her eklenen özellik sanırım daha geç yorumlamaya sebep olacak. Sen daha iyi bilirsin, benim hiç "parse" deneyimim yok; acaba elinde 2 parse sınıfı (C ve RhS style) olsa ve her birini farklı derleyip test etsen hız farkı olacak mıdır, dener misin?
Şimdi birbirinden bağımsız özellikler eklersek hız olarak etkilemeyecektir yada göz ardı edilecek düzeyde bir etkileme olacaktır. Hız testini yaptım parantez kullanılırsa daha uzun sürüyor.

Zekeriya
Bilgi meraktan gelir...
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:
Sayfa:  önceki  1  2 
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-10-18, 05:54:09 (UTC -07:00)