Dovremmo usare più linguaggi di programmazione funzionale e / o logica?

8

Ho programmato un po 'di Haskell e Prolog come parte di un paio di corsi di uni, ma questo è tutto. E non l'ho mai visto usato nell'industria (non che io abbia avuto molta esperienza lavorativa per cominciare, ma non ho mai visto un annuncio dove ti è richiesto di conoscerli).

Quindi dovremmo usare più spesso i linguaggi di programmazione funzionale e / o logica? Ci sono vantaggi o svantaggi nell'usarli o non usarli?

    
posta gablin 16.09.2010 - 16:22
fonte

3 risposte

9

Credo nell'uso dello strumento giusto per il lavoro. Entrambe le lingue imperative e funzionali hanno il loro posto e non c'è bisogno di spingere per usare un tipo più dell'altro.

Per i vantaggi / gli svantaggi, non penso di poter battere la risposta di Eric Lippert al < a href="https://stackoverflow.com/questions/2835801/why-hasnt-functional-programming-taken-over-yet-closed"> "Perché la programmazione funzionale non è ancora stata presa?" SO domanda.

    
risposta data 16.09.2010 - 16:29
fonte
5

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.

    
risposta data 16.09.2010 - 17:08
fonte
2

Un linguaggio di programmazione è una forma di rappresentazione delle informazioni. In questo caso le istruzioni per il computer da seguire. Tuttavia, la rappresentazione è importante anche per il pubblico di destinazione (cioè i programmatori).

Il concetto funzionale / logico non è così comunemente usato nella vita quotidiana come concetti procedurali. Se leggi le istruzioni (ad esempio come utilizzare il televisore, il lettore DVD o alcuni mobili di IKEA), queste sono per lo più scritte in modo procedurale (anche se in linguaggio naturale).

Pertanto, molte persone che non sono molto profondamente coinvolte in matematica o scienze spesso hanno molta più familiarità con tali concetti procedurali di quelli logici o funzionali.

Penso che questo abbia un grande impatto sulla scelta della classe di linguaggio di programmazione utilizzata. Alla fine, l'insieme di problemi che possono essere risolti con uno di questi linguaggi di programmazione è praticamente lo stesso (purché siano tutti completi).

Tuttavia, molti linguaggi procedurali stanno ottenendo sempre più aspetti di altri concetti. Python può fare lambda-calcolo e chiusure, rubino pure. Javascript, che è molto usato nell'industria, è in realtà un linguaggio funzionale (anche la maggior parte delle persone "usa male" lo usa più in modo procedurale). Pertanto, è proprio compito del programmatore utilizzare queste funzionalità nel modo appropriato.

    
risposta data 16.09.2010 - 16:57
fonte

Leggi altre domande sui tag