Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Compilers corner

Boost , Meta State Machine (MSM) , Chapter 4.  Performance / Compilers

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Compilers corner

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

VC8:

template <class StateType>
typename ::boost::enable_if<
       typename ::boost::mpl::and_<
                typename ::boost::mpl::not_<
                    typename has_exit_pseudo_states<StateType>::type
                >::type,
                typename ::boost::mpl::not_<
                    typename is_pseudo_exit<StateType>::type
                >::type 
       >::type,
       BaseState*>::type                   

Я получаю следующую ошибку:

ошибка C2770: недействительный явный аргумент шаблона для «глобального пространства имен»::boost::enable_if<...>::... "

Если я сейчас удалю первый “::” в ::boost:::mpl, компилятор закроется. Таким образом, в этом случае невозможно следовать рекомендациям Boost & #8217.

VC9:

  • Это мое любимое время’. Знаете ли вы, почему псевдосостояния выхода упоминаются в таблице переходов с помощью а “submachine::exit_pt”? Потому что “exit” разрушит компилятор. “Exit” также невозможно, потому что он разрушит компилятор на одной машине, но не на другой (компилятор был установлен с того же диска).

  • Иногда удаление политики приводит к сбоям компилятора, поэтому некоторые версии определяют фиктивную политику под названием WorkaroundVC9.

  • Тип: В то время как g++ и VC9 компилируют & #8220; Standard & #8221; машины состояния в сопоставимые времена, Typeof (при поддержке обоих способов) ведет себя квадратично с VC9 и VC10.

  • eUML: в случае сбоя компилятора изменение порядка определений состояния (первые состояния без входа или выхода) иногда решает проблему.

g++ 4.x: Скучный компилятор, почти все работает почти так, как ожидалось. Будучи не юристом по языку, я не уверен в следующем “Typeof problem”. VC9 и g++ расходятся во мнениях по вопросу о том, можно ли вывести BOOST_ Тип TYPEOF генерируется без предварительного определения типдефа. Буду благодарен за ответ на этот вопрос. Я нашел только два способа взлома компилятора:

  • Добавьте больше конструкций eUML, пока что-то не взорвется (особенно с g++-4.4)

  • Функция build_terminate использует 2 mpl::push_back вместо mpl::insert_range, потому что g++ не принимает вставку_range.

Вы можете протестировать реализацию деклатипа компилятора’s с помощьюследующего стресс-тестаи повторно активировать комментируемый код до сбоя компилятора.

Статья Compilers corner раздела Meta State Machine (MSM) Chapter 4.  Performance / Compilers может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 4.  Performance / Compilers ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 20:02:56/0.0083839893341064/1