Alla ricerca di un buon linguaggio funzionale / oop / meta con: [chiuso]

8

Voglio che sia

  • generazione di codice nativo // In grado di compilare con qualcosa come GHC
  • multipiattaforma (win / linux)
  • Funzionale e un po 'orientato agli oggetti
  • lambda, pattern matching, tuple e altre cose funzionali
  • Ottimo supporto per metaprogrammazione
  • Rientro e bordi minimi
  • tipizzazione statica
  • anch'io voglio il supporto Mixin :)
  • la possibilità di costruire siti Web basati su alcuni framework è anche un vantaggio.
  • così e sì, le prestazioni e la stabilità sono importanti.

Ho avviato Haskell , ma non ne sono ancora sicuro, perché OCaml. E ho esperienza F #. Ma per quanto ne so OCalm è un po 'OOP e talvolta anche più veloce (non ne sono sicuro) non l'ho mai provato. C'è anche erlang, non so nulla di erlang . E forse mi manca qualcosa di più ..? Python , non ho idea di python qui, è funzionale e funziona e supporta mixin e popolare e veloce, ma non credo davvero che python sia in grado per tutta la magia funzionale, penso non può.

So che questo thread / argomento è come parlare di niente o come una guerra linguistica, ma seriamente e davvero voglio sentire la tua visione.

    
posta Cynede 16.05.2011 - 14:50
fonte

4 risposte

8

Clojure sembra un buon adattamento per tutte le tue esigenze.

  • generazione di codice nativo / In grado di compilare con qualcosa come GHC - Sì (tutto il codice Clojure viene compilato in bytecode Java che successivamente viene compilato in codice nativo tramite JIT sulla JVM)

  • multipiattaforma (win / linux) - Sì - ovunque la JVM funzioni

  • Funzionale e un po 'orientato agli oggetti - Sì - Clojure è innanzitutto un linguaggio funzionale, ma ha anche il supporto OO se lo si desidera (tramite interoperabilità Java o oggetti in stile CL). Detto questo, OO è generalmente considerato unidiomatico in Clojure.

  • lambda, pattern matching, tuples e altre cose funzionali - Sì - è un linguaggio funzionale abbastanza standard a questo riguardo. L'auther (Rich Hickey) è stato in qualche modo ispirato da Haskell.

  • Ottimo supporto per metaprogrammazione - Sì - "code-is-data" si applica come con tutti i Lisps e ottieni ottime funzionalità macro

  • Rientro e frontiere minime - Sì, anche se sicuramente questo è in realtà un editor piuttosto che una funzione linguistica ??

  • tipizzazione statica - Sì - Clojure è dinamico di default ma puoi fornire suggerimenti di tipo statici o primitivi quando vuoi per un aumento delle prestazioni

  • anch'io voglio il supporto per Mixin :) - Sì - può essere ottenuto in vari modi (ad es. macro) anche se probabilmente non lo vorrai o ne avrai bisogno dopo aver scoperto la funzionalità del protocollo di Clojure ... .

  • possibilità di costruire siti web basati su alcuni le strutture sono anche un buon punto a favore. - Sì - ci sono framework come Ring / Compojure in Clojure e puoi anche usare qualsiasi framework Java

  • così e sì, le prestazioni e la stabilità sono importanti. - Sì: in pratica ottieni tutte le prestazioni / stabilità della JVM che è abbastanza ben provata nelle applicazioni aziendali ....

Oltre a tutto ciò, Clojure ha alcune funzionalità davvero impressionanti sulla concorrenza. Vale veramente la pena guardare questo video: link

    
risposta data 15.06.2011 - 00:15
fonte
8

Common Lisp

Sembra supportare tutti i requisiti di cui sopra. Il link ti porterà a un libro online che copre tutto ciò che devi sapere per iniziare.

    
risposta data 16.05.2011 - 15:04
fonte
5

OCaml è l'unica lingua che fornisce tutte le funzionalità richieste. (Ma non so per mixin.) Ha anche un framework web chiamato Ocsigen ed è più di un linguaggio hype, è una vecchia lingua, con una vera base di utenti (aziende, università, hobbisti) e anni di miglioramento e test .

    
risposta data 15.06.2011 - 11:11
fonte
2

Sicuramente Scala può corrispondere ai tuoi requisiti:

  1. compilato e funziona su JVM quindi è win / linux / mac.
  2. supporta sia la programmazione funzionale che OO.
  3. supporta le cose funzionali che menzioni. La corrispondenza del modello sembra ottima e utilizzata attivamente. Manca il supporto di ricorsione in coda poiché JVM non lo supporta, ma in alcuni casi le chiamate di ricorsione possono essere ottimizzate.
  4. metaprogramming è not supportato. La lingua è fantastica ^ W abbastanza buona per DSL.
  5. (fisso)
  6. ha mixin (tratti).
  7. dai un'occhiata a Lift web framework. Usa caratteristiche funzionali della lingua e ha caratteristiche avanzate così molto interessanti da guardare. Esistono anche altri framework web (giochi !, ecc.)
  8. basato su JVM così stabile.
  9. La sintassi è abbastanza pulita. Non c'è parentesi infernale (scusate i lispers, questa è solo la mia opinione personale) laggiù e l'uso del punto e virgola è ridotto a facoltativo in molti casi.

Inoltre, Scala ha un grande supporto per la programmazione parallela (per attori). La community di Scala è in crescita e viene utilizzata in progetti reali (Twitter). La lingua è abbastanza difficile da imparare, così come molte funzionalità e lo zucchero sintattico, ma una volta che lo gestisci ti divertirai sicuramente a programmarlo.

    
risposta data 15.06.2011 - 08:23
fonte

Leggi altre domande sui tag