BricsCAD

Интервью с создателем BLADE – нового Visual LISP IDE в BricsCAD V18.2

BLADE – это очень важное нововведение, которое появилось в BricsCAD V18.2 и представляет собой интегрированную среду разработки (IDE – Integrated Development Environment) приложений на языке Visual LISP.

Bricsys не просто догнал Autodesk, но и предоставил множество дополнительных возможностей, которые намного опережают возможности уже винтажного VLIDE от Autodesk образца 1999 года. Но, тем не менее, он обеспечивает высокий уровень совместимости и с этим продуктом.

Впервые я познакомился с этой IDE в частном порядке на предрелизной стадии во время конференции Bricsys 2017 в Париже и был удивлен той функциональности, которую продемонстрировал мне ее разработчик Торстен Мозес (Torsten Moses). Недавно у меня появилась возможность взять у Торстена интервью и более подробно узнать о его разработке.

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

BricsCAD LISP использует программное ядро OpenLisp, разрабатываемое Кристианом Жульеном (Christian Jullien) из Франции. Это единственное LISP-ядро, развитие которого еще продолжается. Все остальные разработки были закрыты еще в середине 90-х годов.
OpenLisp – это очень современная реализация, не сопоставимая со старым диалектом XLisp, используемым в AutoLISP. В OpenLisp поддерживаются даже объектно-ориентированные функции. Поэтому внутреннее представление выражений LISP отличается от их текстового представления, отображаемого в LISP файле.

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

Это верно. Ряд типичных конструкций AutoLISP был реализован в виде эмуляции, которая еще больше увеличивает внутренние текстовые различия. Это создает серьезную проблему для синхронизации выполнения внутреннего выражения OpenLisp с соответствующим ему текстовым представлением при выполнении отладки.
Кроме обычных технических деталей, которые, казалось, были практически неразрешимы, предполагались большие сложности в реализации графического интерфейса. Это был не просто редактор, а полноценный графический интерфейс IDE.
Это было бы катастрофой, серьезным провалом, если бы мы предоставили VLIDE, разработанный по стандартам AutoCAD. Это было бы хорошо в свое время, но не 20 лет спустя.
Идея создания LISP IDE для BricsCAD казалась настолько сложной, что мы откладывали ее очень долгое время.

Как вам удалось преодолеть эти трудности?

Во-первых, это было чистое совпадение. К счастью, я обнаружил скрытую возможность в OpenLisp – любой символ в LISP может содержать неограниченные прикрепленные пользовательские данные, очень похожие на XData в объектах базы данных DWG. Я даже знал об этом в течение многих лет, но никогда не рассматривал  использование этой возможности для выполнения выражения LISP и двунаправленного соединения редактора и отладчика. Некоторые первоначальные быстрые тесты показали, что такой подход может быть реализован.
Еще одним совпадением было то, что, как я обнаружил, наша кроссплатформенная система WxWidgets уже включает поддержку известного  компонента редактирования с открытым исходным кодом Scintilla, широко используемого многими редакторами. WxWidgets даже предоставляет два уровня оболочки – простую оболочку ядра и высокоуровневую оболочку с системой классов. Это идеально вписывается в логику WxWidgets.
Но все же, это только поддержка редактора, а не графический интерфейс. Затем я нашел очень подходящий, расширяемый редактор и реализацию GUI, основанного на этой системе WxWidgets Scintilla, как открытый исходный код под лицензией WxWidgets. Следовательно, мы могли использовать этот исходный код в коммерческом приложении. Этот редактор называется wxStEdit.
Я убедился, что эти исходные ресурсы подходят для нашей LISP IDE, и приложил много дополнительных усилий для их расширения. Разработка wxStEdit была завершена примерно в 2008 году. С компиляцией и работой редактора особых проблем не возникало. Тем не менее, в ходе дальнейшей работы над этим GUI я обнаружил и исправил множество дефектов на всех связанных уровнях (Scintilla, WxWidgets Scintilla и wxStEdit).
Именно эти два совпадения открыли обе створки больших ворот!

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

Все, что связано с BLADE, никоим образом не влияет на выполнение LISP за пределами среды IDE и отладчика. Соединение выполняется несколькими обратными вызовами, которые при обычной обработке требуют нулевых затрат времени.
Реализация BLADE является безопасной и его обычное использование не приводит к снижению  производительности.
Отладчик полностью готов к работе и оптимизирован для обеспечения лучшей производительности и минимального использовании системной памяти и памяти для LISP даже в режиме отладки.
В ходе реализации отладчика и внутренней синхронизации я также удалил большую часть эмуляций и реализовал это как базовую функциональность OpenLisp. В результате при организации циклов функции (repeat), (foreach) и (vlax-for) стали работать примерно в пять раз быстрее. Таким образом, создание BLADE не замедлило, а наоборот, реально ускорило работу!

