<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10russianfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DUECRnk5eyp7ImA9WhRbEEU.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942</id><updated>2012-02-01T13:14:27.723+04:00</updated><category term="Блог" /><category term="Хакинг" /><category term="Цитатник" /><category term="CnPack IDE-Мастер" /><category term="Россия" /><category term="Экономика" /><category term="Креатив" /><category term="Общество" /><category term="Образование" /><category term="Первое сообщение" /><category term="Переводы" /><category term="Мое" /><category term="Юмор" /><category term="Delphi" /><category term="Политика" /><category term="Эксперты" /><category term="Технологии" /><category term="Наука" /><category term="Программирование" /><category term="Конкурс Delphi 2011" /><category term="Медицина" /><title>Keeper's blog</title><subtitle type="html">== I'm starting with the man in the mirror ==</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://keeper89.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>197</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Keeper89" /><feedburner:info uri="keeper89" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>Keeper89</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FKeeper89" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FKeeper89" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2FKeeper89" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/Keeper89" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FKeeper89" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FKeeper89" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FKeeper89" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://lenta.yandex.ru/settings.xml?name=feed&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2FKeeper89" src="http://lenta.yandex.ru/i/addfeed.gif">?????? ? ??????.?????</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2FKeeper89" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2FKeeper89" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2FKeeper89" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2FKeeper89" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FKeeper89" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FKeeper89" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FKeeper89" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FKeeper89" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FKeeper89" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2FKeeper89" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2FKeeper89" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2FKeeper89" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><entry gd:etag="W/&quot;A0YARH89fCp7ImA9WhRUFko.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-6974888359161964052</id><published>2012-01-27T19:45:00.000+04:00</published><updated>2012-01-27T19:45:45.164+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-27T19:45:45.164+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Экономика" /><category scheme="http://www.blogger.com/atom/ns#" term="Эксперты" /><title>Прогноз на 2012 год (М. Хазин)</title><content type="html">Как нас учат майя, это последний год существования света. Мы, к счастью, оптимисты, поэтому считаем, что «конец света» - это просто неправильная интерпретация, а на самом деле в календаре майя просто начинается новый «большой» год. Но в любом случае, наступивший год можно назвать рубежным – и не только с точки зрения майя, очень многие факторы говорят об этом. А потому, начнем мы сегодняшний обзор с краткого обзора развития мировой экономики за последние 30 лет.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
С начала 80-х главным фактором роста мировой экономики стало кредитное стимулирование частного спроса, которое принципиально изменило сам подход к долгу и кредиту. Если раньше предполагалось, что заемщик должен выплатить все долги из своих доходов, то после начала политики «рейганомики» в 80-е годы, кредиторов стала интересовать только возможность заемщика обслуживать кредит, а в качестве гарантий возврата стал выступать залог. Как следствие, общий объем долга всех субъектов экономики по отношению к их доходам сильно (примерно в два раза) вырос относительно предыдущего периода истории.&lt;br /&gt;
&lt;br /&gt;
Отметим, что вся эта модель работала только до тех пор, пока можно было снижать стоимость кредита, поскольку построена она на рефинансировании долга. В США этот период закончился в 2008 году (учетная ставка ФРС США снизилась до, практически, нуля), в Евросоюзе это происходит у нас на глазах. Ответа, что делать дальше пока нет, спрос падает, долги давят, и все участники экономического процесса занимаются ситуационным реагированием на поступающие вызовы. Анализировать их поведение достаточно сложно, поскольку большую роль при этом играют субъективные и политические моменты. Но делать это все равно приходится, и по этой причине я перехожу к первой традиционной части годового прогноза: анализу прогноза на предыдущий, 2011 год.&lt;br /&gt;
&lt;br /&gt;
Ключевое место в прогнозе занимали рассуждения о том, смогут ли США избежать начала очередного этапа эмиссионного стимулирования экономики и делался вывод о том, что вероятность этого события велика, но, теоретически, возможно, что этого можно будет избежать. Именно этот вариант, как мы видим, и воплотился на практике, и не исключено, что свою роль сыграла ситуация в Европе, в частности, колоссальная по объему (не менее 700 миллиардов в долларовом эквиваленте) эмиссия евро, проведенная в конце 2011 года.&lt;br /&gt;
&lt;br /&gt;
Как и предполагалось в прогнозе, ФРС активно выкупала облигации федерального казначейства США, а в прессе (и, видимо, в кулуарах) шла активная дискуссия о необходимости дальнейшего стимулирования экономики. Более того, в конце года уже появились утечки о том, что в первом квартале 2012 года эмиссию ФРС неминуемо начнет, но, как уже было отмечено, в реальности начал эмиссию ЕвроЦентробанк, так что не исключено, что эти утечки оказались ложными.&lt;br /&gt;
&lt;br /&gt;
Отдельное место было уделено возможным причинам резкого «слома» экономической ситуации, среди которых была упомянута возможная агрессия США (и НАТО) в Иране, однако проблемы в Ливии и Египте оценены не была, что, безусловно, является недостатком прогноза.&lt;br /&gt;
&lt;br /&gt;
Принципиальным вопросом, который занял значительную часть прогноза, стал возможный «перелом» макроэкономической тенденции и здесь можно только отметить, что хотя общая ситуация в мире и ухудшается, однако до «слома» глобальной тенденции пока дело не дошло. При этом проблемы сокращения спроса, о которых много говорилось в прогнозе, сыграли свою принципиальную роль. И политический кризис в США, связанный с требованиями Обамы увеличить дефицит бюджета, и проблемы с недвижимостью Китая, и протесты против «реформ» в странах зоны евро – все это, на самом деле, именно проблемы борьбы с сокращающимся частным спросом. И в этом месте логика прогноза была безупречной.&lt;br /&gt;
&lt;br /&gt;
При этом довольно значительная роль в прогнозе была уделена геополитическим последствиям борьбы за сокращающийся спрос. Это фактор не просто сыграл свою роль, он, в некотором смысле, стал определяющим, поскольку и постоянные обострения долгового кризиса в Европе, (здесь можно упомянуть только неожиданное начало обсуждения долговых проблем Италии сразу после того, как, казалось, разрешен кризис в Греции), и «арабская весна», и новая венгерская конституция, и даже неожиданное вступление России в ВТО – все это, как и многое другое, может быть объяснено в рамках процессов сокращения в мире совокупного спроса.&lt;br /&gt;
&lt;br /&gt;
Зато программам «затягивания поясов» в мире и в Европе в прогнозе было уделено достаточно много места. Как и процессам формирования региональных валютных зон (напомним, что многие страны в 2011 году подписали договора о переходе в расчетах на национальные валюты, а страны Таможенного союза и вовсе начали говорить о переходе к единой валюте). Не менее важная роль в прогнозе отводилась описанию механизмов стимулирования спроса и в конце 2011 года эмиссия в мире все-таки началась, хотя и не в США, как я предполагал в прогнозе, а в зоне евро.&lt;br /&gt;
&lt;br /&gt;
Евроцентробанк напечатал в декабре значительную сумму, не менее 700 миллиардов в долларовом эквиваленте, и не вызывает сомнений, что рано или поздно эти деньги, пусть и частично, пойдут на компенсацию падающего спроса. Собственно, сама эмиссия, как и аналогичные процессы в США в 2008-2009 годах, должна была предотвратить дефляционный обвал финансовой системы.&lt;br /&gt;
&lt;br /&gt;
А вот США выбрали другой путь и откровенно начали поддерживать частный спрос среди наиболее бедных слоев населения за счет роста дефицита бюджета. Это вызвало в прошедшем году острый политический скандал, однако, тем не менее, дополнительный триллион долларов дефицита пошел на социальные выплаты, что позволило увеличить реально располагаемые доходы американских домохозяйств примерно на 10%.&lt;br /&gt;
&lt;br /&gt;
Отдельно, перед переходом собственно к прогнозу, нужно отметить «дело Стросс-Кана». Дело в том, что сам по себе бывший глава МВФ не играл особо принципиальной роли в мировых раскладах, что хорошо видно по тому, насколько быстро он исчез с политического поля. Однако, волею судеб, он оказался на острие важнейшей комбинации, которая показала системный стратегический расклад, из которого в общем, можно делать определенные выводы по тем базовым сценариям, которые будут определять судьбы мира в ближайшие годы.&lt;br /&gt;
&lt;br /&gt;
Суть этой комбинации была в создании на базе МВФ нового института – «центробанка центробанков», который должен был бы заниматься рефинансированием центробанков, примерно на тех же принципах на которых они сами рефинансируют коммерческие банки. Эта конструкция, во многом, носила объективно-экономический характер, поскольку позволяла создать еще один «этаж» в пирамидальной схеме передачи экономических рисков (более подробно см. здесь ). Однако были в ней и прагматические элементы: в 30-е годы прошлого века, уже после создания ФРС, в период дефляционного кризиса, те банки, которые имели прямой доступ к ее ресурсам, смогли существенно перераспределить в свою пользу все материальные и производственные активы в США. Не исключено, что такая возможность предусматривалась заранее, поскольку создавалась ФРС (включая знаменитое совещание у Дж.П.Моргана на острове Джекил осенью 1910 года) в период предыдущего дефляционного кризиса 1908-1914 гг.&lt;br /&gt;
&lt;br /&gt;
Однако, если совещание на о.Джекил, как и последующая работа по созданию в 1913 году ФРС, проходила в глубокой тайне, сегодня вопросы о создание на базе МВФ «центробанка центробанков» проходили публично. Тогда самые главные лидеры мировой финансовой элиты отлично понимали, что создание надстройки над системой частных банков существенно ограничит возможности большинства этих структур по эмиссии собственных обязательств и создаст сильный политический противовес конституционной власти США. Сегодня ситуация совершенно аналогичная – только ограничения будут для национальных (или региональный, таких, как ЕЦБ) структур – что вряд ли понравится правительствам.&lt;br /&gt;
&lt;br /&gt;
Именно это и случилось в США – американской бюрократии было абсолютно наплевать на Стросс-Кана лично, но именно он стал исполнителем в рамках всей схемы создания «центробанка центробанков» и именно его необходимо было «выбить» из уже начавшейся процедуры создания новой структуры, чтобы ее остановить. А не остановить нельзя – поскольку запрет на эмиссию для ФРС сегодня означает крушение долговой пирамиды США и, возможно, катастрофу на рынке казначейских облигаций.&lt;br /&gt;
&lt;br /&gt;
Была ли такая публичность ошибкой мировой финансовой элиты, или она просто проверяла американскую бюрократию «на прочность», вопрос остается открытым, но факт остается фактом – пока все возможности по надстройке мировой финансовой системы закрыты и речь, таким образом, может идти только об эмиссии.&lt;br /&gt;
&lt;br /&gt;
В заключение первой части прогноза можно отметить, что поскольку, по большому счету, доминирующую роль в ушедшем году играли именно те чисто экономические, механизмы, которые были описаны, можно считать, что прогноз на прошедший, 2011 год, оказался вполне удовлетворительным. И теперь пришла пора переходить собственно к прогнозу на уже начавшийся, 2012 год.&lt;br /&gt;
&lt;br /&gt;
Начнем мы его с того, что повторим последние абзацы прогноза на год предыдущий: « ... Ключевым его элементом является точка перехода от инфляционного к дефляционному сценарию, которая зависит от устойчивости реального сектора экономики США. Этот переход может произойти и в 2011 году, и несколько позже, на основании имеющихся данных предсказать это невозможно. До тех пор, пока такой переход не произошел, в мире будет продолжаться примерно такая же экономическая картина, которая наблюдалась во второй половине предыдущего, 2010 года: рост цен сырьевого и продовольственного секторов, рост (с возможными резкими скачками вниз) на других спекулятивных рынках, в частности, фондовых биржах, общий рост безработицы, стагнация реального сектора, рост цен в одних секторах и падение – в других, ослабление мировой торговли реальными продуктами и постепенная регионализация мировой экономики. При этом спад совокупного спроса в мире, связанный с аналогичным спадом в США, будет продолжаться, несмотря на отдельные попытки его стимулировать.&lt;br /&gt;
&lt;br /&gt;
В случае же, если переход произойдет, то мы получим традиционный дефляционный сценарий, с массовыми банкротствами, как финансового, так и реального сектора, резкое сокращение уровня жизни практически во всех странах мира, быстрый распад единой системы мирового разделения труда и начала процесса резкого упрощения всего процесса производства.»&lt;br /&gt;
&lt;br /&gt;
Поскольку упомянутого перехода в 2011 году не произошло, эти слова остаются актуальными и на год 2012, но с одним принципиальным уточнением. Я не зря так подробно описал подоплеку «дела Стросс-Кана», поскольку дефляционный сценарий, так сказать, «в чистом виде» возможен только в том случае, если есть запрет на массовую эмиссию (как понятно, в индивидуальном варианте, когда некоторым, «особенно равным», товарищам «очень хочется», то для них – можно). Именно он был реализован в 30-е годы прошлого века, но тогда как раз ФРС и обеспечивала невозможность стимулирования частного спроса (некоторым дополнительным фактором стал «золотой стандарт»).&lt;br /&gt;
&lt;br /&gt;
А поскольку сегодня такого запрета нет, то можно с большой вероятностью сказать, что, по итогам прошлого года, чистый дефляционный сценарий более невозможен. Таким образом, ситуация частично определилась, однако как обычно, появилась новая развилка. Суть ее состоит в том, что чистый гиперинфляционный сценарий, такой, как был, например, в Югославии в начале 90-х годов, или в Германии начала 20-х, тоже невозможен, поскольку для него требуются механизмы быстрого доведения эмиссионных денег до конечного потребителя. А таких механизмов, в общем, в современном обществе нет, сегодня, даже в случае, если речь идет о бюджетных механизмах, речь идет как минимум о неделях.&lt;br /&gt;
&lt;br /&gt;
Это хорошо видно на примере США или Европы. Там даже очень серьезная эмиссия останавливалась в финансовом секторе, она приводила (с лагом в несколько недель, как минимум) лишь к росту цен на биржевые товары (нефть), что, в свою очередь, увеличивало издержки реального производителя, который, на фоне падающего спроса, пытался, пока была такая возможность, принимать их на себя. И только потом, когда такие возможности&lt;br /&gt;
исчерпывались, начиналось повышение цен, которое носило характер инфляции издержек.&lt;br /&gt;
&lt;br /&gt;
В США, правда, серьезно увеличились социальные дотации (на, примерно, 1 триллион долларов, или около 10% реально располагаемых доходов домохозяйств в год), однако поскольку они только частично замещали падающий спрос, то монетарной инфляции, даже в тех секторах, в которых сосредоточен спрос бедных, не было. Но вот дальше начнутся интересные эффекты.&lt;br /&gt;
&lt;br /&gt;
Поскольку частный спрос продолжает падать, экономика основных стран мира будет иметь явную тенденцию к спаду. По мере того, как это будет вызывать политические проблемы, власти будут требовать от центральных банков эмиссии, причем не просто эмиссии, а доведения денег до потребителей (через бюджеты или еще как-то). Будут, конечно, и исключения, например, малые страны зоны евро, которым просто эмиссию делать не дадут, но в них, скорее всего, будет происходить, в той или иной форме, социальная катастрофа, как сейчас в странах Прибалтики. А вот те страны, которые сегодня называются развитыми, имеют несколько вариантов действия.&lt;br /&gt;
&lt;br /&gt;
Первый из них – пытаться продолжать нынешнюю политику, то есть заниматься активной поддержкой финансового сектора и крупного бизнеса и выборочной – отдельных социальных групп. Соответственно, эмиссия будет ограниченная и, главная, не будет приводить к росту монетарной инфляции в потребительском секторе. К сожалению, этот вариант практически исчерпан – и потому, что финансовому сектору денег нужно все больше и больше, и потому, что социальные проблемы лезут, что называется, «из всех щелей», и потому, что возможности наращивания долгов госбюджетами ограничены, а как повышать поддержку спроса непосредственно – не очень пока понятно.&lt;br /&gt;
&lt;br /&gt;
По этой причине, я склонен считать, что политические элиты будут «держать» ситуацию до последнего предела, особенно, с учетом того обстоятельства, что в основных странах мира в ближайшие годы намечены выборы, а затем буду переходить на стагфляционный сценарий. Его специфика состоит в том, что эмиссионной накачкой будет компенсироваться частный спрос, но лишь частично.&lt;br /&gt;
&lt;br /&gt;
Соответственно, до тех пор, пока этот сценарий не запущен, власти должны создавать инфраструктуру доведения эмиссионных денег непосредственно до потребителей. Скорее всего, делаться это будет постепенно, сначала для одних групп (наиболее бедных), потом для других, но эта работа должна быть проведена обязательно. Кроме того, поскольку вероятность банкротств отдельных компаний при таком сценарии существенно вырастет (реальный спрос будет падать), нужно будет создать институт защиты от умышленных мошенничеств, связанных с банкротствами. От таких операций сильно пострадало население, скажем, в США, в 30-е годы прошлого века, и там соответствующие структуры уже создаются.&lt;br /&gt;
&lt;br /&gt;
Точно назвать точку «входа» в стагфляционный сценарий невозможно, поскольку он будет достаточно плавным. Но отправной момент – начало очередного этапа эмиссии, для США, скажем, скорее всего, будет именно в начавшемся, 2012, году. Главный вопрос, который при этом возникает: будет ли эта эмиссия полностью идти через бюджет или же, хотя бы частично, она попадет в финансовый сектор. Скорее всего, будет реализован именно последний вариант – финансовый сектор пока своего не упустит. И как только это произойдет, начнутся многочисленные последствия.&lt;br /&gt;
&lt;br /&gt;
Прежде всего, быстрый рост спекулятивных рынков, в том числе, рынка нефти. Я не исключаю, что именно в преддверии этого сценария Обама решил «распечатать» нефтяные месторождения на шельфе, чтобы психологический удар по избирателям был не очень сильным (теоретически, этот рост цен может произойдет еще до выборов).&lt;br /&gt;
&lt;br /&gt;
Примечание. Отметим, что война с Ираном, скорее всего, объяснением здесь быть не может, поскольку она, конечно, вызовет всплеск цен, но достаточно краткосрочный.&lt;br /&gt;
&lt;br /&gt;
Однако, поскольку сегодня кредитный мультипликатор денежной массы уже не такой высокий, как это было в 2008-09 годах (около 5 против 17), то, скорее всего, деньги будут значительно быстрее «просачиваться» в реальный сектор, кроме того, свою роль сыграют и средства, которые потребители будут получать из бюджета.&lt;br /&gt;
&lt;br /&gt;
В результате, потребительская инфляция начнет расти, хотя, поскольку этот рост будет сосредоточен в отдельных секторах, не исключено, что официальная статистика попытается ее не фиксировать или показывать в очень ограниченном масштабе. Но сам по себе рост цен может быть довольно значительным, в частности, может и опережать рост цен на нефть (напомним, что реальная нефть обычно торгуется с некоторым дисконтом относительно биржевых цен на фьючерсы). Этим, кстати, нынешний кризис будет отличаться от ситуации 70-х годов прошлого века, когда нефть росла ускоренными темпами.&lt;br /&gt;
&lt;br /&gt;
Рост цен неминуемо вызовет рост социальной напряженности, особенно, в Евросоюзе, что потребует увеличения бюджетных расходов. В результате, инфляционная спираль будет раскручиваться все сильнее и сильнее – хотя, конечно, долгосрочные последствия будут за пределами текущего года. Однако самое главное, что будет окончательно сформирован стагфляционный сценарий, в некотором смысле гибрид сценария дефляционного и инфляционного.&lt;br /&gt;
&lt;br /&gt;
Специфика его состоит в том, что эмиссия, которая предназначена для компенсации выпадающего частного спроса, вызывает инфляцию, которая, в свою очередь, вызывает обесценение тех реально располагаемых доходов, которые получает потребитель. По этой причине, чем выше эмиссия – тем сильнее спад реального спроса (в номинале, конечно, он может и расти), что вызывает, естественно, спад экономики. На первом этапе это может компенсироваться фиктивной прибылью финансового сектора, связанного с перераспределением эмиссионных денег, однако по мере развития кризиса, эта часть ВВП будет быстро сокращаться.&lt;br /&gt;
&lt;br /&gt;
Иными словами, стагфляционный сценарий включат в себя и инфляционную, и дефляционную (последствия падения спроса) компоненты. И главным вопросом станет то, как именно эти компоненты, точнее, их последствия, будут перераспределены внутри экономики каждой страны. В частности, важной частью отношений внутри системы государственного управления, которая, во многом, будет определять финансовую политику государств, станет вопрос о той доле эмиссии, которая будет попадать в финансовый сектор. Отметим, что соответствующий процесс идет уже три года и пока финансовый сектор постепенно уступает: осенью 2008 года эмиссия практически полностью шла в финансовый сектор, QE2 уже, во многом, шла в бюджет, сейчас практически все эмиссионный деньги (которых, правда, не очень много) идут в бюджет.&lt;br /&gt;
&lt;br /&gt;
В том случае, если (а в соответствии с настоящим прогнозом, когда) начнется эмиссия крупная (то есть, сравнимая с 1% ВВП в месяц, как в 2008-09 годах), финансовый сектор просто обязан поставить вопрос о своей доле – в противном случае, вся тяжесть дефляционных последствий, с массовыми банкротствами, ляжет на него. Да, конечно, кто-то, кто имеет непосредственный доступ к эмиссионному станку, может попытаться выкрутиться, однако, скорее всего, фокусы 2008 года уже не пройдут, даже очень большие банки будут банкротить, власти уже об этом неоднократно говорили. По этой причине борьба за эмиссию будет идти в рамках принятия общегосударственных решений – и не очевидно, что финансовый сектор здесь победит.&lt;br /&gt;
&lt;br /&gt;
А может быть, наоборот, уже приняты решения, кого и как спасать. Или, по крайней мере, идут соответствующие переговоры. В любом случае, президент США Обама резко снизил градус антибанковской риторики, что само по себе странно, поскольку в нынешней ситуации она могла бы серьезно прибавить ему голосов избирателей. Но, в любом случае, последствия для финансового сектора станут еще одним важным фактором, описывающим переход к стагфляционному сценарию. Если доля финансового сектора в части получения эмиссионных денег будет мала, то финансовые рынки, после быстрого взлета, начнут падать, причем, довольно значимо. Если наоборот, то они продолжат рост (хотя и не так быстро, как сразу после начала эмиссии). Не исключено также, что в случае достаточно быстрого спада власти (прежде всего, США) сменят «гнев на милость» и увеличат долю эмиссии, достающуюся финансовом сектору – чтобы не допустить обвала. Но это только в том случае, если социальные последствия снижения спроса будут не слишком велики.&lt;br /&gt;
&lt;br /&gt;
Отметим, что здесь сделать какие-то прогнозы практически невозможно. Ни в США, ни в Евросоюзе не осталось в политической элите людей с опытом принятия решений в 70-е годы, когда именно стагфляционный сценарий определял характер их принятия, поэтому велика будет роль именно субъективного фактора, предугадать который практически невозможно. А вот для России, по которой у меня есть информация, возможно дать некоторые варианты развития событий – но это я сделаю, как обычно, в отдельном тексте, через несколько недель.&lt;br /&gt;
&lt;br /&gt;
Отметим еще одно важное последствие перехода к стагфляционному сценарию, которое недооценивается многими экспертами, которые рассуждают о том, что накопившиеся долги могут «сгореть» в инфляционной спирали. Это большой наивность, во всяком случае, до тех пор, пока не будет создан механизм непосредственного доведения эмиссионных денег до потребителей. Но само по себе создание такого механизма означает переход государственного управление к методам и механизмам «военного коммунизма». А вот любые другие способы – через бюджет ли, или через финансовый сектор, предполагают рост тех или иных сегментов долга, поскольку нужно не только обеспечить средства для очередных выплат, но и компенсировать выпадающий спрос. Сокращение долга возможно только для корпораций, и то – путем банкротства, то есть далеко не самым безболезненным способом.&lt;br /&gt;
&lt;br /&gt;
Еще одним важным следствием начавшейся эмиссии станет принципиальное изменение структуры спроса. Более сложные и дорогие изделия с высокой долей добавленной стоимости, будут постепенно уступать свое место на рынке изделиям более дешевым, соответствующим возможностям беднеющего населения. Разумеется, это будет процесс длительный, он займет годы, причем будет идти с разной скоростью в разных регионах и странах, но именно в текущем году он, скорее всего, станет достаточно явным, чтобы его имело смысл учитывать во всех маркетинговых исследованиях.&lt;br /&gt;
&lt;br /&gt;
Отметим, что общее падение спроса и упомянутые выше структурные изменения вызовут резкое усиление торговых войн. Я уже писал об этом в прогнозе на год предыдущий, но, скажем, США специально создает новые государственные структуры, задачей которых является защита своих рынков и продвижение отечественных товаров на рынках внешних. Фактически, можно сказать, что 2012 год станет первым годом смерти ВТО (в этом смысле наше вступление в эту организацию выглядит комично), но при этом сами торговые войны будут происходить все жестче и жестче. Особо важное место займут войны между Евросоюзом и США, причем на стороне последних, скорее всего, будут выступать Британия и их сателлиты их Восточной Европы.&lt;br /&gt;
&lt;br /&gt;
Связано это с тем, что именно проблемы доступа на рынки друг друга, скорее всего, станут той «кочкой», на которой сломается телега «Атлантического единства». При этом США и Британия будут отчаянно стараться сохранить эту модель взаимодействия, причем – за счет Германии, которой, с одной стороны, будут закрывать доступ на американские рынки, а, с другой, которую будут заставлять платить за всех в Евросоюзе (ну, как минимум, в зоне евро). Как с решением этой проблемы справятся немецкие элиты – большой вопрос, на который я не могу ответить по причине того, что он носит не столько объективно-экономический, сколько субъективно-политический характер.&lt;br /&gt;
&lt;br /&gt;
Еще одно следствие начала эмиссии доллара – ускорение отказа от него в рамках межгосударственных торговых отношений. Уже в конце 2011 года соответствующие решения подписали Китай и Япония, этот процесс будет продолжаться и ускоряться в году начавшемся. При этом малые страны будет примыкать к большим и пользоваться их валютами, что ускорит процесс распада единой долларовой системы на «валютные зоны» (напомним, термин введен в нашей книге «Закат империи доллара и конец «Pax Americana» в 2003 году).&lt;br /&gt;
&lt;br /&gt;
Однако здесь есть большая проблема – заменить долларовые активы на какие-то другие (и, в первую очередь, казначейские облигации США) достаточно сложно, такого объема необходимых активов просто нет. По этой причине будет усиливаться давление на Китай и Индию (и, возможно, другие страны, которые могут в рамках начавшегося кризиса упасть не так сильно, как вся остальная экономика) с тем, чтобы они выходили на мировые финансовые рынки с бумагами, номинированными в своей валюте. И, что, как мне кажется, самое главное, будет усиливаться роль золота как всеобщего эквивалента, как новой (точнее, старой) единой меры стоимости. По этой причине я жду роста стоимости этого металла, хотя биржевая его волатильность и будет расти.&lt;br /&gt;
&lt;br /&gt;
Отдельно нужно остановиться на проблемах ряда регионов, в первую очередь, Ближнего Востока. Предсказывать вероятность войны в Иране я не буду, поскольку этот проект носит не экономический, а политический характер, но, скорее всего, его последствия будут совсем не теми, какими рассчитывают его организаторы. Понятно, что перекрытие Ормузского пролива вызовет краткосрочный резкий рост цен на нефть, понятно, что выиграть войну против США Иран, скорее всего, не сумеет. Однако состояние мировой финансовой системы сегодня таково, что резкого увеличения рисков во всей финансовой сфере она, весьма возможно, не выдержит.&lt;br /&gt;
&lt;br /&gt;
Собственно, не секрет, что сегодня вся система страхования финансовых рисков держится только на взаимных договоренностях о признании старых договоров – притом, что все понимают, что исполнены в сколько-нибудь полном масштабе они быть не могут. Ну, точнее, могут, но только в случае массированной эмиссии, существенно большей, чем осенью 2008 года. Война в Иране как раз и может стать триггером, который спровоцирует такое развитие событий – после чего события станут абсолютно неуправляемыми. Я не представляю себе, чтобы кто-то взял бы на себя ответственность за такой риск – но в том случае, если это состоится, говорить о чисто экономическом анализе будет как минимум наивно.&lt;br /&gt;
&lt;br /&gt;
Если же войны не будет, то нарастание напряженности в регионе все равно продолжится, поскольку последствия «арабской весны» будут давать о себе знать, а это значит, что к реальной (не биржевой) стоимости нефти будет добавляться все больший и больший кусок, связанный с повышением рисков. Однако без войны обвала в 2012 году, скорее всего, не будет.&lt;br /&gt;
&lt;br /&gt;
Для стран – нефтеэкспортеров (а также прочего сырья), ситуация будет медленно ухудшаться, вплоть до начала массовой эмиссии в США. Затем, на 3-5 месяцев, ситуация у них сильно улучшится, а вот потом начнутся проблемы, поскольку почти все они критически зависимы от импорта тех или иных товаров, а цены на них начнут очень быстро расти. Это приведет не просто к падению жизненного уровня населения, а к очень быстрому падению, что неминуемо вызовет серьезные социально-политические проблемы (вспомним, что проблемы в Египте в прошлом году были сильно отягощены резким ростом цен на еду).&lt;br /&gt;
&lt;br /&gt;
Для тех стран, которые экспортируют готовую продукцию, но импортируют сырье (Германия, Китай, другие страны Юго-Восточной Азии), но импортируют сырье, краткосрочный рост цен на нефть пройдет практически без последствий. Но и выигрыша от инфляционной волны они не получат, поскольку рост доходов с каждой продажи компенсируется падением общего объема самих продаж, а также усилением торговых войн.&lt;br /&gt;
&lt;br /&gt;
Скорее всего, по мере проедания внутренних резервов, им тоже придется переходить к эмиссионному стимулированию внутреннего спроса. Отметим, что Китай, который этим занимается уже несколько лет, и у которого уже намечается спад финансового пузыря на рынке недвижимости, скорее всего, должен будет уже в этом году решать очень серьезные проблемы, связанные с резким обнищанием не так давно созданного «среднего» класса.&lt;br /&gt;
&lt;br /&gt;
В Евросоюзе малые страны пойдут по пути Прибалтики (то есть их ждет социальная катастрофа), которая может, рано или поздно, перейти на венгерский путь усиления крайнего национализма и консервативных (в противовес общеевропейскому либерализму) идей. Пока Брюссель активно этим идеям сопротивляется, но, рано или поздно, они свое возьмут. Франция и Германия должны будут, по мере ухудшения ситуации, пойти по пути Китая и США (то есть начать стимулировать внутренний спрос), на первом этапе за счет бюджетных механизмов. Для Германии ситуация будет усугублена тем обстоятельством, что ее будут вынуждать принимать на себя все проблемы ЕС вообще и еврозоны в частности, однако, скорее всего, если не произойдет ничего экстраординарного, типа войны в Иране, соответствующие решения будут приниматься уже за пределами 2012 года.&lt;br /&gt;
&lt;br /&gt;
Несколько стран (Индия, Бразилия, Турция, Индонезия, может быть, еще одна-две), теоретически, имеют возможность пройти этот год вообще без спада, поскольку обладают достаточно емким внутренним (и ближайшим внешним) рынком, за счет которого могут компенсировать все свои проблемы. Однако и в них стагнационные явления будут нарастать.&lt;br /&gt;
&lt;br /&gt;
На этом, собственно, общий прогноз на 2012 год заканчивается, для России, как обычно, чуть позже будет написан отдельный прогноз.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://worldcrisis.ru/crisis/939776"&gt;http://worldcrisis.ru/crisis/939776&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-6974888359161964052?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/byJZOmkzn_I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/6974888359161964052/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2012/01/2012.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/6974888359161964052?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/6974888359161964052?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/byJZOmkzn_I/2012.html" title="Прогноз на 2012 год (М. Хазин)" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2012/01/2012.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQCRHg8fSp7ImA9WhRUFks.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-4406857978415265920</id><published>2012-01-27T15:04:00.001+04:00</published><updated>2012-01-27T15:06:05.675+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-27T15:06:05.675+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Delphi" /><title>Вебинар с Е. Крюковым</title><content type="html">Вебинар с Е. Крюковым - архитектором новой платформы FireMonkey.&lt;br /&gt;
&lt;iframe width="630" height="472" src="http://www.youtube.com/embed/GGecYdiTqtw" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;
Все желающие иметь копию у себя - могут &lt;a href="http://embt.ru/FM_with_Kryukov_2011_12_14.zip"&gt;скачать&lt;/a&gt; запись у Всеволода в блоге, желающие посмотреть он-лайн - смотрим.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-4406857978415265920?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/7SABwooac8g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/4406857978415265920/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2012/01/blog-post_27.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/4406857978415265920?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/4406857978415265920?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/7SABwooac8g/blog-post_27.html" title="Вебинар с Е. Крюковым" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/GGecYdiTqtw/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2012/01/blog-post_27.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AASX08fCp7ImA9WhRVGUo.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-4548810336752873676</id><published>2012-01-19T15:15:00.003+04:00</published><updated>2012-01-19T15:15:48.374+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-19T15:15:48.374+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Экономика" /><category scheme="http://www.blogger.com/atom/ns#" term="Эксперты" /><title>"Что делать?" (М. Хазин, О.  Григорьев)</title><content type="html">&lt;iframe width="640" height="360" src="http://www.youtube.com/embed/G_-2w8XN1f4?feature=player_embedded" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-4548810336752873676?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/RFYEJHRtP9M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/4548810336752873676/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2012/01/blog-post.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/4548810336752873676?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/4548810336752873676?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/RFYEJHRtP9M/blog-post.html" title="&quot;Что делать?&quot; (М. Хазин, О.  Григорьев)" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/G_-2w8XN1f4/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2012/01/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ADRHw5fSp7ImA9WhRQF0w.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-7721316755871006209</id><published>2011-12-12T23:52:00.003+04:00</published><updated>2011-12-12T23:56:15.225+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-12T23:56:15.225+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Экономика" /><category scheme="http://www.blogger.com/atom/ns#" term="Эксперты" /><title>Почему мы (М. Хазин)</title><content type="html">В выходные дни состоялись первые за два года лекции по «Неокономике», в процессе который слушатели задавали разные вопросы, в том числе – почему новую интерпретацию макроэкономики и, соответственно, теорию кризиса, придумали у нас, а не в США, Великобритании, Германии или еще где. Ответ на этот вопрос мы уже, в том или ином виде, давали, но имеет смысл к нему вернуться еще раз.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Итак, напомню, что соответствующая наука достаточно долгое время, с момента своего возникновения в конце XVIII века, называлась политэкономей. Связано это было с тем, что ее авторы на протяжение 100 лет отдавали себе отчет в том, что это наука общественная и принципиально связана с интересами больших групп людей. Которые тщательно следят, чтобы ее развитие не противоречило их интересам. В математике такую ситуацию представить себе трудно, в физике – она была, но носила специфический и позитивный для науки характер (колоссальные вложения в науку в период создания атомного оружия). А вот для политэкономии все оказалось сложнее.&lt;br /&gt;
&lt;br /&gt;
Начались проблемы, естественно, с Маркса, который впервые выдвинул тезис о том, что капитализм принципиально ограничен во времени и обосновал механизм классовой борьбы. Само по себе такое научное открытие мало кого бы взволновало, за исключением экспертов, но создание коммунистических партий, а затем и появление СССР напугало капитализм страшно. И он начал борьбу за принципиальное изменение всех общественных наук с целью доказать (или фальсифицировать доказательство) свое право на вечное существование. И именно в рамках этой работы и появилось то, что сегодня называется «экономикс», а термин «политэкономия» был напрочь выгнан с порога академических заведений. Чтобы никто о нем и не вспоминал. Кстати, в нашей стране это произошло буквально за десятилетие – кто-нибудь знает хоть один университет или другой ВУЗ, в котором сегодня читают политэкономию?&lt;br /&gt;
&lt;br /&gt;
В процессе этой работы, естественно, были созданы многочисленные экономические и социологические школы, борьбу некоторых из которых мы сегодня видим, например, монетаристов и кейнсианцев. Но все эти школы выстроены на базе единого языка, созданного за последние сто лет, в котором нет места марксистским и вообще политэкономическим конструкциям, в рамках которых в принципе возможно описание конечности во времени парадигмы научно-технического прогресса.&lt;br /&gt;
&lt;br /&gt;
Отметим, что и концепция одной из главных экономических школ современности, монетаризма, создана, во многом, под конкретную задачу. В 70-е годы, когда единственным выходом из экономической катастрофы, стала эмиссия денег, было необходимо разработать концепцию, которая бы оправдывала приоритет одной из групп современной капиталистической элиты – финансовой. И именно под ее интересы эта концепция и развивалась. А после того, как была реализована экономическая политика «рейганомики», с ее кредитной накачкой частного спроса, монетаристские принципы начали завоевывать мир.&lt;br /&gt;
&lt;br /&gt;
А вот дальше начались проблемы, которые мы сегодня наблюдаем воочию. При этом мы-то понимаем, что под ними лежит серьезнейшая объективная проблема: модель экономического развития, построенная на парадигме научно-технического прогресса, подошла к концу. Но беда состоит в том, что тот язык, на котором говорят западные экономисты, а также те, кто у них учился, в принципе не допускает описание конструкций, ограничивающих время существования этой модели! Он специально так разрабатывался, много десятилетий тому назад, для борьбы с марксизмом! И по этой причине на этом языке, хоть в монетаристской, хоть в кейнсианской его интерпретации, причины современного кризиса вообще описать невозможно!&lt;br /&gt;
&lt;br /&gt;
Отметим, что эта проблема имела место и в марксизме. Напомню, что концепцию о том, что НТП – это, прежде всего, углубление разделения труда, а разделение труда требует расширение рынков сбыта, описывал еще Адам Смит в XVIII веке (соответствующие моменты даже Пушкин отмечал в «Евгении Онегине»). Но тогда эта тема еще не была актуальна. А вот в конце XIX – начале ХХ века, когда начался первый кризис падения эффективности капитала (который потом повторился в 30-е годы, 70-е, и который мы наблюдаем сегодня), из-за невозможности трех основных на тот момент технологических зон (Британской, Германской и Американской) более экстенсивно расширяться, эта тема всплыла снова.&lt;br /&gt;
&lt;br /&gt;
Причем позиции А.Смита защищала Роза Люксембург, а ее противником выступал Ленин. Причиной такого противодействия было не столько то, что Ленин имел собственные взгляды на экономические процессы, он вообще не был экономистом, а, скорее, конъюнктурно-политические тонкости. Однако в результате, работы Розы Люксембург в СССР не продолжались и, как следствие, та теория, которая могла бы помочь ему довести до конца почти уже выигранную «холодную» войну в начале 70-х годов, была создана усилиями, прежде всего, Олега Григорьева, только в начале 2000-х. И главная суть этой теории состоит в том, что дальнейшее углубление разделения труда невозможно в условиях глобализированных рынков. Иными словами, мы вернули теорию на ее базовую линию, созданную еще Адамом Смитом, с которой она свернула в конце XIX – начале ХХ века по идеологическим и политическим причинам.&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;a href="http://worldcrisis.ru/crisis/924228"&gt;http://worldcrisis.ru/crisis/924228&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-7721316755871006209?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/v1YuI0zCUd8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/7721316755871006209/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2011/12/blog-post.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/7721316755871006209?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/7721316755871006209?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/v1YuI0zCUd8/blog-post.html" title="Почему мы (М. Хазин)" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2011/12/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIEQHs5fyp7ImA9WhRSFEo.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-5884780846125908918</id><published>2011-11-15T19:30:00.000+04:00</published><updated>2011-11-16T23:58:21.527+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-16T23:58:21.527+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Экономика" /><category scheme="http://www.blogger.com/atom/ns#" term="Эксперты" /><title>Актуальный разговор: М. Делягин, М. Хазин, М. Леонтьев</title><content type="html">&lt;object style="height: 390px; width: 640px"&gt;&lt;param name="movie" value="http://www.youtube.com/v/3bK1_ZyRJ1s?version=3&amp;feature=player_detailpage"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/3bK1_ZyRJ1s?version=3&amp;feature=player_detailpage" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="360"&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-5884780846125908918?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/jueFb1WzWYk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/5884780846125908918/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2011/11/blog-post_15.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/5884780846125908918?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/5884780846125908918?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/jueFb1WzWYk/blog-post_15.html" title="Актуальный разговор: М. Делягин, М. Хазин, М. Леонтьев" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2011/11/blog-post_15.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUNSXg7eip7ImA9WhRSEE4.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-6111569747311971436</id><published>2011-11-11T22:47:00.001+04:00</published><updated>2011-11-11T22:48:18.602+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-11T22:48:18.602+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Экономика" /><category scheme="http://www.blogger.com/atom/ns#" term="Эксперты" /><category scheme="http://www.blogger.com/atom/ns#" term="Россия" /><title>Онлайн-конференция Михаила Хазина: кризис, ВТО, "нищета" регионов</title><content type="html">&lt;object width="450" height="254"&gt;&lt;param name="video" value="http://static.video.yandex.ru/lite/gorinx/fw2ov0v9od.4203/"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="scale" value="noscale"&gt;&lt;/param&gt;&lt;embed src="http://static.video.yandex.ru/lite/gorinx/fw2ov0v9od.4203/" type="application/x-shockwave-flash" width="450" height="254" allowFullScreen="true" scale="noscale" &gt;&lt;/embed&gt;&lt;/object&gt;
&lt;object width="450" height="254"&gt;&lt;param name="video" value="http://static.video.yandex.ru/lite/gorinx/miuuncg8yi.4316/"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="scale" value="noscale"&gt;&lt;/param&gt;&lt;embed src="http://static.video.yandex.ru/lite/gorinx/miuuncg8yi.4316/" type="application/x-shockwave-flash" width="450" height="254" allowFullScreen="true" scale="noscale" &gt;&lt;/embed&gt;&lt;/object&gt;
&lt;object width="450" height="254"&gt;&lt;param name="video" value="http://static.video.yandex.ru/lite/gorinx/pfn0cmvhb6.4011/"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="scale" value="noscale"&gt;&lt;/param&gt;&lt;embed src="http://static.video.yandex.ru/lite/gorinx/pfn0cmvhb6.4011/" type="application/x-shockwave-flash" width="450" height="254" allowFullScreen="true" scale="noscale" &gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-6111569747311971436?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/nKl_5eCWJh0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/6111569747311971436/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2011/11/blog-post_11.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/6111569747311971436?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/6111569747311971436?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/nKl_5eCWJh0/blog-post_11.html" title="Онлайн-конференция Михаила Хазина: кризис, ВТО, &quot;нищета&quot; регионов" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2011/11/blog-post_11.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUBR3c7fyp7ImA9WhRTGEg.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-7712211960201634964</id><published>2011-11-09T18:50:00.002+04:00</published><updated>2011-11-09T18:50:56.907+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-09T18:50:56.907+04:00</app:edited><title>Праздник 7 ноября (М. Делягин)</title><content type="html">&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/MBbmWg1dZMU" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-7712211960201634964?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/vEBl1q0OtKQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/7712211960201634964/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2011/11/7.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/7712211960201634964?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/7712211960201634964?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/vEBl1q0OtKQ/7.html" title="Праздник 7 ноября (М. Делягин)" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/MBbmWg1dZMU/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2011/11/7.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AASHk7fyp7ImA9WhRTFkg.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-7522820001994477277</id><published>2011-11-07T13:55:00.002+04:00</published><updated>2011-11-07T13:55:49.707+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-07T13:55:49.707+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Россия" /><title>С Праздником!</title><content type="html">Я поздравляю всех, чьи прадеды, деды и отцы получили бесплатное отличное образование, возможность с уверенностью смотреть в завтрашний день и строить свою судьбу благодаря Советской власти. C 94 годовщиной Великой Октябрьской социалистической революции!
&lt;object style="height: 390px; width: 640px"&gt;&lt;param name="movie" value="http://www.youtube.com/v/MJFwzn96TFM?version=3&amp;feature=player_embedded"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/MJFwzn96TFM?version=3&amp;feature=player_embedded" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="360"&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-7522820001994477277?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/lGrv4VuvIlM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/7522820001994477277/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2011/11/blog-post_07.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/7522820001994477277?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/7522820001994477277?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/lGrv4VuvIlM/blog-post_07.html" title="С Праздником!" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2011/11/blog-post_07.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cFRX05fSp7ImA9WhRTE0w.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-3829263226602571192</id><published>2011-11-03T13:03:00.001+04:00</published><updated>2011-11-03T13:03:34.325+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-03T13:03:34.325+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Экономика" /><category scheme="http://www.blogger.com/atom/ns#" term="Эксперты" /><category scheme="http://www.blogger.com/atom/ns#" term="Россия" /><title>Если мы такие умные, почему мы такие бедные? (М. Хазин)</title><content type="html">&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/tC0YExBcq0k" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-3829263226602571192?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/HQrFJS2qr4w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/3829263226602571192/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2011/11/blog-post.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/3829263226602571192?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/3829263226602571192?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/HQrFJS2qr4w/blog-post.html" title="Если мы такие умные, почему мы такие бедные? (М. Хазин)" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/tC0YExBcq0k/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2011/11/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04GSXY4fyp7ImA9WhdaEUQ.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-5253124839817833727</id><published>2011-10-21T14:02:00.000+04:00</published><updated>2011-10-21T14:12:08.837+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-21T14:12:08.837+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Экономика" /><category scheme="http://www.blogger.com/atom/ns#" term="Эксперты" /><category scheme="http://www.blogger.com/atom/ns#" term="Россия" /><title>О статье Кудрина (М. Делягин)</title><content type="html">&lt;OBJECT width="470" height="353"&gt;&lt;PARAM name="movie" value="http://video.rutube.ru/eaef5ff12efee5111a70a53751991bcd"&gt;&lt;/PARAM&gt;&lt;PARAM name="wmode" value="window"&gt;&lt;/PARAM&gt;&lt;PARAM name="allowFullScreen" value="true"&gt;&lt;/PARAM&gt;&lt;EMBED src="http://video.rutube.ru/eaef5ff12efee5111a70a53751991bcd" type="application/x-shockwave-flash" wmode="window" width="470" height="353" allowFullScreen="true" &gt;&lt;/EMBED&gt;&lt;/OBJECT&gt;

