Visual Studio Code + LISP – как оно работает?

На Autodesk University 2020 (да и не только там, если честно) постоянно упоминают про VSCode с дополнением от Autodesk для разработки, отладки и т.д. Естественно, я говорю про LISP.

В этом посте хочу попробовать разобраться с тем, что это такое, каково с ним работать и так далее. Погнали?

Ну, понятно, что нормально тестировать можно только на ACAD2021 (хотя в принципе использовать VSCode как текстовый редактор никто не мешает и в более ранних версиях). В принципе, весьма и весьма достойный редактор - с возможностью сворачивания кусков кода (по определенным правилам, конечно же), быстрого форматирования кода независимо от его размера и т.д. Но - только как редактор. В некоторых случаях Notepad++ может оказаться более функциональным и модульным.

Ну да ладно, вернусь к ACAD2021, VSCode и LISP.

В 2021 появилась новая системная переменная LISPSYS. Частично я про эту переменную говорил здесь.

Немного настроим VSCode и расширение.

2020-11-22_17-55-23

Потом прописываю путь к acad.exe и параметры вызова:
2020-11-22_18-03-48

Ок, запускаем 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, которое ну хотя бы подсветит название функции. Уж молчу про хотя бы названия параметров и какую-нибудь обработку документирования.
2020-11-22_20-11-40

Эммм... А где подсказка-то? Ок, попробуем по-другому:
2020-11-22_20-12-54
Ага, значит, все-таки как-то да срабатывает!

А что будет, если вместо testfunction1 поставить test-function ?
2020-11-22_20-14-14

И это уже более печально: знаки "-" распознаваться отказываются (ни Ctrl+Space, ни Ctrl+Shift+Space не работают!). А у меня несколько проектов построены с применением моих функций, в названии которых есть "-". И что мне теперь делать? Все переписывать?? 2:0 в пользу VLIDE.

Я пока не знаю, как выполнять контроль кода в VSCode (ну там, использование глобальных переменных, сколько функций и с каким количеством параметров объявлено и т.д.). Искренне надеюсь, что это можно там сделать. Но верится с трудом ;) Пока 2:0

Дальше. Подключаем отладку, загружаем наш файл, вносим изменения, повторная загрузка...
2020-11-22_20-21-20

Че?! Э, але! Внесение изменений в код "на лету" (и иногда даже без сохранения изменений) - это же основная фишка лиспа! 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). Может быть, есть другие расширения, более функциональные и вменяемые? С удовольствием обсужу их ;)



Комментарии

Есть 10 коммент. к “Visual Studio Code + LISP – как оно работает?”
  1. wepp пишет:

    В моём случае можно поставить вопрос иначе: "как оно не работает". VS code просто не видит установленный extension для lisp. Если его удалить, то открытый .lsp видит как plain text. А если установить, то debug просто не стартует с ошибкой.

  2. Кулик Алексей aka kpblc пишет:

    Искренне надеюсь, что используется ACAD2021 или новее, и LISPSYS установлена как минимум в 1.

  3. wepp пишет:

    Он меня при первом запуске команды vlide спросил, как будем дальше работать (я так понял, в этот момент LISPSYS и была установлена в 1). Я выбрал VS Code, после этого он сам предложил докачать в нём расширение. Почему-то нигде больше такой баг не упоминается, хотел всё переустановить, но в итоге решил работать в родном Visual LISP.

  4. Кулик Алексей aka kpblc пишет:

    Насколько я помню, в описании расширения AutoLISP (который от Autodesk) естьуказания, как присоединяться к процессу acad.exe и как выполнять отладку.
    В общем магазине несколько расширений под AutoLISP. Я игрался только с тем, который от Autodesk.

  5. wepp пишет:

    Спасибо, может быть потестирую потом. В конце-концов, это всего лишь инструмент, а не конечная цель. Может быть и к следующим версиям интеграцию изменят/улучшат.

  6. ganjour пишет:

    Для компиляции в vlx есть новая команда MAKELISPAPP [СОЗДПРИЛLISP]

  7. ganjour пишет:

    В отличии от vlisp ide, в vs code intellisense все таки есть и работает. Есть и другие полезные фичи, например, подсветка скобок и выделение соответствующих скобок цветами (добавляется плагином).
    Знак дефис в названии функций и переменных запрещен в абсолютном большинстве языков программирования, поэтому этот универсальный редактор не распознает такие варианты имен.

  8. ganjour пишет:

    К сожалению, в отличии от плагинов к другим языкам, php, например, это расширение от autodesk не способно обеспечить работу intellisense для пользовательских функций. Это главный, и по-моему единственный недостаток системы, который разработчики должны немедленно устранить.

  9. ganjour пишет:

    VS code это универсальный редактор в который с помощью плагина добавлена возможность отладки кода в AutoCAD и примитивный intellisense для Autolisp. Тестирование dcl осуществляется в среде AutoCAD и должно запускаться на выполнение командой AutoCAD.

  10. Кулик Алексей aka kpblc пишет:

    >> Знак дефис в названии функций и переменных запрещен в абсолютном большинстве языков программирования, поэтому этот универсальный редактор не распознает такие варианты имен.
    Ну да, конечно. vlax-ename->vla-object не содержит ни одного дефиса? :) И, кстати, эта конструкция нормально подсвечивается. Во VLIDE достаточно загрузить определение функции с любым допустимым с точки зрения lisp именем и она становится сразу же доступной по Ctrl+Shift+Пробел. В VSCode этогоо нет.

    >> К сожалению, в отличии от плагинов к другим языкам, php, например, это расширение от autodesk не способно обеспечить работу intellisense для пользовательских функций. Это главный, и по-моему единственный недостаток системы, который разработчики должны немедленно устранить.
    Насколько я знаю, на github выложен исходный код этого расширения (если я не путаю ничего). Если есть знания и умения - то никто не мешает дорабатывать это дело.

    >> Тестирование dcl осуществляется в среде AutoCAD и должно запускаться на выполнение командой AutoCAD.
    Еще раз. Основная проблема при разработке диалога не то, как оно будет работать, а то, как оно будет выглядеть. Во VLIDE для этого достаточно создать dcl-файл (да, его придется сохранять именно как dcl), и потом можно посмотреть на его вид. В VSCode для того, чтобы просто посмотреть, придется городить кучу костылей.

Поделитесь своим мнением


Я не робот.