[elektro] megint C

SZIGETI Szabolcs szigiszabolcs at gmail.com
Thu Dec 6 11:05:25 CET 2012


HalI!

Amivel pl. nagyot lehet szívni, az az, hogy egy csomó minden implementáció
függő. Az emberek viszont azt hiszik, hogy a C hordozható, és nagyot
koppannak. Mondjuk egy 32->64 bit vagy egy big->little endian átalakítás is
nagyon durva szívás, ha a kód nem volt szépen megírva (láttam ilyen,
hónapokig gyomlálták az olyan csoda megoldásokat, mint int pointerre
állított char pointer 1,2,3-mal növelése, hogy a megfelelő bájtot kiszedjék
az intből), de ennél vannak sokkal apróbb dolgok is.

Lehet hordozható kódot írni, nem is nehéz, de valahogy mégis rengetegszer
láttam olyan megoldásokat, amikkel garantált a szopás. Pedig meg lehet írni
a kódot hordozhatóra, karbantarthatóra, csak lévén a C egy régi nyelv, a
környezet nem vezeti úgy az ember kezét,mint más, újabb nyelv, és nem fogsz
fordítási hibát kapni, ha éppen készülöd tökönszúrni magadat. Szóval ha
visszafogjuk a bennünk élő buherálási vágyat, akkor jobban járunk.

Szabolcs



2012. december 6. 10:09 Skandar Graun írta, <sgraun at gmail.com>:

> Teljesen egyetértek.
> Az egyik fő problémám egyébként a C-vel pont ez a nüansznyi eltérésekből
> őröletes baromságok kategóriájú hozzáállása.
> Ad egy warningot, valami cast-ra. Aztán csak azt veszed észre, hogy nem
> fordítja be azt a rutint.
> Most megint a pointerekkel szívok, átloptam a kódot és nagyon nem megy.
> De még nem érte el azt az ingerküszöböt, hogy feltegyem a listára.
>
> 2012. december 6. 9:41 SZIGETI Szabolcs írta, <szigiszabolcs at gmail.com>:
>
> > 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]
> > >
> > -----------------------------------------
> >           elektro[-flame|-etc]
> >
> -----------------------------------------
>           elektro[-flame|-etc]
>


More information about the Elektro mailing list