Стив Джонсон (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, но и оставила его далеко позади по функциональности, сохранив при этом в высокой степени совместимость.
Интерпретатор LISP в BricsCAD в качестве основы использует OpenLisp от французского разработчика Кристиана Жульена (Christian Jullien). Это единственный интерпретатор LISP, который все еще находится в разработке; разработка остальных, которые я нашел, остановилась в середине девяностых годов прошлого века.
OpenLisp представляет собой очень современную разработку, несовместимую со старым диалектом XLisp, используемым в AutoLISP, например, поддержаны объектно-ориентированные расширения языка. Поэтому внутреннее представление выражений LISP отличается от текстового, которое мы видим в файле с кодом LISP.
Верно. Ряд типичных языковых конструкций AutoLISP поддержан на уровне эмуляции, приводящей к еще большему отличию между внутренним и внешним (текстовым) представлением. Следствием является сложная задача по синхронизации внутреннего выражения на OpenLisp и внешнего текстового выражения на AutoLISP во время выполнения и при отладке кода.
Помимо технических, казавшихся практически неразрешимыми, проблем по синхронизации двух представлений, передо мной стояла задача по разработке пользовательского интерфейса. Нужно было предложить пользователю не простенький редактор, а полноценную визуальную среду разработки.
Идея создания IDE для LISP в BricsCAD витала давно, но из-за описанных выше сложностей мы постоянно откладывали ее реализацию. Кроме того, было бы большой ошибкой просто повторить редактор VLIDE, написанный по стандартам AutoCAD двадцатилетней давности.
Прежде всего, помог счастливый случай (смеется). Чисто случайно я обнаружил скрытую деталь в OpenLisp — с каждым выражением LISP можно связать неограниченный набор метаданных, очень похожий на XData для объектов базы данных в DWG формате. Я знал об этом довольно давно, но не использовал этот ‘хак’ для двунаправленной связи выражения LISP c редактором и отладчиком. Первые же эксперименты показали перспективность данного подхода.
Торстен рассказывает про BLADE в дни Bricsys 2017 Conference: работа продолжается и вечером, в лобби парижского отеля
Благодаря другому совпадению я обнаружил, что WxWidgets (открытая кроссплатформенная система, используемая в разработке BricsCAD) уже поддерживает опенсорсный редактор Scintilla, широко применяемый во многих текстовых редакторах. Для него существует два уровня API — простая обертка уровня ядра и высокоуровневая система классов, превосходно укладывающаяся в логику WxWidgets. Но данный редактор — еще не полноценный пользовательский интерфейс. Я нашел очень удобный и расширяемый редактор wxStEdit, основанный на Scintilla, с поддержкой GUI. Дополнительным аргументом в выборе послужил тот факт, что условия его применения в коммерческом приложении также покрываются лицензией WxWidgets.
Я убедился, что этот редактор подходит для нашей среды разработки LISP, и приложил должное количество усилий, чтобы расширить под наши нужды. Разработка wxStEdit прекратилась в 2008 году, и в целом этот код компилируется и работает достаточно хорошо. Тем не менее, я нашел и исправил много ошибок на всех уровнях (Scintilla, обертка Scintilla в WxWidgets и wxStEdit).
Такая последовательность событий и привела нас к конечному результату!
Все программные слои, относящиеся к BLADE, вообще не влияют на обычное выполнение LISP-кода вне среды разработки и отладчика. Связь обеспечивается несколькими callback-функциями, которые не вызываются при обычной работе. Поэтому никаких проблем с производительностью от применения BLADE появиться не должно. Инструменты отладчика оптимизированы для высокой производительности даже во время отладки и потребляют минимум ресурсов компьютера.
В процессе разработки отладчика я убрал большинство слоев эмуляции в интерпретаторе LISP и реализовал обращения напрямую к OpenLisp. Приятным дополнительным эффектом стало то, что конструкции (repeat), (foreach) и (vlax-for) теперь работают в пять раз быстрее в создании циклов. Поэтому вместо замедления выполнения работы над BLADE привели к ускорению!
Да, код 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 ознакомятся с переводом интервью, ведь, насколько мне известно, среди них есть немало опытных пользователей САПР на основе .dwg с опытом программирования на диалектах языка LISP. Несмотря на то что LISP — достаточно старый язык, его рано списывать со счетов: в BricsCAD мы постоянно расширяем программные интерфейсы на LISP и насчитываем немало успешных пользовательских приложений на этом языке. Я надеюсь, что вы по заслугам оцените BLADE, и рассчитываю на ваши отзывы для улучшения. Вы всегда можете связаться со мной и командой Bricsys на нашем форуме, либо обратившись в службу поддержки Bricsys.