Premium community conference on Microsoft technologies itcampro@ itcamp14#
Look at your code from a
different perspective
...
Premium community conference on Microsoft technologies itcampro@ itcamp14#
Huge thanks to our sponsors & partners!
Premium community conference on Microsoft technologies itcampro@ itcamp14#
• .NET C# and VB compilers totally re-written
–...
Premium community conference on Microsoft technologies itcampro@ itcamp14#
1. Auto-properties initializers
2. Primary cons...
Premium community conference on Microsoft technologies itcampro@ itcamp14#
5. Exception filters
6. Binary literals and dig...
Premium community conference on Microsoft technologies itcampro@ itcamp14#
Why Roslyn is relevant?
• Microsoft perspective...
Premium community conference on Microsoft technologies itcampro@ itcamp14#
Where to start
I want to just try the new comp...
Premium community conference on Microsoft technologies itcampro@ itcamp14#
THE PIPELINE
Premium community conference on Microsoft technologies itcampro@ itcamp14#
The pipeline workflow
• The source is tokenized...
Premium community conference on Microsoft technologies itcampro@ itcamp14#
• Transformation from text to nodes is reversib...
Premium community conference on Microsoft technologies itcampro@ itcamp14#
• Syntax API is represented with these classes:...
Premium community conference on Microsoft technologies itcampro@ itcamp14#
Visual Studio Syntax Tree tool
Premium community conference on Microsoft technologies itcampro@ itcamp14#
Applying the language rules
• The syntax tree r...
Premium community conference on Microsoft technologies itcampro@ itcamp14#
Semantics
• «Semantics is the study of the mean...
Premium community conference on Microsoft technologies itcampro@ itcamp14#
Working with projects and solutions
• Symbolic ...
Premium community conference on Microsoft technologies itcampro@ itcamp14#
Workspaces
var workspace = new CustomWorkspace(...
Premium community conference on Microsoft technologies itcampro@ itcamp14#
Model hierarchy
Host (IDE)
Workspace
Solution v...
Premium community conference on Microsoft technologies itcampro@ itcamp14#
• Roslyn compiler is deterministic
–Same source...
Premium community conference on Microsoft technologies itcampro@ itcamp14#
Questions?
Upcoming SlideShare
Loading in …5
×

The Roslyn Compiler: Look at Your Code from a Different Perspective (Raffaele Rialdi)

713 views

Published on



The Roslyn project is the next generation of C# and VB compilers but paradoxically it is not interesting because of the new features that will come into the next versions of the languages. Microsoft opened the compiler APIs publicly allowing the developers to create programs and tools which takes advantage of the syntactic and semantical analysis of the code.

During the session we will see how the developer can use the compiler APIs to format the sources, compile or understand the code even when it still contains errors. One of the most interesting uses of these APIs is the creation of semantic rules to enforce at compile time like, for example, guidelines or even static business rules.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
713
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

The Roslyn Compiler: Look at Your Code from a Different Perspective (Raffaele Rialdi)

  1. 1. Premium community conference on Microsoft technologies itcampro@ itcamp14# Look at your code from a different perspective twitter: @raffaeler email: raffaeler@vevy.com blog: http://www.iamraf.net The Roslyn compiler:
  2. 2. Premium community conference on Microsoft technologies itcampro@ itcamp14# Huge thanks to our sponsors & partners!
  3. 3. Premium community conference on Microsoft technologies itcampro@ itcamp14# • .NET C# and VB compilers totally re-written –Using C# and VB • Open source under the Apache 2.0 license –https://roslyn.codeplex.com/ • Will be shipped with VS.NET vNext Roslyn aka ".NET Compiler Platform" git repo Usually a new compiler is important because of new language features …
  4. 4. Premium community conference on Microsoft technologies itcampro@ itcamp14# 1. Auto-properties initializers 2. Primary constructors 3. Using static 4. Declaration Expressions Upcoming C#6.0 new features public string Name { get; set; } = “Raf”; public class Dog(string name) { public string Name { get; } = name; } using System.Console; using System.Math; if(double.TryParse(text, out double value)) { … } WriteLine("Hello, world {0}", Max(a, b)); ReadKey();
  5. 5. Premium community conference on Microsoft technologies itcampro@ itcamp14# 5. Exception filters 6. Binary literals and digit separators 7. Indexed members and element initializers 8. Await in catch and finally blocks Upcoming C# 6.0 new features var bits1 = 0b00010001; var bits2 = 0b0001_0001; var hex = 0x00_C6; var dec = 1_234_000; try { … } catch(SomeException e) if(myFilter(e)) { … } customer["first“] = “Raf“; customer.$first = “Raf“; catch(…) { await … } finally { await … }
  6. 6. Premium community conference on Microsoft technologies itcampro@ itcamp14# Why Roslyn is relevant? • Microsoft perspective – Only one compiler engine for both VB and C# – Future evolutions of C# and VB will be easier to implement – Better tooling inside Visual Studio • Visual Studio plugin developers – Better refactoring, coloring, helpers, static analysis, etc. • All the other developers – Using C# and VB as scripting languages – Documentation and code-search via syntactical analysis – Enforcing business rules with custom semantical analysis
  7. 7. Premium community conference on Microsoft technologies itcampro@ itcamp14# Where to start I want to just try the new compiler – Nuget package: Microsoft.Net.ToolsetCompilers – Will use the compiler inside the package itself Tools for developers – Nuget package: Microsoft.CodeAnalysis.CSharp.Workspaces Solutions using Compilers and tools – Nuget package: Microsoft.CodeAnalysis (contains all) Visual Studio templates
  8. 8. Premium community conference on Microsoft technologies itcampro@ itcamp14# THE PIPELINE
  9. 9. Premium community conference on Microsoft technologies itcampro@ itcamp14# The pipeline workflow • The source is tokenized – Syntax analysis using the grammar rules • Recognizing the declarations – Symbols creation to name variables, classes, methods, … • Binding the identifiers with symbols – Retrieve symbolic information from nodes • The code is generated to form the assembly – Generation of the PE file, manifest, IL code, resources, etc. – Note: the APIs for reading/writing these files is marked 'internal' Parsing sources Creating symbols Semantic model IL Emitter
  10. 10. Premium community conference on Microsoft technologies itcampro@ itcamp14# • Transformation from text to nodes is reversible – Full fidelity (comments and alignments as well) • Every syntax tree is immutable and thread-safe – Allow multiple consumers to access concurrently a single tree Parsing the sources … ……
  11. 11. Premium community conference on Microsoft technologies itcampro@ itcamp14# • Syntax API is represented with these classes: – SyntaxTree is the binary form of the source with full fidelity – SyntaxNode represents declarations, statements, clauses and expressions – SyntaxToken identifies the special language tokens like keywords, identifiers, operators or punctuation • They never have children – SyntaxTrivia everything not impacting on the generated IL code such as whitespaces, comments, etc. From sources to syntax tree SyntaxTree tree = CSharpSyntaxTree.ParseText(source); SyntaxNode node = tree.GetRoot(); Debug.Assert(node.CSharpKind() == SyntaxKind.CompilationUnit); var root = (CompilationUnitSyntax)node;
  12. 12. Premium community conference on Microsoft technologies itcampro@ itcamp14# Visual Studio Syntax Tree tool
  13. 13. Premium community conference on Microsoft technologies itcampro@ itcamp14# Applying the language rules • The syntax tree represent only the basic info • The compilation applies the language rules to the syntax tree and extracts the symbols – Symbols are declared namespaces, types, members, variables, etc. • Compilations are immutable too – therefore they are thread-safe SyntaxTree tree = CSharpSyntaxTree.ParseText(source); var compilation = CSharpCompilation.Create("CSharpColorizer", new SyntaxTree[] { tree }, _metadataFileReferences, new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)); var result = compilation.Emit(ms); // optional
  14. 14. Premium community conference on Microsoft technologies itcampro@ itcamp14# Semantics • «Semantics is the study of the meaning» – This translates in "understanding the code" • Semantic info correlates the symbols derived from the syntax tree and accessing: – The exact location in the sources – Warnings and errors – The types returned from an expression – Much more! • SemanticModel is immutable and thread-safe
  15. 15. Premium community conference on Microsoft technologies itcampro@ itcamp14# Working with projects and solutions • Symbolic dependencies may affect even an entire VS Solution –The compiler needs to know about solutions, projects, files • Workspace API entry-points –Workspaces resemble solutions –Projects are, well, projects –Documents are the files subject to compilation
  16. 16. Premium community conference on Microsoft technologies itcampro@ itcamp14# Workspaces var workspace = new CustomWorkspace(); var solution = workspace.CurrentSolution; // the only solution var project = solution.AddProject( "projectName", "assemblyName", LanguageNames.CSharp); var mainDocument = project.AddDocument("fake.cs", source); • Workspaces fire events – On opening/closing documents – When something change in the solution – If an error occurs • Flowchart: – IDE opens & closes the documents, refactors the code, … – Tools receive the events and reacts appropriately • CustomWorkspace allows working on the fly (no IDE) Workspace (Solution) Project Document
  17. 17. Premium community conference on Microsoft technologies itcampro@ itcamp14# Model hierarchy Host (IDE) Workspace Solution v1 Project1 Project2 Project3 Document1 Document2 Text Syntax SemanticModel Tools Solution v2
  18. 18. Premium community conference on Microsoft technologies itcampro@ itcamp14# • Roslyn compiler is deterministic –Same sources  identical binary –Super-important for debugging! • Immutable and thread-safe APIs –Syntax trees, Compilation, SemanticModel, Solution, Project, Document • http://referencesource.microsoft.com/ –Roslyn powered Tips
  19. 19. Premium community conference on Microsoft technologies itcampro@ itcamp14# Questions?

×