Articulo de referencia

OpenLisp

OpenLisp es un lenguaje de programación de la familia Lisp desarrollado por Christian Jullien [ 1 ] de Eligis . Se ajusta [ 2 ] [ 3 ] [ 4 ] al estándar internacional para ISLISP...

OpenLisp es un lenguaje de programación de la familia Lisp desarrollado por Christian Jullien [ 1 ] de Eligis . Se ajusta [ 2 ] [ 3 ] [ 4 ] al estándar internacional para ISLISP publicado conjuntamente por la Organización Internacional de Normalización (ISO) y la Comisión Electrotécnica Internacional (IEC), ISO/IEC 13816:1997(E), [ 5 ] [ 6 ] revisado a ISO/IEC 13816:2007(E). [ 7 ]

Escrito en los lenguajes de programación C y Lisp, se ejecuta en la mayoría de los sistemas operativos comunes . OpenLisp está designado como una implementación de ISLISP , pero también contiene muchas extensiones compatibles con Common Lisp (tabla hash, tabla legible, paquete, defstruct, secuencias, números racionales) y otras bibliotecas ( socket de red , expresión regular , XML , Interfaz de sistema operativo portátil ( POSIX ), SQL , Protocolo ligero de acceso a directorios (LDAP)). [ 8 ]

OpenLisp incluye un intérprete asociado a un bucle de lectura-evaluación-impresión (REPL), un programa de ensamblaje Lisp (LAP) y un compilador backend para el lenguaje C. 

Objetivos

El objetivo principal de esta versión de Lisp es implementar un sistema ISLISP totalmente compatible (cuando se ejecuta con --islispun indicador, se restringe estrictamente a la especificación ISO/IEC 13816:2007(E)). El objetivo secundario es proporcionar un sistema Lisp integrado completo , enlazable con C/ C++ o Java (a través de la Interfaz Nativa de Java (JNI)). Se utiliza un mecanismo de devolución de llamada para comunicarse con el programa externo. Otros objetivos son que pueda utilizarse como lenguaje de scripting o lenguaje de conexión y que genere ejecutables de programas independientes .

Licencia

A pesar de su nombre , OpenLisp es un software propietario . Su intérprete está disponible gratuitamente para cualquier uso no comercial.

Interfaz de usuario

OpenLisp se ejecuta principalmente en modo consola: cmd.exeen Microsoft Windows y como emulador de terminal en sistemas basados ​​en Unix .

;; OpenLisp v11.xy (Compilación: XXXX) por C. Jullien [01 de enero de 20xx - 10:49:13] ;; Copyright (c) Eligis - 1988-20xx. ;; Sistema 'sysname' (64 bits, 8 CPU) en 'hostname', ASCII. ;; ¡Gracias a Dios, OpenLisp ha vuelto! ? ( fib 20 ) ;; tiempo transcurrido = 0,003 s, (0 gc). = 6765 ? _

Entre las soluciones alternativas se incluyen ejecutar OpenLisp desde Emacs configurando Emacs inferior-lisp-mode, o usar un entorno de desarrollo integrado (IDE) que admita la sintaxis de OpenLisp . LispIDE de DaanSystems lo hace de forma nativa.

Tecnología

administrador de memoria

Internamente, OpenLisp utiliza memoria virtual para asignar y extender objetos automáticamente. Los objetos pequeños del mismo tipo se asignan mediante una organización de memoria Bibop (Big Bag Of Pages). Los objetos grandes utilizan un proxy que apunta al objeto real en el montón de Lisp. La recolección de basura conservadora es de marcado y barrido con montón coalescente (la fase de barrido se puede configurar para usar subprocesos ).

Tipos de datos

OpenLisp utiliza una arquitectura etiquetada (etiqueta de 4 bits en 32 bits , etiqueta de 5 bits en 64 bits ) para una rápida comprobación de tipos (entero pequeño, flotante, símbolo, cons, cadena, vector). Los enteros pequeños (28 bits en 32 bits, 59 bits en 64 bits) no se empaquetan , mientras que los enteros grandes (32/64 bits) sí se empaquetan. Como exige ISLISP, también se implementa la aritmética de precisión arbitraria (números grandes). Los caracteres (y por lo tanto las cadenas) son de 8 bits ( ANSI , EBCDIC ) o de 16/32 bits si se habilita la compatibilidad con Unicode .

