Gönderen Konu: C=++ 'a has eklentiler  (Okunma sayısı 10759 defa)

C=++ 'a has eklentiler

« : 06.04.2007 19:57:51 »
Hızlı düğmeleri aç

nightlord

İleti: 1.085

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.nightnetwork.org
Tabi bu baslik cok kucuk olacak :)
 
C=++ c++'in bir alt kumesi genel olarak. Fakat birkac eklnetisi de var. Bunlari tanitayim
 
Oncelikle bu eklentiler ozellikle gercek c++ derleyicilerinin comment olarak gorecegi sekilde ayarlandi
 
1- //c=++_type
 
Su an her .cepp dosyanizin basinda butun tanimlayacaginiz class ve singleton typelari icin bu komut ile decleration yapmaniz gerekiyor (Bunu daha sonra ya kaldiricam ya da normal c++ forward decleration ile degistiricem)
 
Ornek:
 
//c=++_type cSoldier;
//c=++_type sTest;
 
class cSoldier ....
....
....
 
gibi. Eger bunu yapmazsaniz. Class tanimlamasini yaparken Unknown type at line xx erroru alacaksiniz
 
2- //c=++_max
 
C=++' da her tanimladiginiz class icin o tipten bir anda bellekte bulunabilecek maksimum obje sayisini vermeniz lazim. Bu kmout buna yariyor
 
Bunun sebebi su: compiler yarattiginiz her class icin max obje sayisi buyuklugunde bir obje havuzu ayiriyor bellekte. Daha sonra siz her new dediginizde o havuzdan bir tane donduruyor size. delete ettiginizde o obje havuzda yine free hale geliyor. dolayisiyla binlerce obje yaratip silebilirsiniz fakat herhangi bir anda en fazla max obje sayisi kadar objeniz olabilir o classtan. Eger new dediginizde havuzda hic free obje kalmamissa new 0 dondurur. tipki c++'da bellek bitince oldugu gibi
 
class cSoldier //c=++_max 32
{
public:
...
};
 
3- Singletonlar
 
Singleton aslinda bir design patterndir. c++' da direk boyle birsey yok. Fakat cok kullanildiklari ve c64de bazi ekstra optimizasyonlara izin verdigi icin ben dile ekledim
 
Singleton bir class gibidir. yine attributeleri ve metodlari varid fakat o classtan yalnizca bir obje uretilir ve hep o kullanilir. Bunlar genelde bir programdaki temel yonetici objeler veya hardwaredeki bazi temel arabirim yoneticileri vs olabilir: Application, EnemyManager, NetworkManager, Renderer falan gibi heybetli isimli obje ve classlar olurlar genelde.
 
