Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

EuLisp - это диалект Lisp со статической и динамической областью видимости, разработанный группой промышленных и академических пользователей и разработчиков Lisp со всей Европы. В разработчиках стандартов предназначены для создания нового Lisp «менее обремененного прошлым» ( по сравнению с Common Lisp ), а не так минималистским , как на схему . Другой целью было хорошо интегрировать парадигму объектно-ориентированного программирования . Это язык программирования третьего поколения .

Происхождение [ править ]

Процесс определения языка впервые начался на встрече в 1985 году в Париже и занял несколько лет. Полная спецификация и первая реализация (только интерпретируемая ) были доступны в 1990 году.

Отличительные особенности [ править ]

Его основные черты заключаются в том, что он является Lisp-1 (без отдельных пространств имен функций и переменных), имеет объектно-ориентированную систему типа общих функций в стиле Common Lisp (CLOS) под названием The EuLisp Object System (TELOS), интегрированную с нуля. up, имеет встроенную модульную систему и определен по слоям, чтобы способствовать использованию Lisp на небольших встроенных аппаратных и образовательных машинах. Он поддерживает продолжения , хотя и не так мощно, как Scheme . Он имеет простой легкий механизм обработки ( потоки ).

Резюме [ править ]

  • Определение в уровнях, в настоящее время Уровень 0 и Уровень 1
  • Модули, основанные на (не первоклассных ) лексических средах.
  • Лексическая область видимости , с динамическим или поздним связыванием, доступным на уровне 1.
  • Единое пространство имен для имен функций и переменных (например, Scheme ).
  • Легкие процессы.
  • Полностью интегрированная объектная система с одиночным наследованием на уровне 0 и множественным наследованием и протоколом метаобъектов на уровне 1.
  • Объектно -ориентированная система условий .

Реализации [ править ]

Первой реализацией EuLisp была Free и в конечном итоге 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  ( синтаксис  ( синтаксис-0 )  импорт  ( уровень-0 )  экспорт  ( ханой ));;; ----------------------------------------------- - ;;; Определение башни ;;; --------------------------------------------- ---- ( defconstant  * max-tower-height *  10 )( DEFCLASS  <башня>  ()  (( идентификатор  читатель:  башня-ID  Ключевое слово:  ID: )  ( блоки  аксессоров:  башни-блоки )))( defun  build-tower  ( x  n )  ( labels  (( loop  ( i  res )  ( if  ( =  i  0 )  res  ( loop  ( -  i  1 )  ( cons  i  res )))))  (( setter  tower-блоки )  x  ( петля  n  ()))  x ))( defmethod  generic-print  (( x  <tower> )  ( s  <stream> ))  ( sformat  s  "# <tower ~ a: ~ a>"  ( tower-id  x )  ( башня-блоки  x )));;; ----------------------------------------------- - ;;; Доступ к многоэтажным домам ;;; ------------------------------------------- ------ ( defgeneric  push  ( x  y ))( defmethod  push  (( x  <башня> )  ( y  <fpi> ))  ( let  (( блоки  ( блоки  x )))  ( if  ( или  ( null?  блоки )  ( <  y  ( блоки автомобилей  ))) (( setter tower-blocks ) x ( cons y блоки )) ( error <condition> ( fmt "cannot push block of size ~ a on tower ~ a"           у  х )))))( Defgeneric  pop  ( x ))( DEFMETHOD  поп  (( х  <башня> ))  ( пусть  (( блоки  ( башни-блоки  х )))  ( если  блоки  ( progn  (( инкубационных  башни-блоки )  х  ( CDR  блоки ))  ( автомобильные  блоки ))  ( ошибка  < condition>  ( fmt  "не может вытолкнуть блок из пустой башни ~ a"  x )))));;; ----------------------------------------------- - ;;; Переместите n блоков из башни x1 в башню x2, используя x3 в качестве буфера ;;; ---------------------------------- --------------- ( стандартный  ход  ( 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  ( перемещение  ( -  n  1 )  x1  x3 x2 )  ( перемещение  1  x1  x2  x3 )  ( перемещение  ( -  n  1 )  x3  x2  x1 ))));;; ----------------------------------------------- - ;;; Инициализировать и запустить «Ханойские башни» ;;; -------------------------------------- ----------- ( defun  hanoi  ()  ( let  (( x1  ( make  <tower>  id:  0 ))  ( x2  ( make  <tower>  id:  1 ))  ( x3  ( make  <tower>  id:  2 )))  ( строить башню  x1  * максимальная высота башни * )  ( строить башню  x2  0 )  (build-tower  x3  0 )  ( print  x1  nl  x2  nl  x3  nl  nl )  ( move  * max-tower-height *  x1  x2  x3 ))))( ханой );;; ----------------------------------------------- - )  ;; Конец модуля ханой ;;; ------------------------------------------- ------

Ссылки [ править ]

  1. ^ "Eulisp" (PDF) . GitHub .
  2. ^ a b c "Эулисп" . GitHub .
  3. ^ Добрый, Андреас. "Youtoo" . Школа математических наук. Университет Бата . Англия . Проверено 28 октября 2018 .
  • "Обзор EuLisp" , редакторы Джулиан Пэджет, Грег Нуйенс и Гарри Бреттауэр. Лисп и символьные вычисления , Том 6, номер 1-2, 1993, страницы 9–98.
  • «Балансировка протокола метаобъектов EuLisp» , Гарри Бреттауэр, Юрген Копп, Харли Дэвис и Кейт Плейфорд. Лисп и символьные вычисления , том 6, выпуск 1-2, август 1993 г., страницы 119–138.
  • «EuLisp в образовании» , Р. Брэдфорд и Д.К. ДеРур. Лисп и символьные вычисления , Том 6, номер 1-2, страницы 99–118.
  • «Приложения Телоса» , Питер Бродбери, Кристофер Бурдорф. Лисп и символьные вычисления , том 6, выпуск 1-2, август 1993 г., страницы 139–158.
  • «Практический подход к выводу типов для EuLisp» , Андреас Кинд и Хорст Фридрих. Лисп и символьные вычисления , том 6, выпуск 1-2, август 1993 г., страницы 159–176.
  • «Потоки EuLisp: набор инструментов для параллелизма» , Нил Беррингтон, Питер Бродбери, Дэвид ДеРур и Джулиан Пэджет. Лисп и символьные вычисления , том 6, выпуск 1-2, август 1993 г., страницы 177–200.
  • "Множественный EuLisp: примитивная символьная параллельная модель данных" , Саймон Мерралл, Джулиан Пэджет. Лисп и символьные вычисления , том 6, выпуск 1-2, август 1993 г., страницы 201–219.
  • «Консервативный сборщик мусора для компилятора EuLisp в ASM / C» , Э. Ульрих Кригель. Семинар OOPSLA'93 по сбору мусора и управлению памятью , Вашингтон, округ Колумбия, 27 сентября 1993 г.
  • "Реализация Telos в Common Lisp" , Объектно-ориентированные системы , т. 3. С. 31–49, 1996. ISSN 0969-9767.

Внешние ссылки [ править ]

  • EuLisp FAQ и ссылки
  • Версия .99 окончательной спецификации 1993 г. - ( PDF )
  • Версия .991 неофициальный обновленный черновой вариант определения (2010) - ( PDF )
  • Источники EuScheme
  • EuLisp на GitHub , последние версии: EuLisp (с поддержкой 64-битных и др.), EuXLisp, Eu2C