newLISP

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис
(перенаправлено с «NewLisp»)

newLISP
Класс языка Мультипарадигмальный язык программирования
Появился в 1991
Автор Lutz Müller
Разработчик Lutz Müller
Испытал влияние Common Lisp, Scheme
Лицензия GNU General Public License
Сайт newlisp.org

NewLISP— диалект лиспа, созданный в качестве скриптового языка.

Особенности

newLISP (v.10.7.0) editor

Реализацию newLisp отличает легковесность, а сам язык — простота изучения[1].

В состав дистрибутива newLISP входит простая среда программирования[2], в которой под областью редактирования исходного текста находится окно эмулятора терминала, где можно видеть результаты выполнения лисп-программы (см. REPL)[3].

В языке поддерживается псевдообъектно-ориентированное программирование в форме FOOP (функционально-объектного программирования)[4].

Язык поставляется в комплекте со средствами программирования GUI[5].

В NewLISP встроены средства веб-программирования (Httpd и CGI[6][6]), а также работы с такими сетевыми протоколами, как TCP/IP[6] или UDP[6][7].

В сравнение с другими диалектами

NewLISP имеет ряд особенностей, отличающих его от Common Lisp[8] и других диалектов лиспа, как в синтаксисе, так и в семантике[9]. Например, традиционные имена стандартных функций для работы со списками car и cdr заменены на first и rest, как в T-Lisp. Несколько отличаются детали поведения функций cons и last. Списки являются индексируемыми, можно получить i-й элемент списка myList, считая с нуля, с помощью выражения (myList i).[10]

В ряде особенностей newLISP похож на Scheme. Как и в Scheme, в newLisp принято энергичное вычисление передаваемых параметров функции. Для переменных, примитивов и определяемых пользователем символов тут так же используется единое пространство имён[10].

Значимое отличие newLisp состоит в том, что по умолчанию в нём используется динамическая область видимости переменных. Если нужна лексическая (статическая) область видимости, это достигается через механизм т. н. контекстов[10].

История

Немецкий учёный-компьютерщик Лутц Мюллер разработал NewLisp как простой в изучении диалект лиспа[11]. В отличие от традиционных версий лиспа, newLISP проектировался как скриптовый язык. Автор ссылается[9] на статью «In Praise of Scripting: Real Programming Pragmatism»[12], которая была написана в рамках дискуссии, вызванной статьёй разработчика Tcl Джона Остераута «Сценарии: высокоуровневое программирование для XXI века»[13].

Язык был впервые реализован на рабочей станции Sun4 в 1991 г.[14] В 1993 году он был перенесён на шестнадцатиразрядную Windows 3.0, а в 1995 — на тридцатидвухразрядную Windows 95. В апреле 1999 года NewLISP был портирован на Linux и открыт под свободной лицензией. Весь код, специфичный для Windows был удалён, и, начиная с версии 6.0.25, поддержка этой операционной системы была прекращена. В 2001 году работа под Windows становится возможной благодаря Cygwin, вначале win-версия работала только в консоли, но в версии 6.3 с использованием Tcl/Tk был реализован кроссоплатформенный графический интерфейс пользователя newLISP-tk. В 2007 году была разработана GUI-библиотека newLISP-GS на базе Java, в настоящее время являющаяся основной реализацией графического интерфейса для newLISP. Ниже дана хронология ключевых изменений с 1990 по 2014 год[15].

