<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2092202965483384812</id><updated>2024-09-10T17:39:50.657+03:00</updated><category term="vs2010"/><category term="c#"/><category term="c++"/><category term="c++0x"/><category term="dotnet4"/><category term="linq"/><category term="vs"/><category term="dx11"/><category term="gamedev"/><category term="gcc"/><category term="subsonic"/><category term="unigine"/><category term="wpf"/><title type='text'>Раптор&#39;s dev blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-8552409597473624834</id><published>2010-03-17T22:12:00.002+02:00</published><updated>2010-03-17T22:14:04.864+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="c++"/><title type='text'>Трюки с битовой арифметикой</title><content type='html'>Нашел в интернете отличную ссылку с подборкой различных трюков с битовой арифметикой на С++.&lt;br /&gt;
&lt;a href=&quot;http://graphics.stanford.edu/~seander/bithacks.html&quot;&gt;http://graphics.stanford.edu/~seander/bithacks.html&lt;/a&gt;&lt;br /&gt;
Вещь просто незаменимая (:</content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/8552409597473624834/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2010/03/blog-post_17.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/8552409597473624834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/8552409597473624834'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2010/03/blog-post_17.html' title='Трюки с битовой арифметикой'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-1760234907813047971</id><published>2010-03-15T19:58:00.001+02:00</published><updated>2010-03-15T19:58:39.392+02:00</updated><title type='text'>Правда жизни (:</title><content type='html'>&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf4X4CLYsT-pcPOlJNxiuo79Goypcb0TBSHLPS43enwNMXHNk5VuffsM7jkhKTBiKsa9XQml_n7AxzfyN6R9VFDXYyt-Rr_fUyEBBNGgNJPsvalF3XkQgQ1cJLNZ03xwSLCdinA9vWaQzs/s1600-h/%3F@0240687=8%5B5%5D.jpg&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;правдажизни&quot; border=&quot;0&quot; alt=&quot;правдажизни&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG-ZrIG3oiThLPNMI-MhgQ58d_3B2uzabTlI9P2TLe8KkK_Y9UnyrxlksJ65y8tib6DQP-_Pa_Ntagg15eQCRum9v2QSOD7XjZ8FaUAR8Tqvg5FXfSDrDxD14dTVMvuH0_db47N8Dg8PcO/?imgmax=800&quot; width=&quot;427&quot; height=&quot;317&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/1760234907813047971/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2010/03/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/1760234907813047971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/1760234907813047971'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2010/03/blog-post.html' title='Правда жизни (:'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG-ZrIG3oiThLPNMI-MhgQ58d_3B2uzabTlI9P2TLe8KkK_Y9UnyrxlksJ65y8tib6DQP-_Pa_Ntagg15eQCRum9v2QSOD7XjZ8FaUAR8Tqvg5FXfSDrDxD14dTVMvuH0_db47N8Dg8PcO/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-4120062504274821978</id><published>2010-03-14T00:09:00.002+02:00</published><updated>2010-03-14T00:09:43.013+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="c++0x"/><category scheme="http://www.blogger.com/atom/ns#" term="gcc"/><category scheme="http://www.blogger.com/atom/ns#" term="vs2010"/><title type='text'>Status Of C++ 0x Language Features in Compilers</title><content type='html'>Нашел в сети интересную таблицу, в которой отображены все нововведения С++0х (с ссылками на соответствующие доки), а так же степень их поддержки в популярных компиляторах (GCC, MSVC, Intel C++ и другие).&lt;br /&gt;
&lt;a href=&quot;http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport&quot;&gt;Ссылка на таблицу&lt;/a&gt;&lt;br /&gt;
К слову, наибольшее количество фич, на данный момент, поддерживает GCC.</content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/4120062504274821978/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2010/03/status-of-c-0x-language-features-in.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/4120062504274821978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/4120062504274821978'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2010/03/status-of-c-0x-language-features-in.html' title='Status Of C++ 0x Language Features in Compilers'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-4400554726470812586</id><published>2010-03-01T17:49:00.002+02:00</published><updated>2010-03-01T17:54:29.246+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="vs2010"/><title type='text'>Книга о Visual Studio 2010 в электронном виде</title><content type='html'>В сети стала доступной новая книжка о Visual Studio 2010 на русском языке, под редакцией Алексея Фролова (он является техническим специалистом российского представительства Microsoft). Вот краткое содержимое книги: &lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Microsoft Visual Studio 2010. Коротко об основных новинках &lt;/li&gt;
&lt;li&gt;Новые издания Visual Studio 2010 &lt;/li&gt;
&lt;li&gt;Дополнительные продукты семейства Visual Studio 2010 &lt;/li&gt;
&lt;li&gt;Новые уровни подписки MSDN &lt;/li&gt;
&lt;li&gt;Visual Studio 2010. Полезные ссылки &lt;/li&gt;
&lt;/ul&gt;
Прямая ссылка на скачивание: &lt;a href=&quot;http://download.microsoft.com/documents/rus/visualstudio/partner/V10.pdf&quot; title=&quot;http://download.microsoft.com/documents/rus/visualstudio/partner/V10.pdf&quot;&gt;http://download.microsoft.com/documents/rus/visualstudio/partner/V10.pdf&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/4400554726470812586/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2010/03/visual-studio-2010.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/4400554726470812586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/4400554726470812586'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2010/03/visual-studio-2010.html' title='Книга о Visual Studio 2010 в электронном виде'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-749791458118434224</id><published>2010-02-09T10:50:00.000+02:00</published><updated>2010-02-09T10:50:11.656+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="vs2010"/><title type='text'>Visual Studio 2010 Release Candidate</title><content type='html'>Для подписчиков MSDN стала доступной обновленная VS2010, уже Release Candidate. Скачать можно&amp;nbsp;&lt;a href=&quot;http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx&quot;&gt;здесь&lt;/a&gt;. Остальным новая студия будет доступна после 10 числа.</content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/749791458118434224/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2010/02/visual-studio-2010-release-candidate.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/749791458118434224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/749791458118434224'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2010/02/visual-studio-2010-release-candidate.html' title='Visual Studio 2010 Release Candidate'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-8454699298249385027</id><published>2010-02-07T12:11:00.002+02:00</published><updated>2010-02-07T12:14:17.655+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="wpf"/><title type='text'>Composite WPF</title><content type='html'>Сегодня набрел на интересную статью в MSDN Magazine. В ней описывается вариант модульной архитектуры приложения, который я давно хотел реализовать, но все как то не получалось. По подобному принципу работает Minranda IM. Если вкратце, то система имеет следующий вид: существует набор, независимых между собой, модулей, которые реализовывают функционал программы. Для связки модулей между собой есть исполняемый файл, который представляет из себя плагинное ядро, базовые api для взаимодействия модулей, а также код, отвечающий за подгрузку модулей при запуске. Такая архитектура имеет кучу преимуществ: легкость развитие системы, возможность независимо развивать модули, легко заменять, тестировать и т.п. Короче все подробности по адресу &lt;a href=&quot;http://msdn.microsoft.com/uk-ua/magazine/cc785479.aspx&quot;&gt;http://msdn.microsoft.com/uk-ua/magazine/cc785479.aspx&lt;/a&gt;  </content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/8454699298249385027/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2010/02/composite-wpf.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/8454699298249385027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/8454699298249385027'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2010/02/composite-wpf.html' title='Composite WPF'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-279126356590481928</id><published>2010-02-05T00:47:00.003+02:00</published><updated>2010-02-08T21:34:55.548+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="subsonic"/><title type='text'>SubSonic ORM и немного магии.</title><content type='html'>Мне довольно много приходилось писать приложения, которые тем или иным образом взаимодействуют с базами данных. Доводилось применять компоненты ADO.NET, потом я испробовал LINQ2SQL и LINQ2Entities, но все они в некотором роде смущали телодвижения. Неудобства возникали самые разные, начиная от привязки к конкретное базе данных, до отсутствия нужной гибкости,&amp;nbsp; из за которой нужно было придумывать различные извращения (&lt;a href=&quot;http://devenv-diary.blogspot.com/2009/11/linq-to-entity-dynamic-search.html&quot;&gt;Например как здесь&lt;/a&gt;). Поэтому для работы над новым проектом я решил найти что то более гибкое, простое в использовании, назависимое от конкретной базы данных и т.п.  &lt;br /&gt;
&lt;br /&gt;
На SubSonic я обратил внимание случайным образом, но был действительно удивлен, на сколько он может упростить жизнь разработчику. SubSonic представляет собой &quot;&lt;span class=&quot;Apple-style-span&quot; style=&quot;-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; color: #333333; font-family: helvetica, arial, helvetica, sans-serif; font-size: 12px; line-height: 20px;&quot;&gt;A Super High-fidelity Batman Utility Belt that works up your Data Access (using Linq in 3.0), throws in some much-needed utility functions, and generally speeds along your dev cycle.&lt;span class=&quot;Apple-style-span&quot; style=&quot;-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; color: black; font-family: &#39;Times New Roman&#39;; font-size: medium; line-height: normal;&quot;&gt;&quot; или же попросту говоря мощный и в тоже время простой в применении &lt;a href=&quot;http://ru.wikipedia.org/wiki/ORM&quot;&gt;ORM Framework&lt;/a&gt;. Поддерживается SQLServer, MySQL, SQLlite и в разработке Oracle (исчезает проблема переносимости). SubSonic содержит много вкусностей, о которых я попытаюсь рассказать.&lt;/span&gt;&lt;/span&gt;  &lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; color: #333333; font-family: helvetica, arial, helvetica, sans-serif; font-size: 12px; line-height: 20px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; color: black; font-family: &#39;Times New Roman&#39;; font-size: medium; line-height: normal;&quot;&gt;     &lt;/span&gt;&lt;/span&gt;  &lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; color: #333333; font-family: helvetica, arial, helvetica, sans-serif; font-size: 12px; line-height: 20px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; color: black; font-family: &#39;Times New Roman&#39;; font-size: medium; line-height: normal;&quot;&gt;Итак, SubSonic реализовывает 2 сценария работы, SimpleRepository и ActiveRecord.&lt;/span&gt;&lt;/span&gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;ActiveRecord - похоже на то, что происходило в LINQ2SQL и LINQ2Entities. Существует база данных и мы с помощью специального шаблона генерируем нужные нам классы C#. Далее их используем.&lt;/li&gt;
&lt;li&gt;SimpleRepository - более простой и в тоже время элегантный сценарий. Вы определяете строку подключения к пустой базе данных, определяете класс с свойствами, которые нужно хранить в базе и ... все!. Все готово для работы.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
В данном посте хочу рассказать про второй подход, поскольку именно он меня поразил меня элегантностью, хоть и имеются некоторые минусы.&lt;/div&gt;
&lt;div&gt;
Приведу сразу пример:&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp-oKF4ljSEmSPhgP2JSssUUkJh68FGV2nuYh65Fu0kGzy4qLdFYMmh6t4CzWbZM3y2LNvtGoOBd4P5NXOwKpBUelkMJlFNgIuqbuPZTip28LaEaFpZZrYcd5Fg_XyQC4zO9HPnLjvIkiX/s1600-h/123.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;232&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp-oKF4ljSEmSPhgP2JSssUUkJh68FGV2nuYh65Fu0kGzy4qLdFYMmh6t4CzWbZM3y2LNvtGoOBd4P5NXOwKpBUelkMJlFNgIuqbuPZTip28LaEaFpZZrYcd5Fg_XyQC4zO9HPnLjvIkiX/s640/123.PNG&quot; width=&quot;418&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
Все что нужно для работы с базой. SubSonic самостоятельно генерирует таблицу и добавляет в нее запись. &lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe-lGlsrLhru3o9yrmtqt3nj7JNCZr5qCwqbw_XK8lOeQbsoDf2G4xJGh7hUeN1odaeAd4JSxgaNY4h06-o2WngXJn5hP7reGJrIPgbYTioMt-MqR4Z-rAIY696Xc2gIOUrzEamsBT9uH5/s1600-h/321.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;188&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe-lGlsrLhru3o9yrmtqt3nj7JNCZr5qCwqbw_XK8lOeQbsoDf2G4xJGh7hUeN1odaeAd4JSxgaNY4h06-o2WngXJn5hP7reGJrIPgbYTioMt-MqR4Z-rAIY696Xc2gIOUrzEamsBT9uH5/s320/321.PNG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
Но магия на этом не заканчивается. Допустим в процессе разработки нужно добавить новые поля в нашу структуру... И все что нам нужно сделать ...&amp;nbsp; - это просто добавить свойство в наш класс.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP9bEhWZCdGkKyDiKOKLjkbjdVD1oY7PJRbmE25YMFoQ7A4A7fSHXEH8RoTw3_zHtlxs2ANpccUknwGocxvNx6qldCctPQaquF3-WXkpZZU2JJT4tqLVgzVPhpCzxHAV92VtJzuajyvVF1/s1600-h/4534.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;262&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP9bEhWZCdGkKyDiKOKLjkbjdVD1oY7PJRbmE25YMFoQ7A4A7fSHXEH8RoTw3_zHtlxs2ANpccUknwGocxvNx6qldCctPQaquF3-WXkpZZU2JJT4tqLVgzVPhpCzxHAV92VtJzuajyvVF1/s640/4534.PNG&quot; width=&quot;421&quot; /&gt;&lt;/a&gt;  &lt;br /&gt;
&lt;div&gt;
При этом SubSonic автоматически добавит нужные поля в таблицу и добавит запись (при этом старые записи остаются в полной сохранности). Данная возможность обеспечивается благодаря использованию С# Reflection. На данный момент я заметил только один недостаток при работе с этим сценарием - это невозможность определить зависимости между таблицами. В этом случае приходится использовать ActiveRecord (о нем я рассказу позднее).&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Более подробно о работе с SimpleRepository можно узнать в примерах на сайте проекта.&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://subsonicproject.com/&quot;&gt;Сайт проекта&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://subsonicproject.com/docs/The_5_Minute_Demo&quot;&gt;5 минутные демы, которые демонстрируют работу Repository и ActiveRecord.&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Несколько полезных ссылок:   &lt;br /&gt;
&lt;a href=&quot;http://www.codeproject.com/KB/database/SubSonic.aspx&quot;&gt;http://www.codeproject.com/KB/database/SubSonic.aspx&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://butaji.wordpress.com/2010/01/07/subsonic-%D0%BC%D0%B0%D0%B3%D0%B8%D1%8F-%D0%B8-orm/&quot;&gt;http://butaji.wordpress.com/2010/01/07/subsonic-магия-и-orm/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/279126356590481928/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2010/02/subsonic-orm.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/279126356590481928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/279126356590481928'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2010/02/subsonic-orm.html' title='SubSonic ORM и немного магии.'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp-oKF4ljSEmSPhgP2JSssUUkJh68FGV2nuYh65Fu0kGzy4qLdFYMmh6t4CzWbZM3y2LNvtGoOBd4P5NXOwKpBUelkMJlFNgIuqbuPZTip28LaEaFpZZrYcd5Fg_XyQC4zO9HPnLjvIkiX/s72-c/123.PNG" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-486449887661688277</id><published>2009-12-31T22:22:00.002+02:00</published><updated>2009-12-31T22:23:19.883+02:00</updated><title type='text'>С Новым 2010 Годом!</title><content type='html'>&lt;div align=&quot;left&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;using namespace&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: small;&quot;&gt; std;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div align=&quot;left&quot;&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: small;&quot;&gt;const char&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;font-size: small;&quot;&gt; NY[] = &lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&quot;Поздравляю с Новым Годом!&quot;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div align=&quot;left&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: small;&quot;&gt;cout &amp;lt;&amp;lt; NY &amp;lt;&amp;lt; endl;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div align=&quot;left&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-size: small;&quot;&gt;С ув. Раптор&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/486449887661688277/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2009/12/2010.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/486449887661688277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/486449887661688277'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2009/12/2010.html' title='С Новым 2010 Годом!'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-1146422039904407839</id><published>2009-11-25T17:31:00.003+02:00</published><updated>2009-11-25T17:45:36.695+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="c#"/><category scheme="http://www.blogger.com/atom/ns#" term="vs2010"/><title type='text'>C#4.0 Optional Arguments</title><content type='html'>В новом C# 4.0 появилась возможность задавать значения по умолчанию для параметров функции. Данное нововведение, очевидно, перекочевало с С++ и поможет сделать код более компактным (ранее приходилось создавать тучу перегруженных функций, что было весьма неудобно).&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6beXPU52RdFLAthPaF4oROy8U-r-feHtke80g-RvyaiYT0Qct-q1AyQIW3yBFd4oBJVJwNX8DBr4JIdSs2_H9ioYDH_j48o-zRA-6o1TJCjVoLAU_nezOZJz3vpk4SFw2KSwcwAuzGeiT/s1600-h/1%5B22%5D.jpg&quot;&gt;&lt;img alt=&quot;1&quot; border=&quot;0&quot; height=&quot;105&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAOBfhqLojvOJUkJ5BvhGila1uJE7dnu4LsFMSEynZJ8rtNMx0cfDOCQ0Zb9jLgs-FrcEIp2vA9oQVo5G8KaVoON88fVDMudQhrZvFJjENNtODnjzTqfgoVuI5cvx8D2Pgl716wtbDGf6n/?imgmax=800&quot; style=&quot;border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;&quot; title=&quot;1&quot; width=&quot;418&quot; /&gt;&lt;/a&gt; &lt;br /&gt;
Как видно из рисунка выше объявление функции с параметрами по умолчанию ничуть не отличается от того, которое есть в С++, однако C# предлагает большую гибкость. К примеру параметры по умолчанию можно передавать в разном порядке:&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikYPgBIxCUmxnMT-DB98vpd8deEeRnG268ivKcq4v-0yS40eu5gQdg_k01M-Ubk_Po2CsS4NWUHhzd77__zIdXkI2_qXOQ5YE2I2XCtNl1KI2RJMLvQLH3fjELlBOA-p9if_XdIZXCeohe/s1600-h/2%5B12%5D.jpg&quot;&gt;&lt;img alt=&quot;2&quot; border=&quot;0&quot; height=&quot;157&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBSRGqP4_XQW0sw1uzI_7AGd7KdspjysrH2ZfoTj0-2ub7NbmbFWcqtCfZcKQLLjGCr3_FT7wTagDwSR1eAwoFw27kW-_OBuqBMfiPU6pniv5_RAQyLJQhzu16mM3D3uhodypAhJQFiVXM/?imgmax=800&quot; style=&quot;border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline;&quot; title=&quot;2&quot; width=&quot;422&quot; /&gt;&lt;/a&gt; &lt;br /&gt;
Передача параметра имеет вид    &lt;br /&gt;
“Имя переменной”:”Значение”&lt;br /&gt;
Думаю данное нововведение будет весьма полезным для разработчиков.&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/1146422039904407839/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2009/11/c40-optional-arguments.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/1146422039904407839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/1146422039904407839'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2009/11/c40-optional-arguments.html' title='C#4.0 Optional Arguments'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAOBfhqLojvOJUkJ5BvhGila1uJE7dnu4LsFMSEynZJ8rtNMx0cfDOCQ0Zb9jLgs-FrcEIp2vA9oQVo5G8KaVoON88fVDMudQhrZvFJjENNtODnjzTqfgoVuI5cvx8D2Pgl716wtbDGf6n/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-2200541508835765190</id><published>2009-11-24T11:14:00.001+02:00</published><updated>2009-11-24T11:14:42.769+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="c#"/><title type='text'>C# Delegate Stub</title><content type='html'>&lt;p&gt;При работе с делегатами в C# есть одно маленькое неудобство: нужно выполнять проверку на null, иначе мы получим исключение.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8hTnLWhM1T9HOgdvJWZZ5258s_2VRRw9u4w0z-4CVf9lA9kxJYAIVO0wg19ZQegOTYmpJcFk7JjxmCVsYO25jYTz0ldb2ueFZrtkJIrSML8-Qh7rIHnIImmdububnakoSXkEP1T9kTuw/s1600-h/1%5B4%5D.jpg&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;1&quot; border=&quot;0&quot; alt=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPwivM01k_5D4C-jJ_0QUnCPJGrJg5rhDb3wEH80gOK6lILNGMVmHIPLuqT2y3ZYMcVdxMbzUsIdmqFDhiAeO42tqmqOEmKIvGcI5soIhwhxqcGrwDjKWODHXkpFXwn8qEli0g0xIxiY3K/?imgmax=800&quot; width=&quot;320&quot; height=&quot;142&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Недавно нашел в сети весьма элегантное решение данной проблемы:&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7zC_G1LOmCmTIfTPuiy01Uqurg7u_EV_wQd1HBIZzyDmzSaeatys7vYE7teXXsBAiRig5EgHLFMVDvGb1myUohqTcQTW5xSc0T_CCa1L-RUVO8MQuTKqg9uIBUIuuYJb8SH0NZHNVliPc/s1600-h/2%5B3%5D.jpg&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;2&quot; border=&quot;0&quot; alt=&quot;2&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRVF4fdYultT8ohpU-VNMDH2ZbQnz2_ZK_DTPPsjHY3wa4ySpiEtsSBtAXYM8ktwkUD3ZIDXRhgdc-FNENWjtoyy-uyRf2DMNTXAxW5-uLMz_s5xj1GhC5eHm3VU3BI3uBLIkfiW7OuOaT/?imgmax=800&quot; width=&quot;412&quot; height=&quot;73&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Для того, что бы не делать проверок, достаточно написать небольшую заглушку delegate {}; при объявлении. Теперь никакие исключения не возникают)&lt;/p&gt;  &lt;p&gt;Ссылки: &lt;a title=&quot;http://habrahabr.ru/blogs/net/67991/&quot; href=&quot;http://habrahabr.ru/blogs/net/67991/&quot;&gt;http://habrahabr.ru/blogs/net/67991/&lt;/a&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/2200541508835765190/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2009/11/c-delegate-stub.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/2200541508835765190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/2200541508835765190'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2009/11/c-delegate-stub.html' title='C# Delegate Stub'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPwivM01k_5D4C-jJ_0QUnCPJGrJg5rhDb3wEH80gOK6lILNGMVmHIPLuqT2y3ZYMcVdxMbzUsIdmqFDhiAeO42tqmqOEmKIvGcI5soIhwhxqcGrwDjKWODHXkpFXwn8qEli0g0xIxiY3K/s72-c?imgmax=800" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-7419707760250643354</id><published>2009-11-14T02:13:00.002+02:00</published><updated>2009-11-14T02:16:13.679+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="c++0x"/><title type='text'>C++0x Повторное использование лямбда-выражений</title><content type='html'>&lt;a href=&quot;http://devenv-diary.blogspot.com/2009/11/c0x-lambda-expressions.html&quot;&gt;Продолжу&lt;/a&gt; обзор лямбда-выражений. Еще одно важное их достоинство - это возможность повторного использования и передача как параметр функции. Для сохранения лямбда-выражений в переменную используется класс std::tr1::function.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0CTcAy-L8GgrizHVkDpRBaQsn9c1-DQdRZ6iW3vBD0c5NueQwCxgOUwiAoKLerPMj9kIQoPdgKirqJIqhgnzIePTj3yroNPIstlYTpGFfJtdjoXMp3jfcTPxDl5zVXoo-8RPqcyGvg4Yn/s1600-h/1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0CTcAy-L8GgrizHVkDpRBaQsn9c1-DQdRZ6iW3vBD0c5NueQwCxgOUwiAoKLerPMj9kIQoPdgKirqJIqhgnzIePTj3yroNPIstlYTpGFfJtdjoXMp3jfcTPxDl5zVXoo-8RPqcyGvg4Yn/s640/1.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/7419707760250643354/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2009/11/c0x.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/7419707760250643354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/7419707760250643354'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2009/11/c0x.html' title='C++0x Повторное использование лямбда-выражений'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0CTcAy-L8GgrizHVkDpRBaQsn9c1-DQdRZ6iW3vBD0c5NueQwCxgOUwiAoKLerPMj9kIQoPdgKirqJIqhgnzIePTj3yroNPIstlYTpGFfJtdjoXMp3jfcTPxDl5zVXoo-8RPqcyGvg4Yn/s72-c/1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-1349930431846267217</id><published>2009-11-14T01:14:00.007+02:00</published><updated>2009-11-14T01:55:05.937+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="c++0x"/><category scheme="http://www.blogger.com/atom/ns#" term="vs2010"/><title type='text'>C++0x Lambda Expressions</title><content type='html'>Одним из значительных нововведений в новом С++ являются лямбда выражения. Они перекочевали к нам от функциональных языков, сначала в С# 3.0, а теперь и в новый C++0x.&lt;br /&gt;
Лямбда выражения представляют собой небольшие программные конструкции, которые можно вставить прямо внутри какого либо выражения. Возможность оценить лямбда выражения дает нам новая Visual Studio 2010 и GCC. &amp;nbsp;Изначально их синтаксис может показаться довольно неудобным, но если к нему привыкнуть, они помогут вам сберечь много времени, а код сделать более лаконичным.&lt;br /&gt;
&lt;br /&gt;
Приведем небольшой пример. Допустим есть вектор целых чисел и нам нужно посчитать, сколько чисел больше 5. С помощью лямбда выражений это делается весьма компактно.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVft_oJZGRpaTehmDOGmG0Cj5nMV1z19gJisi1KHEGlpsWN2nLNn2Q-vCnjxkCS8IrjIY3tdluYT3yoH4BBgWRWBF8TrgQmG3s6SIL_aBjH2nkaTYVuQA8Cxc59j_QSiXsTDfNBUSkjieH/s1600-h/1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVft_oJZGRpaTehmDOGmG0Cj5nMV1z19gJisi1KHEGlpsWN2nLNn2Q-vCnjxkCS8IrjIY3tdluYT3yoH4BBgWRWBF8TrgQmG3s6SIL_aBjH2nkaTYVuQA8Cxc59j_QSiXsTDfNBUSkjieH/s400/1.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
Рассмотрим синтаксис лямбда выражения более подробно:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEje8yGb9YCLS42SIulz8GTGLswEBFlqeSMhy4PEZUoCGiPJMGeJkKYb-kBW2LpaxVlEdTO6mcl6yWLCsZiFpb4YlwyBbBUxeUjJh0SDUPm5_TJPeX5yHYAY1q-k36l3gHi1M9A25Dk9fAT5/s1600-h/Dd293603.LambdaExpSyntax(en-us,VS.100).png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEje8yGb9YCLS42SIulz8GTGLswEBFlqeSMhy4PEZUoCGiPJMGeJkKYb-kBW2LpaxVlEdTO6mcl6yWLCsZiFpb4YlwyBbBUxeUjJh0SDUPm5_TJPeX5yHYAY1q-k36l3gHi1M9A25Dk9fAT5/s320/Dd293603.LambdaExpSyntax(en-us,VS.100).png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
1) Список захвата или capture list&lt;br /&gt;
2) Список параметров&lt;br /&gt;
3) Изменение параметра, переданного по значению (может быть опущено)&lt;br /&gt;
4) Спецификация исключения (может быть опущено)&lt;br /&gt;
5) Возвращаемый тип&lt;br /&gt;
6) Тело лямбда выражения&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Начнем с конца. Каждое выражение имеет тело, которое заключается в фигурные скобки и возвращаемый тип. Тут требования выступают такие же, как и к обычной функции языка С или любому другому блоку кода. Возвращаемый тип можно не указывать, в таком случае компилятор попробует определить его самостоятельно. &lt;br /&gt;
&lt;br /&gt;
Для лямбда выражения можно определить список исключений, которые она может генерировать.&lt;br /&gt;
&lt;br /&gt;
В круглых скобках мы указываем список параметров. Параметры могут передаваться как по значению, так и по ссылке, они могут быть константными и т.п., все как при объявлении функций. Но накладываются также и некоторые ограничения - параметры не могут иметь значений по умолчанию.&lt;br /&gt;
&lt;br /&gt;
Теперь подошли к самому интересному. Любое лямбда-выражение начинается с квадратных скобок - список захвата или capture list. Значит это следующее - выражения могут обращаться к внешним переменным, которые находятся в области видимости (как по значению так и по ссылке). Список между [] определяет к каким и как именно мы будем обращаться к внешним переменным. Таким образом предыдущий пример мы можем переписать в несколько измененном виде:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTFQW7BFrtbLmhe2yIocm_q_4RPSnqqPhwYKFkj037oL7lLI9KdQNdT3gq2hvYmxsLAn6vy_0SID2PCfsPH1OpMtaczOvBVwAkIYE-xy5DZ6OY4zG_SWgDzI7tlPYJ7EXYd-Q3Y4D9Pvj5/s1600-h/2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTFQW7BFrtbLmhe2yIocm_q_4RPSnqqPhwYKFkj037oL7lLI9KdQNdT3gq2hvYmxsLAn6vy_0SID2PCfsPH1OpMtaczOvBVwAkIYE-xy5DZ6OY4zG_SWgDzI7tlPYJ7EXYd-Q3Y4D9Pvj5/s400/2.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&amp;nbsp;Возможны следующие варианты:&lt;br /&gt;
&amp;nbsp;[] - Нет обращения к внешним переменным.&lt;br /&gt;
&amp;nbsp;[=] - Обращение ко всем внешним переменным по значению.&lt;br /&gt;
&amp;nbsp;[&amp;amp;] - Обращение ко всем внешним переменным по ссылке.&lt;br /&gt;
&amp;nbsp;[=, &amp;amp;x] - Обращение ко всем по значению, кроме переменной x&lt;br /&gt;
&amp;nbsp;[&amp;amp;, x] - Обращение ко  всем по ссылке, кроме х.&lt;br /&gt;
&amp;nbsp;[x, &amp;amp;y, z] - Обращение только к переменным x, y, z (к y по ссылке). Доступ к другим переменным отсутствует.&lt;br /&gt;
&lt;br /&gt;
Как видим списки захвата дают нам большую гибкость при работе с лямбда выражениями.&lt;br /&gt;
&lt;br /&gt;
При обращении к внешним переменным нужно учесть несколько нюансов.&lt;br /&gt;
Допустим есть следующее лямбда выражение, в котором мы локально изменяем внешнюю переменную (обращаюсь по значению) и выводим ее на экран:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZhFel7g01doYfHakUpujZYmCxHd4-9a888FlmLUnG4zw3JCr3zHKZfaKozCD91haKE3KT6gdZ5nQcgm4Fy2DdlZAyvC9facs3JvzD2ZNnUPPCGn8mbU762wV11Rrjcq3dd77E3Top_2HA/s1600-h/3.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZhFel7g01doYfHakUpujZYmCxHd4-9a888FlmLUnG4zw3JCr3zHKZfaKozCD91haKE3KT6gdZ5nQcgm4Fy2DdlZAyvC9facs3JvzD2ZNnUPPCGn8mbU762wV11Rrjcq3dd77E3Top_2HA/s400/3.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
К сожалению такой код компилируется с ошибкой:&lt;br /&gt;
Error 1 error C3491: &#39;X&#39;: a by-value capture cannot be modified in a non-mutable lambda main.cpp 8 1 LambdaExpressions&lt;br /&gt;
&lt;br /&gt;
Попробуем разобраться почему возникает такая ошибка. Сами по себе лямбда выражения представляют собой анонимные функторы, которые генерируется компилятором. Для выражения выше генерируется нечто следующее:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqdCAubg5g6WhXxhraaGsXMHaYd5qqs7-KZjIhyphenhyphenU1eqRky7s-j8oN4c8R8mM7JSnjlsRjtexHL1xiZohBIc47-FigqVqfPLq_dHdSUK8l3GtMFcqhZX3YJqEHx4m2gmLHWINUVldQkFuQB/s1600-h/4.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqdCAubg5g6WhXxhraaGsXMHaYd5qqs7-KZjIhyphenhyphenU1eqRky7s-j8oN4c8R8mM7JSnjlsRjtexHL1xiZohBIc47-FigqVqfPLq_dHdSUK8l3GtMFcqhZX3YJqEHx4m2gmLHWINUVldQkFuQB/s640/4.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
Вся проблема в том, что оператор генерируется с модификатором const, впоследствии чего переменная Х не может быть модифицирована. Решением проблемы является добавление ключевого слова mutable.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTZvDr_-v3sR-4lAYLsQ_EM29mbTolwe_BXbzyvqbI17jbiH9LUZWQ1FAJzwKj52KyHVN1gQ61_bGDyF_jVwhos5YHlX892S9k1O-StrtC6oGVPVy069HMsdXdmE6np4LID9P5vzLON8cy/s1600-h/5.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTZvDr_-v3sR-4lAYLsQ_EM29mbTolwe_BXbzyvqbI17jbiH9LUZWQ1FAJzwKj52KyHVN1gQ61_bGDyF_jVwhos5YHlX892S9k1O-StrtC6oGVPVy069HMsdXdmE6np4LID9P5vzLON8cy/s400/5.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
Второй нюанс при обращении к членам класса. Приведу сразу пример:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIwdYA2Hgz8F0MJrZueDafWfRCJum-1Y8bLkIsaEYOMdjRHD91d69UcrqzPrYTjOdBuoQBHJ5XUK3LyqPvvN8Uv8xy6anT9kbXG3XePGhHFAbRtWYRfef3_h8t8XmQ3gSUG6pFTxBz3Oxb/s1600-h/6.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIwdYA2Hgz8F0MJrZueDafWfRCJum-1Y8bLkIsaEYOMdjRHD91d69UcrqzPrYTjOdBuoQBHJ5XUK3LyqPvvN8Uv8xy6anT9kbXG3XePGhHFAbRtWYRfef3_h8t8XmQ3gSUG6pFTxBz3Oxb/s640/6.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
Компиляция этого кода также приведет к ошибке:&lt;br /&gt;
Error 1 error C3480: &#39;Object::X&#39;: a lambda capture variable must be from an enclosing function scope \main.cpp 11 1 LambdaExpressions&lt;br /&gt;
&lt;br /&gt;
Компилятор говорит, что захватываемая переменная должна быть в области видимости. Для обращения к членам класса нужно вместо [X] объявить [this]. Код компилируется без проблем, но при этом обращение к членам класса осуществляется только по ссылке. Любые попытки сделать обращение по значению приведут к ошибке.&lt;br /&gt;
&lt;br /&gt;
Как видим лямбда выражения являются мощным инструментов будущего С++0х, который позволяет значительно упростить работу и сделать код более компактным.&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/1349930431846267217/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2009/11/c0x-lambda-expressions.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/1349930431846267217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/1349930431846267217'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2009/11/c0x-lambda-expressions.html' title='C++0x Lambda Expressions'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVft_oJZGRpaTehmDOGmG0Cj5nMV1z19gJisi1KHEGlpsWN2nLNn2Q-vCnjxkCS8IrjIY3tdluYT3yoH4BBgWRWBF8TrgQmG3s6SIL_aBjH2nkaTYVuQA8Cxc59j_QSiXsTDfNBUSkjieH/s72-c/1.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-8514820788066640027</id><published>2009-11-09T22:12:00.001+02:00</published><updated>2009-11-09T22:13:16.074+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="vs2010"/><title type='text'>Visual Studio 2010 Toolbox search</title><content type='html'>Еще одна классная фича новой IDE - возможность быстрого поиска и выбора элемента в Toolbox. Для ее использования нужно установить фокус на окне Toolbox (кликнуть мышью либо комбинацией Ctrl + Alt + X) и начать вводить текст. При этом в строке состояния вы увидите соответствующую информация о вводе:&lt;br /&gt;
&lt;br /&gt;
&lt;div align=&quot;left&quot; class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8g3Oaq4O0b3BX_vXzXCBaufjY-zx2N3ZTVLfoqJVq_aVapHCI2OLULtqCB8yW9hmfFthUbwKEfhEicFi3-agwXwD7Xb2z85ASV0RwG5LPhNi5EPTOxxDai8Aiqe3OiLCQlyqlYtn8ruxV/s1600-h/1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8g3Oaq4O0b3BX_vXzXCBaufjY-zx2N3ZTVLfoqJVq_aVapHCI2OLULtqCB8yW9hmfFthUbwKEfhEicFi3-agwXwD7Xb2z85ASV0RwG5LPhNi5EPTOxxDai8Aiqe3OiLCQlyqlYtn8ruxV/s400/1.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
По мере ввода, VS будет автоматически &amp;nbsp;подсвечивать (и выбирать) подходящий элемент. Для перехода к следующему элементу используется клавиша Tab, для отмены поиска - Esc.&lt;br /&gt;
&lt;br /&gt;
Небольшая, но приятная функция).&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/8514820788066640027/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2009/11/visual-studio-2010-toolbox-search.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/8514820788066640027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/8514820788066640027'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2009/11/visual-studio-2010-toolbox-search.html' title='Visual Studio 2010 Toolbox search'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8g3Oaq4O0b3BX_vXzXCBaufjY-zx2N3ZTVLfoqJVq_aVapHCI2OLULtqCB8yW9hmfFthUbwKEfhEicFi3-agwXwD7Xb2z85ASV0RwG5LPhNi5EPTOxxDai8Aiqe3OiLCQlyqlYtn8ruxV/s72-c/1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-8532049447172448964</id><published>2009-11-08T15:57:00.002+02:00</published><updated>2009-11-14T01:55:25.598+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="c#"/><category scheme="http://www.blogger.com/atom/ns#" term="dotnet4"/><title type='text'>Data Parallelism (Task Parallel Library) в NET4.</title><content type='html'>Я уже писал ранее о некоторых нововведениях NET4 и о том, как можно легко распараллелить&amp;nbsp;&lt;a href=&quot;http://devenv-diary.blogspot.com/2009/10/linq.html&quot;&gt;запросы&lt;/a&gt;&amp;nbsp;с помощью &amp;nbsp;Parallel LINQ. В .NET4 это не единственное нововведение для задач параллельного программирования, нам предоставляется возможность с такой же легкостью распараллелить циклы for и foreach. Для этого служит новое пространство имен System.Threading.Tasks.Parallel .&lt;br /&gt;
&lt;br /&gt;
Рассмотрим, в качестве примера, код умножения матрицы:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjl2LU1vYkTQhQ79jcKpxbxIPUHh4bzCVatBqFyAU-Qu69NTcevalfJagc70fPahVXFIsd6mpLIjx2a2DusXDkYvMN9W5CEjS1UoPAMJ8TPlHz6UFoJKLtfHJEPrxKBRWH2y1rP-OrmhEOf/s1600-h/2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjl2LU1vYkTQhQ79jcKpxbxIPUHh4bzCVatBqFyAU-Qu69NTcevalfJagc70fPahVXFIsd6mpLIjx2a2DusXDkYvMN9W5CEjS1UoPAMJ8TPlHz6UFoJKLtfHJEPrxKBRWH2y1rP-OrmhEOf/s320/2.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;span id=&quot;goog_1257687033111&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1257687033112&quot;&gt;&lt;/span&gt;&lt;br /&gt;
Данный код легко превращается в параллельную программу:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyjzNAQ7QvSi2RdBldQpnpo6Dme81VLEcoPNOacSkmMPBWWKZBgOKMnIuwOcjuA_k10cjOw2qXCSnMMFG-UUkMUtHWYEUtoZE4P844mkRXMg-fp0TpPCcXBmkfS1vb7afWw00eizI0iIya/s1600-h/1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyjzNAQ7QvSi2RdBldQpnpo6Dme81VLEcoPNOacSkmMPBWWKZBgOKMnIuwOcjuA_k10cjOw2qXCSnMMFG-UUkMUtHWYEUtoZE4P844mkRXMg-fp0TpPCcXBmkfS1vb7afWw00eizI0iIya/s320/1.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;span id=&quot;goog_1257687033122&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1257687033123&quot;&gt;&lt;/span&gt;&lt;br /&gt;
В целях эксперимента я решил замерить скорость выполнения умножения матрицы 1000х1000 на 1 и 2 ядрах. Результаты получились следующие:&lt;br /&gt;
1 поток &amp;nbsp;- 40.657&lt;br /&gt;
2 потока - &amp;nbsp;23.514&lt;br /&gt;
&lt;br /&gt;
Как и ожидалось, прирост почти в два раза.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ссылки и другие примеры:&amp;nbsp;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/dd537608(VS.100).aspx&quot;&gt;http://msdn.microsoft.com/en-us/library/dd537608(VS.100).aspx&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/8532049447172448964/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2009/11/data-parallelism-task-parallel-library.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/8532049447172448964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/8532049447172448964'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2009/11/data-parallelism-task-parallel-library.html' title='Data Parallelism (Task Parallel Library) в NET4.'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjl2LU1vYkTQhQ79jcKpxbxIPUHh4bzCVatBqFyAU-Qu69NTcevalfJagc70fPahVXFIsd6mpLIjx2a2DusXDkYvMN9W5CEjS1UoPAMJ8TPlHz6UFoJKLtfHJEPrxKBRWH2y1rP-OrmhEOf/s72-c/2.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-651482776918286047</id><published>2009-11-08T14:02:00.003+02:00</published><updated>2009-11-08T14:14:18.954+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="vs2010"/><title type='text'>Visual Studio 2010 Code Metrics</title><content type='html'>Еще одно интересное нововведение Visual Studio 2010 - это возможность оценивать сложность и переносимость кода. Данная функция будет полезной для команд разработчиков, поскольку можно увидеть текущее состояние проекта и определить потенциально проблемные участки кода.&lt;br /&gt;
&lt;br /&gt;
Запустить подсчет статистики можно несколькими способами:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Solution Explorer - Правой кнопкой по проекту - Calculate Code Metrics&lt;/li&gt;
&lt;li&gt;Меню Analyze - Calculate Code Metrics for ...&lt;/li&gt;
&lt;li&gt;Меня View - Other windows - Code Metrics Results.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
Предоставляются следующие данные:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Maintainability Index&lt;/b&gt; - &quot;ремонтопригодность&quot; =) кода. Подсчитывается индекс от 0 до 100, &amp;nbsp;который определяет сложность сопровождения кода. Данный параметр вычисляется на основании других - Cyclomatic Complexity и Lines of Code.&amp;nbsp;Чем выше число, тем лучше. В той же колонке можно увидеть цветной индикатор, который имеет след. значения: зеленый - от 20 до 100, желтый - от 10 до 19, и красный - от 0 до 9.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Cyclomatic Complexity&lt;/b&gt; - &amp;nbsp;структурная сложность кода. Тут просто подсчитывается количество операторов if, switch, do, while, foreach, for loops в блоке кода. Чем меньше, тем лучше.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Depth of Inheritance&lt;/b&gt; - &amp;nbsp;подсчитывает глубину иерархии наследования.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Class Coupling&lt;/b&gt; - &amp;nbsp;определяет количество связей (через локальные переменные, возвращаемые значения, вызовы методов и т. п.). При подсчете пропускаются встроенные типы. Разумеется, чем меньше связей, тем лучше переносимость кода.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Lines of Code&lt;/b&gt; - количество строк кода. При подсчете пропускаются комментарии, скобки, пробелы и т.п.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEJyWpb3PB4WnyS4pVq0CVqpPNse3IRzhJLN7eyqdw7JlrQ_CLHszUFG-scu9WUnRdMleYtAIqErYZ9pvUfcFbXkyLpG9O4Cai_agJdzeSL_6IGhXrP7bLl9OrxMdg_qm14Jxlxx8Ik9KN/s1600-h/1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEJyWpb3PB4WnyS4pVq0CVqpPNse3IRzhJLN7eyqdw7JlrQ_CLHszUFG-scu9WUnRdMleYtAIqErYZ9pvUfcFbXkyLpG9O4Cai_agJdzeSL_6IGhXrP7bLl9OrxMdg_qm14Jxlxx8Ik9KN/s400/1.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
В качестве дополнительных опций есть возможность установить фильтр, который нас интересует, а также минимальное и максимальное значение для него.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqDMI1olPaawdVpGzJc_l4AM3QkuVHRi4bJZJTuuKvnxe99IHnJwohNklQw409fr-iUy74TP3vbHyPerOAybbPOmdOI7j7E2odrcB4zPH2bOeYkbD7LCPYqWx4KLFV95B5Lk7b_lEvayQ1/s1600-h/2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqDMI1olPaawdVpGzJc_l4AM3QkuVHRi4bJZJTuuKvnxe99IHnJwohNklQw409fr-iUy74TP3vbHyPerOAybbPOmdOI7j7E2odrcB4zPH2bOeYkbD7LCPYqWx4KLFV95B5Lk7b_lEvayQ1/s400/2.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
Также Visual Studio 2010 позволяет отображать только определенные колонки и&amp;nbsp; сделать экспорт результатов в Excel.&lt;br /&gt;
&lt;br /&gt;
Code Metrics работает только в управляемом коде, а жаль :&#39;(&lt;br /&gt;
&lt;br /&gt;
Ссылки: http://msdn.microsoft.com/en-us/library/bb385910.aspx&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/651482776918286047/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2009/11/visual-studio-2010-code-metrics.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/651482776918286047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/651482776918286047'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2009/11/visual-studio-2010-code-metrics.html' title='Visual Studio 2010 Code Metrics'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEJyWpb3PB4WnyS4pVq0CVqpPNse3IRzhJLN7eyqdw7JlrQ_CLHszUFG-scu9WUnRdMleYtAIqErYZ9pvUfcFbXkyLpG9O4Cai_agJdzeSL_6IGhXrP7bLl9OrxMdg_qm14Jxlxx8Ik9KN/s72-c/1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-4599830068737666183</id><published>2009-11-07T10:24:00.006+02:00</published><updated>2010-02-08T21:35:48.541+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="c#"/><category scheme="http://www.blogger.com/atom/ns#" term="linq"/><title type='text'>Linq-To-Entity Dynamic Search</title><content type='html'>Недавно столкнулся с задачей динамического поиска по таблице используя Linq-To-Entity. Поиск нужно выполнять по любому полю, опционально должны быть настройки: &quot;Содержит&quot;, &quot;Начинается&quot;, &quot;Заканчивается&quot;, &quot;Равно&quot;. &amp;nbsp;А также критериев поиска может быть любое количество.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic58Matz5f-i3K1kUZ7v4OHW0OExeRR_i1wWrS05Cxxrkd4KCUMDrchuHNNDer63TbXACJO4Mfn08OHhr_Smve95_aM7NuaQqe8JLHPsoqJ7aKBV0-XhOwdKySQoLTrGexZb89kA2F3l7g/s1600-h/1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic58Matz5f-i3K1kUZ7v4OHW0OExeRR_i1wWrS05Cxxrkd4KCUMDrchuHNNDer63TbXACJO4Mfn08OHhr_Smve95_aM7NuaQqe8JLHPsoqJ7aKBV0-XhOwdKySQoLTrGexZb89kA2F3l7g/s320/1.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
К сожалению стандартные средства LINQ не предоставляют подобной гибкости. Одним из решений было использовать LINQ Dynamic Query API. Данная библиотека совместима с любым LINQ провайдером данных (LINQ to SQL, LINQ to Objects, LINQ to XML, LINQ to Entities, LINQ to SharePoint, LINQ to TerraServer). Вместо использования операторов языка и лямбда выражений, она предоставляет строковые расширения. Например.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEix1NmDTsMb9yJ0QkyYoPcw4IRs7JG-p2wCWpKy5rVFpkmtGhyphenhyphen3nI0SbAQ9vmRIXnQlndCQY3pF_DTSZn9h4OItEoOke-ATrhCy1hGSbXsji8ocRqdtsTU_QMs9hSEJH_vLz5cd99esm1jg/s1600-h/DynamicQueryParameters.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEix1NmDTsMb9yJ0QkyYoPcw4IRs7JG-p2wCWpKy5rVFpkmtGhyphenhyphen3nI0SbAQ9vmRIXnQlndCQY3pF_DTSZn9h4OItEoOke-ATrhCy1hGSbXsji8ocRqdtsTU_QMs9hSEJH_vLz5cd99esm1jg/s400/DynamicQueryParameters.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Подобная система сводится к простой генерации строки запроса, что не составляет особого труда.&lt;br /&gt;
Ссылки для скачивания&amp;nbsp;&lt;a href=&quot;http://msdn.microsoft.com/en-us/vcsharp/bb894665.aspx&quot;&gt;http://msdn.microsoft.com/en-us/vcsharp/bb894665.aspx&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx&quot;&gt;http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.codeproject.com/KB/WPF/LtoE.aspx&quot;&gt;http://www.codeproject.com/KB/WPF/LtoE.aspx&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/4599830068737666183/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2009/11/linq-to-entity-dynamic-search.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/4599830068737666183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/4599830068737666183'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2009/11/linq-to-entity-dynamic-search.html' title='Linq-To-Entity Dynamic Search'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic58Matz5f-i3K1kUZ7v4OHW0OExeRR_i1wWrS05Cxxrkd4KCUMDrchuHNNDer63TbXACJO4Mfn08OHhr_Smve95_aM7NuaQqe8JLHPsoqJ7aKBV0-XhOwdKySQoLTrGexZb89kA2F3l7g/s72-c/1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-8411816039089878565</id><published>2009-11-03T16:19:00.001+02:00</published><updated>2009-11-03T16:20:41.666+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="c#"/><title type='text'>C# Operator ??</title><content type='html'>В C# есть замечательный оператор -??.&amp;nbsp;С помощью него следующее выражение:&lt;br /&gt;
t = (text == null) ? &quot;&quot; : text;&lt;br /&gt;
можно записать в более изящном виде:&lt;br /&gt;
t = text ?? &quot;&quot;;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/8411816039089878565/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2009/11/c-operator.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/8411816039089878565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/8411816039089878565'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2009/11/c-operator.html' title='C# Operator ??'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-5472063408177253909</id><published>2009-11-02T15:40:00.000+02:00</published><updated>2009-11-02T15:40:00.713+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="vs"/><title type='text'>Visual Studio F1 Help Shortcut</title><content type='html'>&lt;br /&gt;Наиболее раздражающая вещь в Visual Studio для меня - это случайно нажать вместо Escape клавишу F1. При этом появляется окно &quot;Help Update In Progress&quot;, которое блокирует основное окно на несколько минут.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOMVpp92qk13cI0CtLV1gkZC30iH8fK24JmmSeobAHKs-lT-21zHLVhGPd7ixOJz3B803UHS7m3J40zfC34SrUuPZ87nwuERgF-eHKYVCva7CbIA-aK3wmRWf2VO4C3PD2Cg1LDy4jwyzP/s1600-h/11.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOMVpp92qk13cI0CtLV1gkZC30iH8fK24JmmSeobAHKs-lT-21zHLVhGPd7ixOJz3B803UHS7m3J40zfC34SrUuPZ87nwuERgF-eHKYVCva7CbIA-aK3wmRWf2VO4C3PD2Cg1LDy4jwyzP/s320/11.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
Погуглив несколько минут, я нашел решение - это отключить клавишу F1 как таковую.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhftI55E3_s6L-RUJ0e4EqlQvEAaloQSECIamNdoIQuMZl9_AlVvGMOHT2OXP0oCk5I-ipK2rqs_o6kgBgtWRVPuSeG5W3uO1hDjnr1C4qcFdpl5XoCFlkfdNnPOVEgq5CfiDdEQewf_cof/s1600-h/22.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhftI55E3_s6L-RUJ0e4EqlQvEAaloQSECIamNdoIQuMZl9_AlVvGMOHT2OXP0oCk5I-ipK2rqs_o6kgBgtWRVPuSeG5W3uO1hDjnr1C4qcFdpl5XoCFlkfdNnPOVEgq5CfiDdEQewf_cof/s400/22.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
Жить стало легче (:&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/5472063408177253909/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2009/11/visual-studio-f1-help-shortcut.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/5472063408177253909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/5472063408177253909'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2009/11/visual-studio-f1-help-shortcut.html' title='Visual Studio F1 Help Shortcut'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOMVpp92qk13cI0CtLV1gkZC30iH8fK24JmmSeobAHKs-lT-21zHLVhGPd7ixOJz3B803UHS7m3J40zfC34SrUuPZ87nwuERgF-eHKYVCva7CbIA-aK3wmRWf2VO4C3PD2Cg1LDy4jwyzP/s72-c/11.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-7849510007743010980</id><published>2009-10-31T11:47:00.003+02:00</published><updated>2010-02-08T21:36:13.247+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dotnet4"/><category scheme="http://www.blogger.com/atom/ns#" term="linq"/><title type='text'>Параллельный LINQ</title><content type='html'>Многоядерные и многопроцессорные системы уже ни для кого не являются новостью, так как прогресс никогда не стоит на месте. В данном посте я хочу немного рассказать про набор расширений Parallel FX, а конкретно про PLINQ - механизм выполнения LINQ запросов на многоядерных системах. Отличия &amp;nbsp;с точки зрения синтаксиса в LINQ и PLINQ минимальны, все что требуется от программиста - это обвернуть источник данных в IParallelEnumerable&amp;lt;T&amp;gt; с помощью расширения System.Linq.ParallelEnumerable.AsParallel. К примеру возьмем запрос:&lt;br /&gt;
&lt;br /&gt;
var T = Dat.Where(x =&amp;gt; x.Value == 5).Select(x =&amp;gt; x);&lt;br /&gt;
&lt;br /&gt;
для его распараллеливания следует внести следующие изменения:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;var T = Dat.AsParallel().Where(x =&amp;gt; x.Value == 5).Select(x =&amp;gt; x);&lt;br /&gt;
&lt;br /&gt;
Или же:&lt;br /&gt;
&lt;br /&gt;
var T = from A in Dat.AsParallel() where A.Value == 5 select A;&lt;br /&gt;
&lt;br /&gt;
Все! При выполнении запроса PLINQ сам организует запуск его частей на доступных процессорах.&lt;br /&gt;
Прелесть этой системы состоит в том, что от программиста вообще не требуется &amp;nbsp;никаких знаний параллельного программирования, а затраты на ее внедрение - минимальны.&lt;br /&gt;
&lt;br /&gt;
Ссылки:&lt;br /&gt;
http://en.wikipedia.org/wiki/Parallel_Extensions&lt;br /&gt;
http://msdn.microsoft.com/ru-ru/magazine/cc163329.aspx</content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/7849510007743010980/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2009/10/linq.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/7849510007743010980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/7849510007743010980'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2009/10/linq.html' title='Параллельный LINQ'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-8686654627068165044</id><published>2009-10-28T16:04:00.008+02:00</published><updated>2009-10-28T20:31:56.903+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="vs2010"/><title type='text'>IntelliTrace &amp; Reverse Debugging в VS2010</title><content type='html'>Совсем недавно я писал про весьма удобную фишку VS2005/VS2008 - &lt;a href=&quot;http://devenv-diary.blogspot.com/2009/10/visual-studio-tracepoints.html&quot;&gt;Tracepoints&lt;/a&gt;. В VS2010 пошли дальше и добавили - IntelliTrace (ранее известен как Historical Debugger). IntelliTrace - это вариант отладки (к сожалению доступен только для управляемого кода), при котором, кроме стандартных опций отладчика Visual Studio, вы можете&amp;nbsp;выполнить полную трассировку программы, то есть просмотреть все UI события, User gestures, обращения к файловой системе, сети, реестру, LINQ запросы и т. п., а также в каждой контрольной точке видеть значение локальных переменных, call stack и т. д.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVDhmuWU5PrNimRojd5uEQmX_1V81_aTW6s_ARIdpr4Tiesp1s0ulRAKTzlEtwHJmEv3q3LWf6JkIp5ku_ZyPx6FRjaMo40Po0LW-a7qJcH7_PdqBmDz4awNM5ebgzC-iz9_frmfGahP3d/s1600-h/1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVDhmuWU5PrNimRojd5uEQmX_1V81_aTW6s_ARIdpr4Tiesp1s0ulRAKTzlEtwHJmEv3q3LWf6JkIp5ku_ZyPx6FRjaMo40Po0LW-a7qJcH7_PdqBmDz4awNM5ebgzC-iz9_frmfGahP3d/s320/1.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
Два раза кликнув по нужной записи - можно перейти к соответствующему участку кода в программе.&lt;br /&gt;
&lt;/div&gt;
&lt;br /&gt;
Дальше - лучше. IntelliTrace позволяет выполнять отладку как вперед так и назад. По умолчанию эта опция выключена. Для ее включения нужно поставить переключатель &quot;IntelliTrace events and call information&quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGQfWySgdC82XKvAKFkxJmFQ7EmmDsTmZfUT2agwGC5sia7FieO54IugaHAK6tK6q5BviMlCSOo5jEwZe8GSx8wIHJ5nzo04R6qrLG983PHqq3M4rkm6XEEO2xtUBdWtucICeLAlgeRCwE/s1600-h/2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGQfWySgdC82XKvAKFkxJmFQ7EmmDsTmZfUT2agwGC5sia7FieO54IugaHAK6tK6q5BviMlCSOo5jEwZe8GSx8wIHJ5nzo04R6qrLG983PHqq3M4rkm6XEEO2xtUBdWtucICeLAlgeRCwE/s320/2.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После этого во время отладки, слева от окна редактора появляется специальная панель.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYYrumGPUMs5oxPKTOwOffYcWfTE9zTbz-a9G_73eT8pnGBefDt6Ackh1Y1WtrEAYf6XqzUAvxBm4meNuDTV898H0nwoRF7dEanoQH1vHBxJfvbnKGKK38Sr9nWOTL-szXkpyfdMao0h62/s1600-h/3.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYYrumGPUMs5oxPKTOwOffYcWfTE9zTbz-a9G_73eT8pnGBefDt6Ackh1Y1WtrEAYf6XqzUAvxBm4meNuDTV898H0nwoRF7dEanoQH1vHBxJfvbnKGKK38Sr9nWOTL-szXkpyfdMao0h62/s320/3.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
Return to Call site&lt;br /&gt;
Go to previous call&lt;br /&gt;
Step in&lt;br /&gt;
Go to next call&lt;br /&gt;
Go to live mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Как видим, процесс отладки в VS станет заметно удобнее для программиста.&lt;br /&gt;
&lt;br /&gt;
Ссылки: http://blogs.msdn.com/habibh/archive/2009/09/21/coverage-of-the-visual-studio-2010-historical-debugger.aspx&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/8686654627068165044/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2009/10/intellitrace-reverse-debugging-visual.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/8686654627068165044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/8686654627068165044'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2009/10/intellitrace-reverse-debugging-visual.html' title='IntelliTrace &amp; Reverse Debugging в VS2010'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVDhmuWU5PrNimRojd5uEQmX_1V81_aTW6s_ARIdpr4Tiesp1s0ulRAKTzlEtwHJmEv3q3LWf6JkIp5ku_ZyPx6FRjaMo40Po0LW-a7qJcH7_PdqBmDz4awNM5ebgzC-iz9_frmfGahP3d/s72-c/1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-885668475218127788</id><published>2009-10-26T16:57:00.002+02:00</published><updated>2009-11-07T12:41:30.583+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dx11"/><category scheme="http://www.blogger.com/atom/ns#" term="gamedev"/><category scheme="http://www.blogger.com/atom/ns#" term="unigine"/><title type='text'>Unigine heaven benchmark (DX11)</title><content type='html'>Ребята из Unigine выпустили бенчмарк на DX11. В демке преимущественно демонстрируется одна из основных фич ДХ11 - аппаратная тесселяция. Вынужден признать - картинка меня впечатлила. Красиво).&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://unigine.com/press-releases/091022-heaven_benchmark/dragon_sm.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;225&quot; src=&quot;http://unigine.com/press-releases/091022-heaven_benchmark/dragon_sm.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;Вот список ключевых фич:&lt;br /&gt;
* Native support of OpenGL, DirectX 9, DirectX 10 and DirectX 11&lt;br /&gt;
* Comprehensive use of tessellation technology&lt;br /&gt;
* Advanced SSAO (screen-space ambient occlusion)&lt;br /&gt;
* Volumetric cumulonimbus clouds generated by a physically accurate algorithm&lt;br /&gt;
* Dynamic simulation of changing environment with high physical fidelity&lt;br /&gt;
* Interactive experience with fly/walk-through modes&lt;br /&gt;
* ATI Eyefinity support&lt;br /&gt;
&lt;br /&gt;
&lt;object height=&quot;344&quot; width=&quot;425&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/9F6zSgtRnkE&amp;hl=ru&amp;fs=1&amp;&quot;&gt;

&lt;/param&gt;
&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;

&lt;/param&gt;
&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;

&lt;/param&gt;
&lt;embed src=&quot;http://www.youtube.com/v/9F6zSgtRnkE&amp;hl=ru&amp;fs=1&amp;&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;br /&gt;
&lt;object height=&quot;344&quot; width=&quot;425&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/bkKtY2G3FbU&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1&quot;&gt;

&lt;/param&gt;
&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;

&lt;/param&gt;
&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;

&lt;/param&gt;
&lt;embed src=&quot;http://www.youtube.com/v/bkKtY2G3FbU&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowScriptAccess=&quot;always&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;br /&gt;
&amp;nbsp;Ссылки &amp;nbsp;на источник:&lt;br /&gt;
http://unigine.com/press-releases/091022-heaven_benchmark/&lt;br /&gt;
http://binstream.livejournal.com/82398.html#cutid1&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/885668475218127788/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2009/10/unigine-heaven-benchmark-dx11.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/885668475218127788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/885668475218127788'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2009/10/unigine-heaven-benchmark-dx11.html' title='Unigine heaven benchmark (DX11)'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-4199124957574943013</id><published>2009-10-22T13:46:00.000+03:00</published><updated>2009-10-22T14:35:10.207+03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="vs"/><title type='text'>Visual Studio Tracepoints</title><content type='html'>В Visual Studio есть одна интересная функция, которую я раньше в упор не замечал.&lt;br /&gt;
Очень часто во время отладки или тестирования кода возникает потребность выводить на экран значения тех или иных переменных. Раньше эта проблема решалась добавлением в код соответствующих методов: printf, Log, MessageBox, Console.WriteLine и т.п. Оказывается все намного проще и удобнее. В VS, начиная с 2005, есть Tracepoints. Это своего рода аналог Breakpoint, который позволяет выводить какие либо сообщения в DebugOutput. Создается трейспоинт через меню правой кнопкой, Breakpoint -&amp;gt; Insert Tracepoint.&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1OSewpXETj5zAyjS4lrR02EaNdz0jSOvxs-Kytd0eZTM2Y90P10qnGk8rgs2WQzMCxAGcnzEYhAGAkF9_E7PNbnPaP0e5lAIErQW-LRFwuMmU26gW8HjwFp2ct08Ap2eopP6daYK30G78/s1600-h/1.jpg&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5395376396771143394&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1OSewpXETj5zAyjS4lrR02EaNdz0jSOvxs-Kytd0eZTM2Y90P10qnGk8rgs2WQzMCxAGcnzEYhAGAkF9_E7PNbnPaP0e5lAIErQW-LRFwuMmU26gW8HjwFp2ct08Ap2eopP6daYK30G78/s320/1.jpg&quot; style=&quot;cursor: hand; cursor: pointer; height: 320px; width: 250px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;В появившемся окне можно определить формат и переменные для вывода либо макрос, который будет запускаться. Таким образом можно просматривать нужные данные не изменяя код.</content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/4199124957574943013/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2009/10/visual-studio-tracepoints.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/4199124957574943013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/4199124957574943013'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2009/10/visual-studio-tracepoints.html' title='Visual Studio Tracepoints'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1OSewpXETj5zAyjS4lrR02EaNdz0jSOvxs-Kytd0eZTM2Y90P10qnGk8rgs2WQzMCxAGcnzEYhAGAkF9_E7PNbnPaP0e5lAIErQW-LRFwuMmU26gW8HjwFp2ct08Ap2eopP6daYK30G78/s72-c/1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-7092408597961010857</id><published>2009-05-16T11:08:00.001+03:00</published><updated>2009-11-12T08:21:29.389+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="c++"/><title type='text'>Вызов чисто виртуальной функции))</title><content type='html'>Ничто так не ограничивает полёт мысли программиста, как компилятор :)) Но как сказал один мой товарищ - если иметь фантазию - можно творить чудеса... Сегодня мне в аську колега в комманде кинул интересный код вызова чисто виртуальной фукнции:&lt;br /&gt;
&lt;br /&gt;
void func(class A*);&lt;br /&gt;
&lt;br /&gt;
class A&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
A() {func(this);}&lt;br /&gt;
virtual void pure() = 0;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class B : public A&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
virtual void pure() {}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
void func(A* a)&lt;br /&gt;
{&lt;br /&gt;
a-&amp;gt;pure();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
B* b = new B();&lt;br /&gt;
}&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/7092408597961010857/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2009/10/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/7092408597961010857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/7092408597961010857'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2009/10/blog-post.html' title='Вызов чисто виртуальной функции))'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-6850161643861182145</id><published>2009-04-06T11:07:00.001+03:00</published><updated>2009-11-12T08:20:43.954+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="c++"/><title type='text'>Думал, что мир перевернулся...</title><content type='html'>Сидел на лекции, баловался.. В итоге вышло, что заработал данный кусок кода  (но только в релиз варианте, дебаг перехватывает обращения к неициализированному поинтеру):&lt;br /&gt;
&lt;br /&gt;
class A {&lt;br /&gt;
public:&lt;br /&gt;
int a;&lt;br /&gt;
bool b;&lt;br /&gt;
float c;&lt;br /&gt;
void debug() { printf(&quot;%i %s %f\r\n&quot;, a, b ? &quot;true&quot; : &quot;false&quot;, c); }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
A * f;  // &amp;lt;-- ??? f-&amp;gt;a = 4;&lt;br /&gt;
f-&amp;gt;b = true;&lt;br /&gt;
f-&amp;gt;c = 4.5f;&lt;br /&gt;
f-&amp;gt;debug();&lt;br /&gt;
return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Дальше в лес, больше дров, мой товарищ решил совсем извратиться :))&lt;br /&gt;
&lt;br /&gt;
float* f;&lt;br /&gt;
int i;&lt;br /&gt;
for (i = 0; i &amp;lt; 10000000; i++) {&lt;br /&gt;
*f = 6.0f;&lt;br /&gt;
printf(&quot;%f\n&quot;, *f);&lt;br /&gt;
}&lt;br /&gt;
Так работает, но после определенного числа итераций валится.&lt;br /&gt;
&lt;br /&gt;
А след. кусок валится сразу (если  int i обьявить в конструкции for).&lt;br /&gt;
float* f;&lt;br /&gt;
for (int i = 0; i &amp;lt; 10000000; i++) {&lt;br /&gt;
*f = 6.0f;&lt;br /&gt;
printf(&quot;%f\n&quot;, *f);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Обьяснение приблизительно следующее: в релиз варианте  поинтер забивается дефолтным мусором (принцип его формирования нам остался неизвестным), но если  из этого мусора сделать поинтер, то он будет указывать на доступную область памяти, в эту память можно писать. Так как нам все же доступно не все адресное пространство - то на определенном числе итерации оно валится..&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/6850161643861182145/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2009/04/blog-post_06.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/6850161643861182145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/6850161643861182145'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2009/04/blog-post_06.html' title='Думал, что мир перевернулся...'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2092202965483384812.post-7747327695544194794</id><published>2009-03-05T11:05:00.000+02:00</published><updated>2009-10-16T11:06:51.176+03:00</updated><title type='text'>Кхм... Раз два раз два... Проверка микрофона.. Я в эфире?))</title><content type='html'>Hello world.&lt;br /&gt;Вот и у меня любопытство взяло верх, решил поближе познакомиться с ЖЖ )) Посмотрим, что из этого выйдет ;)</content><link rel='replies' type='application/atom+xml' href='http://devenv-diary.blogspot.com/feeds/7747327695544194794/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://devenv-diary.blogspot.com/2009/04/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/7747327695544194794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2092202965483384812/posts/default/7747327695544194794'/><link rel='alternate' type='text/html' href='http://devenv-diary.blogspot.com/2009/04/blog-post.html' title='Кхм... Раз два раз два... Проверка микрофона.. Я в эфире?))'/><author><name>Раптор</name><uri>http://www.blogger.com/profile/09917533886078722676</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNC2f9dPEnG43R-UZo6ZZfoezImS48hGeQRCWvVjD9PQCoMQRzAKcTC_JT-KnCesnmaBVwQiIL_fq5rT5sdGkXkqw8ac_wFuHMLg0915SFC1Rks5ZHss57PJByp69ZS5c/s220/a_aba649c8.jpg'/></author><thr:total>0</thr:total></entry></feed>