Microsoft начинает говорить о своем языке программирования следующего поколения, C # для системного программирования

Значок времени чтения 3 минута. читать


Читатели помогают поддержать MSpoweruser. Мы можем получить комиссию, если вы совершите покупку по нашим ссылкам. Значок подсказки

Прочтите нашу страницу раскрытия информации, чтобы узнать, как вы можете помочь MSPoweruser поддержать редакционную команду. Читать далее

Джо Даффи, архитектор и разработчик исследовательской операционной системы в Microsoft, написал в блоге о языке программирования следующего поколения, над которым они работали последние пару лет. Microsoft теперь описывает этот будущий язык как расширение «системного программирования» для C#. Microsoft пытается представить этот язык как нечто среднее между C#, ориентированным на безопасность и производительность, Java и т. д. и C++, ориентированным на производительность.

Вот 6 важных особенностей языка:

) Пожизненное понимание. В C++ есть RAII, детерминированное разрушение и эффективное выделение объектов. C# и Java уговаривают разработчиков слишком сильно полагаться на кучу GC и предлагают лишь «слабую» поддержку детерминированного уничтожения через IDisposable. Часть того, чем занимается моя команда, — это регулярное преобразование программ C# на этот новый язык, и мы нередко сталкиваемся с тем, что 30–50% времени мы проводим в GC. Для серверов это снижает пропускную способность; для клиентов это ухудшает качество обслуживания, внося задержку во взаимодействие. Мы украли страницу из C++ — в таких областях, как ссылки rvalue, семантика перемещения, уничтожение, ссылки/заимствования — и при этом сохранили необходимые элементы безопасности и объединили их с идеями из функциональных языков. Это позволяет нам агрессивно размещать объекты в стек, детерминированно уничтожать и многое другое.

2) Понимание побочных эффектов. Это развитие того, что мы опубликовали в OOPSLA 2012, предоставляя вам элементы C++ const (но опять же с безопасностью), а также первоклассную неизменяемость и изоляцию.

3) Асинхронное программирование в большом масштабе. Сообщество постоянно обсуждало этот вопрос, а именно, использовать ли сопрограммы с передачей продолжения или облегченные блокирующие сопрограммы. Сюда входит C#, а также почти все остальные языки на планете. Ключевым нововведением здесь является компонуемая система типов, которая не зависит от модели выполнения и может эффективно сопоставляться с любой из них. Было бы самонадеянно утверждать, что у нас есть единственный правильный способ раскрыть эту информацию, но, имея опыт применения многих других подходов, мне нравится то, к чему мы пришли.

4) Типобезопасное системное программирование. Обычно утверждается, что безопасность типов приводит к потере производительности. Это правда, что проверка границ не подлежит обсуждению и что мы предпочитаем проверку переполнения по умолчанию. Удивительно, что здесь может сделать хороший оптимизирующий компилятор по сравнению с JIT-компиляцией. (И достаточно лишь случайно просмотреть некоторые последние бюллетени по безопасности, чтобы понять, почему эти функции заслуживают внимания.) Другие области включают возможность делать больше без выделения ресурсов. Например, API-интерфейсы на основе лямбда-выражений, которые можно вызывать с нулевым выделением ресурсов (вместо обычных двух: один для делегата, другой для отображения). И возможность легко вырезать подмассивы и подстроки без выделения.

5) Современная модель ошибок. Это еще один вопрос, с которым сообщество несогласно. Мы выбрали то, что я считаю оптимальным: контракты повсюду (предусловия, постусловия, инварианты, утверждения и т. д.), отказоустойчивость в качестве политики по умолчанию, исключения для редких динамических сбоев (синтаксический анализ, ввод-вывод и т. д.), и вводите исключения только тогда, когда вам абсолютно необходимы расширенные исключения. Все интегрировано в систему типов первоклассным образом, так что вы получаете все правильное поведение подтипов, необходимое для обеспечения безопасности и надежности.

6) Современные фреймворки. Это всеобъемлющий блок, который охватывает такие вещи, как асинхронный LINQ, улучшенную поддержку перечислителей, которые конкурируют с итераторами C++ по производительности и не требуют диспетчеризации двойного интерфейса для извлечения элементов и т. д. Честно говоря, это та область, которая у нас есть. самый большой список «спроектированных, но еще не реализованных функций», охватывающий такие вещи, как тип void как тип 1-го класса, ненулевые типы, особенности, типизация эффекта 1-го класса и многое другое. Я ожидаю, что на нашем контрольно-пропускном пункте в середине 2014 года будет несколько таких, но не все.

Подробнее читайте по ссылке здесь.

Подробнее о темах: c#, застройщиков, Microsoft