<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
	<title>Хабрахабр / C++ / Захабренные</title>
	<link>http://habrahabr.ru/rss/hub/cpp/</link>
	<description><![CDATA[Захабренные посты из хаба «C++» на Хабрахабре]]></description>
	<language>ru</language>
	<managingEditor>editor@habrahabr.ru</managingEditor>
	<generator>habrahabr.ru</generator>
	<pubDate>Sun, 27 May 2012 05:41:31 GMT</pubDate>
	<lastBuildDate></lastBuildDate>
	<image>
		<link>http://habrahabr.ru/</link>
		<url>http://habrahabr.ru/i/logo.gif</url>
		<title>Хабрахабр</title>
	</image>
	
		
			
		
	<item>
		<title><![CDATA[Разрабатываем модуль PHP на C++. Часть 1: экскурс в мир Zend Engine 2]]></title>
		<guid isPermaLink="true">http://habrahabr.ru/post/144582/</guid>
		<link>http://habrahabr.ru/post/144582/</link>
		<description><![CDATA[Доброго времени суток, уважаемое Харбасообщество!<br/>
<br/>
Под катом изложена некоторая информация касательно написания расширений для PHP c использованием C++, почерпнутая мной из различных источников (по большей части англоязычных) и ковыряния исходников Zend Engine 2 во время разработки одного модуля для собственных нужд. Так как объем ее достаточно велик, далее я старался быть краток. <br/>
<br/>
Итак, в этой части:<br/>
<ul>
<li><a href="#anch1">Внутренний мир Zend Engine 2</a></li>
<li><a href="#anch2">Иерархия типов данных ZE и структура модуля расширения</a></li>
</ul> <br/>
А вот до C++ в этой части мы так и не доберемся… =)<br/>
<br/>
<i><u>Маленький дисклеймер:</u> содержимое статьи не есть истина в первой инстанции, не основывается на официальной документации (а есть ли она?) и является моим субъективным взглядом на ZE 2. Тем не менее, в свое время я был бы рад найти нечто подобное на просторах Рунета, дабы сэкономить время на начальных этапах разработки.<br/>
</i><br/>
 <a href="http://habrahabr.ru/post/144582/#habracut">Читать дальше &rarr;</a>]]></description>
		
		<pubDate>Sat, 26 May 2012 12:08:57 GMT</pubDate>
		<author>Ostrovski</author>
		<category><![CDATA[PHP]]></category><category><![CDATA[C++]]></category>
		<category><![CDATA[PHP]]></category><category><![CDATA[extensions]]></category><category><![CDATA[C]]></category><category><![CDATA[C++]]></category><category><![CDATA[zend engine]]></category>
	</item>
	
	
	
	
	
	

		
	<item>
		<title><![CDATA[Type-rich Programming]]></title>
		<guid isPermaLink="true">http://habrahabr.ru/post/144334/</guid>
		<link>http://habrahabr.ru/post/144334/</link>
		<description><![CDATA[Посмотрев конференцию <a href="http://channel9.msdn.com/Events/GoingNative/GoingNative-2012">GoingNative 2012</a> решил попытаться описать «best practice» для написания программ в стиле C++11. Планируется цикл статей, кому интересно,  <a href="http://habrahabr.ru/post/144334/#habracut">Читать дальше &rarr;</a>]]></description>
		
		<pubDate>Tue, 22 May 2012 17:51:58 GMT</pubDate>
		<author>c0d3r</author>
		<category><![CDATA[Совершенный код]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[C++]]></category>
		<category><![CDATA[c++11]]></category><category><![CDATA[best practice]]></category><category><![CDATA[style guide]]></category>
	</item>
	
	
	
	
	
	

		
	
	<item>
		<title><![CDATA[[Из песочницы] Вычисление CRC32 строк в compile-time]]></title>
		<guid isPermaLink="true">http://habrahabr.ru/post/143975/</guid>
		<link>http://habrahabr.ru/post/143975/</link>
		<description><![CDATA[<img align="right" src="http://habrastorage.org/storage2/9db/0e3/d98/9db0e3d984cdeb50064e36a8526aaaa3.png"/>По своей программистской природе я очень не люблю неоптимальность и избыточность в коде. И вот, читая в очередной раз на работе исходный код Mail.Ru Агента, вновь наткнулся на одну особенность в способе реализации перевода строк продукта на разные языки.<br/>
<br/>
Локализация здесь осуществляется довольно нехитро. Все строки, требующие перевода, оборачиваются в макрос <code>_TR()</code>:<br/>
<pre><code class="cpp">wprintf(L&quot;%s\n&quot;, _TR(&quot;Some translating string&quot;));
</code></pre><br/>
Макрос возвращает нужную версию текста в зависимости от текущего используемого языка. Определён он следующим образом:<br/>
<pre><code class="cpp">#define _TR(x) g_Translator.Translate(x)
</code></pre><br/>
Здесь происходит обращение к глобальному объекту <code>g_Translator</code>, который в функции <code>Translate()</code> считает в рантайме crc32 от указанной строки, ищет в своей xml-базе перевод с совпадающей контрольной суммой и возвращает его.<br/>
<br/>
Не буду судить насколько такое решение оправдано, но оно проверено временем и показало себя достаточно надёжным. И всё бы ничего, но такое решение не лишено недостатков: по сути, функция делает лишнюю работу — контрольные суммы можно было бы подсчитать один раз на этапе компиляции, и использовать в дальнейшем уже готовые числовые значения. Это также избавило бы от необходимости хранить в исполняемом образе дублирующиеся строки, ведь они уже есть во внешнем xml-файле с переводами.<br/>
<br/>
Немного погуглив по запросу «compile-time crc32» я быстро понял, что задача это не самая тривиальная, а готовых решений мне найти так и не удалось.<br/>
 <a href="http://habrahabr.ru/post/143975/#habracut">Читать дальше &rarr;</a>]]></description>
		
		<pubDate>Wed, 16 May 2012 15:30:24 GMT</pubDate>
		<author>Glowfall</author>
		<category><![CDATA[Программирование]]></category><category><![CDATA[Высокая производительность]]></category><category><![CDATA[C++]]></category>
		<category>crc32</category><category>compile-time</category><category>inline</category>
	</item>
	
	
	
	
	

		
	<item>
		<title><![CDATA[Использование синтезатора в качестве компьютерной клавиатуры]]></title>
		<guid isPermaLink="true">http://habrahabr.ru/post/143893/</guid>
		<link>http://habrahabr.ru/post/143893/</link>
		<description><![CDATA[Недавно мне в голову пришла мысль: а нельзя ли, подключив синтезатор к компьютеру, набирать на нем текст? Я попробовал реализовать это, и у меня получилось. Моя программа считывает нажатия клавиш синтезатора и эмулирует нажатия клавиш обычной клавиатуры. В этой статье я расскажу, как это реализовать. Писать будем под Linux на C++ с использованием Qt.<br/>
<br/>
<iframe width="560" height="349" src="http://www.youtube.com/embed/u64tWZl-x1g" frameborder="0" allowfullscreen></iframe><br/>
<br/>
 <a href="http://habrahabr.ru/post/143893/#habracut">Читать дальше &rarr;</a>]]></description>
		
		<pubDate>Tue, 15 May 2012 13:04:57 GMT</pubDate>
		<author>Riateche</author>
		<category><![CDATA[Ненормальное программирование]]></category><category><![CDATA[Linux]]></category><category><![CDATA[C++]]></category>
		<category><![CDATA[qt4]]></category>
	</item>
	
	
	
	
	
	

		
	
	
	
	<item>
		<title><![CDATA[[Перевод] Портируем C/C++ библиотеку на JavaScript (xml.js)]]></title>
		<guid isPermaLink="true">http://habrahabr.ru/post/143583/</guid>
		<link>http://habrahabr.ru/post/143583/</link>
		<description><![CDATA[Статья является дополненным переводом статьи «<a href="http://mozakai.blogspot.com/2012/03/howto-port-cc-library-to-javascript.html">HOWTO: Port a C/C++ Library to JavaScript (xml.js)</a>» (автор: <a href="http://mozakai.blogspot.com/p/about.html">azakai</a>). Автор оригинальной статьи имеет приличный опыт портирования C/C++ библиотек в JavaScript. В частности, он успешно портировал <a href="https://github.com/kripken/lzma.js">lzma.js</a> и <a href="https://github.com/kripken/sql.js">sql.js</a>. В своей статье он описывает общую схему портирования C/C++ кода на примере <a href="http://xmlsoft.org/">libxml</a> – открытой библиотеки для валидации XML.<br/>
 <a href="http://habrahabr.ru/post/143583/#habracut">Читать дальше &rarr;</a>]]></description>
		
		<pubDate>Sat, 12 May 2012 03:01:50 GMT</pubDate>
		<author>Caiiiycuk</author>
		<category><![CDATA[JavaScript]]></category><category><![CDATA[C++]]></category>
		<category>emscipten</category><category>c++</category><category>javascript</category>
	</item>
	
	
	

		
	
	<item>
		<title><![CDATA[[Из песочницы] Практика работы со временем в разных часовых поясах в unix-like системах]]></title>
		<guid isPermaLink="true">http://habrahabr.ru/post/143499/</guid>
		<link>http://habrahabr.ru/post/143499/</link>
		<description><![CDATA[Если ваше приложение зависит не только от локального времени, но и от его представлении в других часовых поясах, вы наверняка сталкивались со сложностью представления времени в разных временных зонах. Не сталкивались? Значит вы не портировали своё приложение в мир Unix.<br/>
<br/>
Действительно, в ОС Windows для работы с временными зонами программисту предоставляется удобный набор специализированных функций WinAPI. Примером могут служить <a href="http://msdn.microsoft.com/en-us/library/aa908812.aspx">структура TIME_ZONE_INFORMATION</a> и <a href="http://msdn.microsoft.com/en-us/library/ms724421%28v=vs.85%29.aspx">функция GetTimeZoneInformation</a> к ней в придачу.<br/>
<br/>
Но что делать, если вам необходимо знать смещение относительно UTC+0, правила перехода на «летнее время», учитывать при этом високосные годы с високосными секундами и прочую специфическую информацию для какого-нибудь региона, да всё это в unix-подобных операционных системах? Статья посвящена практике работы со всем этим барахлом на языке C/C++.<br/>
 <a href="http://habrahabr.ru/post/143499/#habracut">Читать дальше &rarr;</a>]]></description>
		
		<pubDate>Wed, 09 May 2012 09:16:44 GMT</pubDate>
		<author>injecto</author>
		<category><![CDATA[C++]]></category><category><![CDATA[*nix]]></category>
		<category>время</category><category>unix</category><category>c/c++</category><category>boost</category><category>tz</category><category>time.h</category><category>Olson database</category>
	</item>
	
	
	
	
	

		
	<item>
		<title><![CDATA[Делиться не всегда полезно: оптимизируем работу с кэш-памятью]]></title>
		<guid isPermaLink="true">http://habrahabr.ru/post/143446/</guid>
		<link>http://habrahabr.ru/post/143446/</link>
		<description><![CDATA[<img align="left" src="http://software.intel.com/file/43661"/> Делиться с ближним своим для нас, божьих тварей, это очень характерно, считается добродетелью, и вообще, как утверждает <a href="http://bibleonline.ru/">первоисточник</a>, положительно отражается на карме. Однако в <a href="http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html">мире</a>, созданном архитекторами микропроцессоров, такое поведение не всегда приводит к хорошим результатам, особенно если это касается разделения памяти между потоками. <br/>
<br/>
Мы все «немного читали» об оптимизации работы с памятью, и у нас отложилось, что полезно, когда «кэш остается горячим», то есть данные, к которым часто обращаются потоки, должны быть компактными и находиться в ближайшем к процессорному ядру кэше. Все так, но когда дело доходит до того, чтобы делиться доступом, потоки становятся злейшими врагами [производительности], а кэш не просто горячий, он аж «<a href="http://en.wikipedia.org/wiki/MESI_protocol">горит адским огнем</a>» – такая во круг него разворачивается борьба.<br/>
<br/>
Ниже мы рассмотрим простой, но показательный случай возникновения проблем производительности многопоточных программ, а потом я дам несколько общих рекомендаций, как избежать проблемы потери эффективности вычислений из-за разделения кэша между потоками. <br/>
 <a href="http://habrahabr.ru/post/143446/#habracut">Читать дальше &rarr;</a>]]></description>
		
		<pubDate>Thu, 10 May 2012 09:54:43 GMT</pubDate>
		<author>vtsymbal</author>
		<category><![CDATA[Программирование]]></category><category><![CDATA[C++]]></category><category><![CDATA[Блог компании Intel]]></category>
		<category><![CDATA[vtune amplifier xe]]></category><category><![CDATA[false sharing]]></category>
	</item>
	
	
	
	
	
	

		
	
	<item>
		<title><![CDATA[[Из песочницы] Отправка multipart/form-data запроса в Qt]]></title>
		<guid isPermaLink="true">http://habrahabr.ru/post/143168/</guid>
		<link>http://habrahabr.ru/post/143168/</link>
		<description><![CDATA[Иногда при разработке сетевого приложения возникает задача загрузки на сервер файла, и не просто так, а как части заполненной http формы. Это пример так называемого multipart/form-data запроса. Стандартные методы библиотеки Qt этого сделать не позволяют, поэтому приходится выкручиваться своими силами.<br/>
 <a href="http://habrahabr.ru/post/143168/#habracut">Читать дальше &rarr;</a>]]></description>
		
		<pubDate>Wed, 02 May 2012 09:54:07 GMT</pubDate>
		<author>master1312</author>
		<category><![CDATA[Программирование]]></category><category><![CDATA[C++]]></category>
		<category>программирование</category><category>qt</category>
	</item>
	
	
	
	
	

		
	<item>
		<title><![CDATA[Многопоточный QuickSort на С++ 2011]]></title>
		<guid isPermaLink="true">http://habrahabr.ru/post/143055/</guid>
		<link>http://habrahabr.ru/post/143055/</link>
		<description><![CDATA[Лично я, при всей моей вере в C++, считаю, что даже в редакции 2011, этот язык крайне недружелюбен в плане многозадачности и многопоточности. В качестве очередной попытки переубедить себя в этом я попробовал сделать многопоточный QuickSort. <br/>
<br/>
В этом алгоритме получается после фазы разбиения запустить сортировки подчастей параллельно.<br/>
<br/>
Вот мой наивный велосипед:<br/>
 <a href="http://habrahabr.ru/post/143055/#habracut">Читать дальше &rarr;</a>]]></description>
		
		<pubDate>Mon, 30 Apr 2012 11:02:12 GMT</pubDate>
		<author>begoon</author>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[c++]]></category><category><![CDATA[quicksort]]></category>
	</item>
	
	
	
	
	
	

		
	<item>
		<title><![CDATA[Расставим точки над структурами C/C++]]></title>
		<guid isPermaLink="true">http://habrahabr.ru/post/142662/</guid>
		<link>http://habrahabr.ru/post/142662/</link>
		<description><![CDATA[Недавно познакомился со структурами C/C++ — struct. Господи, да «что же с ними знакомиться» скажете вы? Тем самым вы допустите сразу 2 ошибки: <s>во-первых я не Господи</s>, а во вторых я тоже думал что структуры — они и в Африке структуры. А вот как оказалось и — нет. Я расскажу о нескольких жизненно-важных подробностях, которые кого-нибудь из читателей избавят от часовой отладки…<br/>
<br/>
<img src="http://habrastorage.org/storage2/661/34a/dd9/66134add996734e82d2efd38d6655056.png"/><br/>
 <a href="http://habrahabr.ru/post/142662/#habracut">Читать дальше &rarr;</a>]]></description>
		
		<pubDate>Mon, 23 Apr 2012 19:28:09 GMT</pubDate>
		<author>k06a</author>
		<category><![CDATA[Программирование]]></category><category><![CDATA[C++]]></category><category><![CDATA[C]]></category>
		<category><![CDATA[с++]]></category><category><![CDATA[c]]></category><category><![CDATA[c/c++]]></category><category><![CDATA[struct]]></category><category><![CDATA[endianess]]></category>
	</item>
	
	
	
	
	
	

		
	<item>
		<title><![CDATA[Внутренность boolinq для взрослых]]></title>
		<guid isPermaLink="true">http://habrahabr.ru/post/142657/</guid>
		<link>http://habrahabr.ru/post/142657/</link>
		<description><![CDATA[Статья для тех, кому интересна реализация библиотеки boolinq из <a href="http://habrahabr.ru/post/142632/">предыдущего моего поста</a>. В этой статье я копну в исходники и покажу несколько интересных приёмов, которые позволили сделать библиотеку «ленивой» и расширяемой.<br/>
<br/>
<img src="http://habrastorage.org/storage2/971/434/e75/971434e75cdce5b50c3d953248f04558.jpg"/><br/>
 <a href="http://habrahabr.ru/post/142657/#habracut">Читать дальше &rarr;</a>]]></description>
		
		<pubDate>Mon, 23 Apr 2012 16:33:24 GMT</pubDate>
		<author>k06a</author>
		<category><![CDATA[Программирование]]></category><category><![CDATA[C++]]></category>
		<category><![CDATA[c++]]></category><category><![CDATA[range]]></category><category><![CDATA[iterator]]></category><category><![CDATA[boolinq]]></category>
	</item>
	
	
	
	
	
	

		
	<item>
		<title><![CDATA[LINQ to Objects на языке C++]]></title>
		<guid isPermaLink="true">http://habrahabr.ru/post/142632/</guid>
		<link>http://habrahabr.ru/post/142632/</link>
		<description><![CDATA[Всё началось с того, что я в институте и после его окончания писал код на C++ и не знал бед. Но тут в один прекрасный день пришлось писать код под .NET на C#. Сперва немного поплевался, но потом ничего — втянулся. Увидел выгодные отличия от C++: безопасность, строгость и т.д. Также не смог обойти стороной LINQ при работе с коллекциями…<br/>
<br/>
<img src="http://habrastorage.org/storage2/cba/9b9/149/cba9b9149efae1b653e6b302015e39e5.jpg" align="center"/><br/>
<br/>
 <a href="http://habrahabr.ru/post/142632/#habracut">Читать дальше &rarr;</a>]]></description>
		
		<pubDate>Mon, 23 Apr 2012 12:04:52 GMT</pubDate>
		<author>k06a</author>
		<category><![CDATA[Программирование]]></category><category><![CDATA[C++]]></category><category><![CDATA[.NET]]></category>
		<category><![CDATA[c++]]></category><category><![CDATA[linq]]></category><category><![CDATA[c#]]></category><category><![CDATA[.net]]></category>
	</item>
	
	
	
	
	
	

		
	<item>
		<title><![CDATA[Итак, вы решили запретить копирование объектов класса в C++]]></title>
		<guid isPermaLink="true">http://habrahabr.ru/post/142595/</guid>
		<link>http://habrahabr.ru/post/142595/</link>
		<description><![CDATA[<img src="http://habrastorage.org/storage2/31d/3b9/914/31d3b9914b2a0b1e68646ab21a0d1144.jpg" alt="SHALL NOT DANCE THERE" align="right"/>Довольно часто можно встретить код на C++, в котором у одного или нескольких классов конструктор копирования и оператор присваивания объявлены private и написан комментарий вида «копирование запрещено».<br/>
<br/>
Прием простой и с виду очевидный, тем не менее, при его использовании возможны подводные камни, приводящие к ошибкам, которые проявятся нескоро и поиск которых может занять не один день.<br/>
<br/>
Рассмотрим возможные проблемы.<br/>
 <a href="http://habrahabr.ru/post/142595/#habracut">Читать дальше &rarr;</a>]]></description>
		
		<pubDate>Mon, 23 Apr 2012 11:54:37 GMT</pubDate>
		<author>DmitryMe</author>
		<category><![CDATA[C++]]></category><category><![CDATA[Блог компании ABBYY]]></category>
		<category><![CDATA[c++]]></category><category><![CDATA[ошибки в коде]]></category>
	</item>
	
	
	
	
	
	

		
	
	<item>
		<title><![CDATA[[Из песочницы] Wt, библиотека C++ для разработки веб-приложений]]></title>
		<guid isPermaLink="true">http://habrahabr.ru/post/142585/</guid>
		<link>http://habrahabr.ru/post/142585/</link>
		<description><![CDATA[Всем привет!<br/>
<br/>
Так случилось, что на Хабре не было ни одного упоминания <a href="http://webtoolkit.eu">Wt, C++ Web Toolkit</a>, кроме <a href="http://habrahabr.ru/post/111403/#comment_3566653">одного комментария</a>.<br/>
<br/>
Библиотека Wt может заинтересовать тех, кто пишет на C++ и захотел посмотреть в сторону Web, но не хочет изучать и/или использовать HTML, CSS, JavaScript, SQL и дополнительные технологии, связанные с веб-разработкой и работой с БД. В данной статье моей целью было обратить внимание сообщества на Wt, а не освещать все его возможности.<br/>
 <a href="http://habrahabr.ru/post/142585/#habracut">Читать дальше &rarr;</a>]]></description>
		
		<pubDate>Mon, 23 Apr 2012 08:38:08 GMT</pubDate>
		<author>starius</author>
		<category><![CDATA[Веб-разработка]]></category><category><![CDATA[C++]]></category>
		<category>wt</category><category>c++</category><category>веб-разработка</category><category>ajax</category><category>веб-сервер</category>
	</item>
	
	
	
	
	

		
	
	
	
	<item>
		<title><![CDATA[[Перевод] CXXI: Мост между мирами C# и C++]]></title>
		<guid isPermaLink="true">http://habrahabr.ru/post/142503/</guid>
		<link>http://habrahabr.ru/post/142503/</link>
		<description><![CDATA[В рантайме Mono есть немало средств для взаимодействия с кодом на не .NET языках, но никогда не было ничего вменяемого для взаимодействия с кодом на C++.<br/>
<br/>
Но это вскоре изменится благодаря работе Алекса Коррадо, Андрэа Гайта и Зольтана Варга.<br/>
<br/>
Вкратце, новая технология позволяет разработчикам C#/.NET:<br/>
<br/>
<ul>
<li>Легко и прозрачно использовать классы C++ из C# или любого иного .NET языка</li>
<li>Создавать экземпляры классов C++ из C# </li>
<li>Вызывать методы классов C++ из кода на C#</li>
<li>Вызывать инлайн-методы C++ из кода на C# (при условии, что библиотека скомпилирована с флагом -fkeep-inline-functions или если вы скомпилируете дополнительную библиотеку с их реализациями) </li>
<li>Наследовать классы C++ из C#</li>
<li>Переопределять виртуальные методы классов C++ методами на C#</li>
<li>Использовать экземпляры таких смешанных C++/C# классов как в коде на C#, так и в коде на C++</li>
</ul><br/>
 <a href="http://habrahabr.ru/post/142503/#habracut">Читать дальше &rarr;</a>]]></description>
		
		<pubDate>Mon, 23 Apr 2012 07:39:45 GMT</pubDate>
		<author>kekekeks</author>
		<category><![CDATA[Mono и Moonlight]]></category><category><![CDATA[C++]]></category><category><![CDATA[C#]]></category>
		<category>mono</category><category>c#</category><category>чёрная магия</category><category>where is your c++/cli now?</category>
	</item>
	
	
	

		
	<item>
		<title><![CDATA[Давайте сделаем паузу. Способ улучшения синхронизации потоков]]></title>
		<guid isPermaLink="true">http://habrahabr.ru/post/142382/</guid>
		<link>http://habrahabr.ru/post/142382/</link>
		<description><![CDATA[<img align="left" src="http://software.intel.com/file/43374"/><br/>
<i>Пауза — временное молчание, перерыв в звучании музыкального произведения в целом или какой-либо его части или отдельного голоса.<br/>
</i> [Википедия]<br/>
<br/>
Удивительно, но иногда так бывает, чтобы что-то сделать в целом быстрее, надо это делать медленнее или вообще с паузами. Например, при имплементации активного ожидания spin-wait в многопотоковом коде рекомендуется использовать инструкцию pause, которая, как утверждает <a href="http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html">Intel Instruction Set Reference</a>, делает это ожидание наиболее эффективным. «Какая чушь!» — скажете вы. Как может быть ожидание эффективным? Разработчики микропроцессоров утверждают, что при активном ожидании с инструкцией pause чип потребляет намного меньше энегии еще со времен Pentium 4. В чем еще может быть эффективность ожидания? Поговорим об этом ниже.<br/>
 <a href="http://habrahabr.ru/post/142382/#habracut">Читать дальше &rarr;</a>]]></description>
		
		<pubDate>Fri, 20 Apr 2012 12:14:25 GMT</pubDate>
		<author>vtsymbal</author>
		<category><![CDATA[Программирование]]></category><category><![CDATA[C++]]></category><category><![CDATA[Блог компании Intel]]></category>
		<category><![CDATA[VTune Amplifier XE]]></category><category><![CDATA[pause instruction]]></category><category><![CDATA[OpenMP]]></category>
	</item>
	
	
	
	
	
	

		
	<item>
		<title><![CDATA[Самый правильный безопасный printf]]></title>
		<guid isPermaLink="true">http://habrahabr.ru/post/142352/</guid>
		<link>http://habrahabr.ru/post/142352/</link>
		<description><![CDATA[Под катом Вас ждет увлекательная история о том, как я сильно расстроился, познакомившись поближе с пользовательскими литералами (с нового стандарта), но при этом в последствии все же реализовал вышеупомянутую функцию, а также разобрался с <b>constexpr</b>, а позже еще и реабилитировал те самые литералы. <a href="http://habrahabr.ru/post/142352/#habracut">Читать дальше &rarr;</a>]]></description>
		
		<pubDate>Sat, 21 Apr 2012 11:25:59 GMT</pubDate>
		<author>dima_mendeleev</author>
		<category><![CDATA[Ненормальное программирование]]></category><category><![CDATA[C++]]></category>
		<category><![CDATA[C++11]]></category><category><![CDATA[variadic templates]]></category><category><![CDATA[constexpr]]></category><category><![CDATA[static_assert]]></category><category><![CDATA[user-defined literals]]></category>
	</item>
	
	
	
	
	
	

		
	
	
	
	<item>
		<title><![CDATA[[Перевод] Сигналы и слоты в Qt5]]></title>
		<guid isPermaLink="true">http://habrahabr.ru/post/141983/</guid>
		<link>http://habrahabr.ru/post/141983/</link>
		<description><![CDATA[Qt5 alpha увидел свет. В этой статье я опишу одну из фич, над которыми работал — это новый синтаксис сигналов и слотов. <br/>
<br/>
<h4>Предыдущий синтаксис</h4><br/>
Вот как мы обычно соединяем сигнал и слот:<br/>
<br/>
<pre><code class="cpp">connect(sender, SIGNAL(valueChanged(QString,QString)),
        receiver, SLOT(updateValue(QString)) );</code></pre><br/>
На самом деле макросы <code>SIGNAL</code> and <code>SLOT</code> преобразуют свои аргументы в строки. Затем <code>QObject::connect()</code> сравнит эти строки с данными интроспекции собранными утилитой <code>moc</code>.<br/>
<br/>
<h5>В чем проблема этого синтаксиса?</h5><br/>
Не смотря на то, что в целом все работает хорошо, некоторые неудобства все же есть:<br/>
 <a href="http://habrahabr.ru/post/141983/#habracut">Читать дальше &rarr;</a>]]></description>
		
		<pubDate>Thu, 12 Apr 2012 19:40:48 GMT</pubDate>
		<author>ocyril</author>
		<category><![CDATA[Qt Software]]></category><category><![CDATA[C++]]></category>
		<category>qt</category><category>qt5</category><category>с++11</category>
	</item>
	
	
	

		
	<item>
		<title><![CDATA[Не зная брода, не лезь в воду. Часть третья]]></title>
		<guid isPermaLink="true">http://habrahabr.ru/post/141880/</guid>
		<link>http://habrahabr.ru/post/141880/</link>
		<description><![CDATA[<img align="left" src="http://www.viva64.com/external-pictures/habr99/image1.png" alt="Сдвиги"/><br/>
Продолжу рассказы о том, как программисты ходят по краю, даже не подозревая об этом. Поговорим об операциях сдвига &lt;&lt;, &gt;&gt;. Принципы работы операторов сдвига очевидны и многие программисты даже не знают, что их использование согласно стандарту Си/Си++ может приводить к неопределенному или к неуточненному поведению (undefined behaviour/unspecified behavior).<br/>
 <a href="http://habrahabr.ru/post/141880/#habracut">Читать дальше &rarr;</a>]]></description>
		
		<pubDate>Wed, 11 Apr 2012 11:34:23 GMT</pubDate>
		<author>Andrey2008</author>
		<category><![CDATA[Компиляторы]]></category><category><![CDATA[C++]]></category><category><![CDATA[C]]></category>
		<category><![CDATA[c++]]></category><category><![CDATA[c++11]]></category><category><![CDATA[c plus plus]]></category><category><![CDATA[pvs-studio]]></category><category><![CDATA[битовые операции]]></category>
	</item>
	
	
	
	
	
	

		
	<item>
		<title><![CDATA[Организация рабочих потоков: управление состоянием движка]]></title>
		<guid isPermaLink="true">http://habrahabr.ru/post/141783/</guid>
		<link>http://habrahabr.ru/post/141783/</link>
		<description><![CDATA[Данная статья является продолжением статьи — <a href="http://habrahabr.ru/post/141509/">Организация рабочих потоков: синхронизационный канал</a>. Продолжение родилось как попытка написать пример использования подхода с синхронными сообщениями.<br/>
<br/>
В этой части я хочу на примере показать, как можно организовать управление и отображение состояния движка с рабочим потоком, используя синхронные сообщения между потоками. И показать, как при этом обойти проблему взаимной блокировки потоков при закрытии приложения.<br/>
<br/>
Давайте вернемся к примеру с предыдущей статьи. У нас есть графический интерфейс, отображающий состояние движка с рабочим потоком. Допустим движок можно запустить, остановить, поставить на паузу и соответственно снять с паузы. Для реализации такого поведения проще всего применить что-то подобное шаблонам проектирования конечный автомат и наблюдатель.<br/>
 <a href="http://habrahabr.ru/post/141783/#habracut">Читать дальше &rarr;</a>]]></description>
		
		<pubDate>Tue, 10 Apr 2012 06:30:45 GMT</pubDate>
		<author>Ryadovoy</author>
		<category><![CDATA[Программирование]]></category><category><![CDATA[C++]]></category>
		<category><![CDATA[multithreading]]></category><category><![CDATA[gui]]></category><category><![CDATA[winapi]]></category>
	</item>
	
	
	
	
	
	

		
		
		
		
		
		
	

	
</channel>
</rss>

