2012-05-24 11 views
13

Mi piacerebbe utilizzare un "linguaggio derivato javascript" per apprendere e utilizzare alcune delle solite tecnologie web oggi come node.js, jquery, ecc.JavaScript funzionale?

Dopo aver giocato un po 'con concetti e linguaggi funzionali , soprattutto F #, sto guardando se c'è qualcosa di simile nel mondo Javascript. Finora quello che ho trovato e considerato è:

  • Javascript il modo funzionale: utilizzare parti funzionali di JavaScript come ampiamente come posso, facendo uso di sottolineatura o di altre librerie funzionali. I professionisti di questo approccio dovrebbero imparare la "lingua madre". I contro per me sono che non mi piace la sua sintassi e non mi sento molto naturale programmare "funzionale prima" in Javascript.
  • CoffeeScript + Underscore: Ho visto alcuni esempi con CoffeScript + Underscore che sembrano interessanti. Ad esempio: http://autotelicum.github.com/Smooth-CoffeeScript/SmoothCoffeeScript.html#toc-Chapter-7
    I professionisti per questo sarebbero che CoffeScript si sta diffondendo in modo selvaggio e sembra lo standard de facto di linguaggi progettati per il suo utilizzo con una javascript VM. La sintassi mi sembra più naturale e potrei programmare alcune cose in modo più funzionale.
    Gli svantaggi si stanno allontanando troppo dallo javascript stesso (che in realtà non è un problema troppo per me) e da una via di mezzo non propriamente funzionale.
  • Livescript: derivato da Coco (che a sua volta era derivato da CoffeScript), ha la sintassi più attraente per me (ha anche il mio amato operatore di pipeline '|>' da F #). I professionisti sono che è l'approccio più funzionale. I contro sarebbero che non è molto diffuso (ho fatto una ricerca in SO e non c'è NIENTE a riguardo) e tutto ciò implica (non molta comunità, supporto, tutorial, ecc.).

Dopo averci pensato per un po 'su tutto questo, non ho alcuna vera conclusione quindi sarebbe bello se chi è abituato a lavorare con javascript, CoffeeScript, ecc mi potrebbe guidare sulla reale importanza di questa preoccupazione.

Solo nel caso ... non ho davvero pensato di utilizzare Pit (e quindi continuare a utilizzare F #) perché anche se viene compilato in javascript, penso che non si integra con qualsiasi libreria javascript come il sopra e doesn seguire lo stesso flusso di lavoro o integrare l'ecosistema javascript e le opzioni elencate.

Grazie mille!

+5

Interessante, ma non una domanda adatta a SO. –

+1

Come pst ha detto: Probabilmente non domanda adatta a SO. Ma comunque: direi che se vuoi imparare JavaScript, allora impara _JavaScript_ includendo tutte le cose prototipali/OOP/non funzionali - non provare a fare di JS qualcosa che già conosci o ignori del non funzionale prima di te anche iniziare. Ti incoraggerei a iniziare almeno lì - altrimenti codificheresti con gli strati di astrazione e traduzione. Puoi parlarne più tardi. Inoltre, partire da zero è dove impari davvero. – Flambino

+0

@ pst, non l'ho postato in precedenza a causa di quello ... forse più adatto a programmers.stackexchange? Se è così, spero che qualcuno lo chiuda e ci proverò. –

risposta

2

Che, fondamentalmente, sono due opzioni:

  • usare un linguaggio JS-derivati ​​come CoffeeScript
  • Usare un linguaggio funzionale di JS compilatore

Per l'opzione 1, beh, è ​​probabilmente la migliore opzione per l'interoperabilità con altro codice JS. È anche la tua migliore opzione se vuoi davvero lavorare con altri sviluppatori JS che potrebbero non avere familiarità con <insert functional language>.

Se non si ha molta familiarità con JS, suggerirei l'opzione 1. Può essere difficile capire come funzionano le cose soprattutto se si incontrano bug nella lingua/strumento di propria scelta se non si capisce le puntellature JS.

L'opzione 2 può essere più interessante da utilizzare in quanto probabilmente otterresti i vantaggi della tua lingua preferita in JS. Oltre al progetto Pit che hai citato, ci sono alcuni tentativi di rendere Haskell compilabile in JS che potrebbe anche essere un'opzione.

Gli svantaggi dell'opzione 2 sono probabilmente il fatto che i progetti non sono (ancora) molto avanzati fino ad oggi e che potrebbero essere compilati in un codice JS non molto efficiente.

Infine, c'era un linguaggio in stile Haskell basato su JS, simile a CoffeeScript, ma mi sembra di aver dimenticato il suo nome. Potrebbe valerne la pena, se qualcuno riesce a capire come è stato chiamato: D

+0

Non ho idea se sia quello a cui ti stai riferendo, ma [Clojure] (http://clojure.org/) è principalmente un linguaggio funzionale e viene compilato in javascript. – obmarg

+0

@obmarg: per lo più, Clojure compila nel codice byte Java Virtual Machine. Java (e la JVM) non hanno nulla a che fare con JavaScript oltre a un nome di similarità scelto per la sinergia di marketing. (Sebbene la gente abbia scritto interpreti Javascript in Java, in particolare Rhino). ** EDIT **: (grazie, non lo sono) Tuttavia, esiste una porta di Clojure chiamata ClojureScript che invece viene compilata in JavaScript; non sono sicuro di quanto sia maturo. –

+0

@MarkReed: stavo per lasciare lo stesso commento, ma poi ho letto questo sulla home page di Clojure * "Clojure è un linguaggio di programmazione dinamico che si rivolge alla Java Virtual Machine (e al CLR e JavaScript)." * Sembra che ci sia un Progetto ClojureScript. –

2

E che dire solo una libreria di funzioni "" FUNCTIONAL "", + coffeescript + underscore;)!

http://osteele.com/sources/javascript/functional/

+0

Questo è stato il mio primo pensiero dopo una ricerca preliminare sull'argomento, e quella libreria sembrava abbastanza buona. Questa combinazione sembra ottenere pezzi di entrambi i "mondi": più funzionali (anche se non quanto mi piacerebbe) e una vasta base di utenti/comunità. Avevo quasi deciso di percorrere quel percorso fino a quando ho visto il progetto Livescript. Se avesse più persone a usarlo, così è diventato più popolare (cioè, "garantire" il futuro del progetto e più risorse in generale), sceglierei Livescript. Come non ho mai realmente toccato in javascript, non riesco a immaginare tutte le possibili implicazioni della mia decisione. –

10

io sono probabilmente un po 'di parte (io sono il creatore di LiveScript), ma si dovrebbe cercare LiveScript! Attualmente sto lavorando a una libreria standard che si integrerà meglio di underscore. Come dici tu, non ci sono ancora molte persone che lo usano, ma una comunità deve iniziare da qualche parte! Come hai sottolineato, sembra che l'opzione migliore a parità di tutte le altre cose - quindi fai un tuffo e provalo!

+0

Ciao @gkz! Ottimo per ascoltare direttamente da te. La mia preoccupazione principale è che ci si stia stancando di svilupparlo, non avere il tempo di continuare, ecc ... Non ho davvero la conoscenza in questo momento sulla programmazione funzionale generale e sul javascript per essere in grado di contribuire a grandi cose. Sul lato supporto, hai qualche piano? Forse almeno hai un tag 'livescript' qui in SO? Ho provato a crearlo ma non ho il numero necessario di post. Se chiedi, essendo il creatore di LiveScript, immagino che non ci sarebbe alcun problema. In questo momento sono incline a CS + Functional/Underscore o LiveScript. Hmmm ... –

+0

La cosa con LS è che, nel peggiore dei casi in cui viene mantenuta non mantenuta, potrei sempre usare il codice javascript tradotto e continuare i progetti direttamente in JS o anche usare uno qualsiasi dei JavaScript per i traduttori di CoffeeScript se voglio continua con CoffeeScript. Vorrei perdere tempo ma non il codice, che è sempre una buona cosa. Hai mai pensato di incorporare una qualsiasi delle tecniche di concorrenza di F #? Mi piace molto quello che stanno facendo in quel dipartimento, anche se le limitazioni delle VM javascript ci sono in questo caso ... E, ultimo ma non meno importante, i valori sono immutabili per impostazione predefinita in LS? Thx! –

+1

Controllerò [tag: livescript] quasi ogni giorno e rispondo a qualsiasi domanda. Ci sono altri contributori a LiveScript, inclusa la persona dal cui progetto è stato biforcato LiveScript. Se per qualche motivo non sono in grado di continuare, trasferirò loro i diritti di amministratore. – gkz