Меню
Главная
Случайная статья
Настройки
|
NewLISP— диалект лиспа, созданный в качестве скриптового языка.
Содержание
Особенности
Реализацию newLisp отличает легковесность, а сам язык — простота изучения[2].
В состав дистрибутива newLISP входит простая среда программирования[3], в которой под областью редактирования исходного текста находится окно эмулятора терминала, где можно видеть результаты выполнения лисп-программы (см. REPL)[4].
В языке поддерживается псевдообъектно-ориентированное программирование в форме FOOP (функционально-объектного программирования)[5].
Язык поставляется в комплекте со средствами программирования GUI[6].
В NewLISP встроены средства веб-программирования (Httpd и CGI[7][7]), а также работы с такими сетевыми протоколами, как TCP/IP[7] или UDP[7][8].
В сравнение с другими диалектами
NewLISP имеет ряд особенностей, отличающих его от Common Lisp[9] и других диалектов лиспа, как в синтаксисе, так и в семантике[10]. Например, традиционные имена стандартных функций для работы со списками car и cdr заменены на first и rest , как в T-Lisp. Несколько отличаются детали поведения функций cons и last . Списки являются индексируемыми, можно получить i-й элемент списка myList, считая с нуля, с помощью выражения (myList i). [11]
В ряде особенностей newLISP похож на Scheme. Как и в Scheme, в newLisp принято энергичное вычисление передаваемых параметров функции. Для переменных, примитивов и определяемых пользователем символов тут так же используется единое пространство имён[11].
Значимое отличие newLisp состоит в том, что по умолчанию в нём используется динамическая область видимости переменных. Если нужна лексическая (статическая) область видимости, это достигается через механизм т. н. контекстов[11].
История
Немецкий учёный-компьютерщик Лутц Мюллер разработал NewLisp как простой в изучении диалект лиспа[12]. В отличие от традиционных версий лиспа, newLISP проектировался как скриптовый язык. Автор ссылается[10] на статью «In Praise of Scripting: Real Programming Pragmatism»[13], которая была написана в рамках дискуссии, вызванной статьёй разработчика Tcl Джона Аустерхаута «Сценарии: высокоуровневое программирование для XXI века»[14].
Язык был впервые реализован на рабочей станции Sun4 в 1991 г.[15] В 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 год[16].
Версия
|
Год
|
Основные изменения
|
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[англ.]
|
10.5
|
2013
|
Целочисленная арифметика неограниченной точности
|
10.5.2
|
2013
|
KMEANS кластерный анализ
|
10.5.7
|
2014
|
Компиляция в достаточно быстродействующий JavaScript, исполняемый на стороне браузера
|
10.6.0
|
2014
|
Нативное раскрытие макрофункций
|
Применение
Для веб-программирования c использованием newLisp может использоваться веб-фреймворк newLISP on Rockets[17][18], использующий на стороне браузера Bootstrap и jQuery и сохраняющий данные в SQLite[8]. На создание этого фреймворка автора вдохновил[19] более ранний фреймворк — Dragonfly[20][21].
На базе NewLisp реализован FuzzyLisp[22], библиотека для работы с нечёткой логикой[23].
Примечания
- http://www.newlisp.org/downloads/newLISP-10.7.5-Release.html
- Смедли, 2014.
- В операционных системах linux-семейства запускается командой
newlisp-edit
- Mendez, 2015, 1.5
A Quick Start Using NewLisp, pp. 8—13.
- Смедли, 2015, с. 25.
- Mendez, 2015, 4.2.4
Building a Simple User Interface, pp. 102—104.
- 1 2 3 4 Lutz Mueller. newLISP Code Patterns. §13. UDP communications (неопр.). www.newlisp.org. Дата обращения: 30 мая 2016. Архивировано 29 июля 2016 года.
- 1 2 Смедли, 2015, с. 24.
- Mendez, 2015, Appendix A. NewLisp Versus Common Lisp, pp. 347—352.
- 1 2 newLISP - Differences to Other LISPs (неопр.). www.newlisp.org. Дата обращения: 30 мая 2016. Архивировано 6 апреля 2022 года.
- 1 2 3 Lazar, 2009, newLISP: the language.
- Mendez, 2015, 1.4
The NewLisp Implementation, p. 7.
- Ronald P. Loui. In Praise of Scripting: Real Programming Pragmatism // Computer. — 2008. — Июнь (т. 41, № 7). — С. 22—26. — doi:10.1109/MC.2008.228. Архивировано 23 сентября 2015 года.
- Остераут, 1998.
- Смедли, 2015, с. 22.
- Lutz Mueller. Programming Language Projects. NewLISP. newLISP History (неопр.). www.donlucio.net. Дата обращения: 30 мая 2016. Архивировано 12 апреля 2016 года.
- The newLISP on Rockets Blog (неопр.). newlisponrockets.com. Дата обращения: 29 мая 2016. Архивировано 10 апреля 2016 года.
- Проект newLISP-on-Rockets на сайте GitHub
- Rocket Man. Converting other newLISP code to Rockets. Post #: 85 (неопр.). newlisponrockets.com (21 февраля 2013). Дата обращения: 30 мая 2016. Архивировано 21 марта 2016 года.
- Marc Hildmann, Greg Slepak. Welcome - Dragonfly web framework (неопр.). dragonfly.apptruck.de. Дата обращения: 30 мая 2016. Архивировано 3 марта 2016 года.
- Проект Dragonfly на сайте GitHub
- Luis Argelles. FuzzyLisp (неопр.). www.fuzzylisp.com. Дата обращения: 29 мая 2016. Архивировано 6 августа 2016 года.
- Mendez, 2015.
Литература
Ссылки
|
|