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

Особенности

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

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

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

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

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

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

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

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

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

Язык был впервые реализован на рабочей станции Sun4 в 1991 г. В 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 год. ВерсияГодОсновные изменения1.01990Первая версия, работала на Sun-4 под управлением SunOS/BSD 4.11.31993Перенос на Windows 3.03.01995Перенос на Windows 956.01999Open source (GPL) версия для Unix/Linux6.31999newLISP-tk Tcl/Tk IDE6.5.82002Регулярные выражения PCRE7.1-42003Поддержка MacOS X и Solaris, PDF-руководство, catch и throw, контекстные переменные, Win32 DLL8.0-32004Массивы, поддержка UTF-8, запуск (fork) процессов, семафоры, разделяемая память, функция по умолчанию8.4-72005Неявная индексация массивов, поддержка локалей с разделением чисел запятыми, сигналы и таймеры, распределённые вычисления посредством net-eval8.8-92006Унификация в стиле Пролога, раскрытие переменных в стиле макросов, доработка поддержки неявного индексирования9.02006Поддержка 64-разрядной арифметики и обращения к файлам, дополнительные функции работы с массивами, режим HTTP сервера9.12007Компиляция для 64-разрядных платформ, режим HTTP/CGI сервера, функторы в ref, ref-all, find, replace9.22007newLISP-GS — корссплатформенная GUI-библиотека для разработки пользовательских интерфейсов на newLISP9.32008FOOP — Функционально-Объектно-Ориентированное Программирование9.42008Cilk — API параллельного программирования для newLISP10.02009Общая очистка API, передача по ссылкам, новое унифицированное деструктивное API с использованием setf10.12009API взаимодействия между акторами на Mac OS X, Linux и других UNIX10.22010FOOP переделано на использование изменяемых (мутабельных) объектами10.32011Возможность переключать интернет протокол между IPv4 и IPv610.42012Переписан интерфейс очереди сообщений и расширено API импорта с использованием libffi10.52013Целочисленная арифметика неограниченной точности10.5.22013KMEANS кластерный анализ10.5.72014Компиляция в достаточно быстродействующий JavaScript, исполняемый на стороне браузера10.6.02014Нативное раскрытие макрофункций

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

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

Примечания

Литература

Ссылки

Introduction to newLISP, Викиучебник

Категория:Языки с динамической типизацией Категория:Функциональные языки программирования Категория:Языки программирования семейства Лиспа Категория:Скриптовые языки