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.


May 09 2013

SBCL en emacs

Tag: mediumoverdrive @ 10:53 pm

sbcl63 SBCL es un  compilador para Common Lisp muy especial, que significa Steel Bank Common Lisp, algo asi como Banco de Acero de Common Lisp. SBCL es un compilador de alto rendimiento para CL que provee un entorno interactivo, un debugger, un profiler estadistico, herramientas de cobertura para codigo asi como otras muchas extensiones. SBCL tiene soporte para unicode asi como threading. El nombre de SBCL tiene origen en referencia a Carnegie Mellon University Common Lisp (CMUCL) del cual SBCL es un fork; Andrew Carnegie hizo su fortuna mediante la industria del acero y Andrew _Mellon fue un banquero exitoso.

El punto principal de divergencia en el tiempo en el que se creo este fork, fue un procedimiento de bootstrapping limpio: CMUCL requiere un binario compilado y ejecutable de si mismo para poder compilar el codigo fuente CMUCL, mientras que SBCL soporta bootstrapping de cualquier compilador que cumpla la implementacion de ANSI CL.

Lo cierto es que no difiere absolutamente nada de la configuracion de CLISP en emacs para emplear SBCL en el mismo entorno. Tan solo deberemos instalar y especificar donde se encuentra el binario SBCL de la misma forma que lo hicimos previamente con CLISP.

(setq inferior-lisp-program «/usr/bin/sbcl –noinform»)

Ahora bien, podemos instalar SBCL desde apt o nuestra aplicacion de control de paquetes favorita de manera bastante sencilla, o bien podemos probar la esencia de un compilador que se compila a si mismo. Nos valdria cualquier compilador que como ya hemos mencionado, cumpla el estandar ANSI CL, tambien podriamos usar el propio SBCL para compilar SBCL. En su dia ya lo explicamos para usar stumpwm (que puede usar o bien CLISP o bien SBCL) aunque aqui lo usamos para un proposito diferente y explicamos su esencia, asi que volveremos a hacerlo, aunque esta vez usando tan solo apt por rapidez.

Primero necesitaremos instalar ASDF (Another System Definition Format) que sirve para poder realizar instalaciones de distintas bibliotecas para CL, seria lo analogo a Make.

# apt-get install cl-asdf

