Joe Hummel, the compiler is at your service Chicago Coder Conference, June 2016.

Slides:



Advertisements
Similar presentations
Compilers Course 379K, TTH 9:30-11:00 Instructor: Dr. Doron A. Peled Office Hours: Mon 11:00-12:00.
Advertisements

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property.
1 Pass Compiler 1. 1.Introduction 1.1 Types of compilers 2.Stages of 1 Pass Compiler 2.1 Lexical analysis 2.2. syntactical analyzer 2.3. Code generation.
The Java Programming Language
WPSM Programming Language A simple language that transform simple data structure into complex xML format Wai Y. Wong Peter Chen Seema Gupta Miqdad Mohammed.
Chapter3: Language Translation issues
Reference Book: Modern Compiler Design by Grune, Bal, Jacobs and Langendoen Wiley 2000.
About the Presentations The presentations cover the objectives found in the opening of each chapter. All chapter objectives are listed in the beginning.
CS 153: Concepts of Compiler Design August 25 Class Meeting Department of Computer Science San Jose State University Fall 2014 Instructor: Ron Mak
Building An Interpreter After having done all of the analysis, it’s possible to run the program directly rather than compile it … and it may be worth it.
1.3 Executing Programs. How is Computer Code Transformed into an Executable? Interpreters Compilers Hybrid systems.
A Deep Look at Building Custom Tools on the Microsoft Visual Studio Shell Quan To Program Manager, VS Ecosystem Microsoft Corporation.
Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 10: Compiler I: Syntax Analysis slide 1www.idc.ac.il/tecs.
COP4020 Programming Languages
Chapter 1. Introduction.
Chapter 1 Introduction Dr. Frank Lee. 1.1 Why Study Compiler? To write more efficient code in a high-level language To provide solid foundation in parsing.
Chapter 1: A First Program Using C#. Programming Computer program – A set of instructions that tells a computer what to do – Also called software Software.
1 Programming Languages Tevfik Koşar Lecture - II January 19 th, 2006.
CSC 338: Compiler design and implementation
Compiler course 1. Introduction. Outline Scope of the course Disciplines involved in it Abstract view for a compiler Front-end and back-end tasks Modules.
CS 326 Programming Languages, Concepts and Implementation Instructor: Mircea Nicolescu Lecture 2.
CST320 - Lec 11 Why study compilers? n n Ties lots of things you know together: –Theory (finite automata, grammars) –Data structures –Modularization –Utilization.
D. M. Akbar Hussain: Department of Software & Media Technology 1 Compiler is tool: which translate notations from one system to another, usually from source.
Joe Hummel, PhD Microsoft MVP Visual C++ Technical Staff: Pluralsight, LLC Professor: U. of Illinois, Chicago stuff:
Joe Hummel, the compiler is at your service Chicago Code Camp 2014.
Unit-1 Introduction Prepared by: Prof. Harish I Rathod
1.  10% Assignments/ class participation  10% Pop Quizzes  05% Attendance  25% Mid Term  50% Final Term 2.
CS 152: Programming Language Paradigms April 2 Class Meeting Department of Computer Science San Jose State University Spring 2014 Instructor: Ron Mak
COP 4620 / 5625 Programming Language Translation / Compiler Writing Fall 2003 Lecture 1, 08/28/03 Prof. Roy Levow.
1. 2 Preface In the time since the 1986 edition of this book, the world of compiler design has changed significantly 3.
1 Compiler Design (40-414)  Main Text Book: Compilers: Principles, Techniques & Tools, 2 nd ed., Aho, Lam, Sethi, and Ullman, 2007  Evaluation:  Midterm.
The Functions and Purposes of Translators Syntax (& Semantic) Analysis.
. n COMPILERS n n AND n n INTERPRETERS. -Compilers nA compiler is a program thatt reads a program written in one language - the source language- and translates.
Compiler Design Introduction 1. 2 Course Outline Introduction to Compiling Lexical Analysis Syntax Analysis –Context Free Grammars –Top-Down Parsing –Bottom-Up.
The Model of Compilation Natawut Nupairoj, Ph.D. Department of Computer Engineering Chulalongkorn University.
1 Compiler & its Phases Krishan Kumar Asstt. Prof. (CSE) BPRCE, Gohana.
Joe Hummel, the compiler is at your service SDC Meetup, Sept 2014.
Cross Language Clone Analysis Team 2 February 3, 2011.
04 |Sharing Code Between Windows 8 and Windows Phone 8 in Visual Studio Ben Riga
Compiler Construction CPCS302 Dr. Manal Abdulaziz.
CSC 4181 Compiler Construction
LECTURE 3 Compiler Phases. COMPILER PHASES Compilation of a program proceeds through a fixed series of phases.  Each phase uses an (intermediate) form.
CS412/413 Introduction to Compilers Radu Rugina Lecture 11: Symbol Tables 13 Feb 02.
©SoftMoore ConsultingSlide 1 Structure of Compilers.
ICS312 Introduction to Compilers Set 23. What is a Compiler? A compiler is software (a program) that translates a high-level programming language to machine.
CSC 8505 Compiler Construction
COP4020 Programming Languages Introduction Prof. Robert van Engelen (modified by Prof. Em. Chris Lacher)
Barbara Doyle Jacksonville University What’s New with Visual Studio and C#?
Integrating and Extending Workflow 8 AA301 Carl Sykes Ed Heaney.
C# 5.0 Alex Davies 22 nd December What we will cover C# 5.0,.NET 4.5, Visual Studio 11 Caller Info Attributes Upgrade from synchronous to asynchronous.
Objective of the course Understanding the fundamentals of the compilation technique Assist you in writing you own compiler (or any part of compiler)
Toni Petrina Microsoft MVP for C# Ekobit d.o.o. Controlling and extending development environment.
Open Source Compiler Construction (for the JVM)
Lecture 9 Symbol Table and Attributed Grammars
Advanced Computer Systems
Compiler Design (40-414) Main Text Book:
CS 341 : Programming Languages
CS 3304 Comparative Languages
Lexical and Syntax Analysis
CS 326 Programming Languages, Concepts and Implementation
Introduction to Parsing (adapted from CS 164 at Berkeley)
CS 536 / Fall 2017 Introduction to programming languages and compilers
VISUAL BASIC.
Lecture 15 (Notes by P. N. Hilfinger and R. Bodik)
CSE401 Introduction to Compiler Construction
DotnetConf 12/3/2018 1:48 AM © 2016 Microsoft Corporation. All rights reserved. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE.
Compilers B V Sai Aravind (11CS10008).
COP4020 Programming Languages
Compiler design.
Microsoft Ignite NZ October 2016 SKYCITY, Auckland.
Presentation transcript:

