isicad.ru :: портал САПР, PLM и ERP :: версия для печати

Статьи

18 марта 2018

BLADE Runner: новое прочтение классики AutoLISP в BricsCAD V18.2

Стив Джонсон

От редакции isicad.ru: Представляем Вашему вниманию перевод интервью известного САПР-блоггера Стива Джонсона с разработчиком компании Bricsys. Интервью перевел Егор Ермолин — сотрудник компании Бриксис Текноледжис Раша, российского офиса разработки компании Bricsys.

Стив Джонсон (Steve Johnson) — ведет блог cad nauseam, специалист в области САПР с 1985 года. Работал в качестве руководителя, разработчика, консультанта и технического писателя. Стив был пишущим редактором в журнале Cadalyst magazine, Президентом Группы Пользователей AutoCAD Западной Австралии и вице-президентом CADLock, Inc.


Торстен Мозес (Torsten Moses) — ведущий разработчик компании Bricsys. Известен тем, что создал знаменитый LT Extender (надстройку, позволяющую запускать LISP-приложения в среде AutoCAD LT); столкнувшись с судебным преследованием со стороны Autodesk, был вынужден прекратить разработку, перенеся все свои наработки в BricsCAD.


BLADE (BricsCAD LISP Advanced Development Environment) — замечательная новая визуальная среда разработки (IDE) на языке LISP, появившаяся в недавнем релизе BricsCAD V18.2. На конференции Bricsys 2017 Conference в Париже я воспользовался шансом увидеть вживую эту IDE на закрытой предрелизной демонстрации, проведенной лично создателем BLADE, Торстеном Мозесом (Torsten Moses), и был приятно удивлен набором возможностей данного инструмента. В своем недавнем интервью Торстен любезно ответил на мои вопросы. С первым же релизом BLADE в BricsCAD V18.2 Bricsys не просто догнала устаревший (а-ля 1999 год) редактор VLIDE от Autodesk, но и оставила его далеко позади по функциональности, сохранив при этом в высокой степени совместимость.

Торстен, насколько я понимаю, в процессе создания IDE для LISP в BricsCAD у Вас были трудности, связанные с особенностью интерпретации команд LISP в BricsCAD. Не могли бы Вы рассказать об этом подробнее?

Интерпретатор LISP в BricsCAD в качестве основы использует OpenLisp от французского разработчика Кристиана Жульена (Christian Jullien). Это единственный интерпретатор LISP, который все еще находится в разработке; разработка остальных, которые я нашел, остановилась в середине девяностых годов прошлого века.

OpenLisp представляет собой очень современную разработку, несовместимую со старым диалектом XLisp, используемым в AutoLISP, например, поддержаны объектно-ориентированные расширения языка. Поэтому внутреннее представление выражений LISP отличается от текстового, которое мы видим в файле с кодом LISP.

Таким образом, код AutoLISP, который я пишу, отличается от кода, который исполняет BricsCAD?

Верно. Ряд типичных языковых конструкций AutoLISP поддержан на уровне эмуляции, приводящей к еще большему отличию между внутренним и внешним (текстовым) представлением. Следствием является сложная задача по синхронизации внутреннего выражения на OpenLisp и внешнего текстового выражения на AutoLISP во время выполнения и при отладке кода.

Помимо технических, казавшихся практически неразрешимыми, проблем по синхронизации двух представлений, передо мной стояла задача по разработке пользовательского интерфейса. Нужно было предложить пользователю не простенький редактор, а полноценную визуальную среду разработки.

Идея создания IDE для LISP в BricsCAD витала давно, но из-за описанных выше сложностей мы постоянно откладывали ее реализацию. Кроме того, было бы большой ошибкой просто повторить редактор VLIDE, написанный по стандартам AutoCAD двадцатилетней давности.

В итоге, как Вы справились с этими проблемами?

