D

Ma egy új program nyelvvel ismerkedtem meg: D
Éppen egy genetikai mintaillesztésen (short-read) gondolkodtam. Rendezési, indexelési algoritmusokat olvasgattam a neten, amikor egy in-place radix sort algorithm kérdésbe futottam bele, ahol egy D mintakódot láttam, és felkeltette az érdeklődésemet. Ahogy olvastam a nyelv leírását, összehasonlításokat C++-szal, újra előjöttek a különböző programozási nyelvekről alkotott gondolataim.
Az évek során elég sok programozási nyelvvel találkoztam: asm, asp, basic, bapc, c, c++, c#, clipper, delphi, java, js, pascal, perl, php, vbs, és ami most nem jut eszembe. Persze nem mindben programozok napi szinten, de írtam bennük működÅ‘ programot. Az elsÅ‘ a basic volt még C64-en 🙂 Persze ezeken kívül láttam vagy hallottam még egyéb programnyelvekrÅ‘l is (ada, cobol, fortran, python).
Minden nyelvnek megvannak az előnyei hátrányai. A delphiben imádom a string kezelést. Szeintem ez a legnagyobb előnye a c-vel szemben. Egyszerű kezelni, hatékony, másolható, összefőzhető, gyors (referencia számlált), nem kell bajlódni a memória kezeléssel. A c programok jelentős részében a hibák, biztonsági rések oka a helytelen memória kezelés, string műveletek. Amikor egy függvény több karaktert ír a visszatérési bufferbe, mint annak a mérete, lásd scanf, gets, wchat konverzió.
A másik amit szeretek a delphiben a függvény paraméterek kezelése: érték szerinti, const ill. var referencia szerinti átadás. Tiszta, jól látható, könnyen módosítható. Kiráz a hideg, amikor a c pointer változó átadásaira gondolok, és hogy milyen könnyű hibás kódot irni. A c++ referencia paraméteri már sokkal jobbak.
A Delphiben az erős típusosság is jól jön időnként, megkönnyíti a véletlen hibák kiszűrését, programozást az IDE-ben.
Egy másik dolog ami elég megtévesztÅ‘ tud lenni c-ben, az a pointer növelés és tömb indexelés: int32 a[5]; a[3] == *(a+3), word hi=*(word*)(a+2), hi=*(word*)((int)a+2), hi=*(word*)((char*)a+2) … én egy konstans eltolástól naivan egy mov word ptr [dx+2]-t várnék, egy indexeléstÅ‘l pedig mov word ptr [dx+idx*sizeof]-ot, de a c szerint az eltolás is típusfüggÅ‘ indexelés…
A C#-ban a using blokk hasznos a biztonságos erőforrás felszabadításhoz.
Na mára ennyi elég…