Joe Hummel, the compiler is at your service Chicago Coder Conference, June 2016

 Joe Hummel, PhD  Professor:U. of Illinois, Chicago  Consultant:Joe Hummel, Inc.  Trainer:Pluralsight  Microsoft MVP Visual C++  Chicago-based, one daughter adopted from China (now 14!)  Avid Lake Michigan sailor Chicago Coder Conf Project Roslyn

Chicago Coder Conf Project Roslyn

 What is Project Roslyn?  The ".NET Compiler Platform"  Replacement of previous.NET compilers with new ones  csc for C#  vbc for VB.NET Chicago Coder Conf Project Roslyn csc

 Risky  if Microsoft gets this wrong, they break a lot of code --- including their own Chicago Coder Conf Project Roslyn

 So why did Microsoft do this?  Open up the compiler  Now folks can…  Extend C# and VB with new features  Target other platforms --- e.g. Raspberry PI?  Take advantage of the rich information the compiler has about programs --- e.g. better refactoring, analysis, testing? Chicago Coder Conf Project 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 Coder Conf Project Roslyn

 Status  Integrated into Visual Studio 2015  Additional.NET Compiler Platform SDK  Shipped as a VS extension  Chicago Coder Conf Project Roslyn

 Open source?  Yes, open source!  Apache license 2.0  You are free to GIT, fork, modify, rebuild, deploy  Anders released on Build 2014 Chicago Coder Conf Project Roslyn

Chicago Coder Conf Project Roslyn

 C# and VB compilers were black boxes  predefined switches only way to interact… Chicago Coder Conf Project Roslyn csc > csc.exe main.cs /o /warn:4

Chicago Coder Conf Project 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! 13 Chicago Coder Conf 2016 Project Roslyn csc Roslyn

 Roslyn APIs Chicago Coder Conf June Project Roslyn

15 Chicago Coder Conf 2016 Project Roslyn 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 project resource strings: foreach(Project p) foreach(Document d) foreach(Resource r) replace (r, r'); // translate project resource strings: foreach(Project p) foreach(Document d) foreach(Resource r) replace (r, r'); Roslyn

 Many of the features in Visual Studio are driven by Roslyn… Chicago Coder Conf June Project Roslyn

 What can we do with this capability?  Infinite possibilities:  better tools — refactoring, analysis, …  better enforcement of coding standards  integrate C# / VB into your app  target new platforms  language research — DSLs, …  compiler research …… Chicago Coder Conf Project Roslyn ? ?

Chicago Coder Conf Project Roslyn

 Front-end vs. Back-end  Front-end deals with syntax ― "grammar"  Back-end deals with semantics ― "meaning" Chicago Coder Conf Project Roslyn

Chicago Coder Conf Project Roslyn Source language Parsing Assembly language Lexical Analysis Compiler Semantic Analysis High-level Optimizer Code Gen Low-level Optimizer tokens IRIR'IR'' IR''' // comment if (x>100) x = 100; // comment if (x>100) x = 100; if, (, x, >, 100, ), x, =, … syntax errors semantic errors

 Roslyn Intermediate Representation (IR)  Abstract Syntax Tree (AST)  Symbol Table Chicago Coder Conf Project Roslyn + 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, … ……

 How to learn Roslyn AST?  Use the Roslyn Syntax Visualizer!  Install.NET Compiler Platform SDK  Open a project  Open a source file  View menu… >> Other Windows >> Syntax Visualizer Chicago Coder Conf Project Roslyn

