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