Clojure online - IDE, editor, compilatore, interprete

RSS

Esegui codice Clojure online con SCI, lo Small Clojure Interpreter: funzioni, mappe, vettori, threading macro e sequenze lazy, direttamente nel tuo browser.

ClojureScript via SCI (Scittle 0.8) · Funziona nel tuo browser, quindi il tuo codice non raggiunge mai i nostri server.
main.cljsClojure
Output

            
        
Ctrl/⌘ + Enter per eseguire

Funzionalità del compilatore Clojure online (IDE, editor e interprete)

Scrivi, esegui e testa codice Clojure online gratis. Questa pagina è al tempo stesso IDE Clojure online, editor di codice, compilatore e interprete: scrivi il codice, premi Esegui e vedi subito l'output. Tutto funziona nel tuo browser, senza nulla da installare e senza creare un account.

  • Esecuzione immediata: ClojureScript via SCI (Scittle 0.8), con output in meno di un secondo dopo il primo caricamento.
  • Editor di codice: evidenziazione della sintassi, numeri di riga, corrispondenza e chiusura automatica delle parentesi.
  • Errori chiari: messaggi di errore e avvisi compaiono nel pannello di output, come sul tuo computer.
  • Schermo intero: Ctrl/⌘ + Shift + F, dimensione del carattere regolabile, layout affiancato o impilato e pannelli ridimensionabili.
  • Salvataggio automatico: il tuo codice resta nel browser; scaricalo come main.cljs o copialo con un clic.
  • Sperimenta in sicurezza: un limite di tempo e un pulsante Interrompi fermano i cicli infiniti.
  • Privato: il runtime Clojure funziona sul tuo dispositivo, quindi il codice non viene mai caricato.
  • Modalità scura e scorciatoie da tastiera: Ctrl/⌘ + Enter esegue il codice.
  • Gratis: nessuna registrazione, nessun limite di utilizzo.

Impara altri linguaggi di programmazione

Come usare il compilatore Clojure online

  1. Scrivi o incolla il codice Clojure nell'editor. Ripristina esempio riporta il programma iniziale con un fattoriale, un elenco ordinato di mappe, frequencies e una pipeline ->>.
  2. Premi Esegui oppure usa Ctrl + Invio (⌘ + Invio su Mac).
  3. Il testo stampato con println compare nel pannello Output. Dopo l'esecuzione, il valore dell'ultima form viene stampato come => ... nella forma leggibile pr-str. Se quel valore è nil, per esempio quando il programma termina con println, non viene mostrato nient'altro. Gli errori vengono mostrati con il loro messaggio.
  4. Scegli un limite di tempo di 5, 15 o 60 secondi, oppure premi Interrompi per terminare prima un'esecuzione.

Alla prima esecuzione la pagina scarica l'interprete, circa 1 MB. Copia e main.cljs salvano il tuo codice, e A−/A+ cambiano la dimensione del testo.

Tutto gira in un Web Worker nel tuo browser. Il tuo codice non viene mai inviato a un server. L'editor salva automaticamente nel tuo browser l'ultimo programma, separatamente per ogni compilatore.

Informazioni su Clojure, ClojureScript e SCI

Clojure è un Lisp moderno costruito attorno a strutture dati immutabili e alla programmazione funzionale. Il Clojure originale gira sulla Java Virtual Machine, e ClojureScript è la versione che ha come obiettivo JavaScript. Questa pagina usa Scittle 0.8, che racchiude SCI, lo Small Clojure Interpreter, per il browser. SCI interpreta direttamente il tuo codice con la semantica di ClojureScript, senza JVM né strumenti di build.

Cosa è supportato

  • Definizioni e flusso di controllo: def, defn, fn e i letterali #(...), let, if, when, cond e loop/recur.
  • Collezioni persistenti: mappe, vettori, insiemi e liste, keyword e destructuring in let e negli argomenti delle funzioni.
  • Funzioni sulle sequenze, tra cui map, filter, reduce, sort-by, group-by e frequencies, più sequenze lazy come range e iterate.
  • Threading macro -> e ->>, e atom per lo stato mutabile gestito.
  • Interoperabilità con JavaScript in stile ClojureScript, come in (js/Math.sqrt 16) o (.toUpperCase "abc").

Limitazioni:

  • Nessuna interoperabilità con la JVM. Classi come java.util.Date o Thread non esistono.
  • Niente Leiningen né deps.edn. Non si possono aggiungere librerie esterne, quindi sono disponibili solo il codice nell'editor e i namespace integrati.
  • Nessuna casella di input e nessun DOM. Definisci i tuoi dati di prova nel programma.

Esempio svolto: immutabilità e threading

(def inventory {:apples 3 :pears 0})
(def restocked (assoc inventory :pears 12))
(println inventory)   ; {:apples 3, :pears 0}  (invariato)
(println restocked)   ; {:apples 3, :pears 12}

(def counter (atom 0))
(dotimes [_ 5] (swap! counter inc))
(println @counter)    ; 5

(->> [3 8 1 9 4]
     (filter odd?)
     (map #(* % 10))
     (reduce +))      ; => 130

assoc restituisce una nuova mappa e lascia invariata l'originale. Quando ti serve un valore che cambia nel tempo, tienilo in un atom e aggiornalo con swap!. L'ultima form è una pipeline ->>. Passa il vettore a ogni passaggio come ultimo argomento, e il suo risultato viene stampato come => 130. Usa invece -> quando il valore deve essere il primo argomento, come con assoc e update su una mappa.

Differenze rispetto a Clojure su JVM ed errori comuni

  • I numeri sono numeri JavaScript. Con la semantica di ClojureScript non ci sono rapporti né interi di grandi dimensioni. (/ 1 3) restituisce 0.3333333333333333, e gli interi molto grandi perdono precisione.
  • Non esiste un tipo carattere separato. Un letterale carattere come \a è una stringa di una lettera, quindi (frequencies "mississippi") ha chiavi di tipo stringa.
  • La laziness nasconde gli effetti collaterali. (map println xs) può non stampare nulla se il risultato non viene mai usato. Usa doseq o run! per gli effetti collaterali.
  • Sequenze infinite. (range) e iterate non finiscono mai, quindi limitale sempre con take. Se stampi una sequenza infinita, l'esecuzione continua finché il limite di tempo non la ferma.
  • println contro prn. println stampa le stringhe dentro le collezioni senza virgolette. prn mantiene le virgolette, il che rende i dati più facili da leggere.

Domande frequenti

È vero Clojure?

È codice Clojure eseguito da SCI con la semantica di ClojureScript, non l'implementazione su JVM. Il linguaggio di base, le collezioni e la libreria per le sequenze funzionano allo stesso modo, quindi la maggior parte del codice Clojure puro gira senza modifiche. L'interoperabilità con Java e il comportamento specifico della JVM non funzionano.

Posso aggiungere librerie o usare un file di progetto?

No. Leiningen, deps.edn e le dipendenze Maven non sono disponibili. Ogni esecuzione interpreta l'unico file presente nell'editor.

Perché il file si chiama main.cljs?

Perché il codice gira con la semantica di ClojureScript. Puoi incollare il contenuto in un file .clj o .cljc, purché non si basi sull'interoperabilità con JavaScript.

Quali altri linguaggi posso provare?

L'interprete Scheme online è un altro Lisp da esplorare. Per JavaScript vero e proprio usa il compilatore JavaScript online, oppure vedi tutti i compilatori online.

Aggiornato

Copiato negli appunti