В этой главе сказа про дружбу C++ и Python будет на удивление мало использования Boost.Python. Передача исключений туда и обратно является по сути слабым местом данной библиотеки. Будем обходиться родным API языка Python, а где это возможно использовать Boost.Python.
Тем не менее Boost.Python создаёт окружение, в котором исключения из C++ попадают в Python в виде стандартного RuntimeError, а обратно из Python генерируется исключение C++ типа error_already_set, что означает «тебе что-то прилетело, сходи сам почитай что там». И вот здесь нам как раз будет не лишним использовать C-API языка Python, чтобы вычитать необходимую информацию об исключении и преобразовать в соответствующий класс сообразно логике приложения.
К чему такие сложности? — Дело в том, что в Python, в отличие от C++, кроме текста исключения и его типа приходит ещё и traceback — стек до места возникновения исключения. Давайте немного расширим стандартный std::exception дополнительным параметром для этого stacktrace, а заодно напишем конвертер исключений туда и обратно из классов C++ в классы исключений Python.
Читать полностью »
Метка «c++» - 48
Разработка приложений для Android с C#
2013-02-14 в 17:53, admin, рубрики: android, mobile developement, mobile development, monodroid, метки: c++, mobile developement, monodroidMonodroid и Monotouch это фреймворки от xamarin, которые дают возможность разрабатывать приложение на языке C# для Android и iOS соответственно. Так как это относительно новая технология информации в интернете не слишком много (за исключением офф сайта и большого количества тем на stackoverflow.com), на русском языке же я не нашел никаких туториалов и информации вообще.
Что бы устранить это недоразумение решил написать небольшой туториал о том как начать разрабатывать приложения под мобильные платформы при помощи этих фреймворков. В этой статье я рассмотрю только Monodroid.
Cборка js, redjs builder
2013-02-12 в 20:54, admin, рубрики: .net, javascript, makefile, wpf, Песочница, я пиарюсь, метки: .net, c++, javascript, makefile, wpfПривет читатель.
Что-то про вступление
Раз уж я все таки уволился с работы и есть свободное время, расскажу немного про сборку скриптов, а так же про свое кустарное решение годичной давности — redjs builder. Статья, наверное, заинтересует js-разработчиков, которые ведут крупные проекты, которые не удобно вести в одном файле.
О чем речь?
Если вы js разработчик и вы в своей жизни писали что-то большее чем плагин слайдера на jquery, то вам наверняка приходила в голову мысль: «а вот как бы было удобно если бы 1-н файл разделить на несколько». И у меня такая идея возникала не однократно, ещё когда активно занимался написанием своей js библиотеки. И тут в свое время я набил себе бока…
Читать полностью »
Полезные мелочи при разработке на C# под AutoCAD
2013-02-11 в 7:27, admin, рубрики: .net, autocad, cad, CAD/CAM, Программирование, метки: .net, Autocad, c++, cad, Программирование В продолжение своего предыдущего поста habrahabr.ru/post/164305/ продолжаю публиковать интересные тонкости при разработке на C# под AutoCAD. Сегодня речь пойдет о решении проблемы передачи фокуса в AutoCAD при использования Modeless Window.
Читать полностью »
Проглядывая книжку «Эффективное использование C++», Скотта Мейерса, которая ( и я никого не удивлю ) достойна всяческих похвал, меня очень тронуло, то с какой возбуждённостю, вдохновлённостю, трепетом ( может мне показалось? ) автор говорит о шаблонах и их возможностях. Приведу маленький кусочек:
Метапрограммирование шаблонов ( template metaprogramming — TMP ) — это процесс написания основанных на шаблонах программ на C++, исполняемых во время компиляции. На минуту задумайтесь об этом: шаблонная метапрограмма — это программа, написанная на C++, которая исполняется внутри компилятора C++…
Было доказано, что технология TMP предоставляет собой полную машину Тьюринга, то есть обладает достаточной мощь для любых вычислений...
Да уж… сердце заколотало, в очередной раз удивился — только подумать — полная машина Тьюринга со всемы вытекающими последствиями… Как по мне, это просто невероятно и удивительно… хотя, кто его знает…
Предлагаю посмотреть на совсем уж маленький кусочек мира больших возможностей и невероятных приключений — попробуем вычислить на этапе компиляци значение, небезызвестного, числа e.Читать полностью »
Boost Property Tree и его парсер XML
2013-02-10 в 20:47, admin, рубрики: boost, c++, метки: boost, c++
О чем эта статья
В статье рассказывается про библиотеку Property Tree Library, а именно:
- Что такое Property Tree;
- Примеры использования Property Tree;
- Как конвертировать Property Tree в XML-код и обратно.
dot42 — компилятор C# для Dalvik Runtime
2013-02-07 в 19:42, admin, рубрики: .net, android, Dalvik, dex, Разработка под android, метки: .net, android, c++, Dalvik, dexГлавным недостатком Mono для Android является то, что для работы приложений требуется отдельная среда выполнения, отличная от Dalvik. И хотя полный доступ к CLR выглядит весьма привлекательно, проксирование и маршаллинг вызовов от одной среды выполнения к другой могут сильно повлиять на производительность. Так почему бы не убрать промежуточную компиляцию в IL-код и получать сразу рабочий Dex-код? Этим и занимается проект dot42.
В январе, после 1 года разработки, авторы проекта dot42 наконец-то перешли от обещаний к пряникам. И, хотя проект еще не дотягивает до состояния боевого продукта-конкурента Mono, стоит, как минимум, его рассмотреть и попробовать.
Читать полностью »
Задачи и отмена в .Net — tips & tricks
2013-02-07 в 17:30, admin, рубрики: .net, tpl, метки: .net, c++, tpl С выходом .NET Framework 4.0 в состав BCL была добавлена библиотека Task Parallel Library (TPL), реализующая параллелизм на основе задач. В основе библиотеки лежат типы Task
и унаследованный от него тип Task<TResult>
. Эти типы являются обёртками для асинхронных операций; они позволяют абстрагироваться от таких технических деталей, как, например, потоки и синхронизировать асинхронные операции друг с другом.
В этой же версии .NET Framework появился мини-framework для кооперативной отмены асинхронных операций. Состоит он из всего трёх типов:
CancellationTokenSource
— создаёт маркёры отмены (свойствоToken
) и обрабатывает запросы на отмену операции (перегруженные методыCancel
/CancelAfter
).CancellationToken
— маркёр отмены; позволяет несколькими способами отслеживать запросы на отмену операции: опросом свойстваIsCancellationRequested
, регистрацией callback-функции (через перегруженный методRegister
), ожиданием на объекте синхронизации (свойствоWaitHandle
).OperationCanceledException
— исключение, выброс которого по соглашению означает, что запрос на отмену операции был обработан и операция должна считаться отменённой. Предпочтительный способ генерации исключения — вызов методаCancellationToken. ThrowIfCancellationRequested
.
Механизм отмены через CancellationToken
является стандартным для TPL — есть перегрузки методов, принимающих CancellationToken
, исключения OperationCanceledException
специальным образом обрабатываются и т.д. Однако, как и в любом другом API, есть свои тонкости, хитрости, best practices.
Читать полностью »