C=++ ta singletonlari kullanmak icin class tanimlar gibi singleton tanimlayip (isim class gibi c ile degil 's' ile baslamali ve //c=++_max olmadan) daha sonrada kod icinde TheXXX diye erismelisiniz.
 
class sTest{
public:
cByte mInit();
};
 
...
TheTest->mInit();
...
 
sXYZ isimli singleton objesine TheXYZ diye ulasiyoruz
 
singleton attributelerini compiler sizin icin rastgele yerlestirebilecegi gibi siz bellekte istediginiz adrese yerlestirebilirsiniz. Boylece cesitli hardware registerlerine singleton attribute olarak erismeniz mumkun. Yerlestirme icin //c=++_at eklentisini kullanin
 
class sVIC{
public:
cByte mSetBorderColor(cByte iColor);
cByte aBorderColor; //c=++_at 0xd020
};
 
cByte sVIC::mSetBorderColor(cByte iColor){
this->aBorderColor = iColor
return 0;
}
 
gibi. Bu sekilde komple Hardware tarafini programin geri kalanindan abstract edebilirsiniz. Hatta mesela sVIC icin PC uzerinde emulator bir class yazarsaniz. c64 oyununuz direk PCye de port edilebilir.

C=++ 'a has eklentiler

« Yanıtla #1 : 06.04.2007 21:36:38 »
Hızlı düğmeleri aç

ghost

İleti: 86

Çevrimdışı
  • **
  • Jr. Member
    • Profili Görüntüle
    • http://www.bronxwhq.org
peki ilerde singleton class yerine static keyword'u kullanmayi dusunuyor musun? yoksa hep boyle mi kalacak?

edit: c64'de C++ yazacagimdan degil. compiler yapimina ben de merakli oldugum icin soruyorum.
he moves like a madman as he spins his disc.

C=++ 'a has eklentiler

« Yanıtla #2 : 06.04.2007 21:53:01 »
Hızlı düğmeleri aç

skate

İleti: 5.245

A Sinner Scener
Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.akaydin.com/
//c=++_max bence commodore 64 için çok yerinde bir özellik olmuş. classları görünce kendimizi kaptırıp "bakiim şu objeden 5000 tane yaratınca ne oluyor" deme durumumuza karşı güzel bir önlem olmuş. Her zaman "sınırları bilmek" c64 coderları için iyidir :)
 
Proje beni çok heyecanlandırdı. C64'de yapmaktan çekindiğim bazı şeylerde beni kurtaran çok güzel özellikler içeriyor. Ben bu dili yıllardır ertelediğim OS projemi hayata geçirmek için çok güzel bir mazeret olarak kullanmayı planlıyorum. Eğer gerçekten bu işe girişirsem, bu dile yapacağım katkılar da çok güzel olacaktır. şu anda beni engelleyen tek şey "ulan şu zaman darlığında bulduğun 2-3 dk.yı OSa mOSa harciicaana adam gibi demo partı kodlasana eşşooleşşek!!!" lafının kulaklarımda çınlaması. Nedendir bilmem bu kafamdaki ses Hydrogen ve Vigo karışımı bir sese benziyor :p

C=++ 'a has eklentiler

« Yanıtla #3 : 06.04.2007 23:09:19 »
Hızlı düğmeleri aç

nightlord

İleti: 1.085

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.nightnetwork.org
Alıntı yapılan: ghost;13844
peki ilerde singleton class yerine static keyword'u kullanmayi dusunuyor musun? yoksa hep boyle mi kalacak?
 
edit: c64'de C++ yazacagimdan degil. compiler yapimina ben de merakli oldugum icin soruyorum.

 
static keyword koymayi dusunmuyorum. Cunku aslinda local variable'lar da dahil olmak uzere C=++daki hersey static. Bu yuzden recursion'a izin verilmiyor. Stack frameler yok yani. mHodo diye bir metod varsa ve o metodda oBudu diye bi local varsa, bellekte cHede_mHodo_oBudu diye bir yer ayriliyor o local icin ve hep kaliyor.

C=++ 'a has eklentiler

« Yanıtla #4 : 07.04.2007 01:47:17 »
Hızlı düğmeleri aç

ssg

İleti: 331

Çevrimdışı
  • ****
  • Sr. Member
    • Profili Görüntüle
ma$allah bilgem, uzerinde cok cali$tigin belli. lex/yacc kodlarindan da hicbir $ey anlamadim uzayli i$i gibi :)
 
merak ettigim bazi noktalar var:
 
1) neden language extension'lar comment icinde? ayni kodun standart c++ derleyicileriyle cross-compile olmasi mi bekleniyor?
 
2) parser hizi language spec'i degi$tirecek kadar (identifier'lara prefix vermek zorunda birakacak kadar) onemli mi?
 
ssg
« Son Düzenleme: 07.04.2007 01:49:33 Gönderen: ssg »

C=++ 'a has eklentiler

« Yanıtla #5 : 07.04.2007 03:48:58 »
Hızlı düğmeleri aç

nightlord

İleti: 1.085

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.nightnetwork.org
Alıntı yapılan: ssg;13857
ma$allah bilgem, uzerinde cok cali$tigin belli. lex/yacc kodlarindan da hicbir $ey anlamadim uzayli i$i gibi :)
 
merak ettigim bazi noktalar var:
 
1) neden language extension'lar comment icinde? ayni kodun standart c++ derleyicileriyle cross-compile olmasi mi bekleniyor?
 
2) parser hizi language spec'i degi$tirecek kadar (identifier'lara prefix vermek zorunda birakacak kadar) onemli mi?
 
ssg

 
abi lex kodu hayli basit aslinda. input dosyasini tarayip karsisina listelenen regular expressionlardan biri cikinca return ediyor. her regexp'e karsilik bir token donduruluyor.
 
yacc (bison) dosyasi ise biraz daha iyi tanitilmasi gereken bi dosya ona bi thread acarim bir ara. onun da yaptigi is en ust seviyede bir cepp dosyasindan baslayip asagiya dogru kurallar tanimlamak.
 
Cevaplar:
1- Ideal durumda evet. c=++ icin yazilan kodun c++ derleyicileri ile derlenebilmesini istiyorum (mumkun oldugu kadar az is ile). Boylece editorlerdeki syntax highlighting veya intellisense gibi dil destekleri veya uml modeli reverse engineer edici toollar vs yani su dunyada c++'i destekleyen ne tool varsa c=++ da onlardan faydalanabilsin diye.
 
