Комбинаторы рефакторинга

первая часть

Но можно ли считать перечисленные проблемы действительно «проблемами»? Скорее, это забавные маленькие задачки-вызовы, напрашивающиеся на элегантное решение. И при этом семантический редактор получается, при небольшой практике, куда приятнее для пользователя, а главное, гораздо мощнее, нежели простой редактор текста. Вот лишь несколько очевидных преимуществ:

— Мы наконец снимаем главное ограничение обычного редактора — представление кода простым текстом; теперь у нас есть другие способы визуализации кода, куда более уместные. Да, в современных фреймворках существуют всяческие костыли типа визуализатора иерархии классов, но ими почти никто не пользуется, а главное, они сами по себе вторичны по отношению к текстовому редактору. В семантическом же редакторе они выходят на первый план;
— Крупномасштабные изменения кода в семантическом редакторе могут быть заданы математически — с помощью комбинаторов рефакторинга, а не ручным (и часто утомительным) перебором текста;
— Семантический редактор будет очень удобен даже для детей и новичков в программировании! Ошибки компилятора (да и ошибки времени выполнения, связанные с плохой типизацией) — это классическая катастрофа юзабилити. Поэтому смарт-редактор, позволяющий создавать хорошо типизированный код, становится магическим инструментом;
— Разбиение кода на визуально удобное представление выполняется не синтаксически, а семантически. Например, сложное выражение будет разделено на строчки не по парным скобкам, а по логике его вычисления. Да и сами скобки расставляются автоматически, и только если они реально нужны — с учётом приоритетов операций;
— Также семантическими будут навигация и выделение элементов кода — выделить можно будет только ту область, которая соответствует корректному выражению;
— Теперь мы сможем сделать настраиваемую подсветку уже не просто синтаксиса, а семантики. Программист может захотеть посмотреть на структуру кода в самых разных произвольно настраиваемых визуальных представлениях;
— Даже с точки зрения разработки такого редактора, запрограммировать его проще, нежели обычный редактор кода! Например, в нем не потребуется синтаксический анализатор. Также можно забыть про точное отслеживание позиции курсора. Таким образом, мы снимаем потенциальное появление множества сообщений об ошибках. Редактор может очевидно автоматически обеспечить правильную структуризацию кода (можно забыть про несогласованные круглые скобки!), а ошибки типа в основном ограничится предупреждениями пользователю в духе «тип сущности в текущей позиции курсора отличается от типа значения, которое введено».

По сути, мы теперь вообще не работаем с текстом программы — мы фактически работаем с абстрактным синтаксическим деревом. При этом прозрачно реализуется разыменование, когда мы можем хранить всю метаинформацию (например, названия переменных и функций) раздельно от АСТ, что позволяет нам реализовывать очень гибкую систему рефакторинга.

Поделиться статьей ...Share on Facebook0Share on Google+0Tweet about this on TwitterShare on LinkedIn0Share on VKPrint this page

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *