project roslyn:
DESCRIPTION
Project Roslyn:. the compiler is at your service. Joe Hummel, PhD @ joehummel [email protected] http://www.joehummel.net/downloads.html. Chicago Code Camp 2014. Joe Hummel, PhD Professor:U. of Illinois, Chicago Consultant:Joe Hummel, Inc. Trainer: Pluralsight Microsoft MVP C++ - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/1.jpg)
Joe Hummel, PhD
http://www.joehummel.net/downloads.html
Project Roslyn:the compiler is at your service
Chicago Code Camp 2014
![Page 2: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/2.jpg)
2Project Roslyn
Joe Hummel, PhD Professor: U. of Illinois, Chicago Consultant: Joe Hummel, Inc. Trainer: Pluralsight Microsoft MVP C++
Chicago-based, one daughter adopted from China (now 12!) Avid sailor
Chicago Code Camp 2014
![Page 3: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/3.jpg)
3Project Roslyn
Demo!
Chicago Code Camp 2014
![Page 4: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/4.jpg)
4Project Roslyn
What is Project Roslyn?
The ".NET Compiler Platform" Replacement of existing .NET compilers with new ones
csc for C# vbc for VB.NET
Chicago Code Camp 2014
class C{ . . .}
class C{ . . .}
class C{ . . .}
000101010101010101010101010
csc
![Page 5: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/5.jpg)
5Project Roslyn
Why is this a big deal? Risky
if they get this wrong, folks can't build their apps if they get this wrong, MSFT can't build their apps
Chicago Code Camp 2014
![Page 6: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/6.jpg)
6Project Roslyn
What's the benefit?
Faster turnaround on new features inside and outside MSFT
Grow the Visual Studio ecosystem MUCH easier to build new tools MUCH easier to extend Visual Studio, C# and VB MUCH easier to try out new ideas
Chicago Code Camp 2014
![Page 7: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/7.jpg)
7Project Roslyn
Status preview release open source! http://roslyn.codeplex.com
Chicago Code Camp 2014
![Page 8: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/8.jpg)
8Project Roslyn
Open source? Yes, open source!
Apache license 2.0 You are free to GIT, fork, modify, rebuild, deploy Anders did this on stage @ Build 2014
Chicago Code Camp 2014
![Page 9: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/9.jpg)
9Project Roslyn
Before Roslyn…
Chicago Code Camp 2014
![Page 10: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/10.jpg)
10Project Roslyn
C# and VB compilers were black boxes predefined switches only way to interact…
Chicago Code Camp 2014
csc
> csc.exe main.cs /o /warn:4
![Page 11: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/11.jpg)
11Project Roslyn
After Roslyn…
Chicago Code Camp 2014
![Page 12: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/12.jpg)
12Project Roslyn
The compilers are now white boxes You can:
obtain information about a program modify a program syntactically / semantically impact the compilation process change the compiler itself!
Chicago Code Camp 2014
cscRoslyn
![Page 13: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/13.jpg)
13Project Roslyn
Chicago Code Camp 2014
csc
"Call me every time you see an identifier…" (because I'm renaming all global variables)
"Emit this code instead…" (I'm targeting specific HW)
// translate resource strings:foreach(Project p) foreach(Document d) foreach(Resource r) replace(r, r');
Roslyn
![Page 14: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/14.jpg)
14Project Roslyn
What can we do with this capability? Infinite possibilities:
better tools — refactoring, analysis, … better enforcement of coding standards add scripting support to your app target new platforms language research — DSLs, … compiler research …
Chicago Code Camp 2014
?
![Page 15: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/15.jpg)
15Project Roslyn
Compiler Basics…
Chicago Code Camp 2014
![Page 16: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/16.jpg)
16Project Roslyn
Front-end vs. Back-end Front-end deals with syntax ― "grammar"
Back-end deals with semantics ― "meaning"
Chicago Code Camp 2014
![Page 17: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/17.jpg)
17Project Roslyn
Chicago Code Camp 2014
Sourcelanguage
Parsing
Assemblylanguage
Lexical Analysis Compiler
Semantic Analysis
High-level Optimizer Code Gen
Low-level Optimizer
tokens
IR IR' IR''
IR'''
// commentif (x>100) x = 100;
if, (, x, >, 100, ), x, =, …
Typical Compiler Phases
lexical analysisparsing
semantic analysisHL optimizer
code genLL optimizer
syntaxerrors
semanticerrors
![Page 18: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/18.jpg)
18Project Roslyn
Roslyn Intermediate Representation (IR) Abstract Syntax Tree (AST)
Symbol Table
Chicago Code Camp 2014
+
GCD program
0 "int", type, …
1 "void", type, …
2 …
3 "getint", funct, type: 0, …
4 "putint", funct, type: 1, …
5 "i", var, type: 0, …
6 "j", var, type: 0, …
… …
![Page 19: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/19.jpg)
19Project Roslyn
How to learn Roslyn AST? Use the Roslyn Syntax Visualizer!
Open a project Open a source file View menu…
>> Other Windows >> Roslyn Syntax Visualizer
Chicago Code Camp 2014
![Page 20: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/20.jpg)
20Project Roslyn
Working with Roslyn…
Chicago Code Camp 2014
![Page 21: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/21.jpg)
21Project Roslyn
Roslyn is BIG There are many APIs… There is the source code itself…
Chicago Code Camp 2014
+
![Page 22: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/22.jpg)
22Project Roslyn
Start small Let’s create a simple diagnostic that warns
about empty catch blocks…
Chicago Code Camp 2014
![Page 23: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/23.jpg)
23Project Roslyn
Step 1: Create new project…
>> Roslyn >> Diagnostic with Code Fix
Name >> EmptyCatchDiagnostic
Chicago Code Camp 2014
![Page 24: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/24.jpg)
24Project Roslyn
Step 2: Create Syntax Node Analyzer
to detect empty catches
Chicago Code Camp 2014
public class DiagnosticAnalyzer : ISyntaxNodeAnalyzer<SyntaxKind>{
.
.
.
public ImmutableArray<SyntaxKind> SyntaxKindsOfInterest{
get { return ImmutableArray.Create( SyntaxKind.CatchClause ); }
}
// only called for things of interest:public void AnalyzeNode(SyntaxNode node, ...){
var catchBlock = node as CatchClauseSyntax;
if (catchBlock.Block.Statements.Count == 0) // empty!{
var diagnostic = Diagnostic.Create(...); // create warning:
addDiagnostic(diagnostic); // display:}
}
![Page 25: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/25.jpg)
25Project Roslyn
Step 3: Create Code Fix Provider
to optionally correct problem…
Chicago Code Camp 2014
internal class CodeFixProvider : ICodeFixProvider{
.
.
// only called for things of interest:public async Task<…> GetFixesAsync(Document document, ...){
var root = await document.GetSyntaxRootAsync(cancellationToken);
var token = root.FindToken(span.Start); // catch keyword:
if (!token.IsKind(SyntaxKind.CatchKeyword)) // sanity check:return null;
var catchBlock = (CatchClauseSyntax)token.Parent;var throwStmt = SyntaxFactory.ThrowStatement();var newStmts = new
SyntaxList<StatementSyntax>().Add(throwStmt);var newBlock =
SyntaxFactory.Block().WithStatements(newStmts);var newCatchBlock = SyntaxFactory.CatchClause().
WithBlock(newBlock).WithAdditionalAnnotations(Formatter.Annotation);
var newRoot = root.ReplaceNode(catchBlock, newCatchBlock);
return new[] { CodeAction.Create("throw", document.WithSyntaxRoot(newRoot)) };
}
![Page 26: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/26.jpg)
26Project Roslyn
Step 4: Run! A .vsix installer is built A new instance of VS is started The .vsix is installed Open a project and test…
Chicago Code Camp 2014
![Page 27: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/27.jpg)
27Project Roslyn
Installing & Using Roslyn…
Chicago Code Camp 2014
![Page 28: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/28.jpg)
28Project Roslyn
Caveats! You will be *replacing* your C# and VB compilers
Are you sure?
Scripting support is currently missing i.e. using Roslyn to add C# / VB scripting to your app MSFT is "re-evaluating design"
Chicago Code Camp 2014
![Page 29: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/29.jpg)
29Project Roslyn
Download "End User Preview / SDK Preview"1. http://msdn.microsoft.com/en-gb/roslyn2. Get the Preview
Chicago Code Camp 2014
![Page 30: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/30.jpg)
30Project Roslyn
Unzip SDK Install:
1. End User Preview2. Project Templates3. Syntax Visualizer4. Roslyn Experimental Hive
Chicago Code Camp 2014
![Page 31: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/31.jpg)
31Project Roslyn
Install Microsoft Visual Studio 2013 SDK
Chicago Code Camp 2014
![Page 32: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/32.jpg)
32Project Roslyn
Summary…
Chicago Code Camp 2014
![Page 33: Project Roslyn:](https://reader036.vdocuments.mx/reader036/viewer/2022062501/56816455550346895dd62242/html5/thumbnails/33.jpg)
33Project Roslyn
Thank you for attending! Joe Hummel, PhD Email: [email protected] Materials: http://www.joehummel.net/downloads.html
For more information on Roslyn: Docs / FAQ:
http://roslyn.codeplex.com/documentation
Build 2014 on Channel 9 The Future of C# https://channel9.msdn.com/Events/Build/2014/2-577
Chicago Code Camp 2014