Autor Zpráva
František Hliva
Profil
Ktorý prístup je vhodnejší na vývoj bežných aplikácií?

Aké výhody má imperatívny oproti deklaratívnemu prístupu, a aké má naopak nevýhody?

Čo je rýchlejšie a efektívnejšie? A čo je menej pamäťovo náročnejšie?

Ja používam oboje, ale intuícia mi hovorí že napríklad LINQ je menej efektívne ako prejsť kolekciu v cykle. A kritické časti kódu píšem vždy imperatívne. Niekde som čítal že deklaratívny prístup je výhodnejší na viacjadrových systémoch. Tak ako to teda je?
ah01
Profil
Záleží na konkrétním případě. Obecně se to nedá moc říct, to je jako se ptát, jestli je lepší auto nebo motorka.

František Hliva:
LINQ je menej efektívne ako prejsť kolekciu v cykle
Zase záleží na případě a na tom jestli daný programátor umí LINQ použít. Např. hledat maximum cyklem v IQueryable, rozhodně rychlejší nebude!

deklaratívny prístup je výhodnejší na viacjadrových systémoch
Když zmiňuješ LINQ, najdi si nějaké informace o PLINQ.
Timy
Profil
František Hliva:
Niekde som čítal že deklaratívny prístup je výhodnejší na viacjadrových systémoch.
To souvisí s tím, že u deklarativního přístupu říkáš, co chceš vypočítat, kdežto u imperativního jak to chceš vypočítat. Tedy převést imperativní algoritmus na na paralelní algoritmus není obecně triviální operace. Pokud u LINQu dodržíš nějaká jednoduchá pravidla, tak stačí, když přidáš jeden příkaz AsParallel() a celý výpočet ti jede paralelně bez jakékoliv další změny kódy. To je výhoda deklarativního přístupu, lze to chápat jako další částečná abstrakce nad kódem. Další zřejmou výhodou je to, že ten kód je čitelnější. Nevýhodou pak je, že ten kód pod tím lze obvykle jen těžko upravovat, takže třeba by vážně ručně naspaný for byl rychlejší než daný výraz v LINQu. Jenže zase tam můžeš nasekat hromadu chyb, obzvlášť, kdybys to chtěl opravdu paralelizovat.

Zrovna u paralelních věcí se vyplatí co nejvíce deklarativní přístup, protože obvykle je dost těžké napsat a synchronizovat celý algoritmus — hrozně blbě se to debuguje a pokud je ten program chybný třeba jen v jedné z tisíci větví, tak se na to během debugování ani nemusí přijít, případně to nemusí být jednoduché znova reprodukovat.

Vaše odpověď

Mohlo by se hodit

Příspěvky nesouvisející s webem budou odstraněny.

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0