Frage

Ich habe für eine kleine Weile Clojure worden verwenden und einige Projekte erstellen, die als Spielzeug größer und komplizierter sind. Ich habe in den letzten paar Jahren Java wurde mit und haben sich daran gewöhnt, was IDEs für mich tun -. Kompilieren viele Klassen, verpacken sie in Gläsern auf, erstellen Batch-Dateien für Benutzer, um sie mit zu beginnen

Wenn ich Beispiele für Entwicklung aussehen in Clojure scheinen sie entlang der Linien von Last-Dateien in das REPL zu sein, sehen, wie sie funktionieren, bearbeiten Sie die Datei, neu zu laden, zu wiederholen. Nary eine Klasse oder ein Glas ist überall erzeugt. „: Gen-Klasse“, zum Beispiel in Stuart Halloway ist grandios „Programming Clojure“ Ich konnte nicht ein einziges Beispiel finden. Die Clojure IDEs, die ich verwendet habe (ClojureBox und die enclojure NetBeans Plugin) scheint den gleichen Arbeitsablauf zu fördern.

Ist das Absicht? Sind die Werkzeuge zu unreif oder kann ich einfach nicht „get it“?

Ich möchte einige Arbeitsabläufe Beispiele von Leuten hören, die einige nicht-triviale Programme erstellt haben, von normalen Benutzern verwendet werden (nicht anderen Devs), wenn möglich.

Vielen Dank für Ihre Meinung zu teilen.

War es hilfreich?

Lösung

Ich denke, es gibt wirklich zwei Fragen hier:

A) zum Bereitstellen (und aufzubauen und verwalten Abhängigkeiten). Alles, was ich sagen kann mit ähnlichen Zielen / Domains zu anderen Projekten ist suchen und kopieren Sie sie.

B) Workflow:

Mein Arbeitsablauf ist wie folgt:

  1. eine Datei öffnen und einige hohe Wunschdenken Erklärungen

  2. schreiben
  3. beginnen, einige Funktionen zu schreiben, sie zu unterstützen

2.5 Kopieren Sie die Funktionsdefinitionen zu REPL, wie ich sie erstellen

  1. eine weitere Datei öffnen und einige grundlegende Tests schreiben die Funktion zu überprüfen, funktioniert

3.5 Kopie diese den REPL

  1. iterate zwischen den beiden Puffern Aufbau der Tests bis zu einem Beispiel und das Programm zu einem Ende Ziel. Diese schließlich ähnliche Aktivitäten werden, und ich weiß, ich bin fertig.

  2. wickeln Sie die Sekundär-Datei in deftest up

Nun, wenn ich in einem Monat zurückkommen, ich kann nur meine Tests laufen und glücklich sein! Speicher der REPL Puffer kann einen Wert mit wenig Aufwand bieten. Das ist genau das, was für mich derzeit arbeitet, und ich bin glücklich, bessere Ansätze erzogen werden.

