mercoledì 27 luglio 2011

ClojureScript Porta Clojure al browser tramite Javascript

Pubblicato da Werner Schuster

ClojureScript permette di scrivere codice utilizzando il linguaggio Clojure e compilarlo in Javascript. E 'stato annunciato da Clojure suo creatore Rich Hickey ( diapositive di annuncio ClojureScript Rich e il video del bando ClojureScript ).ClojureScript è un sottoinsieme di Clojure, le caratteristiche e le librerie che sono attualmente esclusi o non sono semplicemente ancora finito o non sarà aggiunto in quanto non hanno senso su una macchina virtuale javascript, ad es. il supporto ai thread, l'integrazione di Java, ecc Un elenco di differenze tra Clojure e ClojureScript è documentato nel Wiki ClojureScript.

Il perché di ClojureScript

Il razionale per ClojureScript (dalla documentazione): " Javascript raggiunge ". VM javascript sono sempre più veloci e sono disponibili in un numero crescente di luoghi. Con ClojureScript, Clojure può essere utilizzato per la programmazione GUI del client , tra cui piattaforme mobili che oggi sono dotati di potenti componenti HTML e Javascript VM. Esecuzione di Clojure richiede una Java VM sul client, mentre le macchine virtuali Java potrebbe essere disponibile su sistemi operativi desktop, browser sono più onnipresenti e vengono forniti con ogni client-facing OS. La situazione è ancora più chiara su piattaforme mobili - non c'è attualmente alcuna piattaforma significativo mobili che viene fornito con una Java VM in grado di eseguire Clojure out of the box. Android non viene fornito con una Java VM, ma richiede che tutti bytecode da tradurre per il bytecode della sua Dalvik VM; Clojure far funzionare bene su Android è un impegno costante . C'è un altro caso d'uso per ClojureScript: utility a riga di comando . Java non è stato popolare per le utility a riga di comando, in particolare quelli che vengono lanciati frequentemente, a causa del tempo di avvio JVM (soluzioni come Nailgun hanno schioccato in su per fare questa operazione). Come dimostrato da Rich Hickey, una utility a riga di comando compilato per Javascript e correre con Node.js viene fornito con un tempo significativamente più basso di avvio. Un argomento popolare per l'utilizzo di Javascript sul server è quello di riutilizzare il codice stesso sul server e il client ; particolarmente interessante per la logica, come convalida dell'input. Con ClojureScript è ora possibile fare lo stesso: gli algoritmi scritti in ClojureScript può essere compilato in Javascript ed eseguire nel browser, ma anche usato nella base di codice lato server Clojure, dove sarebbe stato compilato da bytecode Java. Inoltre lascia aperta la possibilità di cadere completamente Java dal server scrivendo l'applicazione in ClojureScript ed eseguendo il lato server su una pila Javascript come Node.js.


La Come di ClojureScript

