newLISP — язык сценариев , который является диалектом семейства языков программирования Lisp . Его спроектировал и разработал Лутц Мюллер. [2] Из-за небольших требований к ресурсам newLISP отлично подходит для приложений встраиваемых систем. Большинство функций, которые вам когда-либо понадобятся, уже встроены. Сюда входят сетевые функции, поддержка распределенной и многоядерной обработки, а также байесовская статистика. newLISP — это бесплатное программное обеспечение с открытым исходным кодом, выпущенное под лицензией GNU General Public License версии 3 или более поздней.
На дизайн newLISP влияют два основных диалекта Lisp , Common Lisp и Scheme , а также другие языки, такие как Pascal и C. [ нужна цитация ] newLISP возник в 1991 году и первоначально был разработан на рабочей станции Sun-4 . [3] Позже он перешел на Windows 3.0 , где версия 1.3 была выпущена на CompuServe примерно в 1993 году, а затем стала доступна как приложение с графическим интерфейсом пользователя Windows (GUI) и консольное приложение DOS (оба 16-битные ). В 1995 году с выходом Windows 95 newLISP перешёл на 32-битную версию .
В апреле 1999 года newLISP был портирован на Linux ; некоторые из его основных алгоритмов были переписаны , а весь код, специфичный для Windows, удален. newLISP был выпущен как проект программного обеспечения с открытым исходным кодом под лицензией GPL , а разработка для Windows прекратилась после версии 6.0.25. В первой половине 2001 года newLISP был перенесен обратно в Windows на платформу Cygwin без графических возможностей. Во второй половине 2001 года был выпущен кроссплатформенный интерфейс Tcl / Tk под названием newLISP-tk версии 6.3.0. В 2006 году в версии 9.0 для целочисленной арифметики и некоторых операций с файлами была введена 64-битная точность.
С момента выпуска версии 6.5 в середине 2002 года разработка велась очень активно, и было добавлено множество новых функций. [4]
newLISP пытается предоставить быструю, мощную, кросс-платформенную , полнофункциональную скриптовую версию языка Lisp, используя при этом лишь скромные системные ресурсы, такие как хранилище данных (например, дисковое пространство) и память . [5] [6]
Он предоставляет такие функции Lisp, как списки, обработку символов, отображение функций, анонимные функции (лямбда-выражения), s-выражения (исключая неправильные списки) и макросы. Он также предоставляет функции, ожидаемые от современного языка сценариев, включая поддержку регулярных выражений , XML , Unicode ( UTF-8 ), работу в сети через протокол управления передачей (TCP), Интернет-протокол (IP) и протокол пользовательских дейтаграмм (UDP), матрицу . и обработка массивов , высшая математика, статистика и байесовский статистический анализ, математические финансы и распределенные вычисления.
newLISP работает в операционных системах Berkeley Software Distribution (BSD), Linux , macOS , Solaris и Windows . [1] Он поддерживает доступ к базам данных MYSQL , SQLite и ODBC , общий интерфейс шлюза (CGI), простой протокол передачи почты (SMTP), протокол почтового отделения (POP) 3, протокол передачи файлов (FTP) и вызов удаленных процедур XML ( XML- РПК ). Он может работать в режиме сервера как демон .
newLISP поддерживает пространства имен , называемые контекстами , которые можно присваивать переменным и передавать функциям , но которые связаны с глобально уникальными символами, что ограничивает их использование в качестве первоклассных граждан (объектов). В newLISP возможен объектно-ориентированный стиль программирования, основанный на прототипах , с использованием контекстов в качестве прототипов для создания объектов . Переменные внутри контекстов не мешают одноименным переменным в других контекстах, но внутри контекста переменные ведут себя согласно правилам динамической области видимости .
newLISP использует динамическую область видимости . Когда вызывается функция, эта функция может видеть все переменные вызывающего ее объекта, вызывающего абонента и т. д. в одном и том же контексте или пространстве имен . Он поддерживает как явно, так и неявно определенные локальные динамические переменные, которые затеняют переменные с тем же именем из внешней среды, тем самым предотвращая случайное использование или изменение переменных из среды вызывающего объекта. Переменные параметров вызываемой функции автоматически затеняют переменную среду вызывающего объекта. В глобальном масштабе переменные могут быть сгруппированы в отдельные пространства имен.
newLISP использует метод автоматического управления памятью , отличный от традиционных схем сборки мусора , называемый управлением памятью только с одной ссылкой (ORO). На каждую переменную ссылается только ее контекст, а на каждый контекст ссылаются глобально.
Совместное использование подобъектов между объектами , циклическими структурами или несколькими переменными, указывающими на один и тот же объект, не поддерживается в newLISP. Объекты копируются при сохранении в структурах данных или передаче функциям, за исключением некоторых встроенных функций. Исключением являются символы и контексты, которые передаются совместно, а не копируются, и поэтому могут использоваться для косвенного обращения. Символам и контекстам присваиваются глобальные имена, и они удаляются явно; удаление символа или контекста сканирует все остальные объекты и заменяет ссылки на них на nil
.
Сервер графического пользовательского интерфейса (GUI) newLISP (newLISP-GS) — это сервер набора протоколов Интернета (TCP/IP) на базе Java , обеспечивающий графический интерфейс программирования. Среда разработки на основе newLISP-GS включена в бинарные дистрибутивы newLISP, а также доступны программные интерфейсы на основе GTK-сервера , OpenGL и Tcl / Tk .
Любая новая версия LISP позволяет создавать исполняемые файлы, портативные приложения для развертывания, которые являются автономными и не требуют установки.
newLISP имеет функцию импорта, которая позволяет импортировать функции из библиотеки динамической компоновки (DLL) в Windows API Win32 или из общей библиотеки в Linux или Unix .
Веб-фреймворки , доступные для newLISP, включают Dragonfly [7] и Rockets. [8]