Oft muss man sehen, wie Anfänger Common Lisp ausprobieren und sich dann beschweren, dass es unmöglich ist, normal damit zu arbeiten. Dies liegt in der Regel daran, dass sie nicht verstehen, wie ein Prozess eingerichtet werden kann, der dieselbe „schnelle Antwort“ aus der Entwicklungsumgebung liefert, wenn Sie die Funktion geändert, kompiliert und die Änderungen sofort innerhalb des bereits ausgeführten Programms ohne verwendet wurden Neustart.
Sie können verstehen, wie es aussieht, indem Sie sich ein Video auf Youtube ansehen, das die interaktive Entwicklung auf Common Lisp demonstriert.
Heute möchte ich zeigen, wie man eine Entwicklungsumgebung für eine solche Entwicklung einrichtet. Im Jahr 2018 wurde es dank der ständig verbesserten Abstimmung sehr einfach.
Ich entschuldige mich im Voraus für die folgenden Videos, die in Asciinema aufgenommen wurden, und Habrahabr unterstützt dies nicht. Klicken Sie auf die Screenshots der Konsole, um Videos anzusehen.
Installieren Sie zunächst SBCL , Roswell und Emacs . Ich werde über das Beispiel der Installation von allem in OSX sprechen, und ich würde mich freuen, wenn Sie in den Kommentaren Ihre Erfahrungen unter Windows und Linux teilen. Dann kann ich den Artikel mit Beispielen für alle drei Plattformen ergänzen.
SBCL ist eine der vielen Implementierungen von Common Lisp. Von den Open Source am schnellsten. Falls gewünscht, können Sie in SBCL Code mit einer Geschwindigkeit ausführen, die mit C ++ - Code vergleichbar ist, aber gleichzeitig alle Vorteile der schnellen interaktiven Entwicklung bietet.
Roswell ist ein Dienstprogramm zum Installieren und Ausführen von Common Lisp-Programmen. Sie weiß auch, wie man vorkonfigurierte Emacs ausführt und Programme in Binärdateien sammelt.
Sie kennen wahrscheinlich Emacs - ein solches Betriebssystem, das auch einen Code-Editor hat. Sie können in Common Lisp und in jedem anderen Editor schreiben, aber heute bietet Emacs die beste Integration und Unterstützung für die semantische Bearbeitung von Code. Bei ihm müssen Sie keine Klammern zählen, er erledigt alles für Sie.
Wenn Sie also OSX verwenden, müssen Sie dies tun
brew install roswell emacs
Nachdem das Aufbrühen die Scheibe raschelt und alles, was Sie brauchen, eingelegt hat, laufen Sie einfach im Terminal:
ros run
Dieser Befehl gibt Ihnen automatisch die neueste Version von SBCL und startet Lisp repl, wo Sie den Code eingeben können:

Dies ist jedoch nicht der Fall, es ist nicht so konzipiert. Konfigurieren wir Emacs für die vollständige Entwicklung:
ros emacs
Das Team startet Emacs in der Konsole und konfiguriert Quicklisp, den Paketmanager für Common Lisp.
Bevor wir fortfahren, konfigurieren wir Terminal, Emacs und OSX so, dass sie gut zusammenarbeiten.
Zunächst müssen Sie einige Einstellungen in OSX und iTerm ändern
Stellen Sie sicher, dass CapsLock wie Control funktioniert. Nirgendwo ohne Emacs:

Deaktivieren Sie dann alle Kombinationen, die mit der Verwendung von Steuerung und Pfeilen in den Aufnahmen von MissionControl verbunden sind:

Setzen Sie dann iTerm2 und wechseln Sie das Alt-Verhalten in den Profileinstellungen von Normal zu Esc +:

Erstellen Sie anschließend eine Datei mit einer minimalen Konfiguration für Emacs, ~/.emacs.d/init.el
:
(package-initialize) (require 'package) (add-to-list 'package-archives '("MELPA" . "http://melpa.milkbox.net/packages/") t) (defun install-package (package) (unless (package-installed-p package) (package-refresh-contents) (package-install package))) (install-package 'paredit) (install-package 'expand-region) (defun setup-lisp-mode () (require 'paredit) (paredit-mode) (define-key paredit-mode-map (kbd "Cw") 'paredit-backward-kill-word)) (add-hook 'lisp-mode-hook 'setup-lisp-mode) (add-hook 'emacs-lisp-mode-hook 'setup-lisp-mode)
Führen Sie danach erneut ros emacs aus, drücken Sie Alt-X
und geben Sie den slime
. Als Ergebnis erhalten wir die Befehlszeile zur Eingabe von lisp-Befehlen:

Jetzt können Sie bereits codieren
Wir werden jedoch keine Befehle in die Wiedergabe eingeben. Es ist besser, sofort mit der Entwicklung eines Mikrodienstes zu beginnen. Wenn Sie nur eine API benötigen, ist die Verwendung von Ningle der einfachste Weg. Wenn Sie ein erweitertes Framework wie einen Dschungel benötigen, können Sie Radiance oder Caveman2 ausprobieren . Aber jetzt werden wir nichts Kompliziertes tun, sondern ein einfaches HTTP-Cookie aufrühren.
Öffnen Sie die Datei server.lisp
( Cx Cf server.lisp
) in Emacs und schreiben Sie Code. Ungefähr so:

Infolgedessen wird in Ihrer Instanz ein Webserver gestartet, auf dem Sie unterwegs Routen hinzufügen und Ansichten neu definieren können.
Hier ist der ganze Code für die Faulen:
In Lisp werden Konstruktionen in Klammern als "Formulare" bezeichnet. Formulare, die sich oben befinden und in keinem anderen verschachtelt sind, werden als oberste Ebene bezeichnet. Solche Formulare können durch Klicken auf Cc Cc
kompiliert werden, wenn sich der Cursor in einem solchen Formular befindet. Wenn Sie CapsLock on ontrol
erneut CapsLock
, ist diese Kombination sehr bequem zu drücken.
Nach dem Kompilieren des Formulars wird sofort eine neue Version der Funktion wirksam und ein Neustart des Servers ist nicht erforderlich. Es ist also sehr praktisch, Fehler zu debuggen und zu beheben. Darüber hinaus können Sie den automatischen Testlauf unmittelbar nach dem Kompilieren eines Teils des Codes konfigurieren. Dies ist jedoch eine ganz andere Geschichte.
Wenn Sie an anderen Themen interessiert sind, schreiben Sie in die Kommentare, ich werde versuchen, auch Beiträge darüber zu verfassen.