A co ta -ffast-math? Mění sémantiku práce s floating point operacema. Takže máš korektní kód, který se parametrem stane nekorektní..ale rychlejší. Taky problém?
Ano -ffast-math je taky prasárna, ne tak velká jako strict v Haskellu, ale pořád prasárna. Aby bylo jasno, já neobhajuju prasárny v jiných jazycích, jsou tam taky. Jenom tvrdím, že -XStrict v Haskellu je prasárna a docela velká. Ty tvrdíš, že -XStrict v Haskellu nevadí, protože ostatní jazyky jsou prasácké taky. Ano jsou, ale to přece není důvod zavádět prasárny i do Haskellu?
Zajímavé, mě přišlo, že v jednom případě main vrátilo (), ve druhém bottom. Všechny funkce vrátily totéž nebo bottom. Máš na to jiný názor? Jinak to, že v IO jsi schopen detekovat kompilační flagy je celkem pochopitelné. Ale tomu asi neříkáme, že to mění sémantiku programu...?
Mě jako uživatele zajímá, jestli dostanu správný výsledek, nebo ne. Program bez -XStrict pracuje správně (protože závisí na lazy evaluation) a s -XStrict dostanu chybný výsledek. V tom programu přitom žádná chyba není, jen závisí na lazy evaluation a -XStrict ten program rozbije. -XStrict prostě úplně mění sémantiku vyhodnocování a může to korektní program rozbít. Můžeš klidně tvrdit, že main v jednom případě vrátilo () a ve druhém bottom, ale já jako uživatel chci, aby to vracelo správné výsledky stále, ne jenom v jednom případě.
A ještě jedna věc, vem si typickou lopatu, třeba mě, která by chtěla něco dělat v Haskellu. Mám problém, jsem lepič, nějaké řešení najdu na stackoverflow. Mám další problém, další řešení najdu na stackoverflow. Slepím to dohromady. A jsem úplně v háji protože nevím, která část kódu závisí na strict vyhodnocování a která ne. Musím tu informaci někde dohledávat a případně slepený kód pochopit a upravit, na správná místa přidat bang nebo lazy patterny, aby to fungovalo. Když to neudělám, tak se to přeloží, ale v určitých případech se to nemusí chovat správně. Tohle je úplně mimo možnosti běžné lopaty. S -ffast-math lopata mít problém nebude, prostě to přeloží bez -ffast-math a všechno bude fungovat, i když třeba pomaleji. Mimo jiné taky proto zůstane Haskell navždy akademickým jazykem a nestane se mainstreamem. Složitost v kombinaci se strict prasárnami ten jazyk dělá pro běžnou lopatu prakticky nepoužitelným. Bohužel, já mám Haskell rád a líbilo by se mi, kdyby se dal v mainstreamu používat, ale prakticky to zatím nevypadá na úspěch Haskellu.