Mit ír ki?
Friday, August 10th, 2007Lefuttatni nem ér.
Console.WriteLine(new string(’1′, ‘b’));
Lefuttatni nem ér.
Console.WriteLine(new string(’1′, ‘b’));
Rico Mariani neve szerintem ismerős a .NET programozók körében, ő az MS egyik performace-hangoló embere.
Mivel kedvencem az optimalizálás, a blogjára mindig odafigyelek. Most a DLinket vette górcső alá, eddig 4 cikket írt róla (1 2 3 4).
A 4.-ben már a még ki nem adott Beta2-vel foglalkozik, amiben már majdnem olyan gyors a Linq mint a sima kézi sql, sőt, módosításoknál 4x gyorsabb. Miért? Olvassátok el a cikkeket. :)
Érdekes írás Eric Lipperttől, amelyen arról mesél hogyan takarítják a compiler kódját. Igen, mert olyan öreg, hogy már az is tele van retekkel.
MViktor írta:
Szornyusegesen nez ki, de fordul, sot! mukodik. http://en.wikipedia.org/wiki/Duff’s_device
Igen, innen vettem én is. :)
Rétikánya:
Magamtól szörnyülködtem. Megnéztem a Wikin…
…s ilyenkor mindig rájövök mennyire nem is értek a programozáshoz. El kéne mennem favágónak.
Nem, nem. Ez hekk, nem normális programozás. Gondolj bele, ha minden nap ilyen kódot kellene megértened. Ez kb. olyan kód, mint amit mickkék csináltak az NavAndGo-s felvételi kampányukban. Amikor egy kódról nem látszik villámgyorsan mit csinál, akkor az vagy zseniális hekk, vagy egy kalap szar. Ez a kód azért érdekes, mert az ember nem is gondolja, hogy ez a szintaxis egyáltalán lefordul C-ben, pedig de. :) Ahogy a cikk is írja, lehet, hogy még hatékonyabb is, mint az eredeti ciklusos megoldás, de mai compilereken és procikon már ez se biztos. Ha az embernek határozott célja van egy hekkel, és bebizonyítja, hogy ezt a célt teljesíti, hekkeljen. Ha nem, írjon olvasható kódot. Szóval ne írd le magad, ez eszement kód. :)
SebDani:
Ebben az esetben szívesen rácsapnék a kezére annak aki azt a fordítót írta, amin ez lefordul.
Elvileg minden C kompatiblis szabvány fordítón fordul. :) Ilyen laza a nyelv szintaxisa. Elő kell vennem a Kernighan-Ritchie könyvet újra, de nem azért, hogy ilyenekkel szórakoztassam a kollégáimat. :)
Beküldtem életem első bugreportját, aztán lehet, hogy orrba leszek vágva, mert már más is megírta. Kiderül.
Egy szimpla kis kódocskától szétszáll a compiler:
a.cpp
[source:c++]
#include
void main()
{
CString path;
for(int pos = 0; CStringW s = path.Tokenize(path, pos); s.Empty());
}
[/source]
cl a.cpp
fatal error C1001: An internal error has occurred in the compiler. (compiler file ‘F:\SP\vctools\compiler\utc\src\P2\ehexcept.c’, line 971)
Fordul ez a kód? Csinál valamit?
[source:c++]
int c = 8;
char b[] = ” “;
char alma[] = “almaalma”;
char* a = alma;
switch (c % 8)
{
case 0: do { *b = *a++;
case 7: *b = *a++;
case 6: *b = *a++;
case 5: *b = *a++;
case 4: *b = *a++;
case 3: *b = *a++;
case 2: *b = *a++;
case 1: *b = *a++;
} while ((c -= 8) > 0);
}
[/source]
Architektúra kedvelőknek egy jó kis cikk a Supervising Controller pattern használatáról ASP.NET-ben.
Annak idején, még a VS 2005 illetve a .NET fw. 2.0 tervezésekor szó volt róla, hogy a C#-ban lesz refactoring (ez ugye csak VS fícsör), a VB-ben nem. Cserébe a VB-ben lesz Edit and Continue, de a C# nem kap ilyet.
Akkor az volt az érv, hogy a C#-osok komoly emberek, akik naphosszat refactorolnak, de nem hekkelnek a debugolás alatt álló kódon, mert az gagyi. De aztán a C# lobbi belerakatta.
Most, hogy C++-ban dolgozok, ahol már a VC6 óra van E&C elég sokat használom. Azért, mert gyakran van, hogy valami apróságot elszúrok, és mire azt a kódot újrafuttatom, sok időt veszítenék. Egyébként egy IE addont írok. Tudom, ha lennének jó Unit tesztjeim, akkor pikk-pakk újra lehetne futtatni a kódot a vizsgált pontig, de nincsenek, C++-ban még nem értek a Unit teszteléshez.
Szóval értem az érvet, komoly, unit tesztekkel felvértezett programoló nem használja az EC-t, de én úgy látszik nem vagyok az, így örülök neki, hogy van.
Amikor év elején egy C# kódot gyúrtam át, akkor nem is emlékszek, hogy használtam volna, de ott volt valag sok unit tesztem.
Ti használjátok, vagy komoly programolók vagytok? :)
Tocsi színezi a gridet, jópofa.
Ha pl. stringeken kell elágazni, berakja őket Dictionary-be, és abban keresgél. Ha csak egyszer hívódik meg a switch, akkor ez még lassabb lesz, mintha sima if-else-ekre fordítana, de többszöri nekifutásra már sokat nyerhetünk vele.
(Sok most a munkám, pedig van sok érdekes dolog a fejemben, majd ha lesz kis időm kiírom magamból.)�
Betárazom magamnak is tanulásra.
Hajmeresztő (szerencsére csak szakmailag) időszakon vagyok lassan túl, ezért is nem blogoltam már régen.
Pár vegyes tanulság az elmúlt időszakból, zöme magamnak is emlékeztető:
Használd a C# usingot, bmeg!!!
Én a DirectoryServicessel szívtam meg, mivel az nemmanazsolt kódot és erőforrásokat hívokat a háttérben úgy fejreáll mint állat pár száz allokált objektum után, ha nem Disposolunk keményen.