Evaluador y compilador

El núcleo Lisp, el intérprete nativo y las bibliotecas básicas están codificados manualmente en el lenguaje C , el lenguaje intermedio LAP producido por el compilador es luego traducido a C por el generador de código backend de C.

Historia

En 1988, el motivo principal de OpenLisp fue implementar un subconjunto de Lisp para extender EmACT, un clon de Emacs . ISLISP se convirtió rápidamente en la opción obvia. Posteriormente se continuó con su desarrollo.

Puertos

OpenLisp funciona en numerosos sistemas operativos , incluidos Windows , la mayoría de los basados ​​en Unix y POSIX ( Linux , macOS , FreeBSD , OpenBSD , NetBSD , Solaris , HP-UX , AIX , Cygwin , QNX ), MS-DOS , OS/2 , Pocket PC , OpenVMS y z/OS . La sección de descargas del sitio web oficial contiene más de 50 versiones.

Bibliotecas estándar

Conectores

OpenLisp puede interactuar con módulos escritos en C mediante la interfaz de funciones externas (FFI). Los flujos ISLISP se extienden para admitir sockets de red ( ./netel directorio incluye ejemplos para el Protocolo de transferencia de hipertexto (http), la Notación de objetos JavaScript (JSON), el Protocolo de oficina de correos 3 (POP3), el Protocolo simple de transferencia de correo (SMTP), Telnet y RSS ). Un lector simplificado de lenguaje de marcado extensible ( XML ) puede convertir XML a Lisp. Un módulo SQL básico se puede usar con MySQL , ODBC , SQLite y PostgreSQL . Un módulo de valores separados por comas (CSV) puede leer y escribir archivos CSV.

Herramientas

Las herramientas para desarrolladores incluyen registro de datos , formateador de código , analizador de rendimiento , programación por contrato y pruebas unitarias .

Algoritmos

Algunos algoritmos conocidos están disponibles en el directorio ( algoritmo simplex./contrib de Dantzig , algoritmo de Dijkstra , algoritmo de Ford-Fulkerson ). Los módulos se distribuyen con licencias BSD .

Origen del nombre

El prefijo Open se refiere a sistemas abiertos, no al modelo de código abierto . [ 11 ]

El nombre fue elegido en 1993 para reemplazar el nombre en clave interno de MLisp, que ya era utilizado por Gosling Emacs (como sucesor de Mocklisp ).

El lenguaje de programación OpenLisp es diferente de OpenLISP, un proyecto que comenzó en 1997 para implementar el Protocolo de Separación de Localizador/Identificador .

Compilador

Esta sección describe cómo un compilador transforma el código Lisp a C.

Código fuente

La función de los números de Fibonacci (esta definición clásica utilizada en la mayoría de las pruebas comparativas no es la forma más eficiente de calcularlos fib)

( defun fib ( n ) ( cond (( eq n 1 ) 1 ) (( eq n 2 ) 1 ) ( t ( + ( fib ( - n 1 )) ( fib ( - n 2 ))))))

Código intermedio LAP

El compilador de Lisp traduce el código fuente de Lisp al siguiente código intermedio. A continuación, se realiza una optimización de inspección que utiliza este formato intermedio para analizar y optimizar las instrucciones. Tras la optimización, el código LAP final es:

(( fentry fib 1 0 0 ) ( param 0 ) ( jeq _l004 '1 ) ( jneq _l003 '2 ) ( move a1 '1 ) ( return ) _l003 ( gsub1 a1 ) ( recurse 1 ) ( move a2 a1 ) ( param 0 ) ( gsub a1 '2 ) ( recurse 1 ) ( gadd a2 a1 ) _l004 ( return ) ( end ))

Traducción de código C

Finalmente, el generador de código C utiliza código LAP para traducir instrucciones en C.

static POINTER OLDEFCOMPILED1 ( olfib_00 , p1 ) { POINTER a1 ; POINTER VOLATILE a2 ;ollapenter ( SN_OLFIB_00 ); a1 = p1 ; if ( eq ( a1 , olmakefix ( 1 ))) goto _l004 ; if ( ! eq ( a1 , olmakefix ( 2 ))) goto _l003 ; ollapleave ( SN_OLFIB_00 ); return olmakefix ( 1 ); _l003 : a1 = ollapgsub ( a1 , olmakefix ( 1 )); a2 = olfib_00 ( a1 ); a1 = ollapgsub ( p1 , olmakefix ( 2 )); a1 = olfib_00 ( a1 ); a1 = ollapgadd ( a2 , a1 ); _l004 : ollapleave ( SN_OLFIB_00 ); return a1 ; }