2- burada parse hizina ilave olarak baska avantajlar da var. code_generator de daha az kod yazilmasi gibi. Pek cok olasi yazim hatasini parser yakaliyor boylece. Asm makrolari haric, butun prefixler mumkun oldugunca az rahatsiz edici olsun diye bir harf oldular. Zaten pek cok kisi bu tip prefixleri konvansiyon olarak kullaniyor. Ben burada biraz programcilari konvansiyon kullanmaya zorlamis oluyorum :)

C=++ 'a has eklentiler

« Yanıtla #6 : 08.04.2007 00:23:56 »
Hızlı düğmeleri aç

ssg

İleti: 331

Çevrimdışı
  • ****
  • Sr. Member
    • Profili Görüntüle
Alıntı yapılan: nightlord;13863
1- Ideal durumda evet. c=++ icin yazilan kodun c++ derleyicileri ile derlenebilmesini istiyorum (mumkun oldugu kadar az is ile). Boylece editorlerdeki syntax highlighting veya intellisense gibi dil destekleri veya uml modeli reverse engineer edici toollar vs yani su dunyada c++'i destekleyen ne tool varsa c=++ da onlardan faydalanabilsin diye.

anladim. extension'larla ilgili ogrenim ve yazim kolayligi ile bu bahsettigin amaclar arasinda ortak nokta bulmak mumkun mu? mesela const char *b=0xd280; acikcasi bana cByte b; //c=++_at=0xd280 gibi bir syntax'ten daha basit/anla$ilir geliyor. cross-compilation imkani da veri tiplerindeki kisitlardan ve donanim spesifik kod imkanindan dolayi porting'den daha avantajli bir yontem gibi gorunmuyor sanki?
 
Alıntı
2- burada parse hizina ilave olarak baska avantajlar da var. code_generator de daha az kod yazilmasi gibi. Pek cok olasi yazim hatasini parser yakaliyor boylece. Asm makrolari haric, butun prefixler mumkun oldugunca az rahatsiz edici olsun diye bir harf oldular. Zaten pek cok kisi bu tip prefixleri konvansiyon olarak kullaniyor. Ben burada biraz programcilari konvansiyon kullanmaya zorlamis oluyorum :)

pek cok ki$i boyle prefixler kullaniyor ama bu ki$iler arasinda ortak kabul gormu$ bir tanesi yok o yuzden birine uygun gelen oburune ters gelebilir :)
 
diger yandan ben projenin esas amacina ula$masi icin her yol mubahtir diyenlerdenim. overdesign edip sonra projeden sogumaktansa boyle kolay yoldan ilerletmek daha iyi. ilerde language spec degi$tirmek de zor degil.
 
ssg

C=++ 'a has eklentiler

« Yanıtla #7 : 08.04.2007 00:47:22 »
Hızlı düğmeleri aç

nightlord

İleti: 1.085

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.nightnetwork.org
Alıntı yapılan: ssg;13892
mesela const char *b=0xd280; acikcasi bana cByte b; //c=++_at=0xd280 gibi bir syntax'ten daha basit/anla$ilir geliyor.
ssg


Hmm ben bunu hic dusunmemistim. Su an bunu kolaylikla eklemek cok mumkun degil. Temel sebebi internal olarak aslinda pointerlar yok bu dilde. Aslinda hersey pointer mantigiyla calisiyor fakat pointerlar bellek adreslerine bakmiyor. onun yerine baktiklari objenin ait oldugu class'in poolundaki indexi tasiyorlar. boylece her pointer bir bayt'a sigiyor ve oHede->a_Hodo = 5; tarzi erisimler cok hizli olabiliyor. Su an dilde built in bir 2 byte'lik yapi yok. Daha sonra cWord diye bir built in type eklemek istiyorum. O zaman bahsettigin tarz 16bitlik adres pointerlari ekleyebilirim.

C=++ 'a has eklentiler

« Yanıtla #8 : 08.04.2007 00:51:34 »
Hızlı düğmeleri aç

nightlord

İleti: 1.085

Çevrimdışı
  • Administrator
  • *****
  • Hero Member
    • Profili Görüntüle
    • http://www.nightnetwork.org
Alıntı yapılan: ssg;13892
pek cok ki$i boyle prefixler kullaniyor ama bu ki$iler arasinda ortak kabul gormu$ bir tanesi yok o yuzden birine uygun gelen oburune ters gelebilir :)
 


Bu konuda kesinlikle haklisin. Ben de insanlarin bu dili kullanmakta en cok friction yasayacaklari noktanin bu isimlendirme konvansiyonlari oldugunu dusunuyorum. Fakat isimlendirme kurallarinin kaldirilmasi dedigin gibi sonradan yapilabilecek (ve back compatible) bir konu oldugu icin ustune gitmiyorum su anda.