Chicago Coder Conf Project Roslyn

 Roslyn is BIG  There are many APIs…  There is the source code itself… Chicago Coder Conf Project Roslyn +

 Start small  Let’s create a simple diagnostic that warns about empty catch blocks… Chicago Coder Conf Project Roslyn

 Step 1:  Install.NET Compiler Platform SDK  Create new project… >> Extensibility >> Diagnostic with Code Fix  Name >> EmptyCatchDiagnostic Chicago Coder Conf Project Roslyn `

 Step 2:  Create Analyzer to detect empty catch blocks Chicago Coder Conf Project Roslyn public class CatchBlockDiagnosticAnalyzer : DiagnosticAnalyzer {. public override void Initialize(AnalysisContext context) { context.RegisterSyntaxNodeAction (AnalyzeNode, SyntaxKind.CatchClause); } // only called for things of interest: public void AnalyzeNode(SyntaxNodeAnalysisContext context) { var node = context.Node; var catchBlock = node as CatchClauseSyntax; if (catchBlock.Block.Statements.Count == 0) // empty! { var diagnostic = Diagnostic.Create(...); // create warning: context.ReportDiagnostic(diagnostic); // display: } public class CatchBlockDiagnosticAnalyzer : DiagnosticAnalyzer {... public override void Initialize(AnalysisContext context) { context.RegisterSyntaxNodeAction (AnalyzeNode, SyntaxKind.CatchClause); } // only called for things of interest: public void AnalyzeNode(SyntaxNodeAnalysisContext context) { var node = context.Node; var catchBlock = node as CatchClauseSyntax; if (catchBlock.Block.Statements.Count == 0) // empty! { var diagnostic = Diagnostic.Create(...); // create warning: context.ReportDiagnostic(diagnostic); // display: } }

 Step 3:  Create Code Fix Provider to optionally correct problem… Chicago Coder Conf Project Roslyn internal class CatchBlockDiagnosticCodeFixProvider : CodeFixProvider { // only called for things of interest: public … async Task RegisterCodeFixesAsync(CodeFixContext context) { var root = await context.Document.GetSyntaxRootAsync(…); var diagnostic = context.Diagnostics.First(); var diagnosticSpan = diagnostic.Location.SourceSpan; var catch = root.FindToken(…).Parent.AncestorsAndSelf(). OfType.First(); context.RegisterCodeFix(CodeAction.Create("throw", c => UpdateCatchBlock(context.Document, catch, c)), diagnostic); } private async Task UpdateCatchBlock(Document doc, …) { var throwStmt = SyntaxFactory.ThrowStatement(); var newStmts = new SyntaxList ().Add(throwStmt); var newBlock = SyntaxFactory.Block().WithStatements(newStmts); var newCatchBlock = SyntaxFactory.CatchClause(). WithBlock(newBlock). WithAdditionalAnnotations(Formatter.Annotation); var root = await document.GetSyntaxRootAsync(); var newRoot = root.ReplaceNode(catchBlock, newCatchBlock); var newDocument = document.WithSyntaxRoot(newRoot); return newDocument; } internal class CatchBlockDiagnosticCodeFixProvider : CodeFixProvider { // only called for things of interest: public … async Task RegisterCodeFixesAsync(CodeFixContext context) { var root = await context.Document.GetSyntaxRootAsync(…); var diagnostic = context.Diagnostics.First(); var diagnosticSpan = diagnostic.Location.SourceSpan; var catch = root.FindToken(…).Parent.AncestorsAndSelf(). OfType.First(); context.RegisterCodeFix(CodeAction.Create("throw", c => UpdateCatchBlock(context.Document, catch, c)), diagnostic); } private async Task UpdateCatchBlock(Document doc, …) { var throwStmt = SyntaxFactory.ThrowStatement(); var newStmts = new SyntaxList ().Add(throwStmt); var newBlock = SyntaxFactory.Block().WithStatements(newStmts); var newCatchBlock = SyntaxFactory.CatchClause(). WithBlock(newBlock). WithAdditionalAnnotations(Formatter.Annotation); var root = await document.GetSyntaxRootAsync(); var newRoot = root.ReplaceNode(catchBlock, newCatchBlock); var newDocument = document.WithSyntaxRoot(newRoot); return newDocument; }

 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 Coder Conf Project Roslyn

Chicago Coder Conf Project Roslyn

 Roslyn compilers are part of Visual Studio 2015  You’ll also want.NET Compiler Platform SDK  Visual Studio extension  Tools >> Updates and Extensions Chicago Coder Conf Project Roslyn

Chicago Coder Conf Project Roslyn

 Thank you for attending!  Joe Hummel, PhD   Materials:  For more information on Roslyn:  MSDN:  “C# - Adding a Code Fix to Your Roslyn Analyzer”, by Alex Turner, Feb 2015  Docs / FAQ:    Microsoft’s Channel 9 Chicago Coder Conf Project Roslyn