Guía de estilo

Longitud de línea

OpenLisp acepta líneas de longitud ilimitada. El estilo recomendado es que cada línea de texto en el código tenga como máximo 80 caracteres .

Adopción

Ha sido elegido por SDF Public Access Unix System , sistemas Unix de acceso público sin fines de lucro en Internet [ 12 ] [ 13 ] , como uno de sus lenguajes de programación disponibles en línea.

Bricsys utiliza OpenLisp para implementar AutoLISP en su sistema de diseño asistido por computadora (CAD) Bricscad . [ 14 ]

MEVA [ 15 ] está escrito completamente con OpenLisp.

La Università degli Studi di Palermo utiliza OpenLisp para enseñar Lisp. [ 16 ]

Referencias

  1. Parquier, Pierre (2000). "JTC1/SC22 N3170" . ISO/IEC ( FTP ) . Consultado el 11 de marzo de 2012 .(Para ver los documentos, consulte Ayuda:FTP )
  2. ^ Simonsen, Keld (13 de marzo de 1999). "Islisp - preguntas frecuentes" . ISO/IEC . Consultado el 11 de noviembre de 2016 .
  3. Nobuto, Izumi (Universidad de Tohoku, Escuela de Posgrado); Takayasu, Ito (Universidad de Tohoku, Escuela de Posgrado) (1999). "Intérprete y compilador del estándar ISO Lisp ISLISP" . Transacciones de la Sociedad de Procesamiento de la Información de Japón . Transacciones de la Sociedad de Procesamiento de la Información de Japón. ISSN 0387-5806 . Archivado del original el 26 de agosto de 2018. Recuperado el 17 de junio de 2013 . {{cite journal}}: CS1 maint: varios nombres: lista de autores ( enlace )
  4. McJones, Paul (2010). "ISLISP" . Software Preservation Group . Recuperado el 18 de marzo de 2012 .
  5. "ISO/IEC 13816:1997(E)" . Organización Internacional de Normalización . Consultado el 11 de noviembre de 2018 .
  6. Parquier, Pierre (Coordinador del JTC1 SC22 WG16) (1996). "ISO/IEC JTC1 SC22 WG16 N177 – Votación DIS" . ISO/IEC . Consultado el 15 de marzo de 2012 .{{cite web}}: CS1 maint: nombres numéricos: lista de autores ( enlace )
  7. 1 2 "ISO/IEC 13816:2007(E)" . Organización Internacional de Normalización . Consultado el 11 de noviembre de 2018 .
  8. ^ Jullien, cristiano (2011). "Manual de referencia de OpenLisp v9.8.0" . Eligis . Consultado el 14 de marzo de 2012 .
  9. ^ Jullien, cristiano (2011). "Registro de cambios de OpenLisp" . Eligis . Consultado el 15 de marzo de 2012 .
  10. Rinehuls, William (4 de agosto de 1999). "JTC1/SC22 N2969" . ISO/IEC. Archivado del original el 26 de enero de 2021. Recuperado el 11 de noviembre de 2016 .
  11. ^ Jullien, cristiano (2011). "Preguntas frecuentes sobre OpenLisp" . Eligis . Consultado el 15 de marzo de 2012 .
  12. Stover, Gene Michael (2005). "7.2 Lenguajes en SDF" . SDF Public Access Unix System, Inc. Recuperado el 14 de marzo de 2012 .
  13. "Empresas de alojamiento" . ALU (Asociación de Usuarios de Lisp). Archivado del original el 9 de febrero de 2011. Consultado el 18 de marzo de 2012 .
  14. "Noticias de Bricscad" . Bricscad. 2009. Consultado el 20 de marzo de 2012 .
  15. "Inteligencia competitiva y problemas de decisión" . Amos Davis. 2013. Consultado el 30 de septiembre de 2014 .
  16. «Corso di Informática Teórica» . Università degli Studi di Palermo. 2013 . Consultado el 22 de marzo de 2013 .
  • Sitio web oficial
  • Grupo de LinkedIn
  • Grupo de Preservación de Software de ISLISP