Под влиянием предыдущей статьи предлагаю продолжить тему создания собственной реализации такой полезной идиомы, как function в C++, и рассмотреть некоторые аспекты ее использования.
Читать полностью »
Метка «c++11» - 5
Продолжаем изобретать function
2013-01-22 в 8:28, admin, рубрики: c++, c++11, function, метки: c++, c++11, functionШаблоны с переменным количеством аргументов на примере обертки для Lua
2013-01-14 в 10:44, admin, рубрики: c++, c++11, Lua, templates, tuple, ооп, метки: c++, c++11, lua, templates, tupleПонадобилось мне прикрутить Lua к проекту на C++. Писать обертки в ручную — лень (слишком много писать), готовые не подходили по тем или иным причинам. Решил написать свою. А потому задался вопросом, как максимально упростить интерфейс? От одной только мысли об этом в голову лезли жутчайшие конструкции из шаблонов. Так оно в последствии и оказалось, но гораздо проще, чем представлялось.
В C++11 появились шаблоны с переменным числом аргументов, это позволяет писать шаблонные функции/классы так, как в C++03 было невозможно вовсе. Такие шаблоны сильно упрощают задачу.
Первым делом понадобилось написать обертку над простейшими действиями с интерпретатором (можно было бы обойтись простыми вызовами к C API Lua, но держать в памяти кучу индексов различных значений в стеке мне не хочется. Поэтому я обернул их в несколько функций, которые помимо того, что избавляют от необходимости передавать в каждую функцию указатель на состояние интерпретатора, практически не требуют индексов, так как они имеют значения по умолчанию.
В итоге хотелось увидеть интерфейс близкий к следующему:
lua.export_function(some_function);
Android: Написание многопоточных приложений с помощью Intel® Threading Building Blocks
2012-12-21 в 12:27, admin, рубрики: android, android development, c++, c++ библиотеки, c++11, intel tbb, intel threading building blocks, tbb, Блог компании Intel, параллельное программирование, Разработка под android, метки: android, android development, c++, c++ библиотеки, c++11, intel tbb, intel threading building blocks, tbb Совсем недавно мы рассматривали написание многопоточных приложений для магазина Windows с помощью Intel® Threading Building Blocks(Intel® TBB). Там утверждается, что использование кроссплатформенной библиотеки TBB позволяет легко переносить вычислительную часть на другие платформы. Android как раз сгодится для хорошего примера одной из «других платформ», подробности под катом.
Читать полностью »
Дружим Python 3 с MS Visual C++. Строим мост в Boost.Python с автоматической перекодировкой
2012-12-09 в 3:16, admin, рубрики: boost, boost.python, c++, c++11, microsoft, python, python 3.3, python3, visual c++, Visual Studio, visual studio 2012, windows, Программирование, С++, метки: boost, boost.python, c++11, microsoft, python, python 3.3, python3, visual c++, Visual Studio, visual studio 2012, windows, С++Всем доброго {daytime}!
Сегодня пришла пора рассказать вам о фундаментальной проблеме перекодировки при взаимодействии проекта собранного на MS Visual C++ на платформе Windows и наиболее приятной скриптовой обвязки для языка C++, благодаря библиотеке Boost.Python, собственно написанной для языка Python.
Вы ведь хотите использовать для вашего приложения на C++ под ОС Windows хорошую скриптовую обвязку на последней версии Python 3.x, либо вы хотите использовать для вашего приложения на Python максимально ускоренный участок кода вашего модуля, переписанный на C++. В обоих случаях, если вы знаете оба языка как минимум хорошо, вам стоит это прочитать.
Читать полностью »
Что нового в работе с исключениями в C++11
2012-12-01 в 13:19, admin, рубрики: c++, c++11, exception, exception handling, Программирование, метки: c++, c++11, exception, exception handlingВ интернете довольно много говорят о новых возможностях C++11: auto, lambda, variadic templates. Но как-то обошли стороной новые возможности работы с исключениями, которые предоставляет язык и стандартная библиотека.
От предыдущей версии стандарта остался механизм генерации исключений (throw), проверка того, что мы находимся в процессе обработки исключения (std::uncaught_exception), механизм остановки, если исключение не было обработано. Также есть иерархия стандартных исключений на базе класса std::exception.
Новый стандарт добавляет к этим вещам еще несколько сущностей, которые, на мой взгляд, могут существенно упростить работу с исключениями в C++.
Windows 8: Написание многопоточных приложений для магазина Windows с помощью Intel® Threading Building Blocks
2012-11-16 в 4:58, admin, рубрики: c++, c++ библиотеки, c++11, intel parallel studio, intel tbb, intel threading building blocks, tbb, Visual Studio, Блог компании Intel, параллельное программирование, метки: c++, c++ библиотеки, c++11, intel parallel studio, intel tbb, intel threading building blocks, tbb Как известно, в программном интерфейсе приложений для магазина Windows (Windows Store apps) отсутствуют многие функции работы с потоками, начиная с CreateThread() и заканчивая работой с TLS ключами. И это отличный повод перейти от параллелизма, основанного на системно-зависимых потоках к параллелизму, основанному на задачах. Данный пост излагает пошаговую инструкцию о том, как написать простейший многопоточный пример, который проходит аттестацию для магазина Windows (Windows App Certification Kit validation) и, гипотетически, может быть масштабирован до игрушек космического масштаба. А поскольку используется кроссплатформенная библиотека Intel® Threading Building Blocks (Intel® TBB, TBB, threadingbuildingblocks.org), то вычислительная часть может быть легко перенесена на другие платформы, и задача будет заключаться только в том, чтобы нарисовать новый красивый графический интерфейс.
Читать полностью »
«Универсальные» ссылки в C++11 или T&& не всегда означает «Rvalue Reference»
2012-11-08 в 22:03, admin, рубрики: c++, c++11, переводы, Песочница, метки: c++11, переводы Не так давно Скотт Майерс (англ. Scott Meyers) — эксперт по языку программирования C++, автор многих известных книг — опубликовал статью, описывающую подробности использования rvalue ссылок в C++11.
На Хабре эта тема еще не поднималась, и как мне кажется, статья будет интересна сообществу.
Оригинал статьи: «Universal References in C++11—Scott Meyers»
«Универсальные» ссылки в C++11
T&& не всегда означает “Rvalue Reference”
Автор: Scott Meyers
Возможно, наиболее важным нововведением в C++11 являются rvalue ссылки. Они служат тем фундаментом, на котором строятся «семантика переноса (англ. move semantics)» и «perfect forwarding». (Вы можете ознакомится с основами данных механизмов в обзоре Thomas’а Becker’а).
Синтаксически rvalue ссылки объявляются также, как и «нормальные» ссылки (теперь называемые lvalue ссылками), за исключением того, что вы используете два амперсанда вместо одного. Таким образом, эта функция принимает параметр типа rvalue-reference-to-Widget:
void f(Widget&& param);
Учитывая, что rvalue ссылки объявляются с помощью “&&”, было бы разумно предположить, что присутствие “&&” в объявлении типа указывает на rvalue ссылку. Но это не так:
Widget&& var1 = someWidget; // здесь “&&” означает rvalue ссылку
auto&& var2 = var1; // здесь “&&” НЕ означает rvalue ссылку
template<typename T>
void f(std::vector<T>&& param); // здесь “&&” означает rvalue ссылку
template<typename T>
void f(T&& param); // здесь “&&” НЕ означает rvalue сосылку
RAII и делегирующие конструкторы в C++11
2012-11-04 в 4:21, admin, рубрики: c++, c++11, constructor, raii, метки: c++, c++11, constructor, delegaте, raiiВ этом посте пойдет речь об одной интересной фичи в C++11, которая называется делегирующие конструкторы (delegating constructors): почему она интересна, и как ее можно применить для более эффективного управления ресурсами, т.е. реализации идиомы RAII.
Презентация Герба Саттера про Visual C++ и C++11 на конференции BUILD
2012-11-03 в 0:35, admin, рубрики: c++, c++11, visual c++, метки: c++11, visual c++
Фото Channel9
Только что на Channel 9 закончилась презентация Герба Саттера на конференции BUILD в Редмонде. Кому интересен конспект его выступления с последними новостями про Visual C++ и C++11 в целом — прошу под кат.
Демонстрация сбоев программы при отсутствии барьеров памяти
2012-10-20 в 20:35, admin, рубрики: c++, c++11, lock-free, mobile development, многопоточность, параллельное программирование, метки: c++11, lock-free, АРМ, многопоточность, параллельное программированиеДжефф Прешинг (Jeff Preshing) опубликовал отличную демонстрацию, как нормальный код C++ возвращает непредсказуемый результат на процессорах со слабо упорядоченной обработкой очереди запросов (Weakly-Ordered CPU), то есть на всех многоядерных ARM-процессорах. Например, на iPhone или каком-нибудь современном Android-устройстве.
Простая программа C++ с двумя потоками 20.000.000 раз прибавляет единичку к значению, защищённому мьютексом, — и каждый раз на выходе получается разный результат, который меньше 20.000.000!
Как говорится, наш враг — CPU.
Читать полностью »