Версия Год Основные изменения
1.0 1990 Первая версия, работала на Sun-4 под управлением SunOS/BSD 4.1
1.3 1993 Перенос на Windows 3.0
3.0 1995 Перенос на Windows 95
6.0 1999 Open source (GPL) версия для Unix/Linux
6.3 1999 newLISP-tk Tcl/Tk IDE
6.5.8 2002 Регулярные выражения PCRE
7.1-4 2003 Поддержка MacOS X и Solaris, PDF-руководство, catch и throw, контекстные переменные, Win32 DLL
8.0-3 2004 Массивы, поддержка UTF-8, запуск (fork) процессов, семафоры, разделяемая память, функция по умолчанию
8.4-7 2005 Неявная индексация массивов, поддержка локалей с разделением чисел запятыми, сигналы и таймеры, распределённые вычисления посредством net-eval
8.8-9 2006 Унификация в стиле Пролога, раскрытие переменных в стиле макросов, доработка поддержки неявного индексирования
9.0 2006 Поддержка 64-разрядной арифметики и обращения к файлам, дополнительные функции работы с массивами, режим HTTP сервера
9.1 2007 Компиляция для 64-разряднвх платформ, режим HTTP/CGI сервера, функторы в ref, ref-all, find, replace
9.2 2007 newLISP-GS — корссплатформенная GUI-библиотека для разработки пользовательских интерфейсов на newLISP
9.3 2008 FOOP — Функционально-Объектно-Ориентированное Программирование
9.4 2008 Cilk — API параллельного программирования для newLISP
10.0 2009 Общая очистка API, передача по ссылкам, новое унифицированное деструктивное API с использованием setf
10.1 2009 API взаимодействия между акторами на Mac OS X, Linux и других UNIX
10.2 2010 FOOP переделано на использование изменяемых (мутабельных) объектами
10.3 2011 Возможность переключать интернет протокол между IPv4 и IPv6
10.4 2012 Переписан интерфейс очереди сообщений и расширено API импорта с использованием libffi[en]
10.5 2013 Целочисленная арифметика неограниченной точности
10.5.2 2013 KMEANS кластерный анализ
10.5.7 2014 Компиляция в достаточно быстродействующий JavaScript, исполняемый на стороне браузера
10.6.0 2014 Нативное раскрытие макрофункций

Применение

Для веб-программирования c использованием newLisp может использоваться веб-фреймворк newLISP on Rockets[16][17], использующий на стороне браузера Bootstrap и jQuery и сохраняющий данные в SQLite[7]. На создание этого фреймворка автора вдохновил[18] более ранний фреймворк — Dragonfly[19][20].

На базе NewLisp реализован FuzzyLisp[21], библиотека для работы с нечёткой логикой[22].

Примечания

  1. Смедли, 2014.
  2. В операционных системах linux-семейства запускается командой newlisp-edit
  3. Mendez, 2015, 1.5 A Quick Start Using NewLisp, pp. 8—13.
  4. Смедли, 2015, с. 25.
  5. Mendez, 2015, 4.2.4 Building a Simple User Interface, pp. 102—104.
  6. 6,0 6,1 6,2 6,3 Lutz Mueller. newLISP Code Patterns. §13. UDP communications. www.newlisp.org. Дата обращения: 30 мая 2016. Архивировано 29 июля 2016 года.
  7. 7,0 7,1 Смедли, 2015, с. 24.
  8. Mendez, 2015, Appendix A. NewLisp Versus Common Lisp, pp. 347—352.
  9. 9,0 9,1 newLISP - Differences to Other LISPs. www.newlisp.org. Дата обращения: 30 мая 2016. Архивировано 6 апреля 2022 года.
  10. 10,0 10,1 10,2 Lazar, 2009, newLISP: the language.
  11. Mendez, 2015, 1.4 The NewLisp Implementation, p. 7.
  12. Ronald P. Loui. In Praise of Scripting: Real Programming Pragmatism // Computer. — 2008. — Июнь (т. 41, № 7). — С. 22—26. — doi:10.1109/MC.2008.228. Архивировано 23 сентября 2015 года.
  13. Остераут, 1998.
  14. Смедли, 2015, с. 22.
  15. Lutz Mueller. Programming Language Projects. NewLISP. newLISP History. www.donlucio.net. Дата обращения: 30 мая 2016. Архивировано 12 апреля 2016 года.
  16. The newLISP on Rockets Blog. newlisponrockets.com. Дата обращения: 29 мая 2016. Архивировано 10 апреля 2016 года.
  17. Проект newLISP-on-Rockets на сайте GitHub
  18. Rocket Man. Converting other newLISP code to Rockets. Post #: 85. newlisponrockets.com (21 февраля 2013). Дата обращения: 30 мая 2016. Архивировано 21 марта 2016 года.
  19. Marc Hildmann, Greg Slepak. Welcome - Dragonfly web framework. dragonfly.apptruck.de. Дата обращения: 30 мая 2016. Архивировано 3 марта 2016 года.
  20. Проект Dragonfly на сайте GitHub
  21. Luis Argüelles. FuzzyLisp. www.fuzzylisp.com. Дата обращения: 29 мая 2016. Архивировано 6 августа 2016 года.
  22. Mendez, 2015.

Литература

Ссылки