Your SlideShare is downloading. ×
Roslyn - компилятор как сервис
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Roslyn - компилятор как сервис

586
views

Published on

Видео со встречи - http://getdev.net/Event/roslyn …

Видео со встречи - http://getdev.net/Event/roslyn
Roslyn Project - это компилятор, который предоставляет разработчику API для доступа к его внутренним данным. Теперь можно анализировать код, проводить его модификацию и создавать дополнительную функциональность для .NET-языков.


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
586
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Visual Studio – не только компилятор. Лексический, синтаксический и семантический анализ кода также выполняется на лету для подсветки синтаксиса, IntelliSense, автоматического рефакторинга и т.д.
  • REPL - интерактивная среда программирование (скриптовые языки)embedded (or internal) domain-specific languages, implemented as libraries which exploit the syntax of their host general purpose language or a subset thereof, while adding domain-specific language elements (data types, routines, methods, macros etc.).
  • Transcript

    • 1. КОМПИЛЯТОР КАК СЕРВИС СЕРГЕЙ ЗВЯГИН INGATE DEVELOPMENT СПЕЦИАЛЬНО ДЛЯ GetDev.NET
    • 2. Эволюция C# 5.0 + VB 11.0 Windows Runtime + async C# 4.0 + VB 10.0 Dynamic C# 3.0 + VB 9.0 LINQ C# 2.0 + VB 8.0 GenericsC# 1.0 + VB 7.0 Managed Code
    • 3. Компилятор – черный ящик Исходный .NET сборка код Source code Source code Source code Компилятор Source code
    • 4. ПроблемаЛексический, синтаксический исематнический анализ кода выполняетсяещѐ до компиляции программыЭто позволяет подсвечиватькод, применять автоматическийрефакторинг, использовать IntelliSense
    • 5. Решение Class Метапрограммирование Read-Eval-Print Loop public Foo Объектная Field Встраивание DSL модель языка private X string Исходный .NET сборка код Source code Source code Source code Компилятор Source code
    • 6. Roslyn APIs Completion List Extract Method Object Browser Signature Help Navigate To References Quick Info Formatter Definition Outlining Continue Colorizer Edit and Rename Find All Go To Language Service Compiler API Binding and Flow Syntax Tree API Symbol API Emit API Analysis APIs Symbols Compiler Pipeline Parser Binder IL Emitter Metadata Import
    • 7. Roslyn API Layers Editor Services Code Actions Classification Completion Outlining … Code Formatting Find All References Name Simplification … Services APIs Workspace API Syntax Tree Symbol Binding and Flow Scripting Compiler APIs Emit API API API Analysis APIs APIs
    • 8. Syntax Tree API – узлыclass C CompilationUnit{ void M() { TypeDeclaration }}// C MethodDeclaration ParameterList Blockvar tree = SyntaxTree.ParseCompilationUnit("...");
    • 9. Syntax Tree API – токеныclass C CompilationUnit{ void M() { TypeDeclaration EOF }}// C class C { MethodDeclaration } void M ParameterList Block ( ) { }
    • 10. Syntax Tree API – вся информация одеревеclass∙C CompilationUnit{∙∙∙∙void∙M()∙∙∙∙{ TypeDeclaration EOF∙∙∙∙}}// C class SP C EOL { EOL MethodDeclaration } // C EOL SPx4 void SP M ParameterList Block ( ) EOL SPx4 { EOL SPx4 } EOL
    • 11. Syntax Tree API – изменение узла class C CompilationUnit { void M(int x) M() { TypeDeclaration EOF } }// C class C { MethodDeclaration } void M ParameterList Block ( Parameter ( )) { }var oldList = method.ParameterList;var newList = oldList.Update( openParenToken: oldList.OpenParenToken, PredefinedType x parameters: Syntax.SeparatedList( Syntax.Parameter( typeOpt: Syntax.ParseTypeName("int "), int identifier: Syntax.Identifier("x"))), closeParenToken: oldList.CloseParenToken);var newRoot = tree.Root.ReplaceNode(oldList, newList);
    • 12. Компиляция Синтакси- ческое дерево Компиляция • Symbols • Semantic Model • Flow Analysis • Diagnostics Ссылки на • Emit сборки
    • 13. Workspace API Host Environment События (нажатия клавиш) Применение результатов Workspace Solution Solution2 Solutionn Редактирование Compilation Project Project Document Document SyntaxTree
    • 14. Code Actions API Code Action Представление изменения кода• Можно управлять изменением и предпросмотром того, что изменяем Code Issue Отображение исходного кода• Вызывается для любой ноды, токена или сущности• Optional: Можно получить доступ к списку ошибок (Error Window)• Optional: Можно получить доступ к Code Action Code Refactoring Контекстно-зависимые Code Action• Применяются к выделенному блоку кода в окне редактора• Можно получить доступ к Code Action
    • 15. ВОПРОСЫ?
    • 16. СПАСИБО ЗА ВНИМАНИЕ! Сергей Звягин Ingate Development BingoRUS