Hele ale to je jasný, že striktní kód, který bude dělat úplně přesně to samý jako ten lazy kód jenom bez toho lazy overheadu bude rychlejší. Ale ta pointa je, že když budeš chtít udělat něco lazy (viz ten loeb) v C, tak to dělat vůbec takhle nebudeš. Uděláš nějakou opičárnu.
Pointa je v tom, že typicky chceš strict a ne lazy. Lazy jsou pokud vím jen Haskell a Miranda, všechny novější jazyky jsou strict, jen někdy umožňují i lazy, líbí se mi třeba řešení v OCamlu.
No úplně typický haskellovský trik:
for_ [1..] $ \i ->
Tohle fakt strict nechceš. Ono v haskellu nemáš cykly, funguje to tam trošku reverzně, a to výše uvedené je v podstatě streaming, který nakonec používáš docela často...
Tohle není pravda. Když ve SVÉM modulu nastavíš tyhle pragmy tak tím nic nerozbiješ.
Když píšeš nějakou aplikaci, používáš jenom svoje moduly nebo i něco externího? Typicky je toho externího řádově víc. Jednou přijde zákazník a řekne ti, že je to moc pomalé, potřebují spoustu serverů, které stojí spoustu peněz, aby to mohli provozovat. Tak to zprofiluješ a zjistíš, že problém je v nějaké externí knihovně. A teď, můžu do ní přidat pragma strict nebo nemůžu...? Nevíš, musíš ji kompletně nastudovat a pochopit a potom doufat, že jsi náhodou něco nepřehlídnul. Nebo prostě zákazníkovi říct, že má smůlu a ať si koupí víc serverů.
Dělal jsi to někdy? Problém lazy vs. strict je typicky jenom tehdy, pokud je nějaké větev, která se nemá vrátit, bottom. Ale to je typicky záležitost knihoven typu nějaký hodně specifický monady, různé exception handlingy a podobně. V knihovnách, které "něco dělají" (a je tam očekávatelný bottleneck) se tohle prakticky nevyskytuje.
A on si poptá řešení od někoho jiného, který to napíše ve strict jazyce a bude těch serverů potřebovat jen polovinu...
A napíše to za 3násobný čas co já a ještě mu to bude padat. Jasně, je to vždycky trade-off. Hele já jsem se s tím, že by moje věci byly nějak brutálně závislé na výkonu CPU setkal relativně zřídka. Občas se to stane, a pak se vyplatí nějakou konkrétní část přepsat v něčem, co je prostě rychlejší, ale u drtivé většiny věcí fakt nejdeš s výkonem na krev (samozřejmě je otázka co děláš, pokud jo, tak třeba ten OCaml klidně může mít smysl).