Wie für die Auswahl der IDE vs REPL - die meisten IDEs haben Plugins, die REPLs haben, damit ich bin nicht sicher, es ist eine der eine oder andere Wahl - wirklich sein gerade über dem Texteditor Sie produktiv sind in, und wie Sie verwalten möchten Ihre Projektstruktur. Es gibt keine ‚tut es auf diese Weise‘ Strukturen vorgefertigte AFAIK so an dieser Stelle ist es einfacher, zu bestimmten Projekten suchen (wie Clojure selbst oder Penumbra oder compojure oder einer der auf der Hauptseite aufgelistet Bibliotheken.

Andere Tipps

Der REPL Entwicklungsansatz wird von den meisten Lisp-Familie (und anderer funktionaler Sprache) IDE für eine lange Zeit gefördert worden. Einige dieser REPL der Funktion auch die automatische Vervollständigung Funktionen, die Sie mit einem Java-IDE verbinden könnten.

REPL gibt Ihnen ein paar große Vorteile gegenüber dem Standardansatz. Der erste ist, dass es Ihnen erlaubt, beliebigen Code während der Laufzeit des Programms auszuführen, die viel einfacher Multi-Threaded-Systeme Debuggen machen kann. Zweitens, und was noch wichtiger ist, es macht es einfach, Ihre Funktionen zu testen, während Sie Code. Sie brauchen nicht einen Rahmen um eine neue Funktion oder Klasse zu erstellen, können Sie mit ihm spielen direkt in der REPL, und sehen, wie es für eine Vielzahl von Anwendungsfällen reagiert.

Nun, zu beginnen, praktisch jede anständige Entwicklung Plugin für jeden Editor oder IDE geben Ihnen einen Weg, um die Clojure REPL zu verwenden, um von innerhalb der IDE. Wahrscheinlich können Sie sogar Dateien in die REPL für das Testen und so laden. Sie brauchen nicht das eine oder das andere zu wählen.

Enclojure ist ein langer Weg zu gehen, das ist sicher. Allerdings sind die meisten Menschen vollkommen glücklich mit Emacs, darunter auch ich. Emacs Lisp verwendet einen als Konfigurationssprache, so ist es in der Regel die natürlichste Wahl zu einem Lisper.

Für Sprachen, die REPLs, mit dem REPL als wichtiger Teil des Entwicklungsprozesses haben die Norm ist. Bearbeiten von Dateien, so dass sie in die REPL Laden, mit ihnen zu spielen, um zu sehen, ob eine Arbeit, spült, wiederholen. Dies ist einer der großen Vorteile von Sprachen mit REPLs wie Clojure und Haskell und CL und so weiter.

Wie für Gläser Aufbau und Zusammenstellung Clojure Code und so, ist so einfach. Sie haben nicht einmal wirklich / haben / Clojure Code kompilieren die meiste Zeit, wenn Sie nicht wollen. Wenn Sie das tun, AOT Sie es mit gen-Klasse kompilieren, die es zu Klassendateien kompiliert, die Sie dann in ein Gefäß legen kann. Es gibt Unmengen von Beispielen und sogar unter dem interwebs verbreiten Tutorials. Die einfachste und effizienteste Weg ist so etwas wie Ant zu verwenden und einen Build-Skript zu schreiben, die Clojure Code kompiliert und generiert die .jar für Sie. Das erste Mal, wenn ich es tat, dachte ich, es würde schwer sein, zu tun, aber es war eigentlich ganz einfach. Ich sah sie nur an den Clojure und Clojure-Contrib Ant-Build-Dateien und verwiesen die Ant-Hilfeseiten für alles, was ich brauchte.

Eine Sache, die ich erwähnen sollte, ist die Tatsache, dass Enclojure / nicht / eigentlich bauen ausführbare .jar-Dateien für Sie, wenn Sie es wünschen, dies zu tun. Ich bin sicher, fortgeschrittenere Dinge, die Sie gewohnt sind in der Zukunft hinzugefügt werden. Sie sind in der Tat noch recht neu.

Ich benutze beide - Eclipse-IDE und Counterclockwise Plugin, das eine REPL bietet. Dies ist eine besonders schöne Kombination, wenn Sie Java-Code neben Clojure entwickeln (wie ich).

Mein allgemeiner Ansatz ist:

  • Schreiben Clojure Code im Editor
  • Halten Sie eine REPL offen für die Prüfung Dinge aus (Strg + Enter ist eine nützliche Abkürzung hier: es führt, was Code wird im Editor in der REPL ausgewählt)
  • Verwenden Sie die generische IDE-Tools für das Projektmanagement, das Erstellen, Testen, SCM etc.

Manchmal arbeite ich auch rein in der REPL. Dies ist in der Regel besser für Dinge schnell zu testen. Wenn ich besonders wie ein Stück Testcode, werde ich einfach copy / paste es aus dem REPL in meinen Test-Suite.

Was ich tue, ist ein Projekt mit Leiningen zu erstellen. Wenn Sie nur für eine Weile whack weg wollen, können Sie geben Sie einfach lein repl und Ihr Projekt Classpath für die ers eingerichtet wird.

Eigentlich aber ich benutze Emacs, Schleim und Swank clojure. Nach dem Projekt navigieren, geben Sie einfach M-x clojure-Jack-in . Dadurch wird der Swank Server und Schleim eine Verbindung zu ihm und Sie haben einen ers in einem Puffer. Natürlich nur, dass nicht mehr wert als ein ers in einer Shell ausgeführt wird. Was Sie erhalten, ist die Möglichkeit, Code in einem anderen Puffer zu schreiben, und mit einer Tastenkombination wählen sexps oder größere Einheiten und führen sie in dem ers zu sehen, ob es funktioniert. Auch Schleim gibt Ihnen praktisch keybindings für allgemeine Aufgaben. Siehe Swank-clojure auf Github für weitere Informationen.

johnj, Sie können die gleiche Sache in Emacs tun. Eigentlich dieser Satz ist wahrscheinlich eine Tautologie.

(add-hook 'after-save-hook etc.

Hier ist jemand Beispiel After-save-hook für git: https://gist.github.com/449668

Mit Eclipse können Sie Unit-Tests (oder ein beliebiges Programm) laufen Sie jedes Mal eine Datei im Projekt speichern. Der gesamte Vorgang dauert weniger als eine Sekunde - es ist für testgetriebene Entwicklung groß ist, und beseitigt die Notwendigkeit für Cut-and-Paste in die REPL für die meisten Situationen. Plus erhalten Sie die Tests zu halten! : -)

Sie werden Kuchen verwenden möchten die JVM Startzeit jedes Mal, wenn Sie Ihre Tests starten zu vermeiden. Sie können cake test auf der Kommandozeile ausgeführt werden, oder einfach nur haben Eclipse-es für Sie ausführen, wenn Sie eine Datei in Ihrem Projekt speichern.

Ich habe diese ein Projekt durch die Einrichtung arbeiten mit Leiningen , der Installation von Kuchen und die Installation gegen den Uhrzeigersinn Eclipse-Plugin. Um Eclipse-einrichten Tests auszuführen, jedesmal wenn Sie speichern, wählen Sie Project-> Einstellungen-> Builders, klicken Sie auf Neu, wählen Sie Programm, nennen Sie es so etwas wie ‚laufen Tests‘, fügen Sie den Pfad unter Ort zu cake, wählen Sie das Arbeitsverzeichnis für Ihre Projekt, und fügen Sie test die optionalen Argumente. Unter dem 'Build Options' Tab, wählen Sie 'Während der Auto-Builds.'

Ich habe die allgemeine Idee für diese von Jeff Younker Buch „Foundations of Agile Python-Entwicklung.“ Wurde ein Emacs-Mann für 20 Jahre, aber dieser Trick hat Eclipse-setzen an der Front meines Workflows in letzter Zeit.


Update: etwa ein Jahr später, ich benutze jetzt Midje mit der lazytest Option, um das Gleiche zu tun, während sowohl mit Emacs und Eclipse Entwicklung

.
  

"Wenn ich Beispiele für Entwicklung aussehen in Clojure scheinen sie entlang der Linien von Last-Dateien in das REPL zu sein, sehen, wie sie funktionieren, bearbeiten Sie die Datei, neu zu laden, zu wiederholen. Nary eine Klasse oder ein Glas überall erzeugt werden .. .... ich möchte einige Arbeitsabläufe Beispiele von Leuten hören, die einige nicht-triviale Programme erstellt haben, durch regelmäßige Nutzer (nicht andere devs), wenn möglich. "

verwendet werden

Die Beispiele unter Debuggen clojure Funktionen, die aufgerufen werden, in Java-Code (eclipse) trivial sind, aber zeigen, wie in eclipse kann man Projekte verknüpfen, so dass eine clojure / scala Funktionalität aus Java aufrufen kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top