Qual è il linguaggio di produzione più compatibile e ampiamente utilizzato per esportare le conoscenze e le competenze acquisite da Haskell?

14

Mi piace Haskell, chiaro e semplice. Mentre Haskell è utilizzato nei software di produzione, non è particolarmente diffuso da quello che ho visto. Qual è la lingua più simile e ancora ampiamente utilizzata per quanto riguarda i progetti di produzione, in modo che io possa avere la possibilità di una palla di neve di usare qualcosa di altrettanto impressionante nell'industria?

C'è anche la stessa lingua dalla prima parte disponibile su un gran numero di piattaforme? In caso contrario, qual è la migliore alternativa che dispone di un'ampia piattaforma di distribuzione? Vorrei una sola lingua per mettere la mia lista di cose da fare piuttosto che un enorme sciame o famiglia. Le prove concrete sarebbero un vantaggio.

    
posta World Engineer 01.09.2011 - 01:55
fonte

5 risposte

21

Haskell è strettamente correlato alla famiglia di lingue ML. Questo include cose come OCaml , naturalmente, ma anche F # sulla piattaforma .NET. Queste lingue condividono con Haskell le fondamenta del sistema di tipi e il modo in cui i dati vengono utilizzati: tipi di dati algebrici, pattern matching, tipo di inferenza, ecc. Ovviamente possono essere sostanzialmente diversi da Haskell su altri punti - la maggior parte dei ML sono rigidi e impuri , per cominciare, e la popolarità di Haskell come veicolo per la ricerca nei sistemi di tipo e nella progettazione del linguaggio significa che la maggior parte dei linguaggi di stile ML tendono ad avere sistemi di tipi meno potenti (ma potenzialmente più facili da capire). Probabilmente è sicuro dire che mentre si può perdere alcune cose su Haskell, in particolare all'inizio, la maggior parte dei programmatori Haskell si sentirebbe probabilmente a suo agio in una ML abbastanza rapidamente, a un livello base di cose da fare . Se vuoi una lingua con la stessa struttura generale di Haskell, una ML è la soluzione migliore.

Il lato funzionale di Scala si basa molto anche sulla tradizione ML, e introduce anche alcune caratteristiche di sistema di tipo avanzato familiari ad Haskell, nonché un sistema OOP più standard integrato con quanto sopra . Mentre OO nei linguaggi in stile ML tende ad essere affrontato come più di un "modello OO con strumenti funzionali di base" Scala vive e respira OO in stile Java. Ciò ha vantaggi per l'interoperabilità Java, come si potrebbe immaginare, e presenta un ambiente di lavoro più familiare per i programmatori OO. Tuttavia, provenendo da uno sfondo Haskell, è più probabile che tu sia infastidito dal modo in cui unire le cose in Scala rende gli idiomi funzionali più goffi e trovare la maggior parte delle API Java per essere mal progettate e inutilmente difficili da usare. Quindi se vuoi qualcosa con un sistema di tipo sofisticato che permetta la traduzione diretta di molte cose in Haskell (con qualche overhead extra sintattico) e non ti interessi compromettere lo stile funzionale, potresti divertirti con Scala.

Infine, anche se può sembrare strano, Clojure in realtà ha molte cose in comune con Haskell a un livello più filosofico. La maggior parte di ciò che troverai nell'approccio di Clojure allo stato e valori rispetto alle identità è molto vicino nello spirito a ciò che Haskell formalizza attraverso il sistema di tipi . Corrispondentemente, Clojure enfatizza l'interoperabilità Java in misura minore e non si preoccupa tanto del trascinamento in OOP, quindi in qualche modo l'approccio di Clojure alla programmazione funzionale stessa può essere più vicino a ciò che si è già familiari con . Penso che stia dicendo a questo proposito che, per quanto ne so, Clojure è l'unica lingua oltre a Haskell che ha un'implementazione di STM è semplice, efficace e funziona. D'altra parte, Clojure deriva dalla tradizione Lisp e quindi manca del sistema di tipo statico e l'enfasi sui tipi di dati algebrici e sulla corrispondenza dei modelli trovati nei linguaggi influenzati da ML. E ovviamente è un Lisp, che è di per sé un aspetto negativo per alcune persone (anche se non so davvero perché).

