среда, 26 февраля 2014 г.

Новый язык от Microsoft – M#



По неизвестным причинам, Microsoft решила приоткрыть завесу секретности над своим системым языком программирования M# который основан на принципах C#.

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

Даффи начинает с очевидных вещей:
Первый вопрос: ‘Зачем нужен новый язык?’ Без сомнений в мире уже и без того огромное количество других языков.

Но затем он начинает обосновывать создание нового языка, так же как это делал бы любой другой энтузиаст на его месте. В данном случае речь идет о том что C# прекрасный язык, но он ограничен законом “исключенного третьего” – язык прост и удобен в использовании, но недостаточно производителен.

В качестве аргумента он приводит более быстрые языки, С\С++ и более лекгие в использовании, например JavaScript. Однако помимо быстрого, язык должен быть еще и безопасным для системного программирования, и тут на сцену выходит M#, который базируется на управляемом языке C#. Другими словами, M# спроектирован что бы занять нишу в верхем правом квадрате на представленной диаграмме производительности и безопасности. Обратите внимание что безопасный в данном случае трактуется как безопасный по отношению к работе с памятью, то есть структуры данных не могут переписать другие данные в случае переполнения и вы не сможете ошибочно нарушить доступ к памяти.
 

Разумеется, кто бы не хотел иметь на своем вооружении язык который вобрал в себя все самое лучшее из этих двух миров. Конечно, большинство разработчиков C# попробуют возразить, что их язык также сможет попасть в этот квадрат – достаточно оптимизировать среду выполнения. Разработчики C++ также могут возразить  что C++ можно сделать более безопасным и уж наверняка более производительным чем C#.

Но почему новый язык взял за основу C#?

“Безопасноть типов является немаловажным аспектом который должен присутствовать в языке, a C# представляет собой отличный вариант «современного и типобезопасного С++», который можно взять за основу. Он ближе к нашему идеалу, чем скажем Java, изза наличия таких современных возможностей, как лямбды и делегаты. Конечно, есть и другие хорошие кандидаты, например Rust и D. Но, черт побери, моя команда работает в Microsoft и у нас есть в достатке талантов и сообществ C#, которые находятся на расстоянии вытянутой руки. ”

Это похоже на честный и корректный ответ. Кроме того, и такая точка зрения была озвучена:

В результате наши труды следует рассматривать скорее как набора расширений для C # - с минимальными изменениями - чем как совершенно новый язык”.

Так что, возможно, мы несколько преувеличиваем говоря о M# как о «новом языке». Если я как разработчик C# просто начну использовать некоторые части M# которые мне нужны, то очевидно нельзя сказать что я использую некий новый несовместимый язык.

Также следует отметить что имя M# не фигурирует в публикациях, но история группы, занимающейся созданием нового языка, есть ссылки на то что это и есть новый язык M# который используется в процессе создания новой операционной системы Microsoft, которая носит название Midori. Так что будте готовы к другому названию языка, в конце концов когда нибудь Microsoft расскажет нам о Midori и ее инструментах.

Публикация продолжает давать характеристики языку в самых общих чертах, котоыре можно обобщить следующим образом (можете обратиться к соответсвующей публикации за подробностями) :


Понимание жизненного цикла
Кажется что поскольку язык является безопасным, то он использует управление жизненным циклом C++ и приемы функционального программирования для обеспечения корректной ликвидации объектов, а не коллектор муссора.


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


Масштабы асинхронного программирования
Ключевым новшеством здесь является система типов распознающая модель исполнения, и способная отображать эффективно либо продолжение передачи либо блокировку контекста.


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


Современная модель ошибок
Повсеместные контракты (предусловия, постусловия, инвариатны, ассерты и т.д.) политика по умолчанию fail-fast, исключения для редких динамических ошибок (ввод/вывод, парсинг и т.д.) и типизированные исключения только в случае если вам действительно необходима подробная информация об ошибке. Все это интегрировано в систему типов в первичном классе, таким образом у всех наследников уже имеется требуемое поведение, делающее код безопасным и эффектвным.


Современные фреймворки
Полный набор, содержащий ткие вещи как асинхронный LINQ и улучшенный енумератор.


Напоследок, новый язык был реализован как часть компилятора Roslyn в виде сервис модели, котрая в данный момент развернута для C# и других управляемых языков программирования. Думаю мы можем ожидать что в 2014 что то произойдет и язык станет открытым.


Что интересно, M# является первым реальным знаком, что Microsoft не планирует полностью отказываться от идеи управляемого кода. Недавнее переориентирование компании на HTML/JavaScript и разработку на C++с приставкой “вы можете это делать также на C#”. Хотя M# и является языком для будущей операционной системы, он может также обозначать возврат к вере в будущее управляемого кода, что и нужно большинству программистов.


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