Ci sarà un linguaggio funzionale che fa per la comunità Java cosa fa F # per la comunità .NET?

StackOverflow https://stackoverflow.com/questions/169812

  •  05-07-2019
  •  | 
  •  

Domanda

Esisterà un linguaggio funzionale che fa per la comunità Java ciò che F # fa per la comunità .NET?

Quali linguaggi di programmazione funzionale sono disponibili o in fase di sviluppo per la JVM?

È stato utile?

Soluzione

Forse Clojure . Non è tipizzato staticamente, ma ha più enfasi sull'immutabilità e sulla concorrenza rispetto a F #. Tuttavia, come F # (e diversamente dal Common Lisp), è pensato per essere un linguaggio principalmente funzionale che è bravo a consumare le librerie OO dalla piattaforma sottostante.

Altri suggerimenti

Scala sarebbe la lingua.

Sebbene non sia strettamente funzionale (è un mix di funzionale e orientato agli oggetti) e non è strettamente per Java (c'è un . Versione NET di Scala ), sarebbe l'analogo più vicino a F # nella JVM.

La prima cosa che mi è venuta in mente è stata Scala ma davvero Ocaml-Java si avvicina poiché F # è una variante di Ocaml. Vedi questo post che confronta Ocaml-Java con Scala :

  

I programmatori OCaml sono in genere oltre 10 volte più produttivi di Java o C ++   programmatori per una vasta gamma di attività pratiche. Nonostante sia basato su a   fondamentalmente piattaforma OOP, F # fa molto per catturare la produttività-   aumentando i benefici di OCaml (e dell'intera famiglia ML). Al contrario, Scala   non riesce a cogliere molti dei vantaggi, inclusi alcuni davvero basilari e,   di conseguenza, scrivere il codice corretto è molto più difficile in Scala che in   qualsiasi vero ML.

     

Inoltre, la famiglia di lingue ML è progettata per essere concisa, ma lo è Scala   inutilmente prolisso per tutto da " Ciao mondo! " verso l'alto. La famiglia ML   delle lingue fornisce una vasta inferenza di tipo (OCaml più della maggior parte) ma   La Scala ha solo un'inferenza rudimentale al confronto. OCaml ha insolitamente   sistema di tipo espressivo ma Scala aggiunge poco a OOP che è pratico   importanza.

Per ora direi Scala. Ma per il futuro, darei un'occhiata a Fortezza. La prima implementazione delle specifiche è stata rilasciata il 1 ° aprile 2008. E no, non è uno scherzo. Le caratteristiche principali sono:

  • Digitato staticamente, ma molta deduzione del tipo per evitare disordine
  • Rendering Unicode e 2D delle funzioni matematiche
  • Progettato per l'esecuzione parallela (per ogni impostazione predefinita)
  • Forte supporto per le biblioteche personalizzate (influenza di Guy Steele)
  • Sovraccarico dell'operatore, incluso l'operatore di giustapposizione

Ulteriori informazioni sul Sito Web della community di Project Fortress e la Pagina della fortezza di Wikipedia .

Probabilmente nessuno perché alla JVM mancano le chiamate di coda e sono necessarie per rendere robusto quasi tutto il codice funzionale rispetto al consumo dello stack.

La cosa più vicina alle implementazioni del linguaggio funzionale sulla JVM sono Clojure , Scala e il OCaml-Java progetto. Sebbene esistano soluzioni alternative per la mancanza di chiamate di coda (ad es. Trampolino), nessuna di queste implementazioni linguistiche lo fa perché le soluzioni alternative presentano problemi ancora più gravi, ad es. prestazione paralizzante e debug completamente offuscato.

Sun parla da anni di chiamate di coda e, più recentemente, ha indicato che intende implementarle imminentemente. Non appena fatto, sono sicuro che vedremo molte più differenze linguistiche sulla JVM e, in particolare, alcune implementazioni linguistiche funzionali di qualità di produzione. Fino ad allora, considero tutte queste lingue come giocattoli.

Saluti, Jon Harrop.

Esiste un buon elenco di linguaggi di programmazione per JVM, incluso il paradigma di programmazione funzionale e altri linguaggi di paradigma su:

  • en.wikipedia.org/wiki/List_of_JVM_languages ??

La mia prima scelta è Scala (multi-paradigma; OO & amp; FP), ho trascorso 5+ mesi a studiare Scala nel 2009 e ho creato un rapido foglio di riferimento: bchiprog.blogspot.com/2009/05/scala-cheat -sheet.html

Ho notato che ci sono altri paradigmi di programmazione che sono interessanti, altri si concentrano sull'elaborazione parallela come X10, Fortezza e Cappella. X10 è implementato in cima a Scala - http: // www. scala-lang.org/sites/default/files/odersky/scalaliftoff2009.pdf

Si basa davvero sul problema che devi risolvere, quindi scegli la lingua che può risolverlo al meglio. Penso che il desiderio degli sviluppatori sia che ci sia un linguaggio in grado di risolvere facilmente qualsiasi tipo di problema e farlo semplicemente.

@Marc Gravell: i linguaggi funzionali sono sempre più utilizzati nelle viscere dei sistemi finanziari di livello aziendale. Usiamo molti funzionali (puri o "semi-puri") presso la banca per cui lavoro ...

Nel frattempo, esiste Frege , un linguaggio puro, funzionale e non rigoroso nello spirito di Haskell che si compila in Java, che poi viene ulteriormente compilato con javac o il compilatore eclipse, a seconda dell'ambiente (riga di comando o eclipse).

In realtà, potrei sbagliarmi, ma non mi aspetto che F # sia mainstream come gli altri linguaggi .NET; utile in alcuni ambienti (accademici, compilatori, alcuni altri scenari) - tuttavia, non dimenticare che C # offre l'utilizzo di FP - e migliora ogni volta: C # 1.2 ha delegati; C # 2.0 ha metodi e acquisizioni / chiusure anonime; C # 3.0 ha lambda per semplicità ed Espressione per astrazione. I tipi anonimi (C # 3.0) condividono alcune somiglianze con le tuple (in termini di convenienza), ma ovviamente sono bestie molto diverse, quindi sicuramente non un paragone simile.

Forse non abbastanza ottimizzato come F #, ma per la maggior parte dei casi d'uso di FP quotidiani, più che sufficienti.

È anche abbastanza chiaro che un migliore supporto per l'immutabilità (specialmente per il threading) è molto nelle menti del team linguistico C # per future considerazioni.

I miei soldi per C # stanno migliorando in FP, e sono l'offerta di .NET FP per la maggior parte degli scopi quotidiani. Certo, ci sarà un certo uso di F # - ma (puramente soggettivo) semplicemente non vedo che ci sia una migrazione enorme.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top