EuLisp es un dialecto Lisp de ámbito estático y dinámico desarrollado por una formación flexible de usuarios y desarrolladores Lisp industriales y académicos de toda Europa. Los estandarizadores pretendían crear un nuevo Lisp "menos agobiado por el pasado" (en comparación con Common Lisp ), y no tan minimalista como Scheme . Otro objetivo era integrar bien el paradigma de la programación orientada a objetos. Es un lenguaje de programación de tercera generación .
Paradigma | multi-paradigma : funcional , procedimental , meta , orientado a objetos |
---|---|
Familia | Ceceo |
Apareció por primera vez | 1990 |
Versión de vista previa | 0,991 [1] / 2010 |
Disciplina de mecanografía | fuerte , dinámico |
SO | Linux |
Extensiones de nombre de archivo | .em |
Implementaciones importantes | |
EuXLisp, [2] Youtoo, [2] Eu2C [2] | |
Influenciado por | |
Common Lisp , InterLisp , LeLisp , Lisp / VM, Scheme , T , CLOS , ObjVlisp , Oaklisp , MicroCeyx, MCS, ML estándar , Haskell | |
Influenciado | |
Dylan , ISLISP , Evelin |
Origen
El proceso de definición del lenguaje comenzó por primera vez en una reunión en 1985 en París y tomó varios años. La especificación completa y una primera implementación (solo interpretada ) se pusieron a disposición en 1990.
Características distintivas
Sus características principales son que es un Lisp-1 (sin función separada y espacios de nombres de variables), tiene un sistema orientado a objetos de tipo de función genérica de estilo Common Lisp Object System (CLOS) llamado The EuLisp Object System (TELOS) integrado desde el suelo up, tiene un sistema de módulo incorporado y está definido en capas para promover el uso de Lisp en hardware pequeño e integrado y en máquinas educativas. Soporta continuaciones , aunque no tan poderosamente como Scheme . Tiene un mecanismo de proceso simple y ligero ( hilos ).
Resumen
- Una definición en niveles, actualmente Nivel-0 y Nivel-1
- Módulos basados en entornos léxicos (que no son de primera clase ) .
- Con alcance léxico , con enlace dinámico o tardío disponible en el nivel 1.
- Un espacio de nombre único para los nombres de funciones y variables (como Scheme ).
- Procesos ligeros.
- Un sistema de objetos totalmente integrado con herencia única en el nivel 0 y herencia múltiple y protocolo de metaobjetos en el nivel 1.
- Un sistema de condiciones orientado a objetos .
Implementaciones
Una implementación temprana de EuLisp fue gratuita y eventualmente Eulisp (FEEL). El sucesor de FEEL fue Youtoo ( versiones interpretadas y compiladas ), de la Universidad de Bath en el Reino Unido . [3] Un intérprete para el nivel básico de EuLisp, nivel-0 , fue escrito por Russell Bradford en XScheme, una implementación de Scheme por David Michael Betz, originalmente llamado EuScheme EuScheme pero la versión más reciente pasa a llamarse EuXLisp [1] para evitar Confusión. También Eu2C [2] , un compilador de optimización de EuLisp, fue creado por Fraunhofer ISST bajo el proyecto APPLY en Alemania [3] .
Se desarrolló un dialecto de EuLisp, llamado Plural EuLisp. Era EuLisp con extensiones de programación informática paralela .
Ejemplo
Ejemplo de uso de clases en el algoritmo para resolver el problema " Torres de Hanoi ".
( defmodule hanoi ( sintaxis ( sintaxis-0 ) importar ( nivel-0 ) exportar ( hanoi ));;; ----------------------------------------------- - ;;; Definición de torre ;;; --------------------------------------------- ---- ( defconstant * max-tower-height * 10 )( Defclass () (( Identificación del lector: torre-id palabra clave: id: ) ( bloques de descriptor de acceso: torre-bloques )))( defun build-tower ( x n ) ( etiquetas (( loop ( i res ) ( if ( = i 0 ) res ( loop ( - i 1 ) ( cons i res ))))) (( setter tower-blocks ) x ( bucle n ())) x ))( defmethod generic-print (( x ) ( s )) ( sformat s "# " ( tower-id x ) ( tower-blocks x )));;; ----------------------------------------------- - ;;; Acceso a torres ;;; ------------------------------------------- ------ ( empuje defgenérico ( x y )) ( defmethod push (( x ) ( y )) ( let (( blocks ( tower-blocks x ))) ( if ( o ( null? blocks ) ( < y ( car blocks ))) (( setter tower-blocks ) x ( cons y bloques )) ( error ón> ( fmt "no se puede empujar un bloque de tamaño ~ a en la torre ~ a" y x )))))( pop defgenérico ( x )) ( Defmethod pop (( x )) ( deje que (( bloques ( torre-bloques x ))) ( si se bloquea ( progn (( setter torre-bloques ) x ( CDR bloques )) ( automóviles bloques )) ( error < condición> ( fmt "no se puede sacar el bloque de la torre vacía ~ a" x )))));;; ----------------------------------------------- - ;;; Mueve n bloques de la torre x1 a la torre x2 usando x3 como búfer ;;; ---------------------------------- --------------- ( movimiento defgenérico ( n x1 x2 x3 )) ( defmethod move (( n ) ( x1 ) ( x2 ) ( x3 )) ( if ( = n 1 ) ( progn ( push x2 ( pop x1 )) ( print x1 nl x2 nl x3 nl nl )) ( progn ( mover ( - n 1 ) x1 x3 x2 ) ( mover 1 x1 x2 x3 ) ( mover ( - n 1 ) x3 x2 x1 ))));;; ----------------------------------------------- - ;;; Inicializar y ejecutar las 'Torres de Hanoi' ;;; -------------------------------------- ----------- ( defun hanoi () ( let (( x1 ( make id: 0 )) ( x2 ( make id: 1 )) ( x3 ( make id: 2 ))) ( build-tower x1 * max-tower-height * ) ( build-tower x2 0 ) ( build-tower x3 0 ) ( print x1 nl x2 nl x3 nl nl ) ( move * max-tower- altura * x1 x2 x3 )))( hanoi );;; ----------------------------------------------- - ) ;; Fin del módulo hanoi ;;; ------------------------------------------- ------
Referencias
- ^ "Eulisp" (PDF) . GitHub .
- ^ a b c "Eulisp" . GitHub .
- ^ Amable, Andreas. "Tú también" . Facultad de Ciencias Matemáticas. Universidad de Bath . Inglaterra . Consultado el 28 de octubre de 2018 .
- "Una visión general de EuLisp" , Julian Padget, Greg Nuyens y Harry Bretthauer, editores. Lisp and Symbolic Computation , Volumen 6, Número 1-2, 1993, páginas 9–98.
- "Equilibrio del protocolo de metaobjetos EuLisp" , Harry Bretthauer, Jürgen Kopp, Harley Davis y Keith Playford. Lisp and Symbolic Computation , volumen 6, número 1-2, agosto de 1993, páginas 119-138.
- "EuLisp in Education" , R. Bradford y DC DeRoure. Lisp and Symbolic Computation , Volumen 6, Número 1-2, páginas 99-118.
- "Aplicaciones de Telos" , Peter Broadbery, Christopher Burdorf. Lisp and Symbolic Computation , volumen 6, número 1-2, agosto de 1993, páginas 139-158.
- "Un enfoque práctico de la inferencia de tipos para EuLisp" , Andreas Kind y Horst Friedrich. Lisp and Symbolic Computation , volumen 6, número 1-2, agosto de 1993, páginas 159-176.
- "EuLisp Threads: una caja de herramientas de simultaneidad" , Neil Berrington, Peter Broadbery, David DeRoure y Julian Padget. Lisp and Symbolic Computation , volumen 6, número 1–2, agosto de 1993, páginas 177–200.
- "EuLisp plural: un modelo paralelo de datos simbólicos primitivos" , Simon Merrall, Julian Padget. Lisp and Symbolic Computation , volumen 6, número 1-2, agosto de 1993, páginas 201-219.
- "Un recolector de basura conservador para un compilador de EuLisp a ASM / C" , E. Ulrich Kriegel. Taller de OOPSLA'93 sobre recolección de basura y gestión de la memoria , Washington, DC, 27 de septiembre de 1993.
- "Una implementación de Telos en Common Lisp" , Object Oriented Systems , vol. 3, págs. 31-49, 1996. ISSN 0969-9767.
enlaces externos
- Preguntas frecuentes y enlaces de EuLisp
- Versión .99 de la especificación final de 1993 - ( PDF )
- Versión .991 borrador de definición no oficial actualizado (2010) - ( PDF )
- Fuentes de EuScheme
- EuLisp en GitHub , últimas versiones de: EuLisp (con soporte de 64 bits y más), EuXLisp, Eu2C