Pull to refresh

Comments 5

Интересно!


Вы смотрели, как shrinking реализован в Property Testing? Оно примерно про то же самое.


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

Этого я точно не видел, поэтому спасибо за совет! Конечно, нужно посмотреть, как аналогичные задачи решались существующими инструментами. Просто удивило, что даже совсем примитивная стратегия тоже на что-то способна.


Насчёт добавления — тут есть нюанс, изначально не указанный в статье, который я сейчас дописал: у меня нет сериализаторов, превращающих AST в текст. Зато существующие языковые модули проставляют начало и конец узла в исходном тексте, поэтому можно взять оригинальный файл и "выкинуть лишнее" — отсюда изначальный посыл с итеративным выкидыванием лишнего. Это не ответ "нет" на ваш комментарий — просто обоснование, почему изначальное решение было таким.

у меня нет сериализаторов, превращающих AST в текст

Для многих языков они есть (преимущественно для тех, кто под капотом имеет дело с AST, а не прикручивает AST сбоку спустя пару сотен лет существования компилятора / интерпретатора — см. Elixir, Julia, и т. д.). Я бы начал именно с таких языков, а потом уже вкручивал костыли для обделенных, а не наоборот — так может быть проще выстроить правильную архитектуру. Хотя, шут его знает, на самом деле.

Я подозреваю, что даже для JJTree можно такие сериализаторы генерировать как-нибудь, если допилить генератор парсеров. Хотя, в общем случае — не факт, не удивлюсь, если про это даже какая-нибудь теорема есть. :)


Здесь же идея была в том, чтобы взять готовые модули (в особенности, свеженаписанный модуль для Modelica) и разом получить инструмент для всех этих языков (даже для неопубликованных реализаций). В целом, две существующих стратегии запросто обобщаются на произвольное описание ANTLR / JJTree / чего-угодно — хоть Kaitai Struct. Хотя результат, да, может получиться менее удачный, чем если использовать "конструктивный" подход.

Ну, в любом случае, дело важное, полезное, и нужное :)


Помню, отвечал на какой-то не очень аккуратный опросник по CS, там был вопрос: что будет считаться основным(-и) достоинством(-ами) языка в следующем году? И «наличие нативного AST» даже упомянуто не было. Хотя оно дает примерно в стопиццот раз больше, чем строгая статическая типизация, например.

Sign up to leave a comment.

Articles