Il compilatore ClojureScript non contiene codice Javascript, è scritto in Clojure, il che significa che il compilatore deve essere eseguito su una macchina virtuale Java. Come ClojureScript conseguenza manca eval o altri tipi di caricamento del codice runtime. ClojureScript è pensato per essere usato per scrivere programmi e compilarli a Javascript e non come un in-browser REPL. Tuttavia, non vi è uno REPL ClojureScript: è disponibile nel repository ClojureScript. E 'implementato usando Clojure, che si avvia Rhino, il runtime Javascript scritto in Java. Per eseguire un frammento ClojureScript viene inviato al Clojure basato compilatore ClojureScript che restituisce il codice javascript che poi è gestito da Rhino. Fare questo in un browser senza accesso a un'istanza Clojure è, naturalmente, non è possibile - almeno fino a quando qualcuno riesce a compilare il compilatore Clojure toolchain di Javascript. codice ClojureScript possibile utilizzare le macro Clojure .Le macro sono una caratteristica fase di compilazione, se il codice ClojureScript fa riferimento a una chiamata di macro, l'espansione macro è gestito dal compilatore ClojureScript, cioè. in Clojure. Mentre il compilatore ClojureScript attualmente gira solo su Clojure, ClojureScript non fornito con il lettore Clojure . Come promemoria: il lettore è fondamentalmente parser Clojure; esso trasforma una rappresentazione testuale di un programma Clojure in dati Clojure strutture, che possono poi essere valutati. ClojureScript è dotato di un lettore in grado di analizzare i dati in Clojure (Script) notazione e consegnarlo al codice ClojureScript come dati . Lettore di ClojureScript analizza solo , ma, poiché non c'è compilatore ClojureScript disponibili in runtime, non valuta . ClojureScript ha un lettore per essere in grado di leggere Clojure dati , un po 'come Javascript in grado di leggere i dati JSON senza valutazione. E 'possibile Clojure dati generati con Clojure e inviarlo a ClojureScript e viceversa. In realtà, un'altra parte della ClojureScript della catena del compilatore strumento, è la chiusura di Google toolkit. Sì - Chiusura con una "s" - un conflitto di nomi un po 'sfortunato, ma chiusura di Google insieme di strumenti di Javascript , in particolare compilatore Chiusura e compilazione avanzate vengono utilizzati. chiusura viene utilizzata per pochi scopi: uno di loro è la biblioteca e la gestione delle dipendenze , cioè. per richiedere le librerie e simboli di esportazione. Definizioni dello spazio dei nomi ClojureScript mappa per Google Chiusura fornire erichiedere le chiamate. ClojureScript può quindi usare facilmente le librerie Chiusura di Google che vengono con un ricco set di componenti GUI e altre caratteristiche. ClojureScript possono essere molto vicino alla lingua Clojure, ma la sua libreria standard saranno un sottoinsieme di Clojure è. Attualmente ClojureScript viene fornito con clojure.string, clojure.set, clojure.walk, clojure.zip ecc, e più librerie saranno spostati. La difficoltà di porting di una libreria a Clojure ClojureScript dipende dalla natura del codice, codice puramente algoritmico che utilizza gli elementi del linguaggio di base per trasformare i dati saranno banali o facili da porto. Una libreria che si basa su librerie I / O, filettatura, specifiche Java ecc librerie ovviamente richiederà uno sforzo maggiore alla porta;. Il lavoro supplementare al fattore in codice specifico della piattaforma pagherà una più interessante, ma relativi, l'uso di chiusura Google è come uno ottimizzazionebackend compilatore . Il codice del compilatore ClojureScript emette è ottimizzato per lavorare bene con Compilation avanzata chiusura, che prende fonte Javascript e lo ottimizza, incluse le chiamate di funzione inline, la rimozione di codice morto e funzioni inutilizzate. Un vantaggio di questo approccio è che il compilatore ClojureScript non deve implementare queste ottimizzazioni, ma semplicemente delegati al compilatore Chiusura di Google. Altri compiti potrebbe essere delegata a chiusura di Google in futuro, quali la fornitura di mappe sorgente per debugger , cioè . strutture di dati che può mappare tra il codice Javascript generato e il codice ClojureScript che lo ha generato. Google chiusura ha qualche supporto per SourceMaps , e sia Mozilla e il progetto WebKit stanno lavorando per estendere il loro browser, debugger e motori Javascript con il supporto per loro. Maggiori informazioni su ClojureScript saranno disponibili presto, una fonte è il blog di Michael Fogus ', dove sta pubblicato il primo di una serie di articoli sul compilatore . Michael lavora in merito all'attuazione ClojureScript. Gli sviluppatori interessati al funzionamento interno del compilatore dovrebbe anche dare un'occhiata alla devnotes ClojureScript , che contengono informazioni come ad esempio una tabella che elenca costrutti del linguaggio ClojureScript ei costrutti Javascript che si trasformano in. Clojure La comunità ha già iniziato a sperimentare con ClojureScript. Brian McKenna ha iniziato a sperimentare con l'utilizzo di macro per combattere l'inferno di callback , ad esempio. il problema con async I / O in cui ogni operazione deve fornire una funzione di callback per ricevere il risultato di un'operazione - bene per un one-off chiamata, ma diventa ben presto molto prolisso per un algoritmi sequenziali. Ci sono molti tentativi di soluzioni per questo nel mondo JS, dalle nuove lingue come StratifiedJS a incorporato DSL-ish librerie in Javascript . xperiments Brian con un DSL-style soluzione embedded; ClojureScript, essendo un LISP con le macro, si presta bene a questo . L'esempio gestisce una sequenza di espressioni e li compila per callback annidati, ciascuno eseguirà una espressione nella sequenza e quindi pianificare l'esecuzione del resto della sequenza usando setTimeout . Questo ricorda l'approccio virgola programmabile in lingua per Monadi (cioè Haskell fare notazione) o espressioni F # 's Compuational (es. flussi di lavoro Async ). Il passo successivo sarebbe quello di sostenere concetti di programmazione più strutturati come i cicli, cioè. tradurle in questa continuazione passando stile utilizzando le macro. Una voce nel blog di Justin Grantmostra come implementare un algoritmo e disegnare elementi grafici utilizzando il supporto di tela di Google Chiusura.Clojure Script è disponibile su GitHub. Per ulteriori informazioni vedere l'annuncio ClojureScript sul clojure.com , o il Wiki ClojureScript a GitHub che contiene tonnellate di informazioni, tra le motivazioni per la ClojureScript , una guida rapida e molto altro. La mailing list Clojure è anche una buona fonte di suggerimenti su come lavorare con ClojureScript come la comunità discute il flusso di lavoro di sviluppo, strumenti ed altro ancora.


Corso Java - Corsi Java - Corsi programmazione Java

Corso programmazione Android - Certificazione Android

Nessun commento:

Posta un commento

Nota. Solo i membri di questo blog possono postare un commento.