Despues de instalar ASDF podemos realizar la instalacion de ciertas bibliotecas en las cuales estamos interesados como por ejemplo Cl-pcre (biblioteca de CL que brinda la oportunidad de usar expresiones regulares de Perl en CL, siendo compatible con dicho lenguaje, rapido y portable entre distintas implementaciones que siguen el ANSI CL, ademas de ser seguro para threads y permitiendo usar s-expressions para los regexp) y tambien instalaremos CLX (Biblioteca cliente para CL para el sistema estandar X Window, equivalente a Xlib para C, sin embargo CLX esta escrito completamente en CL y no usa Xlib. CLX ademas contiene tipos de datos, funciones y macros para interactuar con el servidor de las X mediante el envio de peticiones y recepcion de eventos y sus respuestas.

# apt-get install sbcl

# apt-get install cl-ppcre

# apt-get install cl-clx-sbcl

 Ahora ejecutemos emacs y dentro del mismo ejecutemos M-x run-lisp, podemos ver el resultado del siguiente codigo CL interpretrado:

Selection_027

Se puede encontrar el manual completo de SBCL en su web oficial, asi como un manual que describe como esta implementado.


May 09 2013

CLISP en emacs

Tag: mediumoverdrive @ 3:10 pm

clisp CLISP es una implementacion de Common Lisp realizada por Bruno Haible originalmente. Dicha implementacion provee del compilador que soporta el estandar ANSI Common Lisp ademas de muchas otras extensiones. CLISP incluye en si el interprete, compilador, un debugger, CLOS (para objectos), MOP (MetaObject Protocol), una interfaz al lenguaje ajena, internacionalizacion o i18n, POSIX, soporta expresiones regulares Perl, provee tambien de interfaz para sockets, bignumbers de forma rapida, precision flotante arbitraria y mucho mas. Existe una interfaz para X11 mediante CLX, Garnet y CLUE/CLIO. Edicion por linea de comandos mediante readline. CLISP ademas corre Maxima (el unico lenguaje programado de manera completa por John McCharthy en el MIT, que es la implementacion mas antigua (Recursive Functions of Symbolic Expressions and Their Computation, Part I Communications of the ACM, Vol. 3, April 1960, pp. 184-195), ACL2 y muchos otros paquetes adicionales de Common Lisp. Para mas informacion, podeis ver la pagina oficial de CLISP.

Para instalar CLISP tan solo debemos hacer lo siguiente, bajar el source y compilar o bien instalarlo con nuestra herramienta de control de paquetes como apt-get o similares. Como podemos ver, tenemos distintos paquetes adicionales para acceder a low level sockets, bases de datos, etc. que nos pueden interesar:

Selection_023

Nos disponemos a instalar CLISP, los ficheros de desarrollo y su documentacion:

# apt-get install clisp clisp-dev clisp-doc

Una vez lo tenemos instalado, ya podemos ejercutarlo y comenzar a probarlo de la siguiente manera desde dentro de emacs, aunque obviamente tambien podemos ejecutar el comando clisp desde consola. Primero debemos incluir la siguiente linea en nuestro .emacs:

(setq inferior-lisp-program «/usr/bin/clisp»)

Algunos de los keybindings importantes son los siguientes:

C-M-x : envia automaticamente el codigo lisp al interprete CLISP, lo evalua y muestra el resultado.

C-c C-l : lee un fichero, lo envia al interprete, lo compila y muestra el resultado.

C-x C-e : evalua la ultima s-expresion en lisp.

C-c C-d : muestra la tabla de simbolos en lisp.

C-c C-f : muestra la documentacion de lisp para dicha funcion.

Aqui podemos ver como vamos evaluando el codigo de un buffer en CLISP en la siguiente ventana directamente. Tambien podemos ver como podemos al mismo tiempo, escribir codigo sobre el interprete lisp si asi lo deseamos, asi que podemos combinar ambas opciones.

Selection_025

Ademas de ello, si nos equivocamos en la sintaxis, CLISP entrara en modo debug, para poder depurar el problema, si queremos salir de dicho nivel, podemos ejecutar :q o bien podemos ejecutar help para ver la lista de opciones para el debugger, algunas interesantes como :r para subir al anterior nivel.

COMMAND        ABBR     DESCRIPTION

Error          :e      imprime el ultimo mensaje de error
Inspect        :i       inspecciona el ultimo error
Abort          :a       aborta el siguiente input loop
Quit           :q       sale al nivel mas alto del input loop
Where          :w       inspecciona este frame
Up             :u       sube un frame arriba y lo inspecciona
Top            :t       va al frame de mas arriba y lo inspecciona
Down           :d       baja un frame abajo y lo inspecciona
Bottom         :b       baja al frame de mas abajo y lo inspecciona
Mode mode      :m       hace set del modo de backtrace

1= para todos los elementos

2= para todos los frames

3= solo frames lexicos

4= solo frames de EVAL y APPLY (por defecto)

5= solo frames de APPLY

Backtrace [mode [limite]] :bt  inspecciona el stack

Break+         :br+     Activa breakpoint en un frame EVAL
Break-         :br-     Desactiva breakpoint en un frame EVAL
Return value   :rt      deja un frame EVAL, prescribiendo los valores de retorno
The following restarts are available:
USE-VALUE      :R1      Usa un valor a ser usado en lugar del actual
ABORT          :R2      Aborta el loop principal

Aqui podemos ver un ejemplo de CLISP entrando en el debugger:

Selection_026

 


« Página anteriorPágina siguiente »