Visual Studio Code + LISP – как оно работает?
На Autodesk University 2020 (да и не только там, если честно) постоянно упоминают про VSCode с дополнением от Autodesk для разработки, отладки и т.д. Естественно, я говорю про LISP.
В этом посте хочу попробовать разобраться с тем, что это такое, каково с ним работать и так далее. Погнали?
Ну, понятно, что нормально тестировать можно только на ACAD2021 (хотя в принципе использовать VSCode как текстовый редактор никто не мешает и в более ранних версиях). В принципе, весьма и весьма достойный редактор - с возможностью сворачивания кусков кода (по определенным правилам, конечно же), быстрого форматирования кода независимо от его размера и т.д. Но - только как редактор. В некоторых случаях Notepad++ может оказаться более функциональным и модульным.
Ну да ладно, вернусь к ACAD2021, VSCode и LISP.
В 2021 появилась новая системная переменная LISPSYS. Частично я про эту переменную говорил здесь.
Немного настроим VSCode и расширение.
Потом прописываю путь к acad.exe и параметры вызова:
Ок, запускаем ACAD, LISPSYS устанавливаем в 1, перезапуск. В ком.строку vlide, открывается VSCode. Ну, ок. Печатаем код наподобие
1 2 3 | (defun t1() (alert "t1 function") ) |
В меню Выполнить - Начать отладку (Run - Start debugging). Так, ок, перешли в DEBUG CONSOLE вместо ожидаемого acad.exe? Ну ок, жмем (t1):
1 2 | (t1) ; error: no function definition: T1 |
Аналогичная ситуация будет и при попытке вызвать (t1) из ком.строки ACAD'a. То есть вариант "сделать какую-то функцию на лету, тут же ее запустить" как-то немного пропадает. А лично я при разработке / тестировании нередко подобным пользовался.
То есть получается, что надо файл а) сохранить и б) обеспечить его загрузку в acad (тут уже есть варианты - можно через _.appload в acad, можно через VSCode: правый клик - "Load File into AutoCAD")? VLIDE vs VSCode+ALISP - 1:0 в пользу VLIDE. Кстати, загрузить несохраненный код в acad подобным образом пока невозможно.
Естественно, что после загрузки функция становится доступной. А что будет, если установить точку останова на alert? Правильно, ничего! Надо под VSCode еще и отладку запустить, "присоединившись" (Attach) к процессу acad! Тогда точка останова сработает. В принципе, несложно нажать F5 для начала отладки и Shift+F5 для остановки отладки, но сам факт... Ладно, допустим, я просто привык к другому положению, поэтому в этом раунде обе среды получают по 0 баллов. 1:0
Немного усложним код - вместо t1 поставим testfunction1:
1 2 3 | (defun testfunction1() (alert "t1 function") ) |
И теперь попробуем сделать еще одну функцию, которая будет вызывать testfunction1. Первое, что я буду ожидать - это срабатывание некоего аналога IntelliSense, которое ну хотя бы подсветит название функции. Уж молчу про хотя бы названия параметров и какую-нибудь обработку документирования.
Эммм... А где подсказка-то? Ок, попробуем по-другому:
Ага, значит, все-таки как-то да срабатывает!
А что будет, если вместо testfunction1 поставить test-function ?
И это уже более печально: знаки "-" распознаваться отказываются (ни Ctrl+Space, ни Ctrl+Shift+Space не работают!). А у меня несколько проектов построены с применением моих функций, в названии которых есть "-". И что мне теперь делать? Все переписывать?? 2:0 в пользу VLIDE.
Я пока не знаю, как выполнять контроль кода в VSCode (ну там, использование глобальных переменных, сколько функций и с каким количеством параметров объявлено и т.д.). Искренне надеюсь, что это можно там сделать. Но верится с трудом Пока 2:0
Дальше. Подключаем отладку, загружаем наш файл, вносим изменения, повторная загрузка...
Че?! Э, але! Внесение изменений в код "на лету" (и иногда даже без сохранения изменений) - это же основная фишка лиспа! 3:0 в пользу VLIDE (хотя очень сильно хочется поставить не 1 балл, а все 10...)
Ладно, а как там с форматированием и чтением настроек форматирования напрямую из lsp-файла? А никак! Что установлено в настройках расширения - то и будет. Кому-то это плюс, кому-то минус. Да и настроек форматирования значительно меньше, чем в VLIDE. Ситуация неоднозначная с моей точки зрения, так что ставим по 1 баллу обоим: 4:1 в пользу VLIDE.
В VSCode + ALISP есть одна очень интересная особенность - сворачивание кода. Можно свернуть содержимое определения функции, или содержимое cond, или if, или... Короче, любой логической конструкции. Правда, оно не сильно доведено до ума, ну да ладно. 4:2 в пользу VLIDE.
А вот теперь мое самое любимое. Диалоги. Разработка, проверка работы, проверка разметки...
Оно и во VLIDE-то не особо хорошо работало, а как здесь? А никак! dcl, в отличие от lsp, напрямую загрузить в acad невозможно. Просмотреть, как будет выглядеть окошко - из-под VSCode мне не удалось. Проверить правильность кода - тоже. Не, я понимаю - можно на WinForms / WPF нарисовать окошко, прописать его вызов, все дела... Но, блин, что мне делать, если в уже работающее окно dcl надо внести какие-либо изменения?! VLIDE хоть что-то предоставляет! Да, кривое, косое, недоработанное. Но VSCode и этого лишает! 5:2
Вопросы компиляци fas / vlx просто не затрагиваю.
Вопросы с кодировкой создаваемых файлов lsp тоже не трогаю.
И тем не менее, по моему кривому, косому, неправильному мнению в части разработки на AutoLISP / VisualLISP : VLIDE пока что сильнее как минимум в 2.5 раза по отношению к VSCode + Lisp Extension (от Autodesk). Может быть, есть другие расширения, более функциональные и вменяемые? С удовольствием обсужу их
В моём случае можно поставить вопрос иначе: "как оно не работает". VS code просто не видит установленный extension для lisp. Если его удалить, то открытый .lsp видит как plain text. А если установить, то debug просто не стартует с ошибкой.
Искренне надеюсь, что используется ACAD2021 или новее, и LISPSYS установлена как минимум в 1.
Он меня при первом запуске команды vlide спросил, как будем дальше работать (я так понял, в этот момент LISPSYS и была установлена в 1). Я выбрал VS Code, после этого он сам предложил докачать в нём расширение. Почему-то нигде больше такой баг не упоминается, хотел всё переустановить, но в итоге решил работать в родном Visual LISP.
Насколько я помню, в описании расширения AutoLISP (который от Autodesk) естьуказания, как присоединяться к процессу acad.exe и как выполнять отладку.
В общем магазине несколько расширений под AutoLISP. Я игрался только с тем, который от Autodesk.
Спасибо, может быть потестирую потом. В конце-концов, это всего лишь инструмент, а не конечная цель. Может быть и к следующим версиям интеграцию изменят/улучшат.
Для компиляции в vlx есть новая команда MAKELISPAPP [СОЗДПРИЛLISP]
В отличии от vlisp ide, в vs code intellisense все таки есть и работает. Есть и другие полезные фичи, например, подсветка скобок и выделение соответствующих скобок цветами (добавляется плагином).
Знак дефис в названии функций и переменных запрещен в абсолютном большинстве языков программирования, поэтому этот универсальный редактор не распознает такие варианты имен.
К сожалению, в отличии от плагинов к другим языкам, php, например, это расширение от autodesk не способно обеспечить работу intellisense для пользовательских функций. Это главный, и по-моему единственный недостаток системы, который разработчики должны немедленно устранить.
VS code это универсальный редактор в который с помощью плагина добавлена возможность отладки кода в AutoCAD и примитивный intellisense для Autolisp. Тестирование dcl осуществляется в среде AutoCAD и должно запускаться на выполнение командой AutoCAD.
>> Знак дефис в названии функций и переменных запрещен в абсолютном большинстве языков программирования, поэтому этот универсальный редактор не распознает такие варианты имен.
Ну да, конечно. vlax-ename->vla-object не содержит ни одного дефиса? И, кстати, эта конструкция нормально подсвечивается. Во VLIDE достаточно загрузить определение функции с любым допустимым с точки зрения lisp именем и она становится сразу же доступной по Ctrl+Shift+Пробел. В VSCode этогоо нет.
>> К сожалению, в отличии от плагинов к другим языкам, php, например, это расширение от autodesk не способно обеспечить работу intellisense для пользовательских функций. Это главный, и по-моему единственный недостаток системы, который разработчики должны немедленно устранить.
Насколько я знаю, на github выложен исходный код этого расширения (если я не путаю ничего). Если есть знания и умения - то никто не мешает дорабатывать это дело.
>> Тестирование dcl осуществляется в среде AutoCAD и должно запускаться на выполнение командой AutoCAD.
Еще раз. Основная проблема при разработке диалога не то, как оно будет работать, а то, как оно будет выглядеть. Во VLIDE для этого достаточно создать dcl-файл (да, его придется сохранять именно как dcl), и потом можно посмотреть на его вид. В VSCode для того, чтобы просто посмотреть, придется городить кучу костылей.