Friday, February 14, 2014

Прошлое, настоящее и будущее C#

Прошлое, настоящее и будущее C#
Эрик Липперт
Краткая история C#

C# - широко используемый, развитый, многофункциональный язык программирования с миллионами профессиональных разработчиков по всему миру, но не всегда был таким.
В этой статье я проведу краткий хронологический экскурс в прошлое, настоящее и будущее языка C# .

Начало: C# 1.0 (2002)
Два первых предложения из спецификации C# 1.0 дают очень четкое представление о цели разработки языка:
С# - это простой, современный, типобезопасный объектно-ориентированный язык программирования. C# базируется на семействе языков программирования C и будет хорошо знаком программистам, работавшим с языками C, C++ и Java.
Андерс Хейлсберг, главный архитектор C#, однажды сказал мне: "Новые языки начинаются с минус десяти тысяч строк". Стоимость создания, популяризации, сопровождения и продвижения языка настолько велика, что по сравнению с ней, соответствующие выгоды от разработанного языка должны быть огромными. Таким образом, каждый новый язык является попыткой устранения недостатков своих предшественников, и C # - не исключение.
C# 1.0 был разработан специально как ответ на C++, из которого он получил свои базовые синтаксические элементы (*). Разработчики C# тщательно проанализировали многочисленные просчеты, с которыми столкнулись пользователи C++, и ограничили проявления многих из них. Некоторые из них выразились в основных отклонениях, такие как устранение множественного наследования классов. Большинство из них были незначительные, как, например, правило, что имя не может использоваться для обозначения двух различных элементов в одном блоке.
Разработчики языка уделили особое внимание безопасности типов языка. Язык считается типобезопасным, если компилятор запрещает определенные операции, например, сохранение имени клиента в месте, предназначенном для содержания суммы в долларах. Безопасность типов - это "палка о двух концах": с одной стороны, она предотвращает компиляцию многих явно ошибочных программ, но с другой стороны, усложняет некоторые технические приемы в программировании. C# 1.0 был разработан с достижением оптимального результата: он имеет достаточно строгую систему типов, чтобы предотвратить много дефектов, позволяя в то же время разработчикам отложить проверку типа до момента выполнения.
Результатом стал, как говорится в спецификации, относительно простой объектно-ориентированный язык. Хотя C# 1.0 тогда был и серьезным языком, но, безусловно, недостаточно сформированным.

Подъем в развитии C#: от 2.0 (2005) до 5.0 (2012)
У каждого из четырех версий C# с момента первоначального выпуска уже были основные функции, направленные значительно увеличить репрезентативную производительность языка. Основной функцией для C# 2.0 были обобщённые типы. Мощность, безопасность и производительность, добавленные в систему типов С# с помощью обобщенных типов, нельзя переоценить; они пронизывают почти каждый аспект как языка и его библиотеки реального времени и сделал язык таким, каким он является сегодня.
После успешной передачи обобщенных типов команда разработчиков проверила много существующего кода. Программисты обнаружили огромное количество несопоставимых технологий управления данными, каждую со своими взаимно несовместимыми механизмами сортировки, поиска, группировки, объединения и т.д. Благодаря этому, основной характеристикой C# 3.0 стал язык интегрированных запросов (Language Integrated Query, или кратко "LINQ"). LINQ позволяет разработчикам выразить такие понятия, как "предоставьте мне первую десятку клиентов из Лондона, отсортированных по фамилиям", независимо от того, находятся данные о клиентах в локальном массиве, в XML-документе, в базе данных или любой другой системе хранения данных. При разработке C# 3.0 была поставлена задача найти правильный баланс между его мощной, но труднообъяснимой разновидностью обоснований в теории и необходимостью создания простого для понимания синтаксиса.
После успеха LINQ группа разработки снова проанализировала как главные тенденции отрасли, так и первоначальные цели разработки C#. Руководствуясь актуальной целью в виде поддержки разработчиков с помощью существующих платформ Microsoft, а также непрерывным ростом популярности менее типобезопасных "динамических" языков, как JavaScript, Python и Ruby, C# программисты сделали взаимодействие с динамическими языками основной характеристикой C# 4.0.
Это был спорный выбор. C # разработчики любят безопасность типов, так что любая попытка сделать C# менее типобезопасным непременно встретила бы сопротивление. Команда разработчиков прошла несколько циклов разработки из предложения новой возможности, ее всесторонней критики специальной группой разработчиков и пересматривая ее снова на чертежной доске. В итоге специалисты нашли приемлемый баланс между безопасностью, удобством и производительностью, а также возможность объяснить новую возможность скептическому базовому контингенту пользователей: "Создавая программу на языке С#, который взаимодействует с объектами, предназначенными для использования в динамическом языке, Вы уже отказались от безопасности типов для этой части Вашей программы". В отличие от характерной для динамического языка совместимости со снижением безопасности типов данных в C#, новая возможность фактически делает существующие небезопасные части программы более поддерживаемыми и простыми в обращении. Следовательно, такой код, вероятнее всего, будет корректным, даже при отсутствии проверки компилятором безопасности типов.
Для C# 5.0 команда разработчиков снова рассмотрела практические потребности разработчиков и выявила, что многим производственным программам теперь приходится иметь дело с периодом ожидания. Существует огромный разрыв во времени - теоретически миллиардов машинных циклов - между моментом запроса некоторых данных и моментом, когда они становятся доступными. Компьютер с необходимыми данными может находиться на другом континенте, поэтому чтобы получить их, Вам придется подождать. Написание программ, позволяющих одновременно эффективно использовать процессоры с нынешними постоянно изменяющимся пользовательскими интерфейсами в мире, с высоким периодом ожидания, как известно, проблематично с помощью традиционных объектно-ориентированных языков. Создав новый асинхронный оператор ожидания, разрабатывать C# 5.0 программы, использующие асинхронность, стало так же легко, как и традиционные синхронные программы.
Общей чертой каждой версии, начиная с С# 1.0, является то, что разработчики C# предусматривали и учитывали практические потребности профессиональных программистов, дополняя С# синтаксисом, с которым в языке более естественным становится выражение смысла, предполагаемого разработчиками.

Будущее C #
На протяжении многих лет Microsoft реконструировал C# ( и Visual Basic ) компилятор в "компилятор как сервис", известный под кодовым названием "Roslyn". Microsoft вскоре впервые предоставит лексические, синтаксические и семантические механизмы анализа, используемые компилятором и средой разработки Visual Studio, в виде документированных, поддерживаемых библиотек. У этого нововведения будет два основных результата.
Во-первых, общедоступность этих библиотек, используемых Microsoft для анализа C#, значительно снизит расходы третьих лиц, желающих создать инструменты анализа. Такие инструменты анализа, которые помогают разработчикам понять, изучить, сопровождать, устанавливать, аннотировать, документировать, рефакторить и отлаживать C# код, будут быстро распространяться. C# разработчики любят инструменты, которые помогают сделать их код лучше.
Во-вторых, новая базовая архитектура сделает инновации в языке намного проще для Microsoft. Ожидается, что C# будет продолжать развиваться с ближайшими несколькими версиями. Есть много небольших "наболевших проблем", оставшихся нерешенными, и много новых возможностей, разработанных неопытными разработчиками, оставшихся нереализованными, потому что их создавали не в полную силу. Группа разработчиков С# будет продолжать пристально следить за тенденциями развития отрасли. У языка С# большое будущее, и я с нетерпением хочу узнать, что же произойдет дальше.

( * ) Хотя C # был также стратегическим ответом на Java, с точки зрения проектирования языка, C# и Java были ответами преимущественно на C++ .

No comments:

Post a Comment