Od začátku to byl akademický projekt, který nikdy neměl analogii v reálném technologickém světě. Všechny komerčně úspěšné počítače na světě jsou hardwarově zařízeny na imperativní programování.
Prosím v následujícím mě nechytej za slovo: pro mě z praktického hlediska, pokud nebudu nějak moc hledět na teorii, filosofii apod. je funkcionální programování především o tom, jak se pracuje s daty - hlavní koncepcí je omezení/neexistence měnitelných dat. V čistějších formách potom omezení/neexistence funkcí s nedlejším efektem. To potom snadno umožňuje dekompozici na úplně samostatné jednotky, protože neexistují dílená data.
...no a tohle mi nepřijde vůbec v kontrastu s imperativním programováním. Jasně, z teoretického hlediska jsou to odlišné koncepty, ale prakticky ne. Třeba ten Erlang je vyloženě "imperativně laděný" - když v něm píšeš, myslíš v krocích, které se mají udělat. Pokud je FP s něčím v rozporu, tak právě s tím OOP a ani to neplatí doslova (procesy v Erlangu mi přijdou jako nejčistější OOP, které znám
- nejenom, že se jim posílají zprávy, ale navíc každý běží s vlastním "vláknem").
Ony ty paradigmata jsou jenom taková teoretická typologie - třeba takové multiagentní programování. To je podle tebe něco jiného než imeprativní?
Celkovým rozšířením, drtivá většina aplikací na světě jsou imperativní programy. Zastoupení Erlangu je mizivé, to se dostáváme do čísel Algolu a Prologu, ty jsou také stále zastoupeny v těch nejrenomovanějších firmách :-)
Tak to jo. Rozšířením jo. Dneska je asi většina programů OOP*, ale to nemusí být navěky, že...
* zmršené okleštěné OOP ve stylu C++
No jenže to spolu právě úzce souvisí. Může se lehce stát, že objektové programování tu mnohojadernost nebude moc dobře zvládat... I když těžko říct, jestli to s tou mnohojaderností bude tak žhavé - spíš bych možná čekal pomalé vracení kyvadla zpátky - spíš směrem k úsporným a malým zařízením.
Imperativní programování zvládá mnohojadernost od samého počátku více než 30 let a nezdá se že by s tím byly nějaké zásadní potíže.
Jistěže s tím jsou potíže. Konvenčně napsané programy nemůžou škálovat a neškálují ani zdaleka lineárně k počtu vláken. U programů napsaných funkcionálně (z hlediska práce s daty - viz nahoře) by to aspoň teoreticky mohlo být daleko lepší - a praktická měření tomu celkem odpovídají viz např.
http://kth.diva-portal.org/smash/get/diva2:392243/FULLTEXT01 - obrázek 4.1 na straně 58 (vytištěné číslování). (jasně, je to jenom benchmark, vím)
Mnohojadernost samozřejmě leze i do mobilních zařízení, viz 3/4 nových mobilů je vícejaderných a nic nenasvědčuje k nějaké větší změně.
Tady si asi nerozumíme ve slovu "mnoho". Člověk podle mě není živočich s mnoha nohama stejně jako dvoujaderný proocesor není mnohojaderný. Pokud řeknu mnoho, představuju si něco jako třeba 10, 60 nebo 1000... Chtěl bych vidět, jak by konvenčně napsaný (třeba OOP) program škáloval od jednoho po tisíc vláken...