Prima di tutto - perché il compilatore deve fare molto di più. Se vuoi creare un compilatore imperativo puoi quasi fare 1-1 di trasformazione in assemblatore e il codice prodotto avrà una velocità accettabile (certo - potrebbe esserci molto da fare, ma è compilazione 'basicly' 1-1 + ottimizzazione). I compilatori funzionali HANNO IN GRADO di gestire l'ottimizzazione ottimizzata inlineing, tail-call ecc. Quindi l'implementazione dei linguaggi funzionali è stata molto più lenta di C / C ++ / ... in passato (tuttavia ottengono molta più velocità ogni iterazione mentre i compilatori stanno migliorando).
In secondo luogo - i programmatori sono così abituati a dichiarare che non possono "accettare" l'approccio "non esiste nessuno stato". Certo, la mancanza di stato non è utile in ogni condizione, ma la mancanza di uno stato (globale) non significa la mancanza di uno stato locale.
Terzo: la programmazione funzionale non ha una bella storia alle spalle. Le OOP hanno una bella storia in quanto gli oggetti sono mappati ai nomi e quanto è intuitivo. In seguito sai che non è così semplice perché non puoi creare una classe Manager
come sottoclasse di Employee
come Employee
può essere promossa a Manager
e devi giocare con i decoratori. I programmi funzionali hanno una storia in matematica che è IMHO più utile ma meno negoziabile.
Come internamente dal punto di vista del computer - non c'è differenza tra il calcolo parallelo e simultaneo molti programmatori non vedono una differenza e molti linguaggi hanno le stesse primitive per gestire entrambi. Grazie alla mancanza di thread locali e leggeri nei linguaggi di programmazione funzionale, la parallelizzazione dell'algoritmo è molto più semplice. Tuttavia, la programmazione simultanea non viene resa automaticamente più semplice in quanto la concorrenza riguarda lo stato globale.
Infine - ci sono molti vecchi programmi scritti in stile inattivo. Anche il porting dalla lingua imperativa alla lingua imperativa è molto più semplice di quello funzionale.
Per quanto ne so, le banche di investimento iniziano ad abbracciare i programmi funzionali internamente in modo che entrino in XXI c. (in un'area molto importante anche se nascosta) - così guadagnano slancio.
PS. Mentre credo che i programmi funzionali siano "migliori" nel significato, nascondono la complessità meglio di altri approcci, non significa che non ci siano aree come gli script che sono intrinsecamente imperativi.