Статья: &lt;a href="http://svpressa.ru/economy/article/49045/"&gt;http://svpressa.ru/economy/article/49045/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-5253124839817833727?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/i03h-eHgrEw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/5253124839817833727/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2011/10/blog-post_21.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/5253124839817833727?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/5253124839817833727?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/i03h-eHgrEw/blog-post_21.html" title="О статье Кудрина (М. Делягин)" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2011/10/blog-post_21.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4CQn89fSp7ImA9WhdaEEg.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-3848401223389664601</id><published>2011-10-20T00:09:00.001+04:00</published><updated>2011-10-20T00:09:23.165+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-20T00:09:23.165+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Delphi" /><title>Использование в проекте VCL- и FireMonkey-форм одновременно</title><content type="html">&lt;iframe width="640" height="360" src="http://www.youtube.com/embed/TbCLU6vWjeQ" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-3848401223389664601?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/Kt7odaCCho8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/3848401223389664601/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2011/10/vcl-firemonkey_20.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/3848401223389664601?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/3848401223389664601?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/Kt7odaCCho8/vcl-firemonkey_20.html" title="Использование в проекте VCL- и FireMonkey-форм одновременно" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/TbCLU6vWjeQ/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2011/10/vcl-firemonkey_20.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8MRX84fSp7ImA9WhdaEEg.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-5000444427512192466</id><published>2011-10-20T00:08:00.000+04:00</published><updated>2011-10-20T00:08:04.135+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-20T00:08:04.135+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Delphi" /><title>Кроссплатформленная разработка: EXE + DLL</title><content type="html">&lt;iframe width="640" height="360" src="http://www.youtube.com/embed/n7nMtJMdEyw" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-5000444427512192466?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/kyPr02lZutU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/5000444427512192466/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2011/10/exe-dll.html#comment-form" title="Комментарии: 3" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/5000444427512192466?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/5000444427512192466?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/kyPr02lZutU/exe-dll.html" title="Кроссплатформленная разработка: EXE + DLL" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/n7nMtJMdEyw/default.jpg" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2011/10/exe-dll.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8NR3Y_eyp7ImA9WhdaEEg.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-8860388321679185791</id><published>2011-10-20T00:06:00.002+04:00</published><updated>2011-10-20T00:08:16.843+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-20T00:08:16.843+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Delphi" /><title>Конвертируем проект: VCL-&gt;FireMonkey</title><content type="html">&lt;iframe width="640" height="360" src="http://www.youtube.com/embed/22MbO_HzU-E" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-8860388321679185791?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/d4xoN4ulLzk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/8860388321679185791/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2011/10/vcl-firemonkey.html#comment-form" title="Комментарии: 2" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/8860388321679185791?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/8860388321679185791?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/d4xoN4ulLzk/vcl-firemonkey.html" title="Конвертируем проект: VCL-&gt;FireMonkey" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/22MbO_HzU-E/default.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2011/10/vcl-firemonkey.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUFR389eip7ImA9WhdUGUU.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-3518004699472693065</id><published>2011-10-07T15:33:00.000+04:00</published><updated>2011-10-07T15:33:36.162+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-07T15:33:36.162+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Политика" /><title>Идите в избирком и получите паспорт! (М. Делягин)</title><content type="html">Нелегитимность предстоящих нам в ближайшем будущем процедур назначения депутатов Госдумы, а затем – премьера Путина президентом России (разумеется, «при соблюдении высочайших демократических стандартов избирательных процедур»), как представляется, обусловлена, по меньшей мере, четырьмя причинами, каждой из которых было бы уже вполне достаточно.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Первая, и самая очевидная – гомерический масштаб фальсификаций, выявленный, насколько можно судить, в ходе многочисленных скандалов прошлых лет: от прямых показаний наблюдателей до результатов математического анализа голосов. Стоит вспомнить «казус Ингушетии», голоса которой были отданы «Единой России», хотя большинство избирателей затем написали заявления, что вовсе не ходили на выборы, и «казус Митрохина» (когда оказалось, что на участке, где голосовал он с женой, «Яблоку» не было отдано ни одного голоса вообще).&lt;br /&gt;
&lt;br /&gt;
Вторая причина нелегитимности предстоящих выборов – вопиюще неравный, по мнению автора, доступ к агитационным возможностям: от «паровозов» в списках «Е..ной России» (!) до запугивания бизнесменов, финансирующих неугодных.&lt;br /&gt;
&lt;br /&gt;
Третья – недопущение на выборы всех новых политических сил (вероятно, заподозренных в нелояльности к Администрации президента). Последней новой партией была «Родина» образца 2003 года (ставшая основой «Справедливой России» – «Правое дело» наследует даже не СПС, а еще гайдаровскому «Демвыбору»).&lt;br /&gt;
&lt;br /&gt;
Российские политические партии мало меняются и несут свои «родимые пятна» на протяжении всей истории; поэтому допущенный на выборы политический спектр отражает реальность, дай Бог, начала 2000-х годов. Социально-политическая же структура общества меняется значительно быстрее, в результате чего огромная часть современных избирателей a prioriлишена даже возможности политического представительства: им просто не за кого голосовать.&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;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;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;
Кстати, вечером в день голосования полезно будет зайти на избирательный участок минут за 30 до его закрытия и проверить, не поставлена ли против Вашей фамилии подпись, свидетельствующая о том, что вы проголосовали. Если она есть – это доказательство фальсификации, можно писать заявление, настаивать на возбуждении уголовного дела против председателя комиссии и ее членов и отмене выборов на данном участке. Ничего этого, конечно, не будет, но панику Вы устроите, особенно, если таких, как Вы, будет несколько.&lt;br /&gt;
&lt;br /&gt;
Если же у Вас совсем много сил и времени – не поленитесь, снимите видеорегистратором двери в избирательный участок в течение всего времени голосования. Если запись покажет, что в двери вошло (и вышло) семьсот человек, а «Е..ная Россия» получит на этом участке тысячу голосов — это будет еще одно убедительное и потому полезное доказательство фальсификации выборов.&lt;br /&gt;
&lt;br /&gt;
Если же Вы симпатизируете какому-нибудь политику (такое бывает), то чем голосовать за него, напишите ему теплое личное письмо: голос, скорее всего, будет украден (или приписан), а письмо дойдет. Политикам редко приходится получать от обычных людей искренние слова одобрения, их ремесло жесткое и холодное, и они нуждаются в таких словах — а голоса на «голосуйках» они, насколько можно судить, получают не от Вас.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://delyagin.ru/articles/19603.html"&gt;http://delyagin.ru/articles/19603.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-3518004699472693065?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/x0sGrPMtiow" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/3518004699472693065/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2011/10/blog-post_07.html#comment-form" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/3518004699472693065?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/3518004699472693065?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/x0sGrPMtiow/blog-post_07.html" title="Идите в избирком и получите паспорт! (М. Делягин)" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2011/10/blog-post_07.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0AFQHc8fCp7ImA9WhdUGUU.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-5748582088140750119</id><published>2011-10-07T15:08:00.000+04:00</published><updated>2011-10-07T15:08:31.974+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-07T15:08:31.974+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Экономика" /><category scheme="http://www.blogger.com/atom/ns#" term="Эксперты" /><category scheme="http://www.blogger.com/atom/ns#" term="Политика" /><title>О разделении труда (М. Хазин)</title><content type="html">В чем главная проблема современного кризиса? Ну, точнее, какую главную проблему должны были бы сегодня обсуждать политики, если бы им действительно было бы важно, чтобы кризис прошел максимально гладко и закончился бы для их стран по возможности бесконфликтно? Им было бы нужно думать, где взять деньги, на которые живут их граждане. Граждане получают деньги из двух источников: от государства (и в виде зарплат госсектора, и в виде социальных пособий, и в виде перераспределенных денег от госвложений, прямых или в виде субсидий) и от частного сектора, в виде зарплат.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt; &lt;br /&gt;
Государство берет деньги из налогов, а частный сектор – продавая свои товары и услуги. И возникает естественный вопрос – кому и что могут продавать те компании, которые платят налоги и зарплаты. Понятно, что есть чисто местные услуги и производства, но они обычно не платят налогов. Если же речь идет о чем-то передовом, то компании необходимо обеспечивать большой рынок сбыта. Что невозможно если страна маленькая или в ней много бедных.&lt;br /&gt;
&lt;br /&gt;
Классический пример: после начала русофобской кампании в Прибалтике вынужденно исчезла вся индустрия, поскольку под внешним давлением новые руководители этих стран отказались от продаж на российские рынки, а больше продавать было некуда – на западные рынки их, естественно, не пустили. Еще один пример – Китай. Там народу очень много, но он был очень бедным и современную продукцию покупать не мог, соответственно, ее продавали в США и другие страны. Отмечу разницу между Китаем и странами Прибалтики – первый смог выйти на западные рынки, вторые – нет. Причина понятна – разительная разница в геополитическом весе.&lt;br /&gt;
&lt;br /&gt;
Отмечу, что аналогичная проблема стояла в начале 90-х перед Россией. Внутренние рынки СССР/мировой социалистической системы рухнули, система их поддержки (ценовая, в первую очередь) после 1988 года стала быстро разрушаться, но политический вес у России еще был и можно было попытаться вылезти на мировые (читай – западные) рынки. Но у находящейся у власти в тот момент «команды» не было не то, что умения, они даже сформулировать проблему внятно не смогли. Впрочем, не исключено, что и не хотели. Результат мы сегодня наблюдаем воочию.&lt;br /&gt;
&lt;br /&gt;
Но суть проблемы состоит в том, что тогда, в конце 80-х разрушалась только одна из двух имеющихся тогда в мире систем разделения труда. И у России по крайней мере был теоретический шанс воспользоваться ситуацией и влезть на мировые рынки. А вот что делать сегодня? Напомним, что уровень спроса в России упал процентов на 35-40, что стало социальной катастрофой. А вот сегодня, за счет разрушения стимулирования спроса в мировой экономике (которая представляет из себя единую глобальную систему разделения труда), падение спроса в США и Европе составит как минимум 50% - как выходить из такой ситуации?&lt;br /&gt;
&lt;br /&gt;
Очень образно картину можно себе представить так. В России в 91 году пришел к власти Гайдар «со стоварищи», со всем их комплексом бредовых либеральных идей, а затем он еще и стал президентом. И продолжает «рулить» страной все эти годы. Вот такая перспектива сегодня у стран Запада: альтернатив либеральным теоретикам нет, они же и в политике, максимум на что они способны с точки зрения новых идей – это начать массовую эмиссию.&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;br /&gt;
&lt;a href="http://worldcrisis.ru/crisis/904305"&gt;http://worldcrisis.ru/crisis/904305&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-5748582088140750119?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/ywN1DkR5Ny0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/5748582088140750119/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2011/10/blog-post.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/5748582088140750119?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/5748582088140750119?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/ywN1DkR5Ny0/blog-post.html" title="О разделении труда (М. Хазин)" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2011/10/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QBSHc-eSp7ImA9WhdUEUQ.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-4877299763847442565</id><published>2011-09-28T10:27:00.001+04:00</published><updated>2011-09-28T10:29:19.951+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-28T10:29:19.951+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Delphi" /><title>RAD Studio XE2 Update 1</title><content type="html">Вышло первое обновление для RAD Studio XE2. Более 120 багфиксов, среди которых FireMonkey (дизайн- и рантайм), VCL-стили, фиксы IDE и компилятора и многое другое.&lt;br /&gt;
&lt;br /&gt;
Ссылка: &lt;a href="http://edn.embarcadero.com/article/41650"&gt;http://edn.embarcadero.com/article/41650&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-4877299763847442565?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/eBgaEaPLnmo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/4877299763847442565/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2011/09/httpednembarcaderocomarticle41650.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/4877299763847442565?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/4877299763847442565?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/eBgaEaPLnmo/httpednembarcaderocomarticle41650.html" title="RAD Studio XE2 Update 1" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2011/09/httpednembarcaderocomarticle41650.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEICRX4_fSp7ImA9WhdWFkk.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-1410651916985706230</id><published>2011-09-10T13:21:00.003+04:00</published><updated>2011-09-10T13:22:44.045+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-10T13:22:44.045+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Общество" /><title>Берлускони: Каддафи был любим своим народом</title><content type="html">&lt;a href="http://messages.finance.yahoo.com/Stocks_%28A_to_Z%29/Stocks_C/threadview?m=tm&amp;bn=2895&amp;tid=1792756&amp;mid=1792756&amp;tof=18&amp;off=1"&gt;http://messages.finance.yahoo.com/Stocks_%28A_to_Z%29/Stocks_C/threadview?m=tm&amp;bn=2895&amp;tid=1792756&amp;mid=1792756&amp;tof=18&amp;off=1&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-1410651916985706230?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/0QXdKux7xhs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/1410651916985706230/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2011/09/blog-post.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/1410651916985706230?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/1410651916985706230?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/0QXdKux7xhs/blog-post.html" title="Берлускони: Каддафи был любим своим народом" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2011/09/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUNQX08cSp7ImA9WhdWFUU.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-254651707844764993</id><published>2011-09-09T01:17:00.002+04:00</published><updated>2011-09-09T20:54:50.379+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-09T20:54:50.379+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Delphi" /><title>Delphi XE2 &amp; Mac - от настройки до запуска и отладки</title><content type="html">&lt;iframe width="640" height="390" src="http://www.youtube.com/embed/lEB38jlrbYY" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;
И плюс &lt;a href="http://blogs.embarcadero.com/vsevolodleonov/2011/09/09/delphimac1"&gt;туториал&lt;/a&gt; на русском от Всеволода Леонова.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-254651707844764993?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/Ur7zM3oivFQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/254651707844764993/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2011/09/delphi-xe2-mac.html#comment-form" title="Комментарии: 4" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/254651707844764993?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/254651707844764993?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/Ur7zM3oivFQ/delphi-xe2-mac.html" title="Delphi XE2 &amp; Mac - от настройки до запуска и отладки" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/lEB38jlrbYY/default.jpg" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2011/09/delphi-xe2-mac.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEDQ3k8eCp7ImA9WhdXF0Q.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-1169797750225445619</id><published>2011-08-31T16:44:00.000+04:00</published><updated>2011-08-31T16:44:32.770+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-31T16:44:32.770+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Delphi" /><title>Сертификация Delphi</title><content type="html">Наконец я нашел время и прошел официальный сертификационный тест!&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Полет прошел успешно (55 из 60), больше всего ошибок (2) удалось сделать в вопросах раздела Memory Management.&lt;br /&gt;
&lt;br /&gt;
Если кого интересуют технические подробности подготовки и сдачи тестирования - отправляю на &lt;a href="http://www.gunsmoker.ru/2011/08/delphi.html"&gt;страничку блога Gunsmoker'а&lt;/a&gt;, где все подробным образом написано.&lt;br /&gt;
&lt;br /&gt;
Удачи!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-1169797750225445619?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/_p-yOxnJzE8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/1169797750225445619/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2011/08/delphi.html#comment-form" title="Комментарии: 3" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/1169797750225445619?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/1169797750225445619?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/_p-yOxnJzE8/delphi.html" title="Сертификация Delphi" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2011/08/delphi.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEMQHY6fip7ImA9WhdXEU0.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-6143691456453813662</id><published>2011-08-23T17:53:00.001+04:00</published><updated>2011-08-23T17:54:41.816+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-23T17:54:41.816+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Экономика" /><category scheme="http://www.blogger.com/atom/ns#" term="Эксперты" /><category scheme="http://www.blogger.com/atom/ns#" term="Политика" /><title>Российская экономика до и после выборов (М. Делягин)</title><content type="html">&lt;object width="470" height="353"&gt;&lt;param name="movie" value="http://video.rutube.ru/3e0e6eb7c37e01847b6b8ecd09eee261"&gt;&lt;/PARAM&gt;&lt;param name="wmode" value="window"&gt;&lt;/PARAM&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/PARAM&gt;&lt;param name="flashVars" value="uid=4348230"&gt;&lt;/PARAM&gt;&lt;embed src="http://video.rutube.ru/3e0e6eb7c37e01847b6b8ecd09eee261" type="application/x-shockwave-flash" wmode="window" width="470" height="353" allowFullScreen="true" flashVars="uid=4348230"&gt;&lt;/EMBED&gt;&lt;/OBJECT&gt;&lt;br /&gt;
Текст: &lt;a href="http://delyagin.ru/articles/18941.html"&gt;http://delyagin.ru/articles/18941.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-6143691456453813662?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/_NQn8b3rlPs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/6143691456453813662/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2011/08/blog-post_23.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/6143691456453813662?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/6143691456453813662?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/_NQn8b3rlPs/blog-post_23.html" title="Российская экономика до и после выборов (М. Делягин)" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2011/08/blog-post_23.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcGR38_eyp7ImA9WhdXEU0.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-9032672573615566472</id><published>2011-08-23T17:43:00.000+04:00</published><updated>2011-08-23T17:43:46.143+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-23T17:43:46.143+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Delphi" /><category scheme="http://www.blogger.com/atom/ns#" term="CnPack IDE-Мастер" /><title>CnPack IDE-мастер - редактор ImageList</title><content type="html">В преддверии нового релиза CnPack IDE-мастера, расскажу о новой интересной функциональности.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
При разработке "goog-looking" приложения, многие сталкиваются с задачей поиска изображений (иконок) для меню, панели инструментов и т.д. Обычно для этого приходится скитаться по специальным сайтам (например, http://www.iconfinder.com/) или собственным коллекциям, после чего сохранять, копировать и делать прочие операции с найденным, а затем загружать изображения в ImageList. Для облегчения этого процесса в CnPack IDE-мастере появился специальный редактор листа, позволяющий выполнять не только привычные функции, но и он-лайн поиск изображений. Вызвать его можно дважды щелкнув по ImageList на форме или выбрав ImageList Editor в контекстном меню компонента:&lt;br /&gt;
&lt;img src="https://lh3.googleusercontent.com/--mTvNbwuxfw/TlOhUUBeYaI/AAAAAAAAAIc/KQBQ6r1f1lA/s800/Screenshot%252520-%25252023.08.2011%252520%25252C%25252016_46_53.png" height="391" width="527"  /&gt;&lt;br /&gt;
&lt;br /&gt;
Внешний вид редактора приведен на рисунке ниже:&lt;br /&gt;
&lt;img src="https://lh4.googleusercontent.com/-tWfzbKHXXN8/TlOhbjAenOI/AAAAAAAAAIo/63ycmQOM8K0/s640/Screenshot%252520-%25252023.08.2011%252520%25252C%25252016_47_37.png" height="339" width="640" /&gt;&lt;br /&gt;
&lt;br /&gt;
Интерфейс достаточно прост (уверен, что вы и без меня разберетесь), поэтому посмотрим на пример простого поиска и добавления иконок:&lt;br /&gt;
&lt;iframe width="560" height="345" src="http://www.youtube.com/embed/ZQn6za0d62E" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
Новый редактор можно опробовать в &lt;a href="http://cnpack.googlecode.com/files/CnWizards_0.9.9.615_RC2.exe"&gt;RC2&lt;/a&gt;. И, конечно же, на русском ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-9032672573615566472?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/PzdKySWHuVU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/9032672573615566472/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2011/08/cnpack-ide-imagelist.html#comment-form" title="Комментарии: 5" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/9032672573615566472?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/9032672573615566472?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/PzdKySWHuVU/cnpack-ide-imagelist.html" title="CnPack IDE-мастер - редактор ImageList" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh3.googleusercontent.com/--mTvNbwuxfw/TlOhUUBeYaI/AAAAAAAAAIc/KQBQ6r1f1lA/s72-c/Screenshot%252520-%25252023.08.2011%252520%25252C%25252016_46_53.png" height="72" width="72" /><thr:total>5</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2011/08/cnpack-ide-imagelist.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQERHo_cSp7ImA9WhdXEEQ.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-2618083636581921217</id><published>2011-08-23T15:17:00.003+04:00</published><updated>2011-08-23T15:18:25.449+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-23T15:18:25.449+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Экономика" /><category scheme="http://www.blogger.com/atom/ns#" term="Эксперты" /><category scheme="http://www.blogger.com/atom/ns#" term="Политика" /><title>Экономический кризис и Ливия</title><content type="html">&lt;a href="http://worldcrisis.ru/crisis/889611"&gt;http://worldcrisis.ru/crisis/889611&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-2618083636581921217?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/UDtlDZaxJxM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/2618083636581921217/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2011/08/blog-post.html#comment-form" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/2618083636581921217?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/2618083636581921217?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/UDtlDZaxJxM/blog-post.html" title="Экономический кризис и Ливия" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2011/08/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIFQXg7cCp7ImA9WhdUGUU.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-2786434521706622983</id><published>2011-07-29T14:50:00.003+04:00</published><updated>2011-10-07T15:21:50.608+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-07T15:21:50.608+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Delphi" /><category scheme="http://www.blogger.com/atom/ns#" term="Конкурс Delphi 2011" /><category scheme="http://www.blogger.com/atom/ns#" term="Мое" /><title>Используем дженерики в Delphi! - Часть 3 (Приложение)</title><content type="html">&lt;center&gt;[&lt;a href="http://keeper89.blogspot.com/2011/07/delphi.html#a1"&gt;Содержание&lt;/a&gt;]&lt;br /&gt;
[&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-1.html"&gt;Часть 1 - Введение в дженерики&lt;/a&gt;]&amp;nbsp;[&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-2.html"&gt;Часть 2 - Системные классы&lt;/a&gt;]&amp;nbsp;[Часть 3 - Приложение]&lt;/center&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-3.html#a1"&gt;Заключение&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-3.html#a2"&gt;Исходники&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-3.html#a3"&gt;Ссылки&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span class="KeeperHeader1"&gt;&lt;a name="a1"&gt;1.&lt;/a&gt; Заключение&lt;/span&gt;&lt;br /&gt;
В материале были &lt;em&gt;кратко&lt;/em&gt; рассмотрены дженерики и их основные возможности в Delphi, стандартные классы языка и примеры работы с ними. Для дальнейшего изучения настоятельно рекомендуется пройтись по ссылкам и изучить материалы, указанные ниже. Во-первых, это позволит углубить уже полученные знания, а во-вторых, открыть для себя новые возможности, пропущенные в настоящем материале сознательно для облегчения "стартового" понимания.&lt;br /&gt;
Общий совет один - старайтесь максимально использовать дженерики, используя их преимущества. Удачи!&lt;br /&gt;
&lt;br /&gt;
&lt;span class="KeeperHeader1"&gt;&lt;a name="a2"&gt;2.&lt;/a&gt; Исходники&lt;/span&gt;&lt;br /&gt;
В данном разделе приведены сслыки на исходные коды примеров, которые приводились в статье (с некоторыми изменениями). Вы можете скачать их и использовать по своему усмотрению.&lt;br /&gt;
Примечание: если у читателей будут интересные примеры использования дженериков, я буду рад их разместить в этом разделе, сохраняя ссылку на автора.&lt;br /&gt;
&lt;table border="1" width="100%"&gt;&lt;tr&gt;   &lt;td align="center"&gt;&lt;b&gt;Класс(ы)&lt;/b&gt;&lt;/td&gt;   &lt;td align="center"&gt;&lt;b&gt;Описание&lt;/b&gt;&lt;/td&gt;   &lt;td align="center"&gt;&lt;b&gt;Ссылка&lt;/b&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td align="center"&gt;-&lt;/td&gt;   &lt;td align="center"&gt;Реализация обобщенного класса&lt;/td&gt;   &lt;td align="center"&gt;&lt;a href="https://docs.google.com/leaf?id=0B7KZXIPNCqCpZDM0YTJkOTAtODI1MC00ZTA0LThkZjgtZmJkMjE3MmIxMGYx&amp;hl=en_US"&gt;Скачать&lt;/a&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td align="center"&gt;-&lt;/td&gt;   &lt;td align="center"&gt;Реализация обобщенного метода и записи&lt;/td&gt;   &lt;td align="center"&gt;&lt;a href="https://docs.google.com/leaf?id=0B7KZXIPNCqCpZDYyY2U3M2YtZDZmMi00NTRkLTg5ODItNzZjZTk0ZWI3NmY4&amp;hl=en_US"&gt;Скачать&lt;/a&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td align="center" rowspan="2"&gt;&lt;span class="code_in_text"&gt;TArray&lt;/span&gt;&lt;/td&gt;   &lt;td align="center"&gt;Сортировка и поиск в одномерном целочисленном массиве&lt;/td&gt;   &lt;td align="center"&gt;&lt;a href="https://docs.google.com/leaf?id=0B7KZXIPNCqCpOTczMGU1NDQtNGI0Yi00MWI2LTk4Y2MtYzQ5NzhjMjgzMTll&amp;hl=en_US"&gt;Скачать&lt;/a&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td align="center"&gt;Сортировка двумерного массива&lt;/td&gt;   &lt;td align="center"&gt;&lt;a href="https://docs.google.com/leaf?id=0B7KZXIPNCqCpOWQ5MWI5YjItNGUwYS00Y2E1LTg5MGItY2M4ZjFhMzkyZDg0&amp;hl=en_US"&gt;Скачать&lt;/a&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td align="center"&gt;&lt;span class="code_in_text"&gt;&lt;span class="code_in_text"&gt;TDictionary&amp;lt;T&amp;gt;&lt;/span&gt; и &lt;span class="code_in_text"&gt;TObjectDictionary&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;   &lt;td align="center"&gt;Работа со словарем&lt;/td&gt;   &lt;td align="center"&gt;&lt;a href="https://docs.google.com/leaf?id=0B7KZXIPNCqCpY2NjZmQ3MjMtMzg0YS00MWRjLTg2N2EtNzM0MTdhMmYxZGZl&amp;hl=en_US"&gt;Скачать&lt;/a&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td align="center"&gt;&lt;span class="code_in_text"&gt;TList&amp;lt;T&amp;gt;&lt;/span&gt; и &lt;span class="code_in_text"&gt;TObjectList&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/td&gt;   &lt;td align="center"&gt;Работа со списком&lt;/td&gt;   &lt;td align="center"&gt;&lt;a href="https://docs.google.com/leaf?id=0B7KZXIPNCqCpMzBkM2E0OGMtYWIxMC00NmZmLTkxMTYtOWZhNDhjODhmMjkw&amp;hl=en_US"&gt;Скачать&lt;/a&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td align="center"&gt;&lt;span class="code_in_text"&gt;TStack&amp;lt;T&amp;gt;&lt;/span&gt; и &lt;span class="code_in_text"&gt;TObjectStack&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/td&gt;   &lt;td align="center"&gt;Работа со стеком&lt;/td&gt;   &lt;td align="center"&gt;&lt;a href="https://docs.google.com/leaf?id=0B7KZXIPNCqCpMTVmN2QyMWUtNDZjMi00ZGJiLWIzZjEtYzAxZGYwMDBlMzlh&amp;hl=en_US"&gt;Скачать&lt;/a&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td align="center"&gt;&lt;span class="code_in_text"&gt;TQueue&amp;lt;T&amp;gt;&lt;/span&gt; и &lt;span class="code_in_text"&gt;TObjectQueue&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/td&gt;   &lt;td align="center"&gt;Работа со очередью&lt;/td&gt;   &lt;td align="center"&gt;&lt;a href="https://docs.google.com/leaf?id=0B7KZXIPNCqCpZmM4YjA1MjEtZTFhNS00MDdjLWExYjMtNWU0MDc3N2JiMTIy&amp;hl=en_US"&gt;Скачать&lt;/a&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;tr&gt;   &lt;td align="center" colspan="3"&gt;&lt;a href="https://docs.google.com/leaf?id=0B7KZXIPNCqCpZDZmOTVjZGMtNWZmOS00NmQ0LWJkNWMtMzc3MmU2ZWY1YjQx&amp;hl=en_US"&gt;Скачать все примеры целиком&lt;/a&gt;&lt;/td&gt;  &lt;/tr&gt;
&lt;/table&gt;&lt;br /&gt;
&lt;span class="KeeperHeader1"&gt;&lt;a name="a3"&gt;3.&lt;/a&gt; Ссылки&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Статья в PDF&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;PDF-версия &lt;a href="https://docs.google.com/viewer?a=v&amp;pid=explorer&amp;chrome=true&amp;srcid=0B7KZXIPNCqCpYWU0MDFmNDAtMjBhOC00NDFmLTk2MjYtNjMxZjBiMTY4YjRi&amp;hl=en_US"&gt;"Используем дженерики в Delphi!"&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Дженерики&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Справочная система Delphi: обзор дженериков (&lt;a href="http://docwiki.embarcadero.com/RADStudio/en/Overview_of_Generics"&gt;англ.&lt;/a&gt;), Generics.Defaults (&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Defaults"&gt;англ.&lt;/a&gt;), Generics.Collections (&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections"&gt;англ.&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;М. Кэнту Delphi Handbook 2009, раздел о дженериках (&lt;a href="http://www.marcocantu.com/dh2009/"&gt;англ.&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Обобщённое программирование (generics) в Delphi 2009 для Win32 (&lt;a href="http://www.tdelphiblog.com/2009/10/generics-delphi-2009-win32.html"&gt;рус.&lt;/a&gt;, &lt;a href="http://sjrd.developpez.com/delphi/tutoriel/generics/"&gt;англ.&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Сравнивая дженерики в C#, C++ и Delphi(Win32) (&lt;a href="http://www.tdelphiblog.com/2009/10/c-c-delphiwin32.html"&gt;рус.&lt;/a&gt;, &lt;a href="http://blogs.teamb.com/craigstuntz/2009/10/01/38465/"&gt;англ.&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Другое&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Преимущества перехода на Delphi XE (&lt;a href="http://www.embt.ru/reasonds-to-migrate-to-delphi-xe-rus.pdf"&gt;рус.&lt;/a&gt;, &lt;a href="http://www.embarcadero.com/images/dm/technical-papers/reasons-to-migrate-to-delphi-xe-white-paper.pdf"&gt;англ.&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;&lt;/ol&gt;&lt;center&gt;[&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-1.html"&gt;Часть 1 - Введение в дженерики&lt;/a&gt;]&amp;nbsp;[&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-2.html"&gt;Часть 2 - Системные классы&lt;/a&gt;]&amp;nbsp;[Часть 3 - Приложение] [&lt;a href="http://keeper89.blogspot.com/2011/07/delphi.html#a1"&gt;Содержание&lt;/a&gt;]&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-2786434521706622983?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/xPu8wm6c7nc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/2786434521706622983/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2011/07/delphi-3.html#comment-form" title="Комментарии: 4" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/2786434521706622983?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/2786434521706622983?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/xPu8wm6c7nc/delphi-3.html" title="Используем дженерики в Delphi! - Часть 3 (Приложение)" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2011/07/delphi-3.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIFQXg7cSp7ImA9WhdUGUU.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-3534827029735925533</id><published>2011-07-29T14:49:00.004+04:00</published><updated>2011-10-07T15:21:50.609+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-07T15:21:50.609+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Delphi" /><category scheme="http://www.blogger.com/atom/ns#" term="Конкурс Delphi 2011" /><category scheme="http://www.blogger.com/atom/ns#" term="Мое" /><title>Используем дженерики в Delphi! - Часть 2 (Системные классы)</title><content type="html">&lt;center&gt;[&lt;a href="http://keeper89.blogspot.com/2011/07/delphi.html#a1"&gt;Содержание&lt;/a&gt;]&lt;br /&gt;
[&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-1.html"&gt;Часть 1 - Введение в дженерики&lt;/a&gt;]&amp;nbsp;[Часть 2 - Системные классы]&amp;nbsp;[&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-3.html"&gt;Часть 3 - Приложение&lt;/a&gt;]&lt;/center&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-2.html#a1"&gt;Введение&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-2.html#a2"&gt;Generics.Defaults&lt;/a&gt;&lt;/li&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-2.html#a21"&gt;&lt;span class="code_in_text"&gt;TComparer&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-2.html#a3"&gt;Generics.Collections&lt;/a&gt;&lt;/li&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-2.html#a31"&gt;&lt;span class="code_in_text"&gt;TArray&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-2.html#a311"&gt;Сортировка и поиск элементов в одномерном массиве&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-2.html#a312"&gt;Сортировка двумерного массива&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-2.html#a32"&gt;&lt;span class="code_in_text"&gt;TDictionary&amp;lt;T&amp;gt;&lt;/span&gt; и &lt;span class="code_in_text"&gt;TObjectDictionary&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-2.html#a321"&gt;Работа со словарем (на примере &lt;span class="code_in_text"&gt;TDictionary&amp;lt;T&amp;gt;&lt;/span&gt;)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-2.html#a322"&gt;События &lt;span class="code_in_text"&gt;OnKeyNotify&lt;/span&gt; и &lt;span class="code_in_text"&gt;OnValueNotify&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-2.html#a323"&gt;Ключи, значения и &lt;span class="code_in_text"&gt;TArray&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-2.html#a33"&gt;&lt;span class="code_in_text"&gt;TList&amp;lt;T&amp;gt;&lt;/span&gt; и &lt;span class="code_in_text"&gt;TObjectList&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-2.html#a331"&gt;Работа со списком (на примере &lt;span class="code_in_text"&gt;TObjectList&amp;lt;T&amp;gt;&lt;/span&gt;)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-2.html#a332"&gt;Поиск и сортировка&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-2.html#a333"&gt;Событие &lt;span class="code_in_text"&gt;OnNotify&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-2.html#a34"&gt;&lt;span class="code_in_text"&gt;TStack&amp;lt;T&amp;gt;&lt;/span&gt; и &lt;span class="code_in_text"&gt;TObjectStack&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-2.html#a35"&gt;&lt;span class="code_in_text"&gt;TQueue&amp;lt;T&amp;gt;&lt;/span&gt; и &lt;span class="code_in_text"&gt;TObjectQueue&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-2.html#a4"&gt;Заключение&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span class="KeeperHeader1"&gt;&lt;a name="a1"&gt;1.&lt;/a&gt; Введение&lt;/span&gt;&lt;br /&gt;
Рассмотрим стандартные обощенные классы в Delphi и их функциональные особенности.&lt;br /&gt;
Большинство информации будет представлено в виде демо-примеров, которые при желании можно будет легко воспроизвести у себя на ПК.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="KeeperHeader1"&gt;&lt;a name="a2"&gt;2.&lt;/a&gt; Generics.Defaults&lt;/span&gt;&lt;br /&gt;
&lt;span class="KeeperHeader2"&gt;&lt;a name="a21"&gt;2.1.&lt;/a&gt; &lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Defaults.TComparer"&gt;&lt;span class="code_in_text"&gt;TComparer&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="code_in_text"&gt;TComparer&lt;/span&gt; является базовым обобщенным классом, реализует интерфейс &lt;span class="code_in_text"&gt;IComparer&lt;/span&gt; и предназначен для создания компараторов - классов, отвечающих за сравнение других классов или типов.&lt;br /&gt;
Создавать компараторы для некоторых стандартных типов (о которых можно получить информацию через RTTI) очень просто: для этого существует классовая функция &lt;span class="code_in_text"&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Defaults.TComparer.Default"&gt;TComparer&lt;t&gt;.Default&lt;/a&gt;&lt;/span&gt;. Так, компаратор для целых чисел или строк создается через &lt;span class="code_in_text"&gt;TComparer&amp;lt;Integer&amp;gt;.Default&lt;/span&gt; и &lt;span class="code_in_text"&gt;TComparer&amp;lt;string&amp;gt;.Default&lt;/span&gt; соотвественно. А как же сранивать нестандартные типы или собственные классы? Для этого потребуется создать собственный компаратор на основе &lt;span class="code_in_text"&gt;TComparer&amp;lt;T&amp;gt;&lt;/span&gt; и всего лишь переопределить функцию &lt;span class="code_in_text"&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Defaults.TComparer.Compare"&gt;Compare&lt;/a&gt;&lt;/span&gt;:&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Листинг 11 - Создание пользовательского компаратора для класса &lt;span class="code_in_text"&gt;TCustomer&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: delphi"&gt;uses
  SysUtils, Generics.Defaults;
 
...

  // Создадим компаратор для класса TCustomer из Листинга 4

  // Немного расширим класс, пусть у клиента будет банковский счет
  TCustomer = class
  private
    FName: string;
    FMoney: Currency;
  private
    constructor Create(const Name: string; Money: Currency);
    property Name: string read FName write FName;
    property Money: Currency read FMoney write FMoney;
  end;

  // Объявляем наш компаратор и переопределяем функцию Compare
  TCustomerComparer = class(TComparer&amp;lt;TCustomer&amp;gt;)
    function Compare(const Left, Right: TCustomer): Integer; override;
  end;


function TCustomerComparer.Compare(const Left, Right: TCustomer): Integer;
begin
  // Переопределяемый метод Compare должен возвращать:
  // 0 - при равенстве значений
  // &amp;gt;0 если первый параметр больше второго (Left &amp;gt; Right)
  // &amp;lt;0 в остальных случаях (Left &amp;lt; Right)

  // Будем сортировать клиентов сначала по имени, а затем по сумме счета
  Result := CompareStr(Left.Name, Right.Name);
  if Result = 0 then
    Result := Left.Money - Right.Money;
end;

...
&lt;/pre&gt;Кроме того, можно и не создавать класс, а использовать классовую функцию - &lt;span class="code_in_text"&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Defaults.TComparer.Construct"&gt;TComparer&amp;lt;T&amp;gt;.Construct&lt;/a&gt;&lt;/span&gt; в том случае, когда компаратор передается как параметр метода. Сделать это необходимо через &lt;a href="http://ru.wikipedia.org/wiki/%D0%90%D0%BD%D0%BE%D0%BD%D0%B8%D0%BC%D0%BD%D0%B0%D1%8F_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F"&gt;анонимную функцию&lt;/a&gt; того же вида, что и рассмотренная выше &lt;span class="code_in_text"&gt;Compare&lt;/span&gt;:&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Листинг 12 - "Конструирование" пользовательского компаратора с использованием функции Construct и анонимного метода&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: delphi"&gt;...

  // Предположим, что метод Sort в TCustomersManager принимает компаратор
  // в качестве параметра для сортировки имеющихся клиентов
  TCustomersManager.Sort(TComparer&amp;lt;TCustomer&amp;gt;.Construct(
    function (const Left, Right: Integer): Integer
    begin
      Result := CompareStr(Left.Name, Right.Name);
      if Result = 0 then
        Result := Left.Money - Right.Money;
    end));

...
&lt;/pre&gt;Где и как использовать компараторы в различных вариациях, мы увидим уже в следующих разделах.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="KeeperHeader1"&gt;&lt;a name="a3"&gt;3.&lt;/a&gt; Generics.Collections&lt;/span&gt;&lt;br /&gt;
&lt;span class="KeeperHeader2"&gt;&lt;a name="a31"&gt;3.1.&lt;/a&gt; &lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections.TArray"&gt;&lt;span class="code_in_text"&gt;TArray&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
Создавать экземпляр этого класса не нужно. &lt;span class="code_in_text"&gt;TArray&lt;/span&gt; содержит 2 статических метода:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span class="code_in_text"&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections.TArray.Sort"&gt;Sort&lt;/a&gt;&lt;/span&gt;. Использует алгоритм быстрой сортировки, может принимать компаратор в качестве параметра&lt;/li&gt;
&lt;li&gt;&lt;span class="code_in_text"&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections.TArray.BinarySearch"&gt;BinarySearch&lt;/a&gt;&lt;/span&gt;. Ищет элемент в массиве и возвращает True если находит. Также принимает компаратор, требует, чтобы массив был предвариательно отсортирован&lt;/li&gt;
&lt;/ul&gt;&lt;span class="KeeperHeader2"&gt;&lt;a name="a311"&gt;3.1.1.&lt;/a&gt; Сортировка и поиск элементов в одномерном массиве&lt;/span&gt;&lt;br /&gt;
Рассмотрим возможности сортировки и поиска на примере простого одномерного массива.&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Листинг 13 - Сортировка и поиск элементов одномерного целочисленного массива с использованием TArray&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: delphi"&gt;...

uses
  SysUtils, Types,
  Generics.Collections, Generics.Defaults;

function CompareIntReverse(const Left, Right: Integer): Integer;
begin
  // Сравниваем элементы "наоборот" и получаем обратный порядок
  Result := Right - Left;
end;

procedure PrintMatrix(A: TIntegerDynArray);
var
  item: Integer;
begin
  for item in A do
    Write(item, ' ');
  Writeln; Writeln;
end;

var
  A: TIntegerDynArray;
  FoundIndex: Integer;

begin

  ...

  SetLength(A, 5);
  A[0] := 1;
  A[1] := 6;
  A[2] := 3;
  A[3] := 2;
  A[4] := 9;

  // Распечатаем, что есть
  Writeln('Исходный массив:');
  PrintMatrix(A);

  // Сортируем по возрастанию без компаратора
  TArray.Sort&amp;lt;Integer&amp;gt;(A);
  Writeln('По возрастанию Sort без параметров:');
  PrintMatrix(A);

  // Сортируем по убыванию, конструируя компаратор
  // с помощью анонимного метода
  TArray.Sort&amp;lt;Integer&amp;gt;(A, TComparer&amp;lt;Integer&amp;gt;.Construct(
    function (const Left, Right: Integer): Integer
    begin
      Result := Right - Left;
    end));
  Writeln('По убыванию c TComparer&amp;lt;Integer&amp;gt;.Construct(анонимный метод):');
  PrintMatrix(A);

  // Опять сортируем по возрастанию c применением компаратора по умолчанию
  TArray.Sort&amp;lt;Integer&amp;gt;(A, TComparer&amp;lt;Integer&amp;gt;.Default);
  Writeln('По возрастанию c TComparer&amp;lt;Integer&amp;gt;.Default:');
  PrintMatrix(A);

  // И снова по убыванию с использованием собственного компаратора
  TArray.Sort&amp;lt;Integer&amp;gt;(A,  TComparer&amp;lt;Integer&amp;gt;.Construct(CompareIntReverse));
  Writeln('По убыванию TComparer&amp;lt;Integer&amp;gt;.Construct(CompareIntReverse):');
  PrintMatrix(A);

  // Выполняем поиск несуществующего элемента
  Writeln('BinarySearch несуществующего элемента');
  if TArray.BinarySearch&amp;lt;Integer&amp;gt;(A, 5, FoundIndex) then
    Writeln('5-ка найдена, ее индекс ', FoundIndex)
  else
    Writeln('5-ки в массиве нет!');
  Writeln;

  // Выполняем поиск существующего элемента
  Writeln('BinarySearch существующего элемента');
  if TArray.BinarySearch&amp;lt;Integer&amp;gt;(A, 6, FoundIndex) then
    Writeln('6-ка найдена, ее индекс ', FoundIndex)
  else
    Writeln('6-ки в массиве нет!');
  Writeln;

  // Выполняем поиск c нашим компаратором CompareIntReverse
  Writeln('BinarySearch существующего элемента с компаратором');
  if TArray.BinarySearch&amp;lt;Integer&amp;gt;(A, 6, FoundIndex,
    TComparer&amp;lt;Integer&amp;gt;.Construct(CompareIntReverse)) then
    Writeln('6-ка найдена, ее индекс ', FoundIndex)
  else
    Writeln('6-ки в массиве нет!');
  Writeln;

  FreeAndNil(A);


...
&lt;/pre&gt;Результат работы приведен на &lt;em&gt;Рисунке 3&lt;/em&gt;:&lt;br /&gt;
&lt;img src="https://lh5.googleusercontent.com/-WKsHo4QG6Vc/TiXMbO6jt2I/AAAAAAAAAG4/ps_0ygp2cC0/s800/Screenshot%252520-%25252019.07.2011%252520%25252C%25252022_26_05.png" height="359" width="549" /&gt;&lt;br /&gt;
&lt;span class="text-align: center;"&gt;&lt;em&gt;Рисунок 3 - Результаты поиска и сортировки с использованием TArray.Sort и TArray.BinarySearch&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="KeeperHeader2"&gt;&lt;a name="a312"&gt;3.1.2.&lt;/a&gt; Сортировка двумерного массива&lt;/span&gt;&lt;br /&gt;
Посмотрим, как осуществить сортировку двумерного массива:&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Листинг 14 - Сортировка элементов двумерного целочисленного массива с использованием TArray&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: delphi"&gt;...

uses
  SysUtils, Math, Types,
  Generics.Collections,
  Generics.Defaults;

type
  TDoubleIntegerArray = array of TIntegerDynArray;

procedure PrintMatrix(A: TDoubleIntegerArray);
var
  i, j: Integer;
begin
  for i := Low(A) to High(A) do
  begin
    for j := Low(A[0]) to High(A[0]) do
      Write(A[i, j]: 3, ' ');
    Writeln;
  end;
  Writeln; Writeln;
end;

var
  A: TDoubleIntegerArray;
  FoundIndex: Integer;
  i, j: Integer;

begin

...

  // Заполним целочисленный массив случайными числами [1..50]
  SetLength(A, 4, 7);
  Randomize;
  for i := Low(A) to High(A) do
    for j := Low(A[0]) to High(A[0]) do
      A[i, j] := Math.RandomRange(1, 50);

  // Приравниваем часть элементов для дальнейшей &amp;quot;каскадной&amp;quot; сортировки
  A[1, 0] := A[0, 0];
  A[2, 0] := A[0, 0];
  A[1, 1] := A[0, 1];
  
  // Распечатаем, что получилось
  Writeln('Исходный массив:');
  PrintMatrix(A);

  // Сортируем по убыванию по 1-й колонке, конструируя компаратор
  // с помощью анонимного метода
  TArray.Sort&amp;lt;TIntegerDynArray&amp;gt;(A, TComparer&amp;lt;TIntegerDynArray&amp;gt;.Construct(
    function (const Left, Right: TIntegerDynArray): Integer
    begin
      Result := Right[0] - Left[0];
    end));
  Writeln('По убыванию в 1 столбце:');
  PrintMatrix(A);

  // Сортируем по убыванию по 1-й колонке &amp;quot;каскадом&amp;quot;
  TArray.Sort&amp;lt;TIntegerDynArray&amp;gt;(A, TComparer&amp;lt;TIntegerDynArray&amp;gt;.Construct(
    function (const Left, Right: TIntegerDynArray): Integer
    var
      i: Integer;
    begin
      i := 0;
      repeat
        Result := Right[i] - Left[i];
        Inc(i);
      until ((Result &amp;lt;&amp;gt; 0) or (i = Length(Left)));
    end));
  Writeln('Каскадная сортировка, начиная с 1-го столбца:');
  PrintMatrix(A);

  ...
  
&lt;/pre&gt;Результат работы приведен на &lt;em&gt;Рисунке 4&lt;/em&gt;:&lt;br /&gt;
&lt;img src="https://lh4.googleusercontent.com/-SEnAXo0D9GQ/TiXtceElzLI/AAAAAAAAAHM/6b6u2rTjbCU/s800/Screenshot%252520-%25252020.07.2011%252520%25252C%2525200_46_47.png" height="323" width="477" /&gt;&lt;br /&gt;
&lt;span class="text-align: center;"&gt;&lt;em&gt;Рисунок 4 - Результаты сортировки двумерного массива с использованием TArray.Sort&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="KeeperHeader2"&gt;&lt;a name="a32"&gt;3.2.&lt;/a&gt; &lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections.TDictionary"&gt;&lt;span class="code_in_text"&gt;TDictionary&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/a&gt; и &lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections.TObjectDictionary"&gt;&lt;span class="code_in_text"&gt;TObjectDictionary&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
Данные классы представляют из себя коллекцию пар ключ-значение, или попросту словарь. Рассмотрим работу с этими классами на примере TDictionary&amp;lt;T&amp;gt;.&lt;br /&gt;
&lt;span class="KeeperHeader2"&gt;&lt;a name="a321"&gt;3.2.1.&lt;/a&gt; Работа со словарем (на примере TDictionary&amp;lt;T&amp;gt;)&lt;/span&gt;&lt;br /&gt;
Основные возможности и свойства TDictionary&amp;lt;T&amp;gt; рассмотрим на следующем примере:&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Листинг 15 - Использование TDictionary&amp;lt;T&amp;gt; в качестве коллекции данных для телефонной книги&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: delphi"&gt;...

uses
  SysUtils, Generics.Collections, Generics.Defaults;

type

  // Информация о владельце номера
  TSubscriberInfo = record
    Name, SName: string;
    class function Create(const Name, SName: string): TSubscriberInfo; static;
    function ToString: string;
  end;

class function TSubscriberInfo.Create(const Name,
  SName: string): TSubscriberInfo;
begin
  Result.Name := Name;
  Result.SName := SName;
end;

function TSubscriberInfo.ToString: string;
begin
  Result := Format('%s %s', [Name, SName]);
end;

var
  // Объявляем &amp;quot;словарь&amp;quot;
  // ключом будет номер телефона, по которому можно будет
  // определить информацию о владельце в виде TSubscriberInfo
  TelephoneDirectory: TDictionary&amp;lt;string, TSubscriberInfo&amp;gt;;
  tempInfo: TSubscriberInfo;
begin

  ...

  // Создаем справочник
  // Конструктор имеет несколько перезагруженных вариантов, позволяющих
  // установить емкость контейнера, компаратор для значений или
  // первоначальный данные - мы используем самый простой вариант
  TelephoneDirectory := TDictionary&amp;lt;string, TSubscriberInfo&amp;gt;.Create;

  // ---------------------------------------------------
  // 1) Добавление в словарь

  // Добавляем абонентов в справочник
  TelephoneDirectory.Add('9101111111', TSubscriberInfo.Create('Арнольд', 'Шварценеггер'));
  TelephoneDirectory.Add('9102222222', TSubscriberInfo.Create('Джессика', 'Альба'));
  TelephoneDirectory.Add('9103333333', TSubscriberInfo.Create('Бред', 'Питт'));
  TelephoneDirectory.Add('9104444444', TSubscriberInfo.Create('Бред', 'Питт'));
  TelephoneDirectory.Add('9105555555', TSubscriberInfo.Create('Сандра', 'Баллок'));
  // Добавляем нового абонента и заменяем, если такой номер уже есть
  TelephoneDirectory.AddOrSetValue('9104444444',
                                   TSubscriberInfo.Create('Анджелина', 'Джоли'));

  // ---------------------------------------------------
  // 2) Получение, поиск, работа с элементами

  // Имеется ли номер телефона (ключ) - ContainsKey
  if TelephoneDirectory.ContainsKey('9105555555') then
    Writeln('Номер 9105555555 зарегистрирован!');
  // Имеется ли абонент (значение) - ContainsValue
  tempInfo := TSubscriberInfo.Create('Сандра', 'Баллок');
  if TelephoneDirectory.ContainsValue(tempInfo) then
    Writeln(Format('%s есть в справочнике!', [tempInfo.ToString]));
  // Пробуем получить информацию по телефону через TryGetValue
  if TelephoneDirectory.TryGetValue('9104444444', tempInfo) then
    Writeln(Format('Номер 9104444444 у абонента %s', [tempInfo.ToString]));
  // Обращение по номеру телефона
  Writeln(Format('Абонент с номером 9101111111: %s', [TelephoneDirectory['9101111111'].ToString]));
  // Кол-во людей в справочнике
  Writeln(Format('Всего абонентов в справочнике: %d', [TelephoneDirectory.Count]));

  // ---------------------------------------------------
  // 3) Удаление элементов

  // Шварценеггера сейчас не будет в списке =)
  TelephoneDirectory.Remove('9101111111');
  // Полностью очищаем список
  TelephoneDirectory.Clear;
  
  FreeAndNil(TelephoneDirectory);

  Readln;
end.
&lt;/pre&gt;&lt;span class="KeeperHeader2"&gt;&lt;a name="a322"&gt;3.2.2.&lt;/a&gt; События &lt;span class="code_in_text"&gt;OnKeyNotify&lt;/span&gt; и &lt;span class="code_in_text"&gt;OnValueNotify&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
На случай, если Вы хотите отслеживать изменения в словаре, предусмотрены события &lt;span class="code_in_text"&gt;OnKeyNotify&lt;/span&gt; и &lt;span class="code_in_text"&gt;OnValueNotify&lt;/span&gt;, срабатывающие при добавлении/удалении ключа и значения соответственно. Добавим небольшой фрагмент кода к предыдущему Листингу и продемонстрируем их работу:&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Листинг 16 - Использование событий TDictionary&amp;lt;T&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: delphi"&gt;...

uses
  SysUtils, Generics.Collections, Generics.Defaults;

type

...

  // Класс, содержащий обработчики добавления/удаления элементов словаря
  TDictionaryEventsHandler = class
  public
    // Синтаксис процедур един, единственное, в обоих случаях для Item необходимо
    // указать тип согласно типам нашего ключа и значения
    class procedure OnKeyNotify(Sender: TObject; const Item: string;
      Action: TCollectionNotification);
    class procedure OnValueNotify(Sender: TObject; const Item: TSubscriberInfo;
      Action: TCollectionNotification);
  end;
  
class procedure TDictionaryEventsHandler.OnKeyNotify(Sender: TObject;
  const Item: string; Action: TCollectionNotification);
begin
  case Action of
    cnAdded:
      Writeln(Format('OnKeyNotify! Номер %s добавлен!', [Item]));
    cnRemoved:
      Writeln(Format('OnKeyNotify! Номер %s удален!', [Item]));
  end;
end;

class procedure TDictionaryEventsHandler.OnValueNotify(Sender: TObject;
  const Item: TSubscriberInfo; Action: TCollectionNotification);
begin
  case Action of
    cnAdded:
      Writeln(Format('OnValueNotify! Абонент %s добавлен!', [Item.ToString]));
    cnRemoved:
      Writeln(Format('OnValueNotify! Абонент %s удален!', [Item.ToString]));
  end;
end;

...

begin

  ...

  // ---------------------------------------------------
  // 4) События добавления/удаления значений

  // События OnKeyNotify и OnValueNotify предназначены для "слежения"
  // за добавлением/удалением ключей и значений соответственно
  // Эти обработчики мы реализовали выше в классе TDictionaryEventsHandler
  TelephoneDirectory.OnKeyNotify := TDictionaryEventsHandler.OnKeyNotify;
  TelephoneDirectory.OnValueNotify := TDictionaryEventsHandler.OnValueNotify;

  Writeln;
  // Пробуем, как откликаются события
  TelephoneDirectory.Add('9101111111', TSubscriberInfo.Create('Арнольд', 'Шварценеггер'));
  TelephoneDirectory.Add('9102222222', TSubscriberInfo.Create('Джессика', 'Альба'));
  TelephoneDirectory.Clear;
  
...
end.
&lt;/pre&gt;Результат работы приведен на &lt;em&gt;Рисунке 5&lt;/em&gt;:&lt;br /&gt;
&lt;img src="https://lh3.googleusercontent.com/-YWU3Uw-re2s/TjAx0IHSjCI/AAAAAAAAAHc/fubDE4yZ1IQ/s800/Screenshot%252520-%25252027.07.2011%252520%25252C%25252015_21_19.png" height="239" width="525" /&gt;&lt;br /&gt;
&lt;span class="text-align: center;"&gt;&lt;em&gt;Рисунок 5 - Обработка событий OnKeyNotify и OnValueNotify в TDictionary&amp;lt;T&amp;gt;&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="KeeperHeader2"&gt;&lt;a name="a323"&gt;3.2.3.&lt;/a&gt; Ключи, значения и &lt;span class="code_in_text"&gt;TArray&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
Получить досутп к элементам словаря можно сделать несколькими способами:&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Листинг 17 - Доступ к элементам TDictionary&amp;lt;T&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: delphi"&gt;...

uses
  SysUtils, Generics.Collections;

...

var
  TelephoneDirectory: TDictionary&amp;lt;string, TSubscriberInfo&amp;gt;;  
  // TPair - обощенная запись, предназначенная для хранения
  // пары ключ-значение и не обладающая какой-либо другой функциональностью,
  // поэтому я не освещая ее отдельно
  TTelephoneArray: TArray&amp;lt;TPair&amp;lt;string, TSubscriberInfo&amp;gt;&amp;gt;;
  TTelephoneArrayItem: TPair&amp;lt;string, TSubscriberInfo&amp;gt;;
  PhoneNumber: string;
  Subscriber: TSubscriberInfo;
begin
  ...

  TelephoneDirectory := TDictionary&amp;lt;string, TSubscriberInfo&amp;gt;.Create;

  TelephoneDirectory.Add('9101111111', TSubscriberInfo.Create('Моника', 'Белуччи'));
  TelephoneDirectory.Add('9102222222', TSubscriberInfo.Create('Сильвестр', 'Сталлоне'));
  TelephoneDirectory.Add('9103333333', TSubscriberInfo.Create('Брюс', 'Уиллис'));

  // Показываем ключи (телефоны)
  Writeln('Ключи (телефоны):');
  for PhoneNumber in TelephoneDirectory.Keys do
    Writeln(PhoneNumber);
  Writeln;

  // Показываем значения (абонентов)
  Writeln('Значения (абоненты):');
  for Subscriber in TelephoneDirectory.Values do
    Writeln(Subscriber.ToString);
  Writeln;

  // Теперь все вместе
  Writeln('Список абонентов с телефонами:');
  for PhoneNumber in TelephoneDirectory.Keys do
    Writeln(Format('%s: %s',
      [PhoneNumber, TelephoneDirectory[PhoneNumber].ToString]));
  Writeln;

  // Кроме того, мы можем &amp;quot;экспортировать&amp;quot; словарь в знакомый нам TArray
  // Отсортируем полученный массив и выведем на экран
  TTelephoneArray := TelephoneDirectory.ToArray;
  TArray.Sort&amp;lt;TPair&amp;lt;string, TSubscriberInfo&amp;gt;&amp;gt;(
    TTelephoneArray, TComparer&amp;lt;TPair&amp;lt;string, TSubscriberInfo&amp;gt;&amp;gt;.Construct(
      function (const Left, Right: TPair&amp;lt;string, TSubscriberInfo&amp;gt;): Integer
      begin
        // Сравним сначала полные имена, а затем телефоны при необходимости
        Result := CompareStr(Left.Value.ToString, Right.Value.ToString);
        if Result = 0 then
          Result := CompareStr(Left.Key, Right.Key);
      end));
  // Печатаем
  Writeln('Отсортированный через TArray список абонентов с телефонами:');
  for TTelephoneArrayItem in TTelephoneArray do
    Writeln(Format('%s: %s',
      [TTelephoneArrayItem.Value.ToString, TTelephoneArrayItem.Key]));

  FreeAndNil(TelephoneDirectory);

  Readln;
end.
&lt;/pre&gt;Результат работы приведен на &lt;em&gt;Рисунке 6&lt;/em&gt;:&lt;br /&gt;
&lt;img src="https://lh6.googleusercontent.com/-wgRZ5xlsIVQ/TjAxzwDielI/AAAAAAAAAHY/Szk0VfHG8FA/s800/Screenshot%252520-%25252027.07.2011%252520%25252C%25252016_02_05.png" height="323" width="549" /&gt;&lt;br /&gt;
&lt;span class="text-align: center;"&gt;&lt;em&gt;Рисунок 6 - Доступ к ключам и значениям TDictionary&amp;lt;T&amp;gt; и экпорт в TArray&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="KeeperHeader2"&gt;&lt;a name="a33"&gt;3.3.&lt;/a&gt; &lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections.TList"&gt;&lt;span class="code_in_text"&gt;TList&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/a&gt; и &lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections.TObjectList"&gt;&lt;span class="code_in_text"&gt;TObjectList&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="code_in_text"&gt;TList&amp;lt;T&amp;gt;&lt;/span&gt; и &lt;span class="code_in_text"&gt;TObjectList&amp;lt;T&amp;gt;&lt;/span&gt; - упорядоченные списки.&lt;br /&gt;
&lt;span class="KeeperHeader2"&gt;&lt;a name="a331"&gt;3.3.1.&lt;/a&gt; Работа со списком (на примере &lt;span class="code_in_text"&gt;TObjectList&amp;lt;T&amp;gt;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;
Стандартные возможности по работе с классом &lt;span class="code_in_text"&gt;TObjectList&amp;lt;T&amp;gt;&lt;/span&gt; приведены в Листинге 18:&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Листинг 18 - Использование TObjectList&amp;lt;T&amp;gt; в качестве футбольного "менеджера"&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: delphi"&gt;...

uses
  SysUtils, DateUtils,
  Generics.Collections, Generics.Defaults;

type
  TPlayer = class
  public
    Name, Team: string;
    BirthDay: TDateTime;
    NTeamGoals: Byte; // Кол-во голов за национальную сборную
    constructor Create(const Name: string; BirthDay: TDateTime;
      const Team: string; NTeamGoals: Byte = 0);
    function ToString: string;
  end;

constructor TPlayer.Create(const Name: string; BirthDay: TDateTime;
  const Team: string; NTeamGoals: Byte);
begin
  Self.Name := Name;
  Self.BirthDay := BirthDay;
  Self.Team := Team;
  Self.NTeamGoals := NTeamGoals;
end;

function TPlayer.ToString: string;
begin
  Result := Format('%s - Возраст: %d Сборная: %s Голов: %d',
                   [Name, DateUtils.YearsBetween(Date, BirthDay),
                    Team, NTeamGoals])
end;

var
  // Объявляем TObjectList для хранения TPlayer
  PlayersList: TObjectList&amp;lt;TPlayer&amp;gt;;
  Player: TPlayer;

begin
  ...
  
  PlayersList := TObjectList&amp;lt;TPlayer&amp;gt;.Create;

  // ---------------------------------------------------
  // 1) Добавление элементов

  // "Простое" добавление в конец списка
  PlayersList.Add(
    TPlayer.Create('Роналдо', EncodeDate(1976, 09, 22), 'Бразилия', 62));
  PlayersList.Add(
    TPlayer.Create('Зинедин Зидан', EncodeDate(1972, 06, 23), 'Франция', 31));
  Writeln(Format('Индекс добавляемого игрока: %d',
          [PlayersList.Add(TPlayer.Create('Юрген Клинсманн',
                                          EncodeDate(1964, 07, 30),
                                          'Германия', 47))]));
  // Добавляем в указанную позицию
  PlayersList.Insert(0,
    TPlayer.Create('Луиш Фигу', EncodeDate(1972, 11, 4), 'Португалия', 33));
  // Добавляем несколько футболистов через InsertRange (AddRange работает аналогично)
  PlayersList.InsertRange(0,
    [TPlayer.Create('Девид Бекхэм', EncodeDate(1975, 05, 2), 'Англия', 17),
     TPlayer.Create('Алессандро Дель Пьеро', EncodeDate(1974, 11, 9), 'Италия', 27),
     TPlayer.Create('Рауль', EncodeDate(1977, 06, 27), 'Испания', 44)]);
  // Добавляем заранее созданный экземпляр класса
  Player := TPlayer.Create('Рауль', EncodeDate(1977, 06, 27), 'Испания', 44);
  PlayersList.Add(Player);


  // ---------------------------------------------------
  // 2) Доступ и проверка наличия элементов

  // Имеется ли игрок в списке - Contains
  if PlayersList.Contains(Player) then
    Writeln('Рауль есть в списке!');
  // Индекс игрока и кол-во элементов в списке
  Writeln(Format('Рауль %d-й в списке из %d футболистов.',
                 [PlayersList.IndexOf(Player) + 1, PlayersList.Count]));
  // Доступ по индексу
  Writeln(Format('1-й в списке: %s', [PlayersList[0].ToString]));
  // &amp;quot;Переворачиваем&amp;quot; элементы
  PlayersList.Reverse;
  Writeln('Элементы списка были &amp;quot;перевернуты&amp;quot;');


  // ---------------------------------------------------
  // 3) Перемещение и удаление элементов

  // Меняем игроков в списке местами
  PlayersList.Exchange(0, 1);
  // Перемещаем 1 игрока обратно
  PlayersList.Move(1, 0);

  // Удаляем элемент по индексу
  PlayersList.Delete(5);
  // Или несколько элементов (2), начиная с индекса (5)
  PlayersList.DeleteRange(5, 2);
  // Remove удаляет элемент из списка, если элемент существует
  // вернется его индекс в списке, иначе -1
  Writeln(Format('Удален %d-й игрок', [PlayersList.Remove(Player) + 1]));

  // Extract возвращает элемент, удаляя его из списка
  // В нашем случае Player будет = nil, т.к. Рауля мы уже удалили через Remove
  Player := PlayersList.Extract(Player);
  if Assigned(Player) then
    Writeln(Format('Извлечен: %s', [Player.ToString]));

  // Очищаем список полностью
  PlayersList.Clear;

  FreeAndNil(PlayersList);

  Readln;
end.
&lt;/pre&gt;&lt;span class="KeeperHeader2"&gt;&lt;a name="a332"&gt;3.3.2.&lt;/a&gt; Поиск и сортировка&lt;/span&gt;&lt;br /&gt;
Методы сортировки и поиска полностью идентичны соответствующим методам класса &lt;span class="code_in_text"&gt;TArray&lt;/span&gt;:&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Листинг 19 - Сортировка и поиск в TObjectList&amp;lt;T&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: delphi"&gt;...

// Функция сортировки по убыванию голов за сборную
function ComparePlayersByGoalsDecs(const Player1, Player2: TPlayer): Integer;
begin
  Result := Player2.NTeamGoals - Player1.NTeamGoals;
end;

var
...
  FoundIndex: Integer;

begin

...

  PlayersList := TObjectList&amp;lt;TPlayer&amp;gt;.Create;

  PlayersList.Add(
    TPlayer.Create('Зинедин Зидан', EncodeDate(1972, 06, 23), 'Франция', 31));
  PlayersList.Add(
    TPlayer.Create('Роналдо', EncodeDate(1976, 09, 22), 'Бразилия', 62));
  PlayersList.Add(
    TPlayer.Create('Юрген Клинсманн',  EncodeDate(1964, 07, 30), 'Германия', 47));

  // Сортируем с использованием ComparePlayersByGoalsDecs
  PlayersList.Sort(TComparer&amp;lt;TPlayer&amp;gt;.Construct(ComparePlayersByGoalsDecs));
  Writeln('Список игроков:');
  for Player in PlayersList do
    Writeln(Player.ToString);
  Writeln;

  // Найдем Роналдо в списке
  // Как и в случае с TArray BinarySearch требует, чтобы список был отсортирован
  // Ньанс - по сути, выполняющий тоже самое, что и IndexOf
  // BinarySearch обычно быстрее (первый не требует сортировки списка)
  Player := PlayersList[0];
  if PlayersList.BinarySearch(Player, FoundIndex,
    TComparer&amp;lt;TPlayer&amp;gt;.Construct(ComparePlayersByGoalsDecs)) then
    Writeln(Format('Роналдо идет отсортированном списке под №%d', [FoundIndex + 1]));

...
&lt;/pre&gt;Результат работы приведен на &lt;em&gt;Рисунке 7&lt;/em&gt;:&lt;br /&gt;
&lt;img src="https://lh6.googleusercontent.com/-uYUWJi9KDGM/TjL5WNLTukI/AAAAAAAAAII/Mb4OADwO7rA/s800/Screenshot%252520-%25252029.07.2011%252520%25252C%25252022_15_15.png" height="155" width="541" /&gt;&lt;br /&gt;
&lt;span class="text-align: center;"&gt;&lt;em&gt;Рисунок 7 - Сортировка и поиск в TObjectList&amp;lt;T&amp;gt;&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Кроме того &lt;span class="code_in_text"&gt;TObjectList&amp;lt;T&amp;gt;&lt;/span&gt; имеет функцию &lt;span class="code_in_text"&gt;ToArray&lt;/span&gt;, которая работает так же, как и в &lt;span class="code_in_text"&gt;TDictionary&amp;lt;T&amp;gt;&lt;/span&gt;, поэтому не будем приводить ее еще раз.&lt;br /&gt;
&lt;span class="KeeperHeader2"&gt;&lt;a name="a333"&gt;3.3.3.&lt;/a&gt; Событие &lt;span class="code_in_text"&gt;OnNotify&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
Событие &lt;span class="code_in_text"&gt;OnNotify&lt;/span&gt; возникает при изменении содержимого списка. Приведем пример ее использования:&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Листинг 20 - Событие OnNotify в TObjectList&amp;lt;T&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: delphi"&gt;// Класс, содержащий обработчики добавления/удаления элементов списка
  TListEventsHandler = class
  public
    class procedure OnListChanged(Sender: TObject; const Item: TPlayer;
      Action: TCollectionNotification);
  end;

class procedure TListEventsHandler.OnListChanged(Sender: TObject; const Item: TPlayer;
  Action: TCollectionNotification);
var
  Mes: string;
begin
  // В отличие от TDictionary у нас добавляется Action = cnExtracted
  case Action of
    cnAdded:
      Mes := 'добавлен в список!';
    cnRemoved:
      Mes := 'удален из списка!';
    cnExtracted:
      Mes := 'извлечен из списка!';
  end;
  Writeln(Format('Футболист %s %s ', [Item.ToString, Mes]));
end;

...

begin
  ...

  PlayersList := TObjectList&amp;lt;TPlayer&amp;gt;.Create;
  PlayersList.OnNotify := TListEventsHandler.OnListChanged;

  PlayersList.Add(
    TPlayer.Create('Зинедин Зидан', EncodeDate(1972, 06, 23), 'Франция', 31));
  PlayersList.Add(
    TPlayer.Create('Рауль', EncodeDate(1977, 06, 27), 'Испания', 44));
  PlayersList.Add(
    TPlayer.Create('Роналдо', EncodeDate(1976, 09, 22), 'Бразилия', 62));

  PlayersList.Delete(1);
  Player := PlayersList.Extract(PlayersList[0]);
  PlayersList.Clear;

  FreeAndNil(PlayersList);

...
&lt;/pre&gt;Результат работы приведен на &lt;em&gt;Рисунке 8&lt;/em&gt;:&lt;br /&gt;
&lt;img src="https://lh4.googleusercontent.com/-wETGl-iTM3Q/TjB6qtuxaAI/AAAAAAAAAHs/UvBbHNbEg9c/s800/Screenshot%252520-%25252028.07.2011%252520%25252C%2525200_51_49.png" height="312" width="650" /&gt;&lt;br /&gt;
&lt;span class="text-align: center;"&gt;&lt;em&gt;Рисунок 8 - Событие OnNotify в TObjectList&amp;lt;T&amp;gt;&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="KeeperHeader2"&gt;&lt;a name="a34"&gt;3.4.&lt;/a&gt; &lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections.TStack"&gt;&lt;span class="code_in_text"&gt;TStack&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/a&gt; и &lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections.TObjectStack"&gt;&lt;span class="code_in_text"&gt;TObjectStack&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
Стек представляет из себя обобщенную коллекцию элементов типа "последним пришел — первым вышел" (LIFO). Рассмотрим работу с ним на следующем примере:&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Листинг 21 - Работа с TStack&amp;lt;T&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: delphi"&gt;...

uses
  SysUtils, Generics.Collections;

type
  // Будем печь блины, класть их на тарелку и брать последний =)

  TPancakeType = (ptMeat, ptCherry, ptCurds);

  TPancake = record
    strict private
      const
        PANCAKE_TYPE_NAMES: array [TPancakeType] of string =
          ('c мясом', 'с вишней', 'с творогом');
    public
      var
        PancakeType: TPancakeType;
    class function Create(PancakeType: TPancakeType): TPancake; static;
    function ToString: string;
  end;

class function TPancake.Create(PancakeType: TPancakeType): TPancake;
begin
  Result.PancakeType := PancakeType;
end;

function TPancake.ToString: string;
begin
  Result := Format('Блин %s', [PANCAKE_TYPE_NAMES[PancakeType]])
end;

var
  PancakesPlate: TStack&amp;lt;TPancake&amp;gt;;
  Pancake: TPancake;

begin

...

  // &amp;quot;Создаем&amp;quot; тарелку с блинами
  PancakesPlate := TStack&amp;lt;TPancake&amp;gt;.Create;

  // Испечем несколько блинов
  // Push - помещает элементы в стек
  PancakesPlate.Push(TPancake.Create(ptMeat));
  PancakesPlate.Push(TPancake.Create(ptCherry));
  PancakesPlate.Push(TPancake.Create(ptCherry));
  PancakesPlate.Push(TPancake.Create(ptCurds));
  PancakesPlate.Push(TPancake.Create(ptMeat));

  // Съедим несколько блинов
  // Pop - извлекает элемент из стека
  Pancake := PancakesPlate.Pop;
  Writeln(Format('Съели блин (Pop): %s', [Pancake.ToString]));
  // Extract - аналогична Pop, но вызывает в OnNotify
  // c Action = cnExtracted вместо cnRemoved
  Pancake := PancakesPlate.Extract;
  Writeln(Format('Съели блин (Extract): %s', [Pancake.ToString]));

  // Какой блин лежит последним?
  // Peek - возвращает последний элемент, но не извлекает его из стека
  Writeln(Format('Последний блин: %s', [PancakesPlate.Peek.ToString]));

  // Покажем оставшиеся блины
  Writeln;
  Writeln(Format('Всего блинов: %d', [PancakesPlate.Count]));
  for Pancake in PancakesPlate do
    Writeln(Pancake.ToString);

  // Доедаем все
  // Clear - очищает стек
  PancakesPlate.Clear;

  FreeAndNil(PancakesPlate);

...
&lt;/pre&gt;Результат работы приведен на &lt;em&gt;Рисунке 9&lt;/em&gt;:&lt;br /&gt;
&lt;img src="https://lh3.googleusercontent.com/-59YqO2F7Syo/TjEweiqT9YI/AAAAAAAAAHw/Lq0yE5ZHQpI/s800/Screenshot%252520-%25252028.07.2011%252520%25252C%25252013_47_58.png" height="227" width="437" /&gt;&lt;br /&gt;
&lt;span class="text-align: center;"&gt;&lt;em&gt;Рисунок 9 - Работа с TStack&amp;lt;T&amp;gt;&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Событие &lt;span class="code_in_text"&gt;OnNotify&lt;/span&gt; и функция &lt;span class="code_in_text"&gt;ToArray&lt;/span&gt; работают также, как и в &lt;span class="code_in_text"&gt;TList&amp;lt;T&amp;gt;&lt;/span&gt;.&lt;br /&gt;
&lt;span class="KeeperHeader2"&gt;&lt;a name="a35"&gt;3.5.&lt;/a&gt; &lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections.TQueue"&gt;&lt;span class="code_in_text"&gt;TQueue&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/a&gt; и &lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections.TObjectQueue"&gt;&lt;span class="code_in_text"&gt;TObjectQueue&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
Очередь представляет из себя обобщенную коллекцию элементов, которая обслуживается по принципу "первым поступил — первым обслужен" (FIFO). Рассмотрим работу с очередью на следующем примере:&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Листинг 22 - Работа с TQueue&amp;lt;T&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: delphi"&gt;...

uses
  SysUtils, Generics.Collections;

type
  // Будем обслуживать клиентов, стоящих за новой Delphi XE2 =)

  TDelphiVersion = (dvStarter, dvProfessional, dvEnterprise, dvArchitect);

  TCustomer = record
    strict private
      const
        DV_NAMES: array [TDelphiVersion] of string =
          ('Starter', 'Professional', 'Enterprise', 'Architect');
    public
      var
        DelphiVersion: TDelphiVersion;
    class function Create(DelphiVersion: TDelphiVersion): TCustomer; static;
    function ToString: string;
  end;

class function TCustomer.Create(DelphiVersion: TDelphiVersion): TCustomer;
begin
  Result.DelphiVersion := DelphiVersion;
end;

function TCustomer.ToString: string;
begin
  Result := Format('Delphi XE2 %s', [DV_NAMES[DelphiVersion]])
end;

var
  CustomerQueue: TQueue&amp;lt;TCustomer&amp;gt;;
  Customer: TCustomer;

begin

...

  // &amp;quot;Создаем&amp;quot; очередь в пункте продажи
  CustomerQueue := TQueue&amp;lt;TCustomer&amp;gt;.Create;

  // Добавим несколько человек в очередь
  // Enqueue - помещает элемент в очередь
  CustomerQueue.Enqueue(TCustomer.Create(dvStarter));
  CustomerQueue.Enqueue(TCustomer.Create(dvProfessional));
  CustomerQueue.Enqueue(TCustomer.Create(dvProfessional));
  CustomerQueue.Enqueue(TCustomer.Create(dvProfessional));
  CustomerQueue.Enqueue(TCustomer.Create(dvEnterprise));
  CustomerQueue.Enqueue(TCustomer.Create(dvEnterprise));
  CustomerQueue.Enqueue(TCustomer.Create(dvArchitect));
  CustomerQueue.Enqueue(TCustomer.Create(dvArchitect));

  // Обслужим часть покупателей
  // Dequeue - извлекает элемент из очереди
  Customer := CustomerQueue.Dequeue;
  Writeln(Format('Продали (Dequeue): %s', [Customer.ToString]));
  // Extract - аналогична Dequeue, но вызывает в OnNotify
  // c Action = cnExtracted вместо cnRemoved
  Customer := CustomerQueue.Extract;
  Writeln(Format('Продали (Extract): %s', [Customer.ToString]));

  // За чем пришел следующий покупатель?
  // Peek - возвращает первый элемент, но не извлекает его из очереди
  Writeln(Format('Обслуживаемый покупатель пришел за %s',
                 [CustomerQueue.Peek.ToString]));

  // Оставшиеся покупатели
  Writeln;
  Writeln(Format('Всего покупателей осталось: %d', [CustomerQueue.Count]));
  for Customer in CustomerQueue do
    Writeln(Customer.ToString);

  // Обслуживаем всех
  // Clear - очищает очередь
  CustomerQueue.Clear;

  FreeAndNil(CustomerQueue);

...
&lt;/pre&gt;Результат работы приведен на &lt;em&gt;Рисунке 10&lt;/em&gt;:&lt;br /&gt;
&lt;img src="https://lh5.googleusercontent.com/-jjVnYQ4HTc8/TjFvgjdNjHI/AAAAAAAAAH0/5zJ29oGdOpw/s800/Screenshot%252520-%25252028.07.2011%252520%25252C%25252018_16_38.png" height="227" width="533" /&gt;&lt;br /&gt;
&lt;span class="text-align: center;"&gt;&lt;em&gt;Рисунок 10 - Работа с TQueue&amp;lt;T&amp;gt;&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Событие &lt;span class="code_in_text"&gt;OnNotify&lt;/span&gt; и функция &lt;span class="code_in_text"&gt;ToArray&lt;/span&gt; работают также, как и в &lt;span class="code_in_text"&gt;TList&amp;lt;T&amp;gt;&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="KeeperHeader1"&gt;&lt;a name="a4"&gt;4.&lt;/a&gt; Заключение&lt;/span&gt;&lt;br /&gt;
Мы рассмотрели 2 основных модуля, предоставляющих классы для работы с дженериками, а также рассмотрели принципы и примеры работы с ними. Исходники проектов Вы сможете скачать в следующей Части.&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;[&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-1.html"&gt;Часть 1 - Введение в дженерики&lt;/a&gt;]&amp;nbsp;[Часть 2 - Системные классы]&amp;nbsp;[&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-3.html"&gt;Часть 3 - Приложение&lt;/a&gt;]&lt;br /&gt;
[&lt;a href="http://keeper89.blogspot.com/2011/07/delphi.html#a1"&gt;Содержание&lt;/a&gt;]&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-3534827029735925533?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/3siUy1jwcqw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/3534827029735925533/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2011/07/delphi-2.html#comment-form" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/3534827029735925533?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/3534827029735925533?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/3siUy1jwcqw/delphi-2.html" title="Используем дженерики в Delphi! - Часть 2 (Системные классы)" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh5.googleusercontent.com/-WKsHo4QG6Vc/TiXMbO6jt2I/AAAAAAAAAG4/ps_0ygp2cC0/s72-c/Screenshot%252520-%25252019.07.2011%252520%25252C%25252022_26_05.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2011/07/delphi-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cHRnw6cCp7ImA9WhRSFU8.&quot;"><id>tag:blogger.com,1999:blog-3534124135013415942.post-3733146700999429253</id><published>2011-07-29T14:48:00.004+04:00</published><updated>2011-11-17T15:23:57.218+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-17T15:23:57.218+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Delphi" /><category scheme="http://www.blogger.com/atom/ns#" term="Конкурс Delphi 2011" /><category scheme="http://www.blogger.com/atom/ns#" term="Мое" /><title>Используем дженерики в Delphi! - Часть 1 (Введение)</title><content type="html">&lt;center&gt;[&lt;a href="http://keeper89.blogspot.com/2011/07/delphi.htmlhttp://keeper89.blogspot.com/2011/07/delphi-1.html#a1"&gt;Содержание&lt;/a&gt;]&lt;br /&gt;
[Часть 1 - Введение в дженерики]&amp;nbsp;[&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-2.html"&gt;Часть 2 - Системные классы&lt;/a&gt;]&amp;nbsp;[&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-3.html"&gt;Часть 3 - Приложение&lt;/a&gt;]&lt;/center&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-1.html#a1"&gt;Что такое дженерики и зачем они нужны?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-1.html#a2"&gt;Преимущества использования дженериков&lt;/a&gt;&lt;/li&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-1.html#a21"&gt;Безопасность типов&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-1.html#a22"&gt;Эффективность&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-1.html#a23"&gt;Максимальное повторное использование кода&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-1.html#a3"&gt;Встроенные обощенные классы в Delphi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-1.html#a4"&gt;Что "поддается обощению" в Delphi?&lt;/a&gt;&lt;/li&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-1.html#a41"&gt;Обобщенные методы&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-1.html#a42"&gt;Обобщенные классы&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-1.html#a43"&gt;Обобщенные записи&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;li&gt;&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-1.html#a5"&gt;Заключение&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span class="KeeperHeader1"&gt;&lt;a name="a1"&gt;1.&lt;/a&gt; Что такое дженерики и зачем они нужны?&lt;/span&gt;&lt;br /&gt;
Наличие обобщений в языке позволяет создавать открытые типы, которые превращаются в закрытые на этапе компиляции. Синтаксис дженериков на примере обобщенной записи &lt;span class="code_in_text"&gt;TPoint&amp;lt;T&amp;gt;&lt;/span&gt; приведен в &lt;em&gt;Листинге 1&lt;/em&gt;:&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Листинг 1 - Объявление обобщенной записи TPoint&amp;lt;T&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: delphi"&gt;type
  TPoint&amp;lt;T&amp;gt; = record
    X: T;
    Y: T;
  end;  
&lt;/pre&gt;Сразу бросаются в глаза отличия от декларирования обычной записи - наличие &lt;span class="code_in_text"&gt;&amp;lt;T&amp;gt;&lt;/span&gt; в имени записи и кооринат X и Y этого же типа &lt;span class="code_in_text"&gt;T&lt;/span&gt;. &lt;span class="code_in_text"&gt;T&lt;/span&gt; здесь - неуточненный тип, который будет указан позже, при создании конкретного экземпляра записи.&lt;br /&gt;
Предположим, что мы решили использовать в приложении "дробные" точки (например, &lt;span class="code_in_text"&gt;Double&lt;/span&gt;). Все, что нужно сделать - объявить следующий закрытый тип:&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Листинг 2 - Использование обобщенной записи TPoint&amp;lt;T&amp;gt; в качестве "дробной" точки&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: delphi"&gt;...

var
  MyPoint: TPoint&amp;lt;Double&amp;gt;;
begin
  MyPoint.X := 1.5;
  MyPoint.Y := -0.5;

...
&lt;/pre&gt;А если нам понадобится целый тип, мы просто изменим &lt;span class="code_in_text"&gt;Double&lt;/span&gt; на &lt;span class="code_in_text"&gt;Integer&lt;/span&gt;:&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Листинг 3 - Использование обобщенной записи TPoint&amp;lt;T&amp;gt; в качестве "целой" точки&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: delphi"&gt;...

var
  MyPoint: TPoint&amp;lt;Integer&amp;gt;;
begin
  MyPoint.X := 1;
  MyPoint.Y := 100;

...
&lt;/pre&gt;Просто, не правда ли? &lt;span class="code_in_text"&gt;MyPoint: TPoint&amp;lt;Double&amp;gt;&lt;/span&gt; и &lt;span class="code_in_text"&gt;MyPoint: TPoint&amp;lt;Integer&amp;gt;&lt;/span&gt; - уже являются закрытыми типами и подчиняются все правилам, справедливым для обычных, необобщенных типов.&lt;br /&gt;
&lt;br /&gt;
Может возникнуть вопрос: могу ли я сделать это без дженериков? Конечно, можете. Правда, лишитесь ряда преимуществ.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="KeeperHeader1"&gt;&lt;a name="a2"&gt;2.&lt;/a&gt; Преимущества использования дженериков&lt;/span&gt;&lt;br /&gt;
&lt;span class="KeeperHeader2"&gt;&lt;a name="a21"&gt;2.1.&lt;/a&gt; Безопасность типов&lt;/span&gt;&lt;br /&gt;
Когда необходимо повысить безопасность типов и избежать ошибок их несоответствия во время выполнения приложения - дженерики могут прийти на помощь. Для демонстрации сравним стандартный класс &lt;span class="code_in_text"&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Classes.TList"&gt;TList&lt;/a&gt;&lt;/span&gt; и его обобщенный "аналог" &lt;span class="code_in_text"&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections.TList"&gt;TList&amp;lt;T&amp;gt;&lt;/a&gt;&lt;/span&gt;. Как известно, &lt;span class="code_in_text"&gt;TList&lt;/span&gt; хранит массив указателей на объекты, причем тип этих объектов может быть различен. Рассмотрим следующий пример:&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Листинг 4 - Вызов метода класса TCustomer для элементов TList&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: delphi"&gt;...

type
  // TCustomer - произвольный класс "Клиент"

  TCustomer = class
  private
    FName: string;
  private
    constructor Create(const Name: string);
    function ShowName: string;
  end;

...

procedure PrintCustomersInfo(List: TList);
var
  Item: Pointer;
  Customer: TCustomer;
begin
  for Item in List do
    ShowMessage((TObject(Item) as TCustomer).ShowName);
end;

procedure PrintCustomersInfo2(List: TList);
var
  Item: Pointer;
  Customer: TCustomer;
begin
  for Item in List do
    if TObject(Item) is TCustomer then
      ShowMessage((TObject(Item) as TCustomer).ShowName);
end;
&lt;/pre&gt;Теперь представьте, что передаваемый &lt;span class="code_in_text"&gt;TList&lt;/span&gt; содержит не только экземпляры &lt;span class="code_in_text"&gt;TCustomer&lt;/span&gt;. Для &lt;span class="code_in_text"&gt;PrintCustomersInfo&lt;/span&gt; это будет катострофично и приведет к &lt;span class="code_in_text"&gt;Invalid Type Cast&lt;/span&gt;, в процедуре &lt;span class="code_in_text"&gt;PrintCustomersInfo2&lt;/span&gt; мы избежали этого путем дополнительных проверок.&lt;br /&gt;
&lt;br /&gt;
Но разве не замечательно бы было отдать такие проверки на откуп компилятору при сборке приложения? Дженерики позволяют это сделать:&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Листинг 5 - Вывод информации о клиентах через TList&amp;lt;T&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: delphi"&gt;procedure PrintCustomersInfo3(List: TList&amp;lt;TCustomer&amp;gt;);
var
  Customer: TCustomer;
begin
  for Customer in List do
    ShowMessage(Customer.ShowName);
end;
&lt;/pre&gt;Заметили, что код уменьшился и стал более читаемым? Кроме того, за тем, чтобы в &lt;span class="code_in_text"&gt;TList&lt;/span&gt; не попало ничего лишнего уже проследил компилятор.&lt;br /&gt;
&lt;span class="KeeperHeader2"&gt;&lt;a name="a22"&gt;2.2.&lt;/a&gt; Эффективность&lt;/span&gt;&lt;br /&gt;
Дополнительная эффективность при использовании дженериков - возможно, одно из главных их преимуществ. Обобщения предоставляют компилятору больше информации, не исключая данные о типе во время исполнения приложения. Такой код проще писать, эффективнее заниматься отладкой приложения. Кроме того, в рассматриваемом примере ассемблерный код с дженериками (&lt;span class="code_in_text"&gt;PrintCustomersInfo3&lt;/span&gt;) содержит до 10 инструкций меньше (по сравнению с &lt;span class="code_in_text"&gt;PrintCustomersInfo2&lt;/span&gt;).&lt;br /&gt;
&lt;span class="KeeperHeader2"&gt;&lt;a name="a23"&gt;2.3.&lt;/a&gt; Максимальное повторное использование кода&lt;/span&gt;&lt;br /&gt;
Обобщенный класс, код для которого был написан всего 1 раз, может использоваться многократно. Так, без переписывания кода, &lt;span class="code_in_text"&gt;TList&amp;lt;T&amp;gt;&lt;/span&gt; может быть использован для создания списка целых чисел (&lt;span class="code_in_text"&gt;TList&amp;lt;Integer&amp;gt;&lt;/span&gt;), строк (&lt;span class="code_in_text"&gt;TList&amp;lt;string&amp;gt;&lt;/span&gt;) и т.д.&lt;br /&gt;
&lt;br /&gt;
В любом случае, эти преимущества достаточно существенны для того, чтобы пользоваться ими в полной мере.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="KeeperHeader1"&gt;&lt;a name="a3"&gt;3.&lt;/a&gt; Встроенные обощенные классы в Delphi&lt;/span&gt;&lt;br /&gt;
"Из коробки" в Delphi уже имеется ряд стандартных обобщенных классов, которые можно использовать при написании приложений. Находятся они в модулях &lt;span class="code_in_text"&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Defaults"&gt;Generics.Defaults&lt;/a&gt;&lt;/span&gt; и &lt;span class="code_in_text"&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections"&gt;Generics.Collections&lt;/a&gt;&lt;/span&gt;. Основные классы и типы данных приведены в &lt;em&gt;Таблицах 1&lt;/em&gt; и &lt;em&gt;2&lt;/em&gt;.&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Таблица 1 - Некоторые классы модуля Generics.Defaults&lt;/span&gt;&lt;br /&gt;
&lt;table border="1"&gt;&lt;tr&gt;     &lt;td&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Defaults.IComparer"&gt;&lt;span class="code_in_text"&gt;IComparer&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;     &lt;td&gt;Обобщенный интерфейс &lt;span class="code_in_text"&gt;IComparer&lt;/span&gt; предназначен для сравнения двух значений одинакового типа&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Defaults.IEqualityComparer"&gt;&lt;span class="code_in_text"&gt;IEqualityComparer&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;     &lt;td&gt;Обобщенный интерфейс &lt;span class="code_in_text"&gt;IEqualityComparer&lt;/span&gt; используется для проверки равенства двух значений&lt;br /&gt;
&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Defaults.TComparer"&gt;&lt;span class="code_in_text"&gt;TComparer&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;     &lt;td&gt;Базовый обощенный класс для классов, реализующих интерфейс &lt;span class="code_in_text"&gt;IComparer&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Defaults.TEqualityComparer"&gt;&lt;span class="code_in_text"&gt;TEqualityComparer&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;     &lt;td&gt;Базовый обощенный класс для классов, реализующих интерфейс &lt;span class="code_in_text"&gt;IEqualityComparer&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Defaults.TCustomComparer"&gt;&lt;span class="code_in_text"&gt;TCustomComparer&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;     &lt;td&gt;Базовый обощенный класс для классов, реализующих интерфейсы &lt;span class="code_in_text"&gt;IComparer&lt;/span&gt; и &lt;span class="code_in_text"&gt;IEqualityComparer&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;
&lt;/table&gt;&lt;span class="KeeperBeforeTableText"&gt;Таблица 2 - Некоторые классы и типы модуля Generics.Collections&lt;/span&gt;&lt;br /&gt;
&lt;table border="1"&gt;&lt;tr&gt;     &lt;td colspan="2" align="center"&gt;&lt;span class="font-style: 'bold'"&gt;Классы&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td&gt;&lt;span class="code_in_text"&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections.TArray"&gt;TArray&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;     &lt;td&gt;Класс, содержащий статические методы для поиска и сортировки обобщенного массива&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td&gt;&lt;span class="code_in_text"&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections.TDictionary"&gt;TDictionary&lt;/a&gt;&lt;/span&gt;,&lt;br /&gt;
&lt;span class="code_in_text"&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections.TObjectDictionary"&gt;TObjectDictionary&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;     &lt;td&gt; Словарь (коллекция пар ключ-значение) &lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td&gt;&lt;span class="code_in_text"&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections.TList"&gt;TList&lt;/a&gt;&lt;/span&gt;,&lt;br /&gt;
&lt;span class="code_in_text"&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections.TObjectList"&gt;TObjectList&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;     &lt;td&gt;Упорядоченный список&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td&gt;&lt;span class="code_in_text"&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections.TStack"&gt;TStack&lt;/a&gt;&lt;/span&gt;,&lt;br /&gt;
&lt;span class="code_in_text"&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections.TObjectStack"&gt;TObjectStack&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;     &lt;td&gt;Реализация стека (последний пришел, первый вышел)&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td&gt;&lt;span class="code_in_text"&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections.TQueue"&gt;TQueue&lt;/a&gt;&lt;/span&gt;,&lt;br /&gt;
&lt;span class="code_in_text"&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections.TObjectQueue"&gt;TObjectQueue&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;     &lt;td&gt;Реализация очереди (первый пришел, первый вышел)&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td colspan="2" align="center"&gt;&lt;span class="font-style: 'bold'"&gt;Типы&lt;/span&gt;&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td&gt;&lt;span class="code_in_text"&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections.TPair"&gt;TPair&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;     &lt;td&gt;Запись, хранящая пару ключ-значение&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td colspan="2" align="center"&gt;&amp;nbsp;&lt;/td&gt;   &lt;/tr&gt;
&lt;tr&gt;     &lt;td colspan="2" align="center"&gt;Примечание: как и аналоги из модуля &lt;span class="code_in_text"&gt;Classes&lt;/span&gt;, обощенные "объектные" классы относительно "необъектных" (например, &lt;span class="code_in_text"&gt;TObjectList&amp;lt;T&amp;gt;&lt;/span&gt; по сравнению с &lt;span class="code_in_text"&gt;TList&amp;lt;T&amp;gt;&lt;/span&gt;) позволяют хранить объекты в качестве своих элементов, а также автоматически следить за их жизненным циклом&lt;/td&gt;   &lt;/tr&gt;
&lt;/table&gt;&lt;br /&gt;
Использовать стандартные обобщенные классы довольно просто: включаем соответствующие модули в раздел &lt;span class="code_in_text"&gt;uses&lt;/span&gt; и задействуем нужные нам классы. В &lt;em&gt;Листинге 6&lt;/em&gt; приведен пример работы со списком целых чисел на основе обобщенного класса &lt;span class="code_in_text"&gt;TList&amp;lt;T&amp;gt;&lt;/span&gt;.&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Листинг 6 - Пример использования TList&amp;lt;T&amp;gt; для создания списка целых чисел&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: delphi"&gt;...

uses
  Generics.Collections;

...

var
  IntegerList: TList&amp;lt;Integer&amp;gt;;
begin
  IntegerList := TList&amp;lt;Integer&amp;gt;.Create;
  try
    IntegerList.Add(1);
    IntegerList.Add(5);
    IntegerList.AddRange([2, 5, 8, 9]);
    IntegerList.Insert(0, 0);
    // Имеется ли 9 в списке = True
    ShowMessage(BoolToStr(IntegerList.Contains(9), True));
    IntegerList.Remove(9);
    // Теперь 9-ки уже нет = False
    ShowMessage(BoolToStr(IntegerList.Contains(9), True)); 
    // Индекс двойки в списке равен 2? True
    ShowMessage(BoolToStr(IntegerList.IndexOf(5) = 2, True)); 
  finally
    FreeAndNil(IntegerList);
  end;
end;
&lt;/pre&gt;Более подробно системные классы будут рассмотрены во 2-м разделе.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="KeeperHeader1"&gt;&lt;a name="a4"&gt;4.&lt;/a&gt; Что "поддается обощению" в Delphi?&lt;/span&gt;&lt;br /&gt;
Естественно, что в Delphi имеется возможность не только использовать имеющуюся библиотеку дженериков, но и создавать свои собственные. Обобщенными могут быть классы, интерфейсы и записи. Также поддерживается создание обобщенных методов (процедур и функций).&lt;br /&gt;
&lt;span class="KeeperHeader2"&gt;&lt;a name="a41"&gt;4.1.&lt;/a&gt;  Обобщенные методы&lt;/span&gt;&lt;br /&gt;
Самым простым примером обобщенного метода может служить процедура для обмена значений переменных:&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Листинг 7 - Пример дженериковой процедуры Swap&amp;lt;T&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: delphi"&gt;...

  TSwapper = class
    class procedure Swap&amp;lt;T&amp;gt;(var a, b: T);
  end;

class procedure TSwapper.Swap&amp;lt;T&amp;gt;(var a, b: T);
var
  temp: T;
begin
  temp := b;
  b := a;
  a := temp;
end;

...
&lt;/pre&gt;Использовать такую процедуру можно следующим образом:&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Листинг 8 - Использование дженериковой процедуры Swap&amp;lt;T&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: delphi"&gt;...

  TPoint&amp;lt;T&amp;gt; = record
    X: T;
    Y: T;   
    // Добавим следующую маленькую функцию,
    // чтобы легче производить инициализацию записи
    class function Create(X, Y: T): TPoint&amp;lt;T&amp;gt;; static;
  end;

class function TPoint&amp;lt;T&amp;gt;.Create(X, Y: T): TPoint&amp;lt;T&amp;gt;;
begin
  Result.X := X;
  Result.Y := Y;
end;

var
  a, b: Integer;
  s1, s2: string;
  p1, p2: TPoint&amp;lt;Double&amp;gt;;
begin
  // Теперь с помощью обобщенной процедуры
  // мы имеем возможность обменять значения целых чисел...
  a := 1;
  b := 10;
  Writeln(Format('До обмена: a=%d; b=%d', [a, b]));
  TSwapper.Swap&amp;lt;Integer&amp;gt;(a, b);
  Writeln(Format('После обмена: a=%d; b=%d', [a, b]));

  Writeln;

  // ... строк...
  s1 := 'Delphi';
  s2 := 'XE';
  Writeln(Format('До обмена: s1=%s; s2=%s', [s1, s2]));
  TSwapper.Swap&amp;lt;string&amp;gt;(s1, s2);
  Writeln(Format('После обмена: s1=%s; s2=%s', [s1, s2]));

  Writeln;
  
  // ... и даже нашего типа TPoint&amp;lt;T&amp;gt;!
  p1 := TPoint&amp;lt;Double&amp;gt;.Create(5.5, -10);
  p2 := TPoint&amp;lt;Double&amp;gt;.Create(-1.5, 10);
  Writeln(Format('До обмена: p1: (%.2f, %.2f); p2: (%.2f, %.2f);', [p1.X, p1.Y, p2.X, p2.Y]));
  TSwapper.Swap&amp;lt;TPoint&amp;lt;Double&amp;gt;&amp;gt;(p1, p2);
  Writeln(Format('После обмена: p1: (%.2f, %.2f); p2: (%.2f, %.2f);', [p1.X, p1.Y, p2.X, p2.Y]));

...

&lt;/pre&gt;Результат приведен на &lt;em&gt;Рисунке 1&lt;/em&gt;:&lt;br /&gt;
&lt;img src="https://lh5.googleusercontent.com/-k8F-VYQOGDI/TiMAZtkTAKI/AAAAAAAAAGo/WjMQRPSbk98/s800/Screenshot%252520-%25252017.07.2011%252520%25252C%25252019_28_50.png" height="251" width="493" /&gt;&lt;br /&gt;
&lt;span class="text-align: center;"&gt;&lt;em&gt;Рисунок 1 - Пример использования Swap&amp;lt;T&amp;gt;&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="KeeperHeader2"&gt;&lt;a name="a42"&gt;4.2.&lt;/a&gt;  Обобщенные классы&lt;/span&gt;&lt;br /&gt;
Приведем пример обобщенного класса массива:&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Листинг 9 - Пример обобщенного класса массива TGenericArray&amp;lt;T&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: delphi"&gt;...

type
  // Обобщенный класс - одномерный массив
  TGenericArray&amp;lt;T&amp;gt; = class
  private
    // Обобщенные члены класса
    FItems: array of T;
    function GetItem(Index: Integer): T;
    function GetCount: Integer;
    procedure SetItem(Index: Integer; Value: T);
  public
    // Обобщенный конструктор
    constructor Create;
    // Обобщенные методы
    function IndexOf(Value: T): Integer;
    function SetSize(NewSize: Integer): Boolean;
    // Обобщенные свойства
    property Items[I: Integer]: T read GetItem write SetItem; default;
    property Count: Integer read GetCount;
  end;


{ TGenericArray&amp;lt;T&amp;gt; }

constructor TGenericArray&amp;lt;T&amp;gt;.Create;
begin
  SetSize(0);
end;

function TGenericArray&amp;lt;T&amp;gt;.GetCount: Integer;
begin
  Result := Length(FItems);
end;

function TGenericArray&amp;lt;T&amp;gt;.GetItem(Index: Integer): T;
begin
  if (Index &amp;lt; 0) or (Index &amp;gt;= Length(FItems)) then
    raise EArgumentOutOfRangeException.Create(SArgumentOutOfRange);
  Result := FItems[Index];
end;

function TGenericArray&amp;lt;T&amp;gt;.IndexOf(Value: T): Integer;
begin
  // здесь может быть поиск элемента
end;

procedure TGenericArray&amp;lt;T&amp;gt;.SetItem(Index: Integer; Value: T);
begin
  if (Index &amp;lt; 0) or (Index &amp;gt;= Length(FItems)) then
    raise EArgumentOutOfRangeException.Create(SArgumentOutOfRange);
  FItems[Index] := Value;
end;

function TGenericArray&amp;lt;T&amp;gt;.SetSize(NewSize: Integer): Boolean;
begin
  Result := NewSize &amp;gt; 0;
  if Result then
    SetLength(FItems, NewSize);
end;

...
&lt;/pre&gt;Посмотрим на вариант его использования:&lt;br /&gt;
&lt;span class="KeeperBeforeTableText"&gt;Листинг 10 - Использование обобщенного класса массива TGenericArray&amp;lt;T&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class="brush: delphi"&gt;...

var
  IntArray: TGenericArray&amp;lt;Integer&amp;gt;;
  DoubleArray: TGenericArray&amp;lt;Double&amp;gt;;
  i: Integer;

begin
  // Создаем "целочисленный вариант" нашего класса-массива
  IntArray := TGenericArray&amp;lt;Integer&amp;gt;.Create;
  IntArray.SetSize(3);
  IntArray[0] := 1;
  IntArray[1] := 2;
  IntArray[2] := 3;

  // а теперь "дробный"
  DoubleArray := TGenericArray&amp;lt;Double&amp;gt;.Create;
  DoubleArray.SetSize(4);
  DoubleArray[0] := 5;
  DoubleArray[1] := 2.5;
  DoubleArray[2] := -3;
  DoubleArray[3] := 3;

  Writeln(Format('В IntArray %d элем.:', [IntArray.Count]));
  for i := 0 to IntArray.Count - 1 do
    Writeln(Format('%d-й элемент = %d', [i, IntArray[i]]));

  Writeln;

  Writeln(Format('В DoubleArray %d элем.:', [DoubleArray.Count]));
  for i := 0 to DoubleArray.Count - 1 do
    Writeln(Format('%d-й элемент = %.1f', [i, DoubleArray[i]]));

  FreeAndNil(IntArray);
  FreeAndNil(DoubleArray);

...
&lt;/pre&gt;Результат приведен на &lt;em&gt;Рисунке 2&lt;/em&gt;.&lt;br /&gt;
&lt;img src="https://lh6.googleusercontent.com/-EuwElGihiCQ/TjKhcdCWr8I/AAAAAAAAAH8/toZT4zEXpQE/s800/Screenshot%252520-%25252029.07.2011%252520%25252C%25252014_13_13.png" height="203" width="477" /&gt;&lt;br /&gt;
&lt;span class="text-align: center;"&gt;&lt;em&gt;Рисунок 2 - Пример использования TGenericArray&amp;lt;T&amp;gt;&lt;/em&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="KeeperHeader2"&gt;&lt;a name="a43"&gt;4.3.&lt;/a&gt; Обобщенные записи&lt;/span&gt;&lt;br /&gt;
Пример обобщенной записи &lt;span class="code_in_text"&gt;TPoint&amp;lt;T&amp;gt;&lt;/span&gt; уже был приведен в начале раздела. Гляньте на нее еще разок.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="KeeperHeader1"&gt;&lt;a name="a5"&gt;5.&lt;/a&gt; Заключение&lt;/span&gt;&lt;br /&gt;
Мы познакомились с синтаксисом дженериков, их преимуществами и возможностями в Delphi. В следующем разделе мы рассмотрим системные обобщенные классы из модулей &lt;span class="code_in_text"&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Defaults"&gt;Generics.Defaults&lt;/a&gt;&lt;/span&gt; и &lt;span class="code_in_text"&gt;&lt;a href="http://docwiki.embarcadero.com/VCL/en/Generics.Collections"&gt;Generics.Collections&lt;/a&gt;&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;center&gt;[Часть 1 - Введение в дженерики]&amp;nbsp;[&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-2.html"&gt;Часть 2 - Системные классы&lt;/a&gt;]&amp;nbsp;[&lt;a href="http://keeper89.blogspot.com/2011/07/delphi-3.html"&gt;Часть 3 - Приложение&lt;/a&gt;]&lt;br /&gt;
[&lt;a href="http://keeper89.blogspot.com/2011/07/delphi.htmlhttp://keeper89.blogspot.com/2011/07/delphi-1.html#a1"&gt;Содержание&lt;/a&gt;]&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3534124135013415942-3733146700999429253?l=keeper89.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Keeper89/~4/Ms3PIl0xGhM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://keeper89.blogspot.com/feeds/3733146700999429253/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="http://keeper89.blogspot.com/2011/07/delphi-1.html#comment-form" title="Комментарии: 7" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/3733146700999429253?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3534124135013415942/posts/default/3733146700999429253?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Keeper89/~3/Ms3PIl0xGhM/delphi-1.html" title="Используем дженерики в Delphi! - Часть 1 (Введение)" /><author><name>Yuri Petrov</name><uri>https://profiles.google.com/110123899261644648402</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-8wt9KsHPCAs/AAAAAAAAAAI/AAAAAAAAAAA/wQM6FrzlI5Y/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh5.googleusercontent.com/-k8F-VYQOGDI/TiMAZtkTAKI/AAAAAAAAAGo/WjMQRPSbk98/s72-c/Screenshot%252520-%25252017.07.2011%252520%25252C%25252019_28_50.png" height="72" width="72" /><thr:total>7</thr:total><feedburner:origLink>http://keeper89.blogspot.com/2011/07/delphi-1.html</feedburner:origLink></entry></feed>

