Эрик Липперт о C#

Эрик Липперт о C#

Эрик Липперт (Eric Lippert), разработчик компилятора C#, в своей статье рассказывает о прошлом, настоящем и будущем C#.

Краткая история C#

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

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

Рождение: C# 1.0 (2002)

Первые два предложения из спецификации C# 1.0 дают очень четкое представление о целях разработки языка: C# — это простой, современный, объектно-ориентированный и типобезопасный язык программирования. C# берет свои истоки в семье языков С и покажется знакомым C, C++ и Java программистам.

Главный архитектор C#, Андерс Хейлсберг (Anders Hejlsberg) , однажды сказал мне, «новые языки начинаются с минус десяти тысяч строчек». Затраты на создание, популяризацию, поддержку и распространение языка настолько велики, что соответствующие выгоды должны быть огромными по сравнению с существующим языком. Таким образом, каждый новый язык — это попытка устранить недостатки своих предшественников, и 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 # при помощи обобщенных типов невозможно переоценить; они наполняют почти каждый аспект как языка, так и его библиотеки времени выполнения и сделали язык таким, каким он является сегодня.

После успешного переноса обобщенных типов, команда разработчиков проверила множество существующего кода. Они обнаружили огромное количество разрозненных технологий управления данными, каждая со своим взаимным несовместимым механизмом сортировки, поиска, группировки, присоединение, и так далее.

Таким образом, основной функцией для 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# более естественным в выражении смысла, определяемого разработчиками.

Будущее C#

На протяжении многих лет Microsoft преобразовывала компилятор C# (и Visual Basic) в «компилятором как сервис», известный под кодовым названием «Рослин» (Roslyn). Вскоре Microsoft предоставит лексические, синтаксические и семантические механизмы анализа, используемые компилятором и средой разработки Visual Studio в качестве документированных, поддерживаемых библиотек. Это окажет два основных эффекта.

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

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

Группа разработчиков C# продолжит пристально следить за главными трендами индустрии. Впереди язык C# ждет большое будущее. Я с нетерпением жду, что произойдет дальше.

Источник: developer-tech.com, 30 января 2014; Автор:Эрик Липперт


Перевод выполнен abv24.com




Опубликовано 04.04.2014 в 11:56 пп · Автор abv24 · Ссылка
Рубрики: Технологии

@Mail.ru