Pull to refresh

Введение в Microsoft “Roslyn” CTP

.NET *C# *
Translation
Original author: Kirill Osenkov

Почему Roslyn?


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

Как пишет Soma в своём блоге, часть Visual Studio language team работает на проектом, который называется Roslyn. Его главная цель — переписать компиляторы C# и VB и создать языкове сервисы в управляемом коде. С чистым, современным и управляемым кодом наша команда сможет быть более продуктивной, внедрять инновации быстрее и выдавать больше возможностей скорее и с лучшим качеством.

Более того, мы открываем компиляторы C# и VB со всей их внутренней информацией, делая доступным для вас анализ кода. Мы предоставляем публичное API и обеспечиваем точки расширения в языковых сервисах C# и VB.

Это открывает новые возможности для расширений VisualStudio — написание мощных инструментов рефакторинга и утилит языкового анализа, а так же позволит любому использовать наши парсеры, семантические движки, генераторы кода и сценариев в своих проложениях.

Скачивание October 2011 CTP


CTP и вспомогательные материалы можно скачать по адресу: http://msdn.com/roslyn.

Главная цель ранней предварительной сборки — сбор отзывов о конструкции API и введение интерактивного C#-окна (так же известного, как REPL, Read-Eval-Print-Loop).

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

CTP устанавливается на Visual Studio 2010 SP1. Так же необходимо Visual Studio 2010 SP1 SDK.

Первые шаги


После успешной установки лучшее место начать работу — это открытие Start Menu -> Microsoft Codename Roslyn CTP -> Getting Started.

Для начала работы документ “Roslyn Project Overview” позволит обзорно взглянуть на предоставляемое API — как работать с синтаксисом и семантикой в вашей программе. Прилагается несколько руководств, которые обеспечат глубокое погружение в различные аспекты Roslyn API.

CTP поставляется с некоторым количеством примеров для Visual Studio Extensions, компиляторами API, инструментами рефакторинга и т.д. Большинство примеров предназначено для C# и Visual Basic. Вы можете открыть исходный код примеров с Getting Started page.

Мы также добавили несколько новых шаблонов проектов, доступных в диалогом окне New Project:


Эти шаблоны помогут вам начать создавать новые расширения для Visual Studio, используя Roslyn.

Reference Assemblies



Сборки Roslyn также инсталлируются в GAC. Переключение к Full Profile (вместо Client Profile) делает возможным так же ссылки на Servies assemblies (которые содержат поддержку IDE).

C# Interactive window



Вы можете вызвать C# Interactive window с помощью View -> Other Windows -> C# Interactive Window. Интерактивное окно работает на новых языковых сервисах C#. Архитектура Roslyn является достаточно гибкой, чтобы обеспечить одинаковую работу таких функций IDE, как IntelliSense и рефакторинг в обычном редакторе и в интерактивном окне.

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

Поддержка C# Script File (.csx)


В CTP вводится концепт скриптовых C#-файлов. Вы можете создать .csx-файл через File -> New File (или в любом текстовом редакторе, например, блокноте):


Вы можете запускать скрипты, используя новый rcsi.exe, который инсталлируется в %ProgramFiles(x86)%\Microsoft Codename Roslyn CTP\Binaries\rcsi.exe. Вы можете добавлять rcsi.exe к пути и печатать rcsi scriptfilename>.csx.

Вы можете также копировать куски кода из скриптового файла и отправлять их в интерактивное окно (используя контекстное меню или горячие клавиши).

Редактор скриптовых файлов также сделан на новых языковых сервисах. Поэтому важно иметь ввиду, что .csx скрипты поддерживают только ту часть языка, которая уже реализована в Roslyn-компиляторе. Для более подробной информации можно посмотреть раздел «Introduction to Scripting» пошагового руководства.

Быстрые примеры использования Roslyn API


Это пример компилирования и выполнения маленькой программы, использующей Roslyn API:
using Roslyn.Compilers;
using Roslyn.Compilers.CSharp;
 

 
var text = @"class Calc { public static object Eval() { return 42; } }";
 
var tree = SyntaxTree.ParseCompilationUnit(text);
var compilation = Compilation.Create(
    "calc.dll",
    options: new CompilationOptions(assemblyKind: AssemblyKind.DynamicallyLinkedLibrary),
    syntaxTrees: new[] { tree },
    references: new[] { new AssemblyFileReference(typeof(object).Assembly.Location) });
 
Assembly compiledAssembly;
using (var stream = new MemoryStream())
{
    EmitResult compileResult = compilation.Emit(stream);
    compiledAssembly = Assembly.Load(stream.GetBuffer());
}
 
Type calc = compiledAssembly.GetType("Calc");
MethodInfo eval = calc.GetMethod("Eval");
string answer = eval.Invoke(nullnull).ToString();
 
Assert.AreEqual("42", answer);


Примечание: на данном этапе только часть возможностей языка была реализована в текущем CTP. Мы движемся вперёд в быстром темпе, но такие функции, как LINQ-запросы, атрибуты, события, dynamic, async ещё не реализованы. Для просмотра полного списка не реализованных вещей вы можете посетить Roslyn forums.

Хотя не все возможности языка поддерживаются, форма публичного API в большей степени заполнена. Поэтому мы советуем вам писать расширения и утилиты, использующих Syntax, Symbols, and Flow and Region Analysis APIs.

Мы очень рады предложить вам ранний предварительный просмотр этой технологии и будем рады отзывам, идеям и предложениям. Используйте форумы, чтобы задать вопросы и обеспечить обратную связь, Microsoft Connect для регистрации ошибок и предложений. Вы так же можете использовать хештег #RoslynCTP на твиттере.
Tags:
Hubs:
Total votes 51: ↑41 and ↓10 +31
Views 33K
Comments Comments 13