Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (1160865), страница 4
Текст из файла (страница 4)
Более того, управляемая среда предлагает более развитую инфраструктуру, облегчающую работу. Вы увидите, как делегаты с использованием шаблона 1О11 ("1 Оие гоп") предоставляют удобный доступ к пулу потоков обработки. Вероятно, синхронизация — наиболее важная концепция. когда нужно заставить несколько потоков работать параллельно. В этой главе описаны различные средства синхронизации, доступные для приложений. В современном мире параллелизм выходит на передний план, поскольку вместо того, чтобы тратить астрономические суммы на создание все более быстрых процессоров, теперь больше внимания уделяется созданию процессоров многоядерных.
В главе рассматриваются новые средства Рага11е1 Ех1епз1опз и Таэ1с Рага11е! ЫЬгзху )ТРЬ), появившиеся в .ХЕТ 4.0. ° В главе 13, "В поисках канонических форм С№", дается обзор передовых приемов проектирования при определении новых типов, и показано, как сделать их такими, чтобы их применение было естественным, и чтобы их потребители не могли использовать их неправильно.
Эта тема затрагивается и в других главах, но здесь она обсуждается во всех деталях. В главе дается подробный перечень всех моментов, которые следует принимать во внимание при определении новых типов на С№. ° В главе 14, "Расширяющие методы", рассматривается средство, новое для С№ 3.0. Поскольку расширяющие методы можно вызывать как обычные методы экземпляра с типом, который они расширяют, их можно воспринимать как развитие контракта типов. Но на самом деле они представляют собой нечто большее. В этой главе будет показано, как расширяющие методы могут открыть мир функционального программирования на С№. ° )каза 15, "Лямбда-выражения".
посвящена еще одному новому средству С№ 3.0. Лямбда-выражения дают возможность объявлять и создавать экземпляры делегатов, используя краткий и визуально выразительный синтаксис. Хотя той же цели могут служить и анонимные функции, они намного более многословны и синтаксически менее элегантны. В С№ 3.0 лямбда-выражения могут быть преобразованы в деревья выражений. Это значит, что язык обладает встроенной способностью преобразовывать код в структуры данных. Само по себе это средство полезно, но не настолько, как в сочетании с языком интегрированных запросов (Ьапдпаде 1пге)р а1еб Янгу — ЫХЯ).
Вместе с расширяющими методами лямбда-выражения действительно формируют основу функционального программирования на С№. ° В главе 16, "ЫХЯ: язык интегрированных запросов", описана кульминация всех новых средств С№ 3.0. Используя выражения ЫХЯ через новые ЫХЯ-ориентированные ключевые слова С№ 3.0. можно плавно интегрировать запросы к данным в код. ыхЯ формирует мост между обычным миром императивного программирования С№ и миром функционального программирования запросов к данным. Выражения ЫХЯ могут применяться для манипуляций обычными объектами, а также информацией, полученной из баз данных БЯЬ. наборов данных и ХМЬ вЂ” и это далеко не полный перечень.
° В главе 17, "Динамические типы", рассматривается новый тип с1уоаяес. появившийся в С№ 4.0. Этот тип привнес с собой простоту интеграции с динамическими языками .ХЕТ, включая объекты СОМ АпгошаГ1оп. Ушли в прошлое времена, когда для интеграции с этими компонентами приходилось прибегать к неестественно выглядящему и трудно читаемому коду, поскольку реализация типа с1упаяъс взяла на себя всю черновую работу. Реализация динамического типа опирается на 20 Введение среду Р1Л (Рупаш1с 1апдпаяе КипШпе — исполняющая система динамического языка) — тот же самый фундамент, на котором базируются, помимо прочих, такие языки, как 1гопйиЬУ и 1гопруГЬоп.
Используя тип с1упааес в сочетании с такими типами Р1Л, как Вхрапс1ооь1 есг, можно создавать и реализовывать действительно динамические типы на СЗ. От издательства Вы, читатель этой книги, и есть главный ее критик и комментатор. Мы ценим ваше мнение и хотим знать, что было сделано нами правильно. что можно было сделать лучше и что еще вы хотели бы увидеть изданным нами. Нам интересно услышать и любые другие замечания, которые вам хотелось бы высказать в наш адрес. Мы ждем ваших комментариев и надеемся на них.
Вы можете прислать нам бумажное или электронное письмо. либо просто посетить наш %еЬ-сервер и оставить свои замечания там. Одним словом, любым удобным для вас способом дайте нам знать, нравится или нет вам эта книга, а также выскажите свое мнение о том, как сделать наши книги более интересными для вас. Посылая письмо или сообщение, не забудьте указать название книги и ее авторов, а также ваш обратный адрес.
Мы внимательно ознакомимся с вашим мнением и обязательно учтем его при отборе и подготовке к изданию последующих книг. Наши координаты: Е-ша11: 1пГоеи1111атзриЫ1зЫоо. сок %%%: Мер://иии.и1111атзриЫгзЫпд.сот Информация для писем из: России: 127055, г. Москва, ул. Лесная, д. 43, стр. 1 Украины: 03150, Киев,а/я 152 глдва 1 Обзор СИ н астоящая книга предназначена для опытных разработчиков, использующих объектно-ориентированный подход, поэтому я исхожу иэ того, что вы уже имеете некоторое представление об исполняющей системе .
МЕТ. Исполняющей системе .НЕТ посвящена замечательная книга Дона Бокса (Ооп Вох) и Криса Селлса (СЬх1з Бе))э) Езэеляа( .ИЕТ, Уо(шпе 1: ТАе Согптои Ьцгдиаде Вип11те (Абб1зоп-%еэ1еу Рго(еээ1опаЬ 2002 г.). Кроме того, очень важно обратить внимание на некоторые сходства и различия между С№ и С++, прежде чем писать элементарный пример вида "НеБо ЪЧог101". Если у вас уже есть опыт построения приложений .НЕТ, можете спокойно пропустить настоящую главу. Однако прочесть раздел "Обзор новых средств С№ 4.0" все же стоит. Отличия между СФ и С++ С№ — строго типизированный объектно-ориентированный язык, чей код внешне похож на С++ (и дача). Это решение проектировщиков языка С№ позволяет разработчикам на С++ легко воспользоваться своими знаниями для быстрого освоения С№.
Синтаксис С№ в некоторых отношениях отличается от С++, но большинство отличий между этими языками носят семантический и поведенческий характер, что обусловлено отличиями исполняющих сред, в которых работают программы, написанные на этих двух языках. Язык С$ Исходный код С№ компилируется в так называемый управляемый код (шапаяеб сос1е). Как вам, возможно, уже известно, управляемый код представляет собой код на промежуточном языке 1Ь (1п1егшеб1а1е Ьапяцаяе), который находится посредине между высокоуровневым языком [С№) и языком более низкого уровня (ассемблером/машинным кодом). Во время выполнения среда СЬЕ (Сопвпоп Ьапяцаяе Кшшгле — общеязыковая исполняющая среда) на лету компилирует код 1Ь в машинный код, применяя для этого оперативную компиляцию (диз1 1п Т1ше — ЛТ).
Как и любое проектное решение, эта техника имеет свои достоинства и недостатки. Очевидным недостатком может показаться неэффективность компиляции кода во время выполнения. Этот процесс отличается от интерпретации, которая обычно применяется в языках сценариев вроде Рег1 и дбсг1р1.
Компилятор ЛТ не компилирует функцию или метод при каждом его вызове; он делает это только первый раз, при этом продуцируя машинный код, родной по отношению к платформе, на которой он выполняется. Очевидное достоинство компиляции ЛТ вЂ” сокращение рабочего множества приложения, поскольку "отпечаток памяти" промежуточного кода существенно меньше. Во время выполнения приложения компилируется лишь тот код, который необходим. Например, если приложение содержит код вывода на печать, который никогда не требуется, если пользователь не печатает документ, то компилятор ЛТ никогда его и не скомпилирует.
Более того, СЬК может оптимизировать 22 глава ! выполнение программы на лету. Например, СЬК может определить способ сокращения "непопаданий" на страницу памяти в диспетчере памяти, реорганизуя скомпилированный код в памяти, и все это он делает во время выполнения. Если сложить вместе все недостатки, то можно обнаружить, что для большинства приложений достоинства такого подхода перевешивают. На заметку! В действительности вы можете выбирать, кодировать ли программы в низкоуровневый )Ь, когда строите их с помощью !!. АззетЫег ()ЬАЗМ). Однако, скорее всего, это будет неэффективное использование вашего времени, Высокоуровневые языки почти всегда могут предоставить любые вазможности, которые доступны с помощью низкоуровневого )Ь-кода. Язык С++ В отличие от СВ, код С++ традиционно компилируется в родной (пайпс) код.
Родной код — это машинный код, используемый процессором, для которого скомпилирована программа. Для простоты предположим, что мы говорим о скомпилированном в машинный код С++, а не об управляемом С++, который обеспечивает С++/СЫ. Если вы хотите, чтобы родное приложение С++ работало на разных платформах — 32- и 64-разрядных,— его понадобится скомпилировать по отдельности для каждой из ннх. Родной двоичный код, полученный на выходе компилятора, обычно не совместим между платформами. С другой стороны, промежуточный язык 1Ь совместим между платформами, поскольку он, наряду с общей инфраструктурой языка (Сопипоп Ьапаиаяе 1птгазтгистиге — СЫ), на которой построена СЬК, определен международным стандартом'.