Parlando per me, con la dichiarazione di non responsabilità che la mia prima esperienza con la programmazione funzionale era in Scheme, probabilmente mi propenderei verso Clojure, con OCaml una probabile seconda scelta.

    
risposta data 01.09.2011 - 03:12
fonte
4

Non l'ho mai usato da solo, ma vedo talvolta apparire Scala nei blog o nelle descrizioni dei progetti e credo che abbia preso i concetti principali di Haskell. Scala si compila verso la JVM e può interagire con Java.

    
risposta data 01.09.2011 - 02:01
fonte
3

Il Clojure è sempre più ampiamente utilizzato, e anche se non somiglia ad Haskell a livello superficiale, se guardi un po 'più a fondo è chiaramente ispirato da Haskell e incoraggia uno stile funzionale molto simile.

Funzioni di Clojure chiave che gli utenti di Haskell possono trovare familiari e avvincenti:

  • Il linguaggio principale è puramente funzionale - mentre gli effetti collaterali sono possibili sono sepolti in luoghi specifici (ad esempio riferimenti STM, funzioni IO, interoperabilità Java)
  • Tutte le strutture di dati sono immutabili e persistenti
  • Pigrizia - raggiunto in gran parte attraverso le onnipresenti sequenze pigre di Clojure, questo sarà molto familiare agli utenti di Haskell. Infinite sequenze pigre vanno bene.
  • Memoria transazionale del software - è il modo principale per gestire lo stato mutabile in Clojure. Vale la pena guardare questo eccellente video in cui Rich Hickey spiega l'approccio di Clojure all'identità e allo stato: link

Differenze chiave (potrebbero essere positive o negative a seconda della tua prospettiva):

  • È impuro, anche se la mia osservazione è che lo stile clojure idiomatico è quello di applicare le funzioni pure ovunque sia possibile.
  • Digitazione dinamica piuttosto che statica (sebbene gli hint di tipo statico possano essere utilizzati facoltativamente per ottimizzare le prestazioni)
  • È un langauage JVM con facile accesso all'intero ecosistema di librerie Java - questo è a mio avviso il più grande vantaggio in termini di applicabilità del mondo reale
  • Sintassi Lisp. Quindi ottieni tutti i vantaggi di omoiconicity , a costo di dover imparare a vedere attraverso tutte le parentesi: -)

Prospettiva personale: ho imparato Haskell prima di Clojure e ho amato Haskell per la sua eleganza e purezza matematica. Clojure trae molta ispirazione e prende in prestito molte buone caratteristiche di Haskell, ma è un linguaggio molto più pragmatico / pratico. Soprattutto quando si considera l'enorme valore di poter sfruttare l'ecosistema della libreria Java, è un ottimo linguaggio per "fare le cose".

    
risposta data 22.11.2011 - 18:32
fonte
3

Un'alternativa funzionale è Erlang . Sebbene sia un linguaggio molto concorrente, il sottoinsieme sequenziale è un linguaggio puramente funzionale con molte delle proprietà dei linguaggi funzionali, ad esempio chiusure, dati immutabili e corrispondenza dei modelli. Funziona su molte piattaforme tra cui Linux, vari Unix, Windows e MacOSX. Ora c'è anche un'implementazione su JVM, erjang . Può facilmente comunicare e coesistere con altre lingue, questo è il modo in cui viene spesso utilizzato.

Controlla il sito principale .

    
risposta data 01.09.2011 - 14:45
fonte
1

Se ti piace Haskell, ma devi creare il codice per la JVM, frege potrebbe essere interessante per te. È progettato per essere il più vicino possibile a Haskell 2010, ma genera codice Java.

Naturalmente, Frege non è come "linguaggio di produzione ampiamente utilizzato" (è stato appena pubblicato di recente), ma Java è certamente.

    
risposta data 01.09.2011 - 10:35
fonte