![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
PrefaceBoost , ,
За последний раз многие новые функции были разработаны как дополнения к Спирит [4] конструкция парсера и мы чувствовали себя все больше и больше, что было бы очень полезно иметь «реальный мир» пример, который может быть использован в качестве песочницы для тестирования удобства использования определенных функций. Дополнительно недавнее обсуждение списка рассылки Boost показало широкую заинтересованность разработчиков в создании современной библиотеки с открытым исходным кодом C++. Таким образом, у нас была идея реализовать предпроцессор C++, чтобы соответствовать этим потребностям - Wave родился. The Wave C++ preprocessor library uses the Spirit[4] parser construction library to implement a C++ lexer with ISO/ANSI Standards conformant preprocessing capabilities. It exposes an iterator interface, which returns the current preprocessed token from the input stream. This preprocessed token is generated on the fly while iterating over the preprocessor iterator sequence (in the terminology of the STL these iterators are forward iterators). The C++ preprocessor is a macro processor that under normal circumstances is used automatically by your C++ compiler to transform your program before actual compilation. It is called a macro processor because it allows to define macros, which are brief abbreviations for longer constructs. The C++ preprocessor provides four separate facilities that you can use as you see fit:
Эти функции в значительной степени недооцениваются сегодня, даже более того, препроцессор был испорчен настолько долго, что его использование просто не было эффективно продвинутым до тех пор, пока не появилась предпроцессорная библиотека Boost [7] несколько лет назад. Только сегодня мы начинаем понимать, что предпроцессорное генеративное метапрограммирование в сочетании с метапрограммированием шаблонов в C++ является, безусловно, одним из самых мощных средств отражения/метапрограммирования, которые когда-либо поддерживал любой язык. Стандарт C++ [2] был принят еще в 1998 году, но до сих пор нет (известного мне) коммерческого компилятора C++, который имеет без ошибок выполнение довольно простых предпроцессорных требований, предусмотренных в нем. Это может быть результатом упомянутой недооценки или даже запрета препроцессора на хороший стиль программирования в течение последних нескольких лет или может быть результатом несколько неловкого стандартного диалекта английского языка, используемого для его описания. Два проекта с открытым исходным кодом являются исключениями из этого: gcc и Clang (подпроект LLVM), оба обеспечивая препроцессоры с очень хорошими стандартами соответствия. So the main goals for the Wave project are:
На первых шагах не планируется сделать очень высокую производительность или очень маленький C++ препроцессор. Если вы ищете эти цели, вам, вероятно, придется посмотреть на другие места. Хотя наш предпроцессорный итератор C++ работает так, как ожидалось, и может использоваться в качестве референтной реализации, например, для тестирования других предпроцессорных библиотек в качестве библиотеки Boost Preprocessor [7] et.al. Тем не менее, недавняя работа привела к удивительным улучшениям производительности (если сравнивать с более ранними версиями). Волна все еще несколько медленнее, как, например, предпроцессоры на основе EDG (Intel, Comeau) на простых входных файлах, однако, по мере увеличения сложности, время распределяется непосредственно на EDG. Время предварительной обработки линейно распределяется под волной, что заставляет его легко превзойти предварительные процессы на основе EDG, когда сложность увеличивается. Как показали тесты, библиотека Wave очень соответствует C++ Стандартный, такой, что он компилирует несколько строгих конформантных макро определений, которые даже не совместимы с предварительно процессорами на основе EDG (то есть Comeau или Intel).
Copyright © 2003-2011 Hartmut Kaiser Last updated: Sunday, January 9, 2011 16:17 Статья Preface раздела может быть полезна для разработчиков на c++ и boost. Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: ::
|
|||||||||||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |