Вопрос

Предположим, вам нужен компилятор C.Было бы предпочтительно написать тот компилятор в C-похожем на языке, учитывая сложность компилятора этой степени.В лучшем случае Compiler C будет написан в C, но это потребует компилятора C для начала.Если ошибка производится в составе одного из ранних итераций компиляторов, он может распространяться.Как компиляторы убедитесь, что этого не происходит?Очевидно, что код не является безупречным, даже процессором не является, но если вы не имеете каким-либо измерению стабильности, вы даже не знаете, если ваш компилятор стабилен.Какие предположения сделаны и как это оправдано?Я бы представлял, что это тоже будет в архитектуре.

Редактировать: по стабильности я имею в виду, что код работает как предназначен.

Это было полезно?

Решение

Слово, которое используют авторы компилятора для этого, - это «соответствие».Компилятор, который правильно реализует спецификацию языка, соответствует.Есть компании, которые как часть своего бизнеса, продают проверки соответствия различным стандартам, включая языки программирования.

Редко к ошибкам пропагандировать через поколения компилятора случайно (хотя Это произошло нарочно ).

Другие советы

Это происходит, что компиляторы содержат тонкие ошибки.Никаких блатантных ошибок, потому что блатантские ошибки будут обнаружены и исправлены.

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

Решение будет заключаться в том, чтобы сделать компилятор достаточного качества, что ошибки очень редки, а крайне редки внутри компилятора.Мы также ожидаем, что ошибки компилятора повлияют на очень сложный код, поэтому автор компилятора должен написать код, который прост и следует общим моментом кодирования.

Один ответ - это тестирование, тестирование, тестирование.Например.GCC поставляется с постоянно растущим набором тестов, которые проверяются каждый раз, когда компилятор построен.Многие компиляторы должны пройти так называемый Triple Test: Compile Code для вашего компилятора C с использованием компилятора A, давая C_1;Компиляция C с C_1, давая C_2, компилируйте C с C_2, давая C_3.Теперь C_2 и C_3 были составлены с C и должны быть равными.Если нет, что-то рыбное происходит.

Посмотрите на jeher's "встроен в академию" блог, он один из людей, работающих вокругMLVM Compiler Tools и регулярно касается инструментов и техник, используемых для создания компилятора лучше (или автоматизировать части его здания).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с cs.stackexchange
scroll top