Clojure Arbeitsblätter

8

Ich habe Clojure kürzlich etwas gelernt. Gibt es in der Welt von Clojure so etwas wie Scala-artige Arbeitsblätter, in die ich irgendeinen Code einfügen und ihn auswerten kann, sobald ich ihn speichere? Oder gibt es eine ähnliche Lösung für Clojure?

Ich arbeite jetzt mit lein repl und kann leider nicht sagen, dass es das brauchbarste Werkzeug aller Zeiten ist.

    
t.O 14.10.2012, 06:40
quelle

4 Antworten

10

Bei der Lisp-Entwicklung im Allgemeinen (und insbesondere bei Clojure) ist der bevorzugte Programmierstil das, was normalerweise als interaktive Programmierung bezeichnet wird - der Entwickler behält jederzeit ein Bild der geladenen App und interagiert mit ihm über a ERSETZEN Sie können den geladenen Code im Handumdrehen modifizieren und Änderungen sofort in der REPL testen (das ist mit Scala gar nicht so einfach - man muss auf etwas wie JRebel um es zu tun). Ich finde die Scala-Arbeitsblätter im Vergleich dazu eine ziemlich primitive Lösung ...

Der Arbeitsablauf, dem ich in Clojure folge, ist:

  1. Ich öffne nREPL.el in Emacs - das lädt mein lein2-Projekt mit all seinen Abhängigkeiten und gibt mir eine REPL mit dem ich das ausprobieren ausprobieren kann
  2. Ich schreibe Code im Quellcode und lade die geänderten Funktionen (vielleicht durch Auswertung eines Formulars auf oberster Ebene mit C-M-x
  3. Danach würde ich C-x C-z drücken, um zurück zur REPL zu springen und den neuen Code darin auszuprobieren
  4. Ich gehe zurück zu Schritt 2

Grundsätzlich ist die Clojure REPL viel mächtiger als die Scala REPL und ich persönlich halte sie für sehr viel besser als die Scala IDE Arbeitsblätter. Sobald Sie sich an den interaktiven, inkrementellen Programmierstil gewöhnt haben, bietet Lisp alles andere, was im Vergleich seltsam komplex aussieht. Ich kenne das CounterClockWise Clojure-Plug-In von Eclipse nicht, aber ich bin mir ziemlich sicher, dass es ähnliche Funktionen wie Emacs nREPL bietet. el.

    
Bozhidar Batsov 14.10.2012, 08:21
quelle
5

Vielleicht möchten Sie sich das autoexpect-Plugin für Leiningen ansehen . Jedes Mal, wenn Sie eine Datei im Arbeitsverzeichnis speichern, kompiliert das Programm Ihren Code und führt ihn aus. Als Bonus wird es alle "expect" -Funktionsaufrufe bewerten, die als Tests dienen können. Dies ist sehr hilfreich für die testgetriebene Entwicklung und ist ein nettes Kompliment für die Arbeit mit der REPL, wie in der anderen Antwort beschrieben (ich verwende oft das eine oder das andere oder beide zusammen, je nachdem wie viele Testfälle ich habe).

>

Ich sollte beachten, dass das Ausführen von Autoexpect aufgrund der Startkosten der JVM und Leiningen viel schneller ist als das Ausführen von "lein test" oder "lein run".

    
JohnJ 14.10.2012 14:23
quelle
3
___ qstnhdr ___ Clojure Arbeitsblätter ___ qstntxt ___

Ich habe Clojure kürzlich etwas gelernt. Gibt es in der Welt von Clojure so etwas wie Scala-artige Arbeitsblätter, in die ich irgendeinen Code einfügen und ihn auswerten kann, sobald ich ihn speichere? Oder gibt es eine ähnliche Lösung für Clojure?

Ich arbeite jetzt mit lein repl und kann leider nicht sagen, dass es das brauchbarste Werkzeug aller Zeiten ist.

    
___ answer31050539 ___

Wie niemand es erwähnt hat, kursiv ist in diesen Tagen wirklich nett, obwohl ich traurig war, zu einer ausgewachsenen IDE zurückzukehren. Sie können das gleiche wie Emacs mit dem integrierten Replikat tun, bewegen Sie sich einfach in den Namespace, mit dem Sie arbeiten, und synchronisieren Sie jedes Mal, wenn Sie Änderungen vornehmen. Es ist eine wirklich nette Art zu arbeiten.

    
___ tag123clojure ___ Clojure ist ein moderner Lisp-Dialekt für die Java Virtual Machine (mit Versionen für CLR und JavaScript). Clojure ist mehr als nur eine Implementierung von Lisp in Java und bietet Zugriff auf die Klassen und das Ökosystem von Java. ___ answer12880479 ___

Bei der Lisp-Entwicklung im Allgemeinen (und insbesondere bei Clojure) ist der bevorzugte Programmierstil das, was normalerweise als interaktive Programmierung bezeichnet wird - der Entwickler behält jederzeit ein Bild der geladenen App und interagiert mit ihm über a ERSETZEN Sie können den geladenen Code im Handumdrehen modifizieren und Änderungen sofort in der REPL testen (das ist mit Scala gar nicht so einfach - man muss auf etwas wie JRebel um es zu tun). Ich finde die Scala-Arbeitsblätter im Vergleich dazu eine ziemlich primitive Lösung ...

Der Arbeitsablauf, dem ich in Clojure folge, ist:

  1. Ich öffne nREPL.el in Emacs - das lädt mein lein2-Projekt mit all seinen Abhängigkeiten und gibt mir eine REPL mit dem ich das ausprobieren ausprobieren kann
  2. Ich schreibe Code im Quellcode und lade die geänderten Funktionen (vielleicht durch Auswertung eines Formulars auf oberster Ebene mit C-M-x
  3. Danach würde ich C-x C-z drücken, um zurück zur REPL zu springen und den neuen Code darin auszuprobieren
  4. Ich gehe zurück zu Schritt 2

Grundsätzlich ist die Clojure REPL viel mächtiger als die Scala REPL und ich persönlich halte sie für sehr viel besser als die Scala IDE Arbeitsblätter. Sobald Sie sich an den interaktiven, inkrementellen Programmierstil gewöhnt haben, bietet Lisp alles andere, was im Vergleich seltsam komplex aussieht. Ich kenne das CounterClockWise Clojure-Plug-In von Eclipse nicht, aber ich bin mir ziemlich sicher, dass es ähnliche Funktionen wie Emacs nREPL bietet. el.

    
___ antwort12887602 ___

Es klingt nach dem, wonach du suchst, ist das Clojure Koan-Plugin . Dies ist ein Worksheet-artiges Problemlösungs-Übungstool, das Ihre Änderungen überwacht und sofortiges Feedback zur Korrektheit Ihrer Arbeit liefert.

Für den aktuellen Entwicklungs-Workflow habe ich den Ratschlag, den andere hier über Tooling und interaktive Umgebungseinstellungen gegeben haben, aber da Sie speziell gesagt haben, dass Sie Clojure lernen, kann dies ein spaßiger Ansatz sein. Es gibt auch eine Webanwendung namens 4Clojure , mit der Sie Spaß haben könnten.

Sie werden jedoch irgendwann (oder sofort) eine reibungslose und bequeme Entwicklungsumgebung einrichten wollen, und ich habe bis jetzt noch nicht einige der wichtigsten Tools erwähnt. Eine Person erwähnte Nrepl. Wenn du Emacs magst, gibt es einen Slime / Swank-ähnlichen Interaktionsmodus, der sich in nrepl namens nrepl.el verbirgt, was sehr nett ist Integration zwischen dem Bearbeiten von Dateien und Herumspielen in der Replik. Ebenso gibt es VimClojure , und Sie können Plugins für IntelliJ finden ( LaClojure ) und Eclipse ( Gegenuhrzeigersinn ), die ebenfalls sehr beliebt sind und gut gepflegt.

Jemand hat autoexpect erwähnt. Wenn Sie nach einem guten TDD-Setup suchen, würde ich midje empfehlen. Wenn Sie eine 2.0 Preview-Version von Leiningen verwenden, gibt es einige Probleme mit der Lazytest Integration, die im Fluss ist, und LazyTest selbst ist oder sollte veraltet sein. Aber ich bevorzuge Midje persönlich über die Erwartungen, und diese Probleme werden sicherlich in der 2.0 Version von lein-midje . Die stabile Version von lein-midje, die mit dem nicht-Vorschau (1.x) -Leiningen arbeitet, hat eine Autotest-ähnliche Funktionalität mit LazyTest.

    
___ answer12883110 ___

Vielleicht möchten Sie sich das autoexpect-Plugin für Leiningen ansehen . Jedes Mal, wenn Sie eine Datei im Arbeitsverzeichnis speichern, kompiliert das Programm Ihren Code und führt ihn aus. Als Bonus wird es alle "expect" -Funktionsaufrufe bewerten, die als Tests dienen können. Dies ist sehr hilfreich für die testgetriebene Entwicklung und ist ein nettes Kompliment für die Arbeit mit der REPL, wie in der anderen Antwort beschrieben (ich verwende oft das eine oder das andere oder beide zusammen, je nachdem wie viele Testfälle ich habe).

>

Ich sollte beachten, dass das Ausführen von Autoexpect aufgrund der Startkosten der JVM und Leiningen viel schneller ist als das Ausführen von "lein test" oder "lein run".

    
___
rplevy 14.10.2012 23:40
quelle
0

Wie niemand es erwähnt hat, kursiv ist in diesen Tagen wirklich nett, obwohl ich traurig war, zu einer ausgewachsenen IDE zurückzukehren. Sie können das gleiche wie Emacs mit dem integrierten Replikat tun, bewegen Sie sich einfach in den Namespace, mit dem Sie arbeiten, und synchronisieren Sie jedes Mal, wenn Sie Änderungen vornehmen. Es ist eine wirklich nette Art zu arbeiten.

    
shmish111 25.06.2015 12:33
quelle

Tags und Links