EuLisp
Парадигма | мультипарадигмальность : функциональная , процедурная , мета , объектно-ориентированная. |
---|---|
Семья | Лисп |
Впервые появился | 1990 год |
Предварительный выпуск | 0.991 [1]
/ 2010 |
Дисциплина набора текста | сильный , динамичный |
Объем | статический и динамический |
ТЫ | Линукс |
Расширения имен файлов | .в |
Основные реализации | |
EuXLisp, [2] Ты тоже, [2] Eu2C [2] | |
Под влиянием | |
Common Lisp , InterLisp , LeLisp , Lisp/VM, Scheme , T , CLOS , ObjVlisp , Oaklisp , MicroCeyx, MCS, Standard ML , Haskell | |
Под влиянием | |
Дилан , ИСЛИСП , Эвелин |
EuLisp со статической и динамической областью действия, — это диалект Лиспа разработанный группой промышленных и академических пользователей и разработчиков Lisp со всей Европы. Стандартизаторы , намеревались создать новый Lisp, «менее обремененный прошлым» (по сравнению с Common Lisp ), и не такой минималистичный как Scheme . Другая цель заключалась в хорошей интеграции парадигмы объектно-ориентированного программирования . Это язык программирования третьего поколения .
Происхождение [ править ]
Процесс определения языка впервые начался на встрече в 1985 году в Париже и занял несколько лет. Полная спецификация и первая реализация ( только интерпретация ) были доступны в 1990 году.
1958 | 1960 | 1965 | 1970 | 1975 | 1980 | 1985 | 1990 | 1995 | 2000 | 2005 | 2010 | 2015 | 2020 | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ЛИСП 1, 1.5, ЛИСП 2 (заброшенный) | |||||||||||||||
Маклисп | |||||||||||||||
Интерлисп | |||||||||||||||
леев | |||||||||||||||
Лисп-машина Лисп | |||||||||||||||
Схема | Р5РС | Р6РС | R7RS маленький | ||||||||||||
НОЛЬ | |||||||||||||||
ЗИЛ (язык реализации Zork) | |||||||||||||||
Франц Лисп | |||||||||||||||
Общий Лисп | стандарт ANSI | ||||||||||||||
Лисп | |||||||||||||||
Схема СО | |||||||||||||||
XLISP | |||||||||||||||
Т | |||||||||||||||
На схеме | |||||||||||||||
Эмакс Лисп | |||||||||||||||
АвтоЛИСП | |||||||||||||||
ПикоЛисп | |||||||||||||||
Гамбит | |||||||||||||||
EuLisp | |||||||||||||||
ИСЛИСП | |||||||||||||||
ОпенЛисп | |||||||||||||||
Схема PLT | Ракетка | ||||||||||||||
новыйLISP | |||||||||||||||
GNU Коварство | |||||||||||||||
Визуальный ЛИСП | |||||||||||||||
Кложур | |||||||||||||||
Дуга | |||||||||||||||
ЛФЭ | |||||||||||||||
Он | |||||||||||||||
Хиалисп |
Отличительные особенности [ править ]
Его основные черты заключаются в том, что это Lisp-1 (без отдельных пространств имен функций и переменных), имеет Common Lisp Object System объектно-ориентированную систему типа общей функции в стиле (CLOS) под названием The EuLisp Object System (TELOS), интегрированную с нуля. up, имеет встроенную систему модулей и определяется по уровням, чтобы способствовать использованию Lisp на небольшом встроенном оборудовании и образовательных машинах. Он поддерживает продолжения , хотя и не так эффективно, как Scheme . Он имеет простой и легкий механизм обработки ( потоки ).
Резюме [ править ]
- Определение на уровнях, в настоящее время уровень 0 и уровень 1.
- Модули, основанные на (непервоклассных ) лексических средах .
- Лексически ограниченная область действия , с динамической или поздней привязкой, доступной на уровне 1.
- Единое пространство имен для имен функций и переменных (например, Scheme ).
- Легковесные процессы.
- Полностью интегрированная объектная система с одинарным наследованием на уровне 0 и множественным наследованием и протоколом метаобъектов на уровне 1.
- Объектно -ориентированная система условий .
Реализации [ править ]
Ранней реализацией EuLisp была Free и Sustainable Eulisp (FEEL). Преемником FEEL стал Youtoo (интерпретированные и скомпилированные версии), разработанный Университетом Бата в Соединенном Королевстве . [3] Интерпретатор базового уровня EuLisp, level-0 , был написан Расселом Брэдфордом в XScheme, реализации Scheme Дэвида Майкла Бетца, первоначально называвшейся EuScheme EuScheme , но самая последняя версия переименована в EuXLisp [1] , чтобы избежать путаницы. Также Eu2C [2] — оптимизирующий компилятор EuLisp — был создан Fraunhofer ISST в рамках проекта APPLY в Германии [3] .
Был разработан диалект EuLisp, названный Plural EuLisp. Это был EuLisp с расширениями программирования параллельных вычислений .
Пример [ править ]
Пример использования классов в алгоритме для решения задачи « Ханойские башни ».
(defmodule hanoi
(syntax (syntax-0)
import (level-0)
export (hanoi))
;;;-------------------------------------------------
;;; Tower definition
;;;-------------------------------------------------
(defconstant *max-tower-height* 10)
(defclass <tower> ()
((id reader: tower-id keyword: id:)
(blocks accessor: tower-blocks)))
(defun build-tower (x n)
(labels ((loop (i res)
(if (= i 0) res
(loop (- i 1) (cons i res)))))
((setter tower-blocks) x (loop n ()))
x))
(defmethod generic-print ((x <tower>) (s <stream>))
(sformat s "#<tower ~a: ~a>" (tower-id x) (tower-blocks x)))
;;;-------------------------------------------------
;;; Access to tower blocks
;;;-------------------------------------------------
(defgeneric push (x y))
(defmethod push ((x <tower>) (y <fpi>))
(let ((blocks (tower-blocks x)))
(if (or (null? blocks) (< y (car blocks)))
((setter tower-blocks) x (cons y blocks))
(error <condition>
(fmt "cannot push block of size ~a on tower ~a" y x)))))
(defgeneric pop (x))
(defmethod pop ((x <tower>))
(let ((blocks (tower-blocks x)))
(if blocks
(progn
((setter tower-blocks) x (cdr blocks))
(car blocks))
(error <condition>
(fmt "cannot pop block from empty tower ~a" x)))))
;;;-------------------------------------------------
;;; Move n blocks from tower x1 to tower x2 using x3 as buffer
;;;-------------------------------------------------
(defgeneric move (n x1 x2 x3))
(defmethod move ((n <fpi>) (x1 <tower>) (x2 <tower>) (x3 <tower>))
(if (= n 1)
(progn
(push x2 (pop x1))
(print x1 nl x2 nl x3 nl nl))
(progn
(move (- n 1) x1 x3 x2)
(move 1 x1 x2 x3)
(move (- n 1) x3 x2 x1))))
;;;-------------------------------------------------
;;; Initialize and run the 'Towers of Hanoi'
;;;-------------------------------------------------
(defun hanoi ()
(let ((x1 (make <tower> id: 0))
(x2 (make <tower> id: 1))
(x3 (make <tower> 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-height* x1 x2 x3)))
(hanoi)
;;;-------------------------------------------------
) ;; End of module hanoi
;;;-------------------------------------------------
Ссылки [ править ]
- «Обзор EuLisp» , Джулиан Пэджет, Грег Найенс и Гарри Бреттауэр, редакторы. LISP и символьные вычисления , том 6, номера 1–2, 1993, страницы 9–98.
- «Балансировка метаобъектного протокола EuLisp» , Гарри Бреттауэр, Юрген Копп, Харли Дэвис и Кейт Плейфорд. LISP и символические вычисления , том 6, выпуск 1–2, август 1993 г., страницы 119–138.
- «EuLisp в образовании» , Р. Брэдфорд и Д.С. ДеРур. LISP и символьные вычисления , том 6, номера 1–2, страницы 99–118.
- «Применение Телоса» , Питер Бродбери, Кристофер Бурдорф. LISP и символические вычисления , том 6, выпуск 1–2, август 1993 г., страницы 139–158.
- «Практический подход к выводу типов для EuLisp» , Андреас Кайнд и Хорст Фридрих. LISP и символьные вычисления , том 6, выпуск 1–2, август 1993 г., страницы 159–176.
- «Потоки EuLisp: набор инструментов для параллелизма» , Нил Беррингтон, Питер Бродбери, Дэвид ДеРур и Джулиан Пэджет. LISP и символьные вычисления , том 6, выпуск 1–2, август 1993 г., страницы 177–200.
- «Множественное число EuLisp: примитивная символическая модель параллельных данных» , Саймон Мерролл, Джулиан Пэджет. LISP и символические вычисления , том 6, выпуск 1–2, август 1993 г., страницы 201–219.
- «Консервативный сборщик мусора для компилятора EuLisp в ASM/C» , Э. Ульрих Кригель. Семинар OOPSLA'93 по сбору мусора и управлению памятью , Вашингтон, округ Колумбия, 27 сентября 1993 г.
- «Реализация Telos в Common Lisp». Архивировано 14 февраля 2006 г. в Wayback Machine , Object Oriented Systems , vol. 3, стр. 31–49, 1996. ISSN 0969-9767.
Внешние ссылки [ править ]
- Часто задаваемые вопросы по EuLisp и ссылки
- Версия .99 окончательной спецификации 1993 года – ( PDF )
- Версия .991. Архивировано 6 марта 2012 г. на сайте Wayback Machine, неофициальный обновленный проект определения (2010 г.) - ( PDF )
- EuScheme Исходники
- EuLisp на GitHub , последние версии: EuLisp (с поддержкой 64-бит и более), EuXLisp, Eu2C.