Будут ли доступны эти функции в версиях для Mac и Linux?

Да, обеспечивается полная совместимость. Это связано с реализацией WxWidgets и моих собственных компонентов. Я уже проверил BLADE, работающий под Linux. Нет никаких различий; даже код реализации для Windows не имеет каких-либо особенностей.

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

Во-первых, не надо предварительно загружать LISP файл в BricsCAD. Такой код, загруженный вне отладчика, полностью работоспособен, но его нельзя использовать для отладки. Специальное соединение между внутренним и внешним представлением устанавливается только при загрузке кода LISP в состоянии отладки.
Затем в BLADE откройте существующий проект FAS или VLX и/или Именованную сессию (Named Session) или просто любой LISP файл, для которого необходимо выполнить отладку.
Теперь вы можете выбрать в меню или на панели инструментов команду Начать отладку (Start Debugging) или нажать «горячую» клавишу F8. Появится специальная панель инструментов Отладка (Debug). Вы можете активировать режим АвтоОстанов (AutoBreak), который автоматически делает остановку в начале каждого исполняемого кода, или определить точки останова вручную.
Загрузите предназначенный для отладки LISP файл с помощью обычной команды LOAD из набора функций BricsCAD или нажав кнопку Загрузить (Load) на панели инструментов Отладка (Debug). Загруженный для отладки файл и набор его функций, выбранных для отладки, будут отображаться на двух правых закладках.
Когда отладчик делает остановку в первой точке останова, на панели инструментов включаются все режимы отладки, число которых действительно больше, чем в VLIDE AutoCAD. На закладках Watch  Вы можете создать набор отслеживаемых переменных и активировать отслеживание путем установки флажка BreakPoint. При изменении значения такой переменной отладчик выполнит автоматическую остановку на соответствующем LISP операторе.

Что делать, если ваш код вызывает код в других файлах, которые вы не загрузили?

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

Что дальше? Закончена ли работа над BLADE или еще есть возможности для его улучшения?

Поскольку BLADE является очень молодым продуктом, конечно, еще многое предстоит сделать. До сих пор основной целью было обеспечение хороших функций отладки и приемлемая обработка проектов, но недостаточно внимания было уделено возможностям BLADE как обычного редактора.
В моем списке задач есть ряд основных ключевых функций, которые должны быть реализованы. Мы хотим добавить редактор горячих клавиш, потому что каждый разработчик любит свои собственные сочетания клавиш, а изучение других для них – это кошмар! Также необходимо реализовать проверку перекрестных ссылок для каждого файла и для каждого сеанса, главным образом для больших приложений LISP.
Со временем возможности редактора будут еще более расширены и улучшены. Одним из примеров является всплывающая подсказка редактора, которая отображается при наведении курсора на имя LISP функции и показывает сигнатуру этой функции и краткую справку.
И, конечно же, я знаю, что, когда люди начнут реально использовать BLADE, появится большое число  отзывов, пожеланий и сообщений об ошибках.  Вполне вероятно, что многие будут предлагать реализовать некоторые детали, которые сделали бы  BLADE более похожим на VLIDE AutoCAD. В некоторых случаях это может быть сложным. И, кроме того, это не является главной целью. Я надеюсь, что разработчики примут немного другую организацию рабочего процесса, учитывая те большие преимущества, которые они получают взамен.
В целом, как и в случае с BricsCAD, мы открыты для идей разработчиков, их пожеланий и потребностей. Поскольку именно разработчику необходимо работать с BLADE, и делать это как можно проще и продуктивнее.
Даже первый релиз BLADE был подготовлен при активной обратной связи с бета-тестерами, например, таким как Мартин Дриз (Martin Drese) из CAD Wiesel.

Скачать BricsCAD V18.2 можно уже прямо сейчас!

Когда Вы видите, какие усилия прикладываются командой разработки платформы BricsCAD, то не можете не согласиться, что именно эта платформа представляет собой будущее DWG САПР. Выгода от владения лицензией BricsCAD с каждым годом становится все больше и больше. Это абсолютно беспроигрышный вариант. И если Вы еще не являетесь пользователем BricsCAD, станьте им прямо сейчас!

Бесплатно скачать 30-дневную версию BricsCAD V18.2

Стив Джонсон

Запрос в поддержку