Dalla programmazione imperativa a quella funzionale

5

Come ingegnere elettronico, la mia esperienza di programmazione è iniziata con Assembly e continuo con PL / M, C, C ++, Delphi, Java, C # tra gli altri (la programmazione imperativa è nel mio sangue).

Mi interessa aggiungere alla mia conoscenza precedente, le competenze sulla programmazione funzionale, ma tutto ciò che ho visto fino ad ora sembra molto offuscato ed esoterico.

Puoi rispondermi per favore?

1) Qual è il linguaggio di programmazione funzionale mainstream oggi (non voglio perdersi a studiare una pletora di linguaggi FP, solo perché il linguaggio X ha la caratteristica Y)?

2) Qual è stato il primo linguaggio FP (il Fortran della programmazione funzionale se lo si desidera)?

3) Infine, quando si parla di FP puro o non puro, quali sono le lingue principali di ogni categoria?

Grazie in anticipo

    
posta user66569 30.09.2012 - 11:28
fonte

3 risposte

9

Lingua leggermente in guancia, risponderei: Lisp, Lisp, e Lisp.

Per la domanda numero uno, questa è probabilmente una risposta controversa. Le persone che si sentono a proprio agio con lo stack di sviluppo di Microsoft, ovviamente, considerano che F # sia più mainstream - dopotutto, è proprio lì nella catena di strumenti del tuo sviluppatore, pronta per essere installata (o già presente) su milioni e milioni di PC. La comunità accademica è più entusiasta di Haskell, ma anche qui l'utilizzo nel mondo reale è inferiore a quello che vorrebbero raggiungere. Invece gli ingegneri delle telecomunicazioni giurano su Erlang. Ma quando si uniscono tutti i dialetti - Scheme per l'insegnamento e le lingue di estensione, Common Lisp per applicazioni di dimensioni aziendali, Emacs lisp per l'unico vero editor, Clojure per i giovani ragazzi Java ... potrebbero essere solo i più utilizzati lingua là fuori (Si noti che la quota di mercato del linguaggio di programmazione è un argomento intensamente politicizzato e ogni risposta che riceverete sarà ridotta a brandelli da altre opinioni.)

La seconda domanda è facile. A meno che non si voglia contare il calcolo lambda puramente matematico, Lisp è stato il primo - anche se inizialmente era inteso proprio come uno strumento di modellazione matematica, si è rivelato facilmente implementabile, e il resto è storia. Era negli anni '50.

Terza domanda: il Common Lisp è decisamente non puro, mentre Scheme assomiglia più strettamente ai puri sistemi assiomatici come Haskell, che separano rigorosamente gli effetti collaterali dal calcolo. Ancora una volta, le domande sulla quota di mercato sono sempre controverse e Scheme non è certamente il linguaggio FP più puro, solo (credo) il più usato, anche se molto di ciò è dovuto a coorti di matricole informatiche. E Common Lisp non è neanche il linguaggio meno puro - penso che tutti i vari strumenti "Lisp on the JVM" siano meno puri, dal momento che sfruttare l'enorme ecosistema di librerie Java è una delle loro ragioni di esistenza. Se fossi costretto a indovinare, direi che uno di loro sarà probabilmente il prossimo grande vincitore della programmazione funzionale.

    
risposta data 30.09.2012 - 11:45
fonte
5

1) What is the mainstream functional programming language today (I don't want to get lost myself studying a plethora of FP languages, just because language X has the feature Y)?

Sarei molto titubante nel nominarne uno solo qui. FP in sé non è affatto mainstream, quindi chiamare "mainstream" qualsiasi linguaggio FP sarebbe sciocco.

Ci sono alcuni linguaggi di programmazione FP che cercano il contatto con la programmazione tradizionale, ad es. Scala, F # e Clojure, con il supporto di una piattaforma mainstream (ad esempio JVM o .NET), e ci sono alcuni linguaggi di programmazione tradizionali con almeno un certo grado di supporto FP (JavaScript è il più popolare).

All'interno del regno di FP, il Lisp (Common Lisp e Scheme sono i dialetti più importanti, con Clojure come un nuovo arrivato relativo) sta probabilmente guidando il pacchetto in termini di numero di utenti, così come supporto di librerie e piattaforme. A meno che tu non contenga JavaScript, che è sorprendentemente simile a Scheme in molti modi (se riesci a guardare oltre la sintassi).

2) What was the first FP language (the Fortran of functional programming if you want)?

Sicuramente Lisp. Non ci sono dubbi.

3) Finally, when talking about pure vs. non pure FP what are the mainstream languages of each category?

Se vuoi essere veramente puro, c'è in realtà una scelta molto piccola - Haskell si impegna a essere completamente puro (il linguaggio stesso: il runtime può e solitamente esegue azioni impure), e ci sono alcune lingue sperimentali che seguono un filosofia simile ma diversa da Haskell in vari modi. AFAIK, gli altri consentono tutti i costrutti impuri in un modo o nell'altro, alcuni sono più accademici rispetto ad altri.

    
risposta data 30.09.2012 - 13:17
fonte
3

1) Non ce n'è. Le scelte possibili sono F # (che viene dalla MS e si integra con il framework Net), GHC Haskell (compila il codice nativo su diverse piattaforme più popolari, sono disponibili collegamenti a molte librerie C e C ++), scala (scelta jvm, sebbene abbia delle limitazioni) . Per la tipizzazione dinamica guardare su Erlang (crossplatform, enfatizza la concorrenza, il parallelismo e le comunicazioni di rete) e discendenti chiari: clojure (per piattaforma JVM), schema racket (codice nativo).

2) lambda calcolo. È solo un modello matematico, però. Il primo linguaggio FP implementato era Lisp e successivamente SASL.

3) Per puro FPL è attualmente haskell - l'unico FPL puro pigro diffuso (sebbene il dialetto GHC abbia caratteristiche impure). Per gli impuri non c'è un leader chiaro. La famiglia SML sta morendo tranne F #, quindi probabilmente starei con F # (Dicono che abbia problemi con Mono) o con qualche dialetto Racket.

Oltre allo holywar puro / impuro, fai attenzione alla tipizzazione statica / dinamica holywar. Rimango chiaramente sul lato statico, ma sono ben consapevole che molti preferiscono la dinamica (dialetti lisp, Erlang e così via).

    
risposta data 30.09.2012 - 16:29
fonte

Leggi altre domande sui tag