Семья | Лисп |
---|---|
Разработано | Дэвид Бец |
Разработчики | Autodesk , Базовое программное обеспечение |
Впервые появился | Январь 1986 г ( 1986-01 ) |
Стабильный релиз | 13 / Февраль 1995 ( 1995-02 ) |
Дисциплина печати | динамический |
Объем | динамический |
Платформа | ИА-32 |
ОС | линукс |
Диалекты | |
Vital-LISP, визуальный LISP | |
Под влиянием | |
Лисп , XLISP |
AutoLISP — это диалект языка программирования Lisp, созданный специально для использования с полной версией AutoCAD и его производными, включая AutoCAD Civil 3D , AutoCAD Map 3D , AutoCAD Architecture и AutoCAD Mechanical . [1] Ни интерфейс прикладного программирования (API), ни интерпретатор для выполнения кода AutoLISP не включены в линейку продуктов AutoCAD LT (до версии 2023 AutoCAD LT 2024 включает AutoLISP). [2] Подмножество функций AutoLISP включено в веб-приложение AutoCAD на основе браузера.
AutoLISP — это небольшой, динамически ограниченный , динамически типизированный диалект языка Lisp со сборкой мусора , неизменяемой структурой списков и устанавливаемыми символами, в котором отсутствуют такие обычные функции Lisp, как макросистема , средства определения записей, массивы, функции с переменным числом аргументов или привязки let. Помимо основного языка, большинство примитивных функций предназначены для геометрии, доступа к внутренней базе данных DWG AutoCAD или манипулирования графическими сущностями в AutoCAD. Свойства этих графических сущностей раскрываются AutoLISP как списки ассоциаций , в которых значения сопоставляются с групповыми кодами AutoCAD , которые указывают такие свойства, как точки определения, радиусы, цвета, слои, типы линий и т. д. AutoCAD загружает код AutoLISP из файлов .LSP. [3]
Код AutoLISP может взаимодействовать с пользователем через графический редактор AutoCAD, используя примитивные функции, которые позволяют пользователю выбирать точки, выбирать объекты на экране, вводить числа и другие данные. AutoLisp также имеет встроенный графический интерфейс пользователя (GUI) на мини- или доменно-специфическом языке (DSL), Dialog Control Language , для создания модальных диалоговых окон с автоматизированной компоновкой в AutoCAD. [3]
AutoLISP был получен из ранней версии XLISP , созданной Дэвидом Бецом. [4] Язык был представлен в AutoCAD версии 2.18 в январе 1986 года и продолжал совершенствоваться в последующих выпусках вплоть до выпуска 13 в феврале 1995 года. После этого его разработка была заброшена Autodesk в пользу более модных сред разработки, таких как Visual Basic for Applications (VBA), .NET Framework и ObjectARX . Тем не менее, он остался основным языком настройки пользователя AutoCAD.
Vital-LISP , значительно улучшенная версия AutoLISP, включающая интегрированную среду разработки (IDE), отладчик , компилятор и поддержку ActiveX , была разработана и продана сторонним разработчиком Basis Software. Vital LISP был надмножеством существующего языка AutoLISP, которое добавило доступ в стиле VBA к объектной модели AutoCAD, реакторы (обработка событий для объектов AutoCAD), общую поддержку ActiveX и некоторые другие общие функции Lisp. Autodesk приобрела его, переименовала в Visual LISP и недолго продавала как дополнение к AutoCAD версии 14, выпущенной в мае 1997 года. Он был включен в AutoCAD 2000, выпущенный в марте 1999 года, в качестве замены AutoLISP. С тех пор Autodesk прекратила вносить существенные улучшения в Visual LISP и сосредоточила больше усилий на VBA и .NET , а также C++ . С 31 января 2014 года [обновлять]компания Autodesk прекратила поддержку версий VBA до 7.1 в рамках долгосрочного процесса перехода с VBA на .NET для настройки пользователем. [5] [6]
AutoLISP имеет такую сильную популярность, что другие поставщики приложений для автоматизированного проектирования (САПР) добавляют его в свои продукты. Bricscad , IntelliCAD , DraftSight и другие имеют функциональность AutoLISP, так что пользователи AutoLISP могут рассмотреть возможность использования их в качестве альтернативы AutoCAD. Большая часть разработки с использованием AutoLISP после AutoCAD 2000 выполняется в Visual LISP, поскольку оригинальный движок AutoLISP был заменен движком Visual LISP. Существуют тысячи утилит и приложений, которые были разработаны с использованием AutoLISP или Visual LISP (распространяются в виде файлов LSP, FAS и VLX). [7] [8]
1958 | 1960 | 1965 | 1970 | 1975 | 1980 | 1985 | 1990 | 1995 | 2000 | 2005 | 2010 | 2015 | 2020 | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
LISP 1, 1.5, LISP 2 (заброшен) | |||||||||||||||
Маклисп | |||||||||||||||
Интерлисп | |||||||||||||||
молдавский лей | |||||||||||||||
Лисп-машина Лисп | |||||||||||||||
Схема | Р5РС | Р6РС | R7RS маленький | ||||||||||||
НОЛЬ | |||||||||||||||
ZIL (язык реализации Zork) | |||||||||||||||
Франц Лисп | |||||||||||||||
Общий Лисп | стандарт ANSI | ||||||||||||||
Ле Лисп | |||||||||||||||
Схема Массачусетского технологического института | |||||||||||||||
XLISP | |||||||||||||||
Т | |||||||||||||||
Chez Схема | |||||||||||||||
Emacs Лисп | |||||||||||||||
АвтоЛИСП | |||||||||||||||
ПикоЛисп | |||||||||||||||
Гамбит | |||||||||||||||
EuLisp | |||||||||||||||
ИСЛИСП | |||||||||||||||
OpenLisp | |||||||||||||||
Схема ПЛТ | Ракетка | ||||||||||||||
новыйLISP | |||||||||||||||
GNU-хитрость | |||||||||||||||
Визуальный ЛИСП | |||||||||||||||
Кложур | |||||||||||||||
Дуга | |||||||||||||||
ЛФЭ | |||||||||||||||
Хай | |||||||||||||||
Хиалисп |
Простая программа Hello world на AutoLISP будет выглядеть так:
( defun привет ( ) ( princ "\nПривет, мир!" ) ( принц ))
Обратите внимание на последнюю строку внутри определения функции: при оценке без аргументов функция princ
возвращает нулевой символ, который не отображается интерфейсом командной строки AutoCAD . Поскольку командная строка AutoCAD функционирует как цикл чтения–вычисления–печати (REPL), это обычно выводит «Hello World!» в командную строку, за которым сразу следует возвращаемое значение вызова princ
. Таким образом, без последнего вызова функции princ
результат этого будет следующим:
Hello World!"\nHello World!"
Эту же prin1
функцию можно использовать и для достижения того же результата.
Более сложный пример:
( defun c:pointlabel ( / pnt ) ( if ( setq pnt ( getpoint "\nУкажите точку: " )) ( прогн ( entmake ( список ' ( 0 . "ТОЧКА" ) ( минус 10 ( транс пнт 1 0 )) ) ) ( entmake ( список ' ( 0 . "ТЕКСТ" ) ( минусы 10 ( транс ( минусы ( + ( автомобильный пункт ) 0,6 ) ( центральный пункт )) 1 0 )) ( минус 40 ( getvar 'textsize )) ( cons 1 ( strcat "X:" ( rtos ( car pnt )) " Y:" ( rtos ( cadr pnt )))) ) ) ) ) ( принц ))
Приведенный выше код определяет новую функцию , которая генерирует точечный объект AutoCAD в заданной точке с однострочным текстовым объектом, отображающим координаты X и Y рядом с ним. Имя функции включает специальный префикс 'c:', который заставляет AutoCAD распознавать функцию как обычную команду. Пользователю, набрав 'pointlabel' в командной строке AutoCAD, будет предложено выбрать точку, либо введя координаты X и Y, либо щелкнув место на чертеже. Затем функция поместит маркер в эту точку и создаст однострочный текстовый объект рядом с ней, содержащий координаты X и Y точки, выраженные относительно активной пользовательской системы координат (UCS). Функция не требует параметров и содержит одну локальную переменную ('pnt').
Приведенный выше пример можно также написать с использованием встроенных команд AutoCAD для достижения того же результата, однако этот подход подвержен изменениям в командных строках между версиями AutoCAD.