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). Может быть, есть другие расширения, более функциональные и вменяемые? С удовольствием обсужу их