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

Chapter 29. Boost.Proto

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Part I. The Boost C++ Libraries (BoostBook Subset)

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

PrevUpHomeNext

Chapter 29. Boost.Proto

Eric Niebler

Распространяется под лицензией Boost Software License, версия 1.0. (См. сопроводительный файл LICENSE_1_0.txt или копию по адресуhttp://www.boost.org/LICENSE_1_0.txt)

Таблица содержания

Preface
Users' Guide
Getting Started
Fronts Ends: Defining Terminals and Non-Terminals of Your EDSL
Intermediate Form: Understanding and Introspecting Expressions
Back Ends: Making Expression Templates Do Useful Work
Examples
Background and Resources
Glossary
Reference
Concepts
Classes
Functions
Header <boost/proto/args.hpp>
Header <boost/proto/core.hpp>
Header <boost/proto/debug.hpp>
Header <boost/proto/deep_copy.hpp>
Header <boost/proto/domain.hpp>
Header <boost/proto/eval.hpp>
Header <boost/proto/expr.hpp>
Header <boost/proto/extends.hpp>
Header <boost/proto/functional.hpp>
Header <boost/proto/functional/fusion.hpp>
Header <boost/proto/functional/fusion/at.hpp>
Header <boost/proto/functional/fusion/pop_back.hpp>
Header <boost/proto/functional/fusion/pop_front.hpp>
Header <boost/proto/functional/fusion/push_back.hpp>
Header <boost/proto/functional/fusion/push_front.hpp>
Header <boost/proto/functional/fusion/reverse.hpp>
Header <boost/proto/functional/range/begin.hpp>
Header <boost/proto/functional/range/empty.hpp>
Header <boost/proto/functional/range/end.hpp>
Header <boost/proto/functional/range/rbegin.hpp>
Header <boost/proto/functional/range/rend.hpp>
Header <boost/proto/functional/range/size.hpp>
Header <boost/proto/functional/std.hpp>
Header <boost/proto/functional/std/iterator.hpp>
Header <boost/proto/functional/std/utility.hpp>
Header <boost/proto/fusion.hpp>
Header <boost/proto/generate.hpp>
Header <boost/proto/literal.hpp>
Header <boost/proto/make_expr.hpp>
Header <boost/proto/matches.hpp>
Header <boost/proto/operators.hpp>
Header <boost/proto/proto.hpp>
Header <boost/proto/proto_fwd.hpp>
Header <boost/proto/proto_typeof.hpp>
Header <boost/proto/repeat.hpp>
Header <boost/proto/tags.hpp>
Header <boost/proto/traits.hpp>
Header <boost/proto/transform.hpp>
Header <boost/proto/transform/arg.hpp>
Header <boost/proto/transform/call.hpp>
Header <boost/proto/transform/default.hpp>
Header <boost/proto/transform/env.hpp>
Header <boost/proto/transform/fold.hpp>
Header <boost/proto/transform/fold_tree.hpp>
Header <boost/proto/transform/impl.hpp>
Header <boost/proto/transform/integral_c.hpp>
Header <boost/proto/transform/lazy.hpp>
Header <boost/proto/transform/make.hpp>
Header <boost/proto/transform/pass_through.hpp>
Header <boost/proto/transform/when.hpp>
Header <boost/proto/context.hpp>
Header <boost/proto/context/callable.hpp>
Header <boost/proto/context/default.hpp>
Header <boost/proto/context/null.hpp>
Appendices
Appendix A: Release Notes
Appendix B: History
Appendix C: Rationale
Appendix D: Implementation Notes
Appendix E: Acknowledgements

На небе и земле, Горацио, больше вещей, чем мечтают в вашей философии.& #8221;

— Уильям Шекспир

Description

Proto является основой для создания встраиваемых доменных языков на C++. Он предоставляет инструменты для построения, проверки типов, преобразования и выполненияшаблонов выражения. Более конкретно, Proto предоставляет:

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

Motivation

Шаблоны экспрессии — это продвинутый метод, который разработчики библиотек C++ используют для определения встроенных мини-языков, ориентированных на конкретные проблемные домены. Этот метод был использован для создания эффективных и простых в использовании библиотек для линейной алгебры, а также для определения генераторов парсера C++ с читаемым синтаксисом. Но разработка такой библиотеки предполагает написание непомерного количества нечитаемых и неподдерживаемых шаблонов. Повышаю. Proto облегчает разработкудоменных встроенных языков (EDSL). Используйте Proto для определения примитивов вашего мини-языка и позвольте Proto справиться с перегрузкой оператора и конструкцией дерева экспрессии. Немедленно оцените дерево выражения, пройдя по нему объект функции. Или преобразуйте дерево выражения, определив грамматику вашего мини-языка, украшенного ассортиментом трансформаций дерева, предоставленных Proto или определенных вами. Затем используйте грамматику, чтобы дать пользователям короткие и читаемые синтаксические ошибки для недействительных выражений. Больше нет mumbo-jumbo — библиотека шаблонов выражений, разработанная с помощью Proto, является декларативной и читаемой.

Прото является EDSL для определения EDSL.

How to Use This Documentation

В этой документации используются следующие соглашения об именах и форматировании.

  • Код находится в<fixedwidth font>и является синтаксисом.
  • Заменимый текст, который вам нужно будет предоставить, находится в<italics>.
  • Если имя относится к свободной функции, оно указывается следующим образом:<free_function()>; то есть оно находится в кодовом шрифте, а за его именем следует<()>, чтобы указать, что это свободная функция.
  • Если имя относится к шаблону класса, оно указывается следующим образом:<class_template<>>; то есть оно находится в шрифте кода, а за его именем следует<<>>, чтобы указать, что это шаблон класса.
  • Если имя относится к функционально-подобному макросу, оно указывается следующим образом:<MACRO()>; то есть оно является верхним шрифтом кода, а за его именем следует<()>, чтобы указать, что это функционально-подобный макрос. Объектоподобные макросы появляются без следа<()>.
  • Имена, которые относятся кпонятиямв общем смысле программирования, указаны в CamelCase.
[Note] Note

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

Наконец, вы можете мысленно добавить следующие фрагменты кода в этот документ:

// Include all of Proto
#include <boost/proto/proto.hpp>
// Create some namespace aliases
namespace mpl = boost::mpl;
namespace fusion = boost::fusion;
namespace proto = boost::proto;
// Allow unqualified use of Proto's wildcard pattern
using proto::_;

Последний пересмотр: 21 сентября 2016 года в 14:37:37 GMT


PrevUpHomeNext

Статья Chapter 29. Boost.Proto раздела The Boost C++ Libraries BoostBook Documentation Subset Part I. The Boost C++ Libraries (BoostBook Subset) может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Part I. The Boost C++ Libraries (BoostBook Subset) ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 16:50:16/0.0074300765991211/0