Прежде всего, помог счастливый случай (смеется). Чисто случайно я обнаружил скрытую деталь в OpenLisp — с каждым выражением LISP можно связать неограниченный набор метаданных, очень похожий на XData для объектов базы данных в DWG формате. Я знал об этом довольно давно, но не использовал этот ‘хак’ для двунаправленной связи выражения LISP c редактором и отладчиком. Первые же эксперименты показали перспективность данного подхода.

Демо BLADE

Торстен рассказывает про BLADE в дни Bricsys 2017 Conference: работа продолжается и вечером, в лобби парижского отеля

Благодаря другому совпадению я обнаружил, что WxWidgets (открытая кроссплатформенная система, используемая в разработке BricsCAD) уже поддерживает опенсорсный редактор Scintilla, широко применяемый во многих текстовых редакторах. Для него существует два уровня API — простая обертка уровня ядра и высокоуровневая система классов, превосходно укладывающаяся в логику WxWidgets. Но данный редактор — еще не полноценный пользовательский интерфейс. Я нашел очень удобный и расширяемый редактор wxStEdit, основанный на Scintilla, с поддержкой GUI. Дополнительным аргументом в выборе послужил тот факт, что условия его применения в коммерческом приложении также покрываются лицензией WxWidgets.

Я убедился, что этот редактор подходит для нашей среды разработки LISP, и приложил должное количество усилий, чтобы расширить под наши нужды. Разработка wxStEdit прекратилась в 2008 году, и в целом этот код компилируется и работает достаточно хорошо. Тем не менее, я нашел и исправил много ошибок на всех уровнях (Scintilla, обертка Scintilla в WxWidgets и wxStEdit).

Такая последовательность событий и привела нас к конечному результату!

Я заметил, что программы AutoLISP и Visual LISP работают в BricsCAD в несколько раз быстрее, чем в AutoCAD. Как новая технология влияет на их производительность?

Все программные слои, относящиеся к BLADE, вообще не влияют на обычное выполнение LISP-кода вне среды разработки и отладчика. Связь обеспечивается несколькими callback-функциями, которые не вызываются при обычной работе. Поэтому никаких проблем с производительностью от применения BLADE появиться не должно. Инструменты отладчика оптимизированы для высокой производительности даже во время отладки и потребляют минимум ресурсов компьютера.

В процессе разработки отладчика я убрал большинство слоев эмуляции в интерпретаторе LISP и реализовал обращения напрямую к OpenLisp. Приятным дополнительным эффектом стало то, что конструкции (repeat), (foreach) и (vlax-for) теперь работают в пять раз быстрее в создании циклов. Поэтому вместо замедления выполнения работы над BLADE привели к ускорению!

Получат ли версии для Mac и Linux этот инструмент?

Да, код BLADE полностью совместим с этими платформами, благодаря WxWidgets и моему коду, который не содержит фрагментов кода, специфичных для платформы Windows. Я уже проверил работу BLADE под Linux — отличий в работе нет.

Не могли бы Вы привести простой пример отладочной сессии?

Прежде всего, не делайте предварительную загрузку (pre-load) никаких LISP-файлов в BricsCAD. Код, загружаемый вне отладчика, полностью работоспособен, но не может быть использован при отладке. Связь между внешним и внутренним представлением кода устанавливается, когда код загружается из-под отладчика.

В BLADE откройте существующий проект FAS или VLX; и/или «Именованную сессию» («Named Session»); или просто любой LISP файл, подлежащий отладке. Загрузите нужный LISP файл, выполнив команду «Загрузить в BricsCAD» в меню «Отладка» («Debug»/«Load  LISP  file in BricsCAD») или нажав кнопку «Загрузить» («Load») в панели инструментов. Теперь для загруженного кода включен режим отладки, и Вы увидите файл и отладочные функции в двух вкладках справа. Выберите «Начать Отладку» («Start Debugging») из меню или панели инструментов либо нажмите F8.

