May 12 2013

SLIME: instalacion y configuracion

Tag: mediumoverdrive @ 10:36 pm

slime-smallSLIME (Superior Lisp Interaction Mode for Emacs o bien Modo de Interaccion de Lisp Superior para Emacs) es un modo para emacs para desarrollar aplicaciones en CL. SLIME usa un backend llamado SWANK, el cual es cargado dentro de CL. SLIME soporta distintas implementaciones de CL como CMUCL, SBCL, CLISP, etc.

Algunas de las funcionalidades mas destacadas son: slime-mode, que es el modo lisp menor que permite usar lisp con evaluacion de codigo, compilacion y expansion de macros, asi como documentacion online (describe, apropos y hyperspec), busquedas por definicion o Meta-Point, autocompletion de simbolos y paquetes, indentacion automatica de macros basadas en &body, interfaz para referencias cruzadas (WHO-CALLS, etc). Tambien incluye SLDB, que es un debugger de CL con una interfaz de usuario basada en emacs, REPL (Read-Eval-Print Loop escrito en Elisp) con soporte de comandos cortos parecido al listener McCLIM. Entre las features tambien se incluyen notas de compilacion que permite recopilar mensajes de compilacion y anotar directamente estos sobre buffers fuente. Por ultimo y de las features importantes que incluye, tambien posee inspector para la inspeccion de objectos de manera interactiva.

more-slime

Instalacion de SLIME

Para instalar SLIME lo realizaremos usando la ultima version desde CVS:

$ export CVSROOT=:pserver:anonymous@common-lisp.net:/project/slime/cvsroot

$ cvs login (el password es anonymous)

$ cvs checkout slime

Configuracion de SLIME

Ahora nos disponemos a configurar emacs para que use SBCL con SLIME:

(setq inferior-lisp-program «/opt/sbcl/bin/sbcl») ; your Lisp system

(add-to-list ‘load-path «~/hacking/lisp/slime/») ; your SLIME directory

(require ‘slime)

(slime-setup)

Ejecutar SLIME

Para ejecutar el nuevo modo SLIME para comenzar a trabajar comodamente con CL con nuestro flamante compilador y conjunto de herramientas SBCL tan solo debemos lanzar SLIME de la siguiente manera:

M-x slime

Esto empleara el paquete del modo inferior lisp para ejecutar un proceso Lisp, cargara e iniciara el servidor en el lado Lisp (tambien conocido como Swank) y establecera una conexion socket entre el entorno Emacs y Lisp. Finalmente un buffer REPL sera creado para cuando se introduzcan expresiones Lisp para su evaluacion. Veamos ahora el uso de SLIME:

Buffers temporales

Algunos comandos en SLIME crean buffers temporales para mostrar resultados. Los buffers temporales pueden ser eliminados presionando la letra q. Esto restaurara la ventana anterior como estaba mostrada justo antes de mostrar el buffer. Los buffers buffers temporales tambien pueden ser suprimidos mediante la funcion kill-buffer, sin embargo, la configuracion de ventanas como estaba previamente no sera restaurada. Tambien cabe senalar que pulsando RET SLIME tomara la accion mas logica en cada momento (o la mas ‘esperada’).

Buffer *Inferior-lisp*

SLIME internamente usa el paquete comint que comienza los procesos Lisp. El buffer *Inferior-lisp* contiene y posee el nivel mas alto de los procesos Lisp. Este acceso directo a Lisp es util para troubleshooting, y hasta cierto punto de la integracion de SLIME esta disponible usando el inferior-slime-mode. Sin embargo, en uso normal esta altamente recomendado usar completamente la integracion SLIME REPL e ignorar el buffer *inferior-lisp*.

Multithreading

Si el sistema Lisp soporta multithreading, SLIME genera un nuevo thread para cada request, por ejemplo C-x C-e crea un nuevo thread para evaluar la expresion. Una excepcion a esta regla son los requests creados desde REPL: todos los comandos introducidos en el buffer REPL son evaluados en un thread REPL dedicado.

El manual completo de SLIME se puede encontrar en su web oficial. Tambien aqui se puede ver un video demostracion de slime aqui.