C (или любой) компилятор детерминированной производительности - PullRequest
17 голосов
/ 13 сентября 2008

Во время работы над недавним проектом меня посетил представитель отдела контроля качества клиента, который задал мне вопрос, который я раньше не рассматривал:

Откуда вы знаете, что используемый вами компилятор генерирует машинный код, который точно соответствует функциональности кода c и что компилятор полностью детерминирован?

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

Я осознаю, что этот процесс не является проблемой для всех, и на самом деле ответом может быть просто ... "ты перебрал баррель и разберись с этим". Однако при работе во встроенной среде вы неявно доверяете своему компилятору. Как я могу доказать себе и QA, что я прав в этом?

Ответы [ 22 ]

0 голосов
/ 13 сентября 2008

Я думаю, что можно как-то свести эту проблему к проблеме остановки .

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

Если вы используете другой, "безопасный" компилятор, я не уверен. Я уверен, что написать компилятор с нуля было бы легче.

0 голосов
/ 19 сентября 2008

Даже квалифицированный или сертифицированный компилятор может дать нежелательные результаты. Сохраняйте свой код простым и тестируйте, тестируйте, тестируйте. Это или пройтись по машинному коду вручную, не допуская никаких человеческих ошибок. PLus операционная система или любая другая среда, в которой вы работаете (желательно без операционной системы, только ваша программа).

Эта проблема была решена в критически важных средах с момента появления программного обеспечения и компиляторов. Как и многие другие, кто ответил, также знают. В каждой отрасли есть свои правила - от сертифицированных компиляторов до стиля программирования (вы всегда должны программировать таким образом, никогда не используйте тот или иной), множество тестов и рецензирование. Проверка каждого пути выполнения и т. Д.

Если вы не работаете в одной из этих отраслей, тогда вы получаете то, что получаете. Коммерческая программа на операционной системе COTS на оборудовании COTS. Это не удастся, это гарантия.

...