OT: este na temu C vs. zvysok sveta (Re: B&W svet)
Ales Prochaska
prochaska@alsoft.cz
Pondělí Březen 6 10:41:46 CET 2006
Ja bych to tak tragicky nevidel. Pokud muzu mluvit z praxe tak
efektifita vygenerovaneho kodu je pomerne malo zajimava vec. Rozdil
mezi vykonnosti programu prelozeneho super-optimalizujicim prekladacem
a normalne optimalizujicim prekladacem dosahuje max. takovych
nejakych deseti procent a to se u jednouzivatelske aplikace prakticky
neprojevi a u viceuzivatelske (nejaka server side zalezitost) to bude
zase spis dane propustnosti diskove pameti, databazoveho serveru atd.
Pokud se u takovych aplikaci vyskytne problem s propustnosti, musi se
resit na urovni projektu - tam se daji dohnat tisice procent, ne pri
prekladu hotoveho kodu. Honeni taktu v nejvnitrnejsich cyklech je az
posledni, zoufale a dost nesystematicke opatreni.
Ja tvrdim, ze hledisko efektivnosti generovani kodu je spis
programatorsky folklor (kteremu je z marketingoveho hlediska treba
vyhovet) nez realne zajimava vec.
No a pak je tu jeste jedna moznost, ktera muze rozumne fungovat jen u
"prisnych" jazyku: prave diky te prisnosti muze prekladac ze syntaxe
zjistit co chce programator udelat (a cim prisnejsi jazyk tim
slozitejsi myslenky se daji rozpoznat) a provest high-level
optimalizaci za nej. Napriklad nahradit cyklus tabulkou
prevypocitanych hodnot, nahradit volani procedury poruznu se
vyskytujici na mnoha mistech jedinym vypoctem do zasoby a pak uz jen
predavanim vysledku pro dane parametry a podobne, fantazii se meze
nekladou. Pokud by chtel nekdo namitnout, ze to rozumny programator
udela sam tak at si predstavi tym 20 programatoru a jednoho nervozniho
zakaznika za zady, ktery porad dokola rika, ze uz to melo byt davno
hotove :-)))
Pro ilustraci uvadim jeden sice trochu krajni, vlastne zbytecny,
presto vsak v nejmene jednom kompilatoru fungujici pripad
optimalizace:
Cecko
-----
int a,b;
// nejaky kod
if (a>b) {P()};
Prelozi se priblizne jako
mov eax,a
cmp eax,b
jng _1
call P
_1:
Vyssi jazyk
-----------
var a : unsigned range 1..10;
var b : unsigned range 20..30;
if a>b then P end if;
Prelozi se jako prazdny prikaz :-))
Ales Prochaska
> Vy ste si tak pekne pokecali cez vikend, a ja nemozem? Pokusam sa
> respektovat autoritu admina, ale hadam mi jedno OT naviac prejde.
> MK napisal:
>> A v tomto svete neznam opravdu slusny prekladac Ady, Moduly ci jineho
>> prisne typoveho jazyka ktery by dosahoval efektivnosti
>> sprosteho Cecka.
> No a ved o tomto to je. Ja napriklad nepoznam slusny prekladac
> akehokolvek jazyka ktory by dosahoval efektivnost sprosteho asembleru.
> Bohuzial, v pripade C ktory je mieneny akysi "medzijazyk" ktory chcel
> spojit citatelnost vyssieho jazyka s efektivnostou asembleru (a ktory
> podla mna spaja necitatelnost(*) asembleru s neefektivnostou vyssieho
> jazyka :-) ) , bol tento nejakym nedopatrenim vyhlaseny za plnohodnotny
> vyssi jazyk; a MK ako 100% pragmatik to preklada do nasho ludskeho
> kazdodenneho jazyka ako "jedina pouzitelna alternativa".
> Bohuzial, je to historicky dany fakt s ktorym sa zmierit treba (s
> vynimkou zriedkavych pripadov ked sa to da obist - vid napr. tie
> aplikacie vyuzivajuce ADA). A berte to tak, ze to hovorim ako clovek,
> ktory C z hlbky duse nenavidi.
> wek
> ----
> (*) do toho j sa zahrna amoznost lahko urobit chybu uz z akehokolvek dovodu
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list