Vous voyez souvent des débutants essayer Common Lisp et se plaindre ensuite qu'il est impossible de travailler normalement avec lui. En règle générale, cela est dû au fait qu'ils ne comprennent pas comment configurer un processus qui fournit la même «réponse rapide» de l'environnement de développement, lorsque vous avez modifié la fonction, compilé, et que les modifications ont immédiatement commencé à être utilisées dans le programme déjà en cours d'exécution sans le redémarrer.
Vous pouvez comprendre à quoi cela ressemble en regardant une vidéo sur youtube qui montre le développement interactif sur Common Lisp.
Aujourd'hui, je veux montrer comment mettre en place un environnement de développement pour un tel développement. En 2018, c'est devenu très simple, grâce à l'amélioration constante du réglage.
Je m'excuse à l'avance pour les vidéos suivantes enregistrées à Asciinema, et Habrahabr ne les prend pas en charge. Cliquez sur les captures d'écran de la console pour regarder des vidéos.
Tout d'abord, installez SBCL , Roswell et Emacs . Je vais parler de l'exemple de l'installation de tout dans OSX, et je serai heureux si dans les commentaires vous partagez votre expérience sur Windows et Linux. Ensuite, je peux compléter l'article avec des exemples pour les trois plates-formes.
SBCL est l'une des nombreuses implémentations de Common Lisp. De l'open source, le plus rapide. Si vous le souhaitez, sur SBCL, vous pouvez exécuter du code à une vitesse comparable au code C ++, mais en même temps avoir tous les avantages d'un développement interactif rapide.
Roswell est un utilitaire pour installer et exécuter des programmes Common Lisp. Elle sait notamment comment exécuter Emacs préconfiguré, ainsi que collecter des programmes dans des binaires.
Vous connaissez probablement Emacs - un tel système d'exploitation qui dispose également d'un éditeur de code. Vous pouvez écrire en Common Lisp et dans n'importe quel autre éditeur, mais Emacs a aujourd'hui la meilleure intégration et le meilleur support pour l'édition sémantique du code. Avec lui vous n'avez pas à compter les parenthèses, il fait tout pour vous.
Donc, si vous utilisez OSX, vous devez faire
brew install roswell emacs
Après avoir brouillé le disque et mis tout ce dont vous avez besoin, exécutez simplement dans le terminal:
ros run
Cette commande vous donnera automatiquement la dernière version de SBCL et démarrera Lisp repl, où vous pourrez saisir le code:

Mais ce n'est pas le cas, ce n'est pas ainsi conçu. Configurons donc Emacs pour un développement complet:
ros emacs
L'équipe lancera Emacs dans la console et configurera Quicklisp, le gestionnaire de packages pour Common Lisp.
Mais avant de continuer, configurons le terminal, emacs et OSX pour qu'ils fonctionnent bien ensemble.
Tout d'abord, vous devez modifier certains paramètres dans OSX et iTerm
Faites fonctionner CapsLock comme Control. Dans Emacs, nulle part sans lui:

Désactivez ensuite toutes les combinaisons associées à l'utilisation du contrôle et des flèches dans les prises de vue de MissionControl:

Ensuite, mettez iTerm2 et changez le comportement Alt dans les paramètres de profil de Normal à Esc +:

Après cela, créez un fichier avec une configuration minimale pour 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)
Après cela, exécutez à nouveau ros emacs, appuyez sur Alt-X
et entrez la commande slime
. En conséquence, nous obtenons la ligne de commande pour entrer des commandes lisp:

Maintenant, vous pouvez déjà coder
Mais nous n'entrerons pas de commandes dans la relecture, il est préférable de commencer immédiatement le développement d'un microservice. Si vous n'avez besoin que d'une API, le moyen le plus simple consiste à utiliser Ningle . Si vous avez besoin d'un framework plus avancé, comme une jungle, vous pouvez essayer Radiance ou Caveman2 . Mais maintenant, nous ne ferons rien de compliqué, mais nous allons créer un simple cookie HTTP.
Ouvrez le fichier server.lisp
( Cx Cf server.lisp
) dans Emacs et commencez à écrire du code. Quelque chose comme ça:

En conséquence, un serveur Web sera lancé à l'intérieur de votre instance, dans lequel vous pourrez ajouter des itinéraires et redéfinir les vues lors de vos déplacements.
Voici tout le code, pour les paresseux:
En Lisp, les constructions entre crochets sont appelées «formes». Les formulaires situés en haut et non imbriqués dans un autre sont appelés de niveau supérieur. Ces formulaires peuvent être compilés en cliquant sur Cc Cc
lorsque le curseur se trouve à l'intérieur d'un tel formulaire. Si vous reliez CapsLock sur ontrol
, cette combinaison est très pratique à appuyer.
Une fois le formulaire compilé, une nouvelle version de la fonction prend immédiatement effet et un redémarrage du serveur n'est pas nécessaire. Il est donc très pratique de déboguer et de corriger les bogues. De plus, vous pouvez configurer le test automatique immédiatement après avoir compilé une partie du code, mais c'est une tout autre histoire.
Si vous êtes intéressé par d'autres sujets, écrivez dans les commentaires, j'essaierai également de publier des articles à leur sujet.