[elektro] megint C
SZIGETI Szabolcs
szigiszabolcs at gmail.com
Thu Dec 6 09:41:24 CET 2012
Hali!
Igen, a C nagyon alkalmas arra, hogy másokat szívassunk a kóddal, sőt,
saját magunkat is nagyon jól meg tudjuk szívatni. Ennek leginkább
történelmi okai vannak, hiszen a C nem egy modern nyelv, és elég sok -
mondjuk úgy - furcsasága abból adódik, hogy amikor kitalálták mások voltak
a lehetőségek, mind hardver, mind fordítók területén. A fenti példa is arra
szolgált, hogy megértsük, hogyan működnek a tömbök és a pointerek, és miért
viselkednek bizonyos dolgok másként, mint azt egyéb nyelvekben esetleg
megszoktuk. Semmiként sem egy követendő példa.
Majdnem egy évtizedig tanítottam programozást a BME-n. Nem mintha ez
bármire feljogosítana, de elég sok mindent láttam, hogy ki, hogyan tudja
megszívatni magát és főleg, hogy mik a kezdők hibái.
Mindig is azt hangoztattam, hogy manapság kódot nem írunk, hanem olvasunk.
Egyrészt számtalan előre gyártott kódot használunk, másrészt a fejlesztés
során sokszor van, hogy elő kell vennünk egy-két-száz hónappal ezelőtt írt
kódunkat és nagyon nem mindegy, hogy mennyire olvasható és megérthető. Csak
azért mert az egész programunkat bele tudjuk tenni egy while ciklus
fejlécébe, még nem biztos, hogy érdemes is ezt megtenni.
A mai optimalizáló compilerek nagyon jók. Ezeket arra készítették fel, hogy
felismerjék azokat a szokásos konstrukciókat, amelyeket jól tudnak
optimalizálni. Gyakori, hogy a teljesen hagyományos kódból jobbat fordít,
mint az eleve trükközöttből, mivel azt nem ismeri fel, hogy mit is akar az
író. Ez nem jelenti azt, hogy a compiler mindig okosabb, és hogy _megfelelő
mérés után_ nincs helye a kézi optimalizálásnak, de a tapasztalat az, hogy
egy mai fordító igen jó teljesítményű kódot tud csinálni.
Sajnos a C szinte tálcán kínálja a trükközést, mind a nyelv, mind pedig az
előfeldolgozó. (Gondlom sokaknak ismerős: http://www.ioccc.org/)
Ha meg bírjuk állni, hogy kezdőként (vagy akár haladóként) inkább írunk
"Pascal" kódot C-ben, hosszú távon jobban járunk, főleg, amikor a
megrendelő két év múlva szeretné továbbfejlesztetni a cuccot.
Ha megértettük a működést, akkor meg úgyis fogjuk tudni, hogy mit érdemes,
és mit nem.
Szabolcs
2012. december 5. 19:15 Fuzesi Arnold írta, <arnold.fuzesi.lista at gmail.com>:
> WOW, mindig tanul az ember :)
>
> Hogyan írjunk másokat szivató kódot. Chapter#1 :)
>
> A.
>
> On 2012.12.05. 16:50, SZIGETI Szabolcs wrote:
>
> > És ugye ebből jön az ismert példa: t[3] --> *(t+3) --> *(3+t) -->
> 3[t], és
> > ezt minden C fordító megeszi.
> >
> > Szabolcs
>
> -----------------------------------------
> elektro[-flame|-etc]
>
More information about the Elektro
mailing list