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

Реализацию 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[en] |
| 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].
newlisp-edit| Характеристики |
| ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Реализации |
| ||||||||||||||
| Аппаратное обеспечение |
| ||||||||||||||
| Сообщество |
| ||||||||||||||
| |||||||||||||||