Появится панель инструментов «Отладка» («Debug»). Можно включить функцию автоостанова («AutoBreak»), что приведет к остановке на первой исполняемой строчке, либо поставить точки останова на нужных строчках кода (примечание переводчика: для перехода к первой точке останова мне понадобилось переключиться в BricsCAD и выполнить команду, реализуемую отлаживаемым скриптом).

Когда отладчик останавливается на точке останова, на отладочной панели инструментов становятся доступны привычные инструменты пошагового выполнения кода. И их больше, чем в отладчике VLIDE в AutoCAD! Можно устанавливать специальные точки останова по значению заданной переменной («Data Break Point»); как только значение переменной изменится, отладчик остановится на соответствующей строчке кода.

Что произойдет, если мой код вызовет код из файлов, еще не загруженных в отладчик?

Не беспокойтесь об этом. Отладчик распознает данную ситуацию и попросит догрузить недостающие LISP файлы. В обычном LISP Вы бы получили ошибку о том, что функция неизвестна, но отладчик перехватывает данную проблему. Вообще, это одна из технологичных фишек отладчика — Вы загружаете только основной LISP файл, и остальные файлы загружаются на лету по ходу отладки. Это очень удобно при отладке сложных приложений. Думаю, вы знакомы с законом Мёрфи, гласящим, что только что загруженная вами функция — не та, которая нужна на самом деле. Работая с BLADE, Вы не столкнетесь с такой ситуацией.

Какие планы на будущее?

Так как BLADE — новейшая разработка, потенциал для ее улучшения определенно есть. Пока основной целью было предоставление инструментов для разработки и поддержки проекта, теперь можно говорить об улучшении возможностей работы с документом.

В моих планах по расширению функциональности есть несколько ключевых пунктов. Мы собираемся добавить редактор горячих клавиш, так как каждый разработчик привык к своим комбинациям клавиш. Также нужно добавить проверку перекрестных ссылок в рамках файла и сессии, что будет полезно для больших приложений на LISP. По ходу разработки расширим и улучшим возможности редактора, например, будут добавлены всплывающие подсказки, показывающие при наведении курсора на вызов функции ее сигнатуру и небольшую справку.

Как показывает практика, как только люди начинают использовать программу, ты начинаешь получать обратную связь в форме пожеланий и сообщений об ошибках. Скорее всего, будет много требований по доработке каких-то деталей, чтобы сделать BLADE похожим на VLIDE в AutoCAD. Но это не всегда возможно и не является главной целью. Я надеюсь, что разработчики будут готовы принять немного другой подход к отладке, получая взамен большие преимущества от нового инструмента.

Резюмируя, мы максимально открыты к предложениям по улучшению, новым требованиям — это касается разработки как BLADE, так и BricsCAD в целом. В центре нашего внимания — пользователь-разработчик, максимально продуктивно и комфортно работающий с BLADE. При подготовке первого релиза BLADE нам очень помогла обратная связь от бета-тестеров, например от Мартина Дресе (Martin Drese, CAD Wiesel).

От переводчика. Торстен передал несколько приветственных слов читателям isicad.ru:

Мне вдвойне приятно, что читатели isicad.ru ознакомятся с переводом интервью, ведь, насколько мне известно, среди них есть немало опытных пользователей САПР на основе .dwg с опытом программирования на диалектах языка LISP. Несмотря на то что LISP — достаточно старый язык, его рано списывать со счетов: в BricsCAD мы постоянно расширяем программные интерфейсы на LISP и насчитываем немало успешных пользовательских приложений на этом языке. Я надеюсь, что вы по заслугам оцените BLADE, и рассчитываю на ваши отзывы для улучшения. Вы всегда можете связаться со мной и командой Bricsys на нашем форуме, либо обратившись в службу поддержки Bricsys.

Все права защищены. © 2004-2024 Группа компаний «ЛЕДАС»

Перепечатка материалов сайта допускается с согласия редакции, ссылка на isicad.ru обязательна.
Вы можете обратиться к нам по адресу info@isicad.ru.