Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
robinsedlaczek
robinsedlaczek.wordpress.com
Über mich
 CTO der Fairmas GmbH in Berlin
Zuständig für den gesamten Entwicklungsbereich
Softwarearchitektur
Implementier...
 #SpeakRoslyn bald in der MVA!
 Microsoft Virtual Academy
Kostenlose Online-Trainings für Entwickler und IT Professional...
#SpeakRoslyn – Mach mit!
 Kommentaren, Feedback, Kritiken
 Foto #SpeakRoslyn
Über Tweets mit…
würde ich mich sehr freuen...
01 | Überblick
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
robinsedlaczek
robinsedlaczek.wordpress.com
Die Compiler-Blackbox
 Compiler sind klassisch gesehen Blackboxes
 Geschlossene Softwarekomponenten
 Übersetzen Quellco...
Das Problem mit der Blackbox
 tiefes Verständnis des Codes während Übersetzung
 Wissen, dass von IDEs und Werkzeugen gen...
Lösung des Problems
 Aufbrechen der Blackbox
 Bereitstellung einer API-Schicht über dem Compiler
 Bereitstellung der Co...
Vorteile/Nutzen
 Zugriff auf Compiler-Wissen zu jeder Zeit
 Code-bezogenen Aufgaben in eigenen Anwendungen
 Codetransfo...
Open Source
 Roslyn ist Open Source!
https://github.com/dotnet/roslyn
 Verwaltet von der .NET Foundation
http://www.dotn...
Visual Studio
 Auf Roslyn basierte C#/VB-Sprachfeatures und IDE-Features ab Visual
Studio 2015 enthalten
 Projektvorlage...
02 | Grundlagen
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
robinsedlaczek
robinsedlaczek.wordpress.com
Was tut ein Compiler?
 Übersetzt z.B. VB.NET, C# nach IL Code, C# nach Maschinencode (.NET Native),
C/C++ in Maschinencod...
Fragen
 Aber wie genau macht der Compiler das?
 Wie kann der Compiler eine einfache Textdatei inhaltlich verstehen?
 Wi...
Aufbau eines Compilers
Vorweg, ein kleiner Exkurs…
Aufbau der Blackbox…
robinsedlaczek
robinsedlaczek.wordpress.com
Natürliche vs. Formale Sprachen
 Natürliche Sprachen leben
 Akzente/Dialekte
 Grammatik/Regeln werden nicht
strikt befo...
Was sind formale Sprachen?
 Mathematische Beschreibung einer Sprache
 Alphabet + Wortbildungsregeln
 Werden durch Zusta...
Definition formale Sprache
 Mathematische Beschreibung = formale Grammatik
V = nicht-terminale Zeichen
Σ = terminale Zeic...
Beispiel formale Sprache
Die Sprache beinhaltet Bedingungsanweisungen. Diese können verschachtelt sein.
Bedingungsanweisun...
V = { expr, condition, left, right }
Σ = { id, if, (, ), {, }, true, false, == }
R = {
expr  if (condition) { expr },
con...
 Formales Beschreiben von Textstrukturen (Grammatik)
 Programmiersprachen
 Textstrukturen können mit Algorithmus erkann...
Beispiel formale Sprache
expr
conditionif (
AST
(Abstract Syntax Tree)
) { }expr
Start: expr
 if (condition) { expr }
 i...
 Textstrukturen (Syntax) als Baumstruktur darstellbar
 Analyse und Auswertung des Baums
 Syntaxanalyse
 Tiefes Verstän...
Aufbau eines Compilers
Zerlegen des
Quelltextes in Tokens
Parsen der Tokens in
die Syntax, die von
der Grammatik
vorgegebe...
 Aufbau des Codes
 Strukturen, Klassen, Aufzählungen
 Methoden, Eigenschaften, Variablen
 Bedingungen, Schleifen
 …
S...
Syntaxanalyse
Was weiß der Compiler bisher nicht?
public virtual void Initialize(int count)
{
particles.Clear();
for (int ...
Symboltabelle
 Deklarationen analysieren
Symbole
/// <summary>
/// This is the base class for all
/// shaders (vertex and...
Binder
Symboltabelle
/// <summary>
/// This is the base class for all
/// shaders (vertex and fragment). It
/// offers fun...
Aufbau eines Compilers
Zerlegen des
Quelltextes in Tokens
Parsen der Tokens in
die Syntax, die von
der Grammatik
vorgegebe...
Aufbau eines Compilers
Zerlegen des
Quelltextes in Tokens
Parsen der Tokens in
die Syntax, die von
der Grammatik
vorgegebe...
03 | APIs
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
APIs
 Compiler APIs
 Workspace APIs
robinsedlaczek
robinsedlaczek.wordpress.com
APIs – Compiler Services robinsedlaczek
robinsedlaczek.wordpress.com
APIs – Compiler Services
 Compiler API
- Sprachspezifische Objektmodelle für alle Phasen der Kompilierung
- Unveränderlic...
APIs - Workspaces robinsedlaczek
robinsedlaczek.wordpress.com
APIs – Workspaces robinsedlaczek
robinsedlaczek.wordpress.com
APIs – Workspaces
 Objektmodell zur Darstellung einer Solution
 Einstiegspunkt für Solution-weite Analysen und Refactori...
APIs - Namespaces
 Microsoft.CodeAnalysis.dll
 Microsoft.CodeAnalysis.Workspaces.dll
 Microsoft.CodeAnalysis.CSharp.dll...
04 | Syntax- und Symbolanalyse
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
robinsedlaczek
robinsedlaczek.wor...
Syntaxanalyse
var tree = CSharpSyntaxTree.ParseText(sourceCode);
var node = tree.GetRoot();
 SyntaxTree ist abstrakt
 Pa...
Syntaxanalyse
node.ChildNodes()
node.ChildTokens()
node.GetLeadingTrivia()
node.GetTrailingTrivia()
node.DescendantNodes()...
public.void.Do(string.what).
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what).
........D...
public void Do(string what)
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what).
........Do...
public void Do(string what)
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what)).
........D...
public void Do(string what)
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what)).
........D...
public void Do(string what)
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what)
........Don...
Syntax Node
 SyntaxNode (Declarations, Statements, Clauses, Expressions)
public void Do(string what)
{.
....var.so.=.true...
public void Do(string what)
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what)
........Don...
public void Do(string what)
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what)
........Don...
public void Do(string what)
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what)
........Don...
public void Do(string what)
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what)
........Don...
public void Do(string what)
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what)
........Don...
Syntax Token
 SyntaxToken (Keyword, Identifier, Operator, Punctuation)
public void Do(string what)
{.
....var.so.=.true;....
Syntax Token
 SyntaxToken (Keyword, Identifier, Operator, Punctuation)
public void Do(string what)
{.
....var.so.=.true;....
public.void.Do(string.what).
{.
....var.so.=.true;.
.
#if.DEBUG.
....so.=.false;.
#endif.
.
....if.(so.==.what).
........D...
Syntax Kinds
 Kind()-Erweiterungsmethode identifiziert exaktes Syntaxelement für
Node, Token und Trivia
 Enum: Microsoft...
Syntax Types
 Syntaxtypen für alle Syntaxelemente (sprachspezifisch)
 Namespace: Microsoft.CodeAnalysis.CSharp.Syntax (2...
Syntax Kinds vs. Syntax Types
 Was passt hier nicht?
463(C#)
642(VB)
TypesKinds vs.
214 (C#)
275 (VB)
 Syntax Types sind...
Syntax Kinds vs. Syntax Types
 1 : 1 - Beziehungen zwischen Types und Kinds
 Es gibt aber ein paar Ausnahmen!
 Beispiel...
Syntax Kinds vs. Syntax Types
a = 1;
a *= 2;
a += 4;
1 | 1
true && true;
true || false;
Kind für jeden binären Operator (l...
Syntax Kinds vs. Syntax Types
myObject.MyMember
myObject->MyMember
dictionary!name
Member-Zugriff
(C#)
(VB)
Kind für einfa...
Semantische Analyse
var tree = CSharpSyntaxTree.ParseText(sourceCode);
var compilation = CSharpCompilation
.Create("HelloW...
05 | Code
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
robinsedlaczek
robinsedlaczek.wordpress.com
#SpeakRoslyn
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
robinsedlaczek
robinsedlaczek.wordpress.com
Vielen ...
Upcoming SlideShare
Loading in …5
×

#SpeakRoslyn - Die Microsoft .NET Compiler Plattform

1,255 views

Published on

This are the slides from my talk about the Microsoft .NET Compiler Platform. I traveled around the .NET User Groups in Germany and showed them the .NET Compiler Platform aka Project Roslyn and how Visual Studio 2015 was partly reimplemented to make use of Roslyn.

Published in: Software
  • DOWNLOAD FULL BOOKS, INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD FULL BOOKS, INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD FULL eBOOK INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... 1.DOWNLOAD FULL. PDF eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. doc eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. PDF eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. doc eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, CookeBOOK Crime, eeBOOK Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD FULL eBOOK INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... 1.DOWNLOAD FULL. PDF eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. doc eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. PDF eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. doc eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, CookeBOOK Crime, eeBOOK Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD FULL eBOOK INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... 1.DOWNLOAD FULL. PDF eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. doc eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. PDF eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... 1.DOWNLOAD FULL. doc eBook here { https://tinyurl.com/y3nhqquc } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, CookeBOOK Crime, eeBOOK Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

#SpeakRoslyn - Die Microsoft .NET Compiler Plattform

  1. 1. Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH robinsedlaczek robinsedlaczek.wordpress.com
  2. 2. Über mich  CTO der Fairmas GmbH in Berlin Zuständig für den gesamten Entwicklungsbereich Softwarearchitektur Implementierung von Entwicklungsprozessen Prozessautomatisierung Technologieberatung  Moderator in der MSDN  Freier Autor für Windows Developer, Heise…  Sprecher in User Groups  Beteiligung im Open Source Projekt „SharpGL“  .NET Code Geek robinsedlaczek robinsedlaczek.wordpress.com Robin Sedlaczek robinsedlaczek@live.de TheBerlinMicrosoftConnection
  3. 3.  #SpeakRoslyn bald in der MVA!  Microsoft Virtual Academy Kostenlose Online-Trainings für Entwickler und IT Professionals Mehr als 2.3 Millionen registrierte Nutzer Regelmäßig neue Trainings zu aktuellen Microsoft Produkten und Technologien Live- und on-demand-Kurse Join the MVA Community! robinsedlaczek robinsedlaczek.wordpress.com
  4. 4. #SpeakRoslyn – Mach mit!  Kommentaren, Feedback, Kritiken  Foto #SpeakRoslyn Über Tweets mit… würde ich mich sehr freuen! robinsedlaczek robinsedlaczek.wordpress.com
  5. 5. 01 | Überblick Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH robinsedlaczek robinsedlaczek.wordpress.com
  6. 6. Die Compiler-Blackbox  Compiler sind klassisch gesehen Blackboxes  Geschlossene Softwarekomponenten  Übersetzen Quellcode in etwas Ausführbares (Binärdateien) Compiler /// <summary> /// This is the base class for all /// shaders (vertex and fragment). It /// offers functionality which is core /// to all shaders, such as file /// loading and binding. /// </summary> public class Shader { public void Create(OpenGL gl, uint shaderType, string source) { // Create the OpenGL shader object. shaderObject = gl.CreateShader(shaderType); // Set the shader source. gl.ShaderSource(shaderObject, source); // Compile the shader object. gl.CompileShader(shaderObject); // Now that we've compiled the shader, check // it's compilation status. If it's not // compiled properly, we're going to throw // an exception. if (GetCompileStatus(gl) == false) { throw new ShaderCompilationException( string.Format( "Failed to compile shader {0}.", shaderObject), GetInfoLog(gl)); } } Code File 1 1 0 0 1 0 1 1 1 1 0 1 0 1 1 1 0 1 1 1 1 0 0 1 1 0 1 0 1 1 1 0 0 1 0 1 1 0 1 1 1 0 1 1 1 0 1 0 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 0 1 1 1 0 0 1 0 1 1 0 1 1 0 1 1 0 1 0 1 Binary File robinsedlaczek robinsedlaczek.wordpress.com
  7. 7. Das Problem mit der Blackbox  tiefes Verständnis des Codes während Übersetzung  Wissen, dass von IDEs und Werkzeugen genutzt werden könnte  Problem: Wissen steht nach Kompilierung nicht mehr zur Verfügung  Devs/Toolhersteller müssen ggf. Code selbst analysieren Compiler robinsedlaczek robinsedlaczek.wordpress.com
  8. 8. Lösung des Problems  Aufbrechen der Blackbox  Bereitstellung einer API-Schicht über dem Compiler  Bereitstellung der Compiler-Ergebnisse über Objektmodelle Phase 1 Phase 2 Phase 3 Phase 4 Blackbox wird zur Plattform: .NET Compiler Platform robinsedlaczek robinsedlaczek.wordpress.com
  9. 9. Vorteile/Nutzen  Zugriff auf Compiler-Wissen zu jeder Zeit  Code-bezogenen Aufgaben in eigenen Anwendungen  Codetransformation und Codegenerierung  Interaktive Szenarien (z.B. VS Immediate Window)  Einbettung C#/VB in DSLs  Metaprogrammierung robinsedlaczek robinsedlaczek.wordpress.com
  10. 10. Open Source  Roslyn ist Open Source! https://github.com/dotnet/roslyn  Verwaltet von der .NET Foundation http://www.dotnetfoundation.org/projects  Erlaubt Einblicke und Debugging des Codes  Mitwirkung bei Entwicklung durch Community  Repository kann geforkt werden robinsedlaczek robinsedlaczek.wordpress.com
  11. 11. Visual Studio  Auf Roslyn basierte C#/VB-Sprachfeatures und IDE-Features ab Visual Studio 2015 enthalten  Projektvorlagen: SDK Templates VSIX package  Bibliotheken: NuGet Roslyn compiler package  Syntax Visualizer: Syntax Visualizer VSIX package robinsedlaczek robinsedlaczek.wordpress.com
  12. 12. 02 | Grundlagen Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH robinsedlaczek robinsedlaczek.wordpress.com
  13. 13. Was tut ein Compiler?  Übersetzt z.B. VB.NET, C# nach IL Code, C# nach Maschinencode (.NET Native), C/C++ in Maschinencode... Compiler /// <summary> /// This is the base class for all /// shaders (vertex and fragment). It /// offers functionality which is core /// to all shaders, such as file /// loading and binding. /// </summary> public class Shader { public void Create(OpenGL gl, uint shaderType, string source) { // Create the OpenGL shader object. shaderObject = gl.CreateShader(shaderType); // Set the shader source. gl.ShaderSource(shaderObject, source); // Compile the shader object. gl.CompileShader(shaderObject); // Now that we've compiled the shader, check // it's compilation status. If it's not // compiled properly, we're going to throw // an exception. if (GetCompileStatus(gl) == false) { throw new ShaderCompilationException( string.Format( "Failed to compile shader {0}.", shaderObject), GetInfoLog(gl)); } } Code File 1 1 0 0 1 0 1 1 1 1 0 1 0 1 1 1 0 1 1 1 1 0 0 1 1 0 1 0 1 1 1 0 0 1 0 1 1 0 1 1 1 0 1 1 1 0 1 0 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 0 1 1 1 0 0 1 0 1 1 0 1 1 0 1 1 0 1 0 1 Binary File  Allgemein: übersetzt Programm aus formaler Quellsprache in semantisch äquivalente formale Zielsprache robinsedlaczek robinsedlaczek.wordpress.com
  14. 14. Fragen  Aber wie genau macht der Compiler das?  Wie kann der Compiler eine einfache Textdatei inhaltlich verstehen?  Wie verwandelt er den Text in ausführbare Bits und Bytes? robinsedlaczek robinsedlaczek.wordpress.com
  15. 15. Aufbau eines Compilers Vorweg, ein kleiner Exkurs… Aufbau der Blackbox… robinsedlaczek robinsedlaczek.wordpress.com
  16. 16. Natürliche vs. Formale Sprachen  Natürliche Sprachen leben  Akzente/Dialekte  Grammatik/Regeln werden nicht strikt befolgt  Mensch ist sehr fehlertolerant  Mehrdeutigkeit  Sehr komplex, Semantik kann nicht beschrieben werden robinsedlaczek robinsedlaczek.wordpress.com
  17. 17. Was sind formale Sprachen?  Mathematische Beschreibung einer Sprache  Alphabet + Wortbildungsregeln  Werden durch Zustandsautomaten erkannt  Klassifiziert in Chomsky-Hierarchie „Menge von Wörtern, die über einem bestimmten Alphabet und nach definierten Regeln gebildet werden können.“ robinsedlaczek robinsedlaczek.wordpress.com
  18. 18. Definition formale Sprache  Mathematische Beschreibung = formale Grammatik V = nicht-terminale Zeichen Σ = terminale Zeichen (Alphabet) R = Produktionen (Regeln) S = Startsymbol (aus V) robinsedlaczek robinsedlaczek.wordpress.com
  19. 19. Beispiel formale Sprache Die Sprache beinhaltet Bedingungsanweisungen. Diese können verschachtelt sein. Bedingungsanweisungen können etwas auf wahr oder falsch testen. V = { expr, condition, left, right } Σ = { id, if, (, ), {, }, true, false, == } R = { expr  if (condition) { expr }, condition  left == right, left  id, left  true, left  false, right  id, right  true, right  false } S = expr robinsedlaczek robinsedlaczek.wordpress.com
  20. 20. V = { expr, condition, left, right } Σ = { id, if, (, ), {, }, true, false, == } R = { expr  if (condition) { expr }, condition  left == right, left  id, left  true, left  false, right  id, right  true, right  false } S = expr Beispiel formale Sprache Ist der folgende Ausdruck Teil der Sprache? if (id == true) { if (false == id) { } } Start: expr (1)  if (condition) { expr } (1)  if (condition) { if (condition) { } } (2)  if (left == right) { if (condition) { } } (2)  if (left == right) { if (left == right) { } } (3)  if (id == right) { if (left == right) { } } (7)  if (id == true) { if (left == right) { } } (5)  if (id == true) { if (false == right) { } } (6)  if (id == true) { if (false == id) { } } (1) (2) (3) (4) (5) (6) (7) (8) Ausdruck ist Teil der Sprache! robinsedlaczek robinsedlaczek.wordpress.com
  21. 21.  Formales Beschreiben von Textstrukturen (Grammatik)  Programmiersprachen  Textstrukturen können mit Algorithmus erkannt werden (Parsen)  Einlesen, Syntaxüberprüfung Beispiel formale Sprache Was bedeutet das für einen Compiler? robinsedlaczek robinsedlaczek.wordpress.com
  22. 22. Beispiel formale Sprache expr conditionif ( AST (Abstract Syntax Tree) ) { }expr Start: expr  if (condition) { expr }  if (condition) { if (condition) { } }  if (left == right) { if (condition) { } }  if (left == right) { if (left == right) { } }  if (id == right) { if (left == right) { } }  if (id == true) { if (left == right) { } }  if (id == true) { if (false == right) { } }  if (id == true) { if (false == id) { } } conditionif ( ) { } left == right left == right id true false id nicht-terminal terminal robinsedlaczek robinsedlaczek.wordpress.com
  23. 23.  Textstrukturen (Syntax) als Baumstruktur darstellbar  Analyse und Auswertung des Baums  Syntaxanalyse  Tiefes Verständnis der Textstruktur Beispiel formale Sprache Was bedeutet das für einen Compiler? robinsedlaczek robinsedlaczek.wordpress.com
  24. 24. Aufbau eines Compilers Zerlegen des Quelltextes in Tokens Parsen der Tokens in die Syntax, die von der Grammatik vorgegeben ist (AST) Tokenizer/ Lexer Parser Lexikalische Analyse Syntaktische Analyse robinsedlaczek robinsedlaczek.wordpress.com
  25. 25.  Aufbau des Codes  Strukturen, Klassen, Aufzählungen  Methoden, Eigenschaften, Variablen  Bedingungen, Schleifen  … Syntaxanalyse Was weiß der Compiler? robinsedlaczek robinsedlaczek.wordpress.com
  26. 26. Syntaxanalyse Was weiß der Compiler bisher nicht? public virtual void Initialize(int count) { particles.Clear(); for (int i = 0; i < count; i++) { Particle particle = new BasicParticle(); particle.Intialize(rand); particles.Add(particle); } } Von welchem Typ sind die Parameter? Welche Member dürfen aufgerufen werden? Welche Variablen sind hier gültig? Semantik! robinsedlaczek robinsedlaczek.wordpress.com
  27. 27. Symboltabelle  Deklarationen analysieren Symbole /// <summary> /// This is the base class for all /// shaders (vertex and fragment). It /// offers functionality which is core /// to all shaders, such as file /// loading and binding. /// </summary> public class Shader { public void Create(OpenGL gl, uint shaderType, string source) { // Create the OpenGL shader object. shaderObject = gl.CreateShader(shaderType); // Set the shader source. gl.ShaderSource(shaderObject, source); // Compile the shader object. gl.CompileShader(shaderObject); // Now that we've compiled the shader, check // it's compilation status. If it's not // compiled properly, we're going to throw // an exception. if (GetCompileStatus(gl) == false) { throw new ShaderCompilationException( string.Format( "Failed to compile shader {0}.", shaderObject), GetInfoLog(gl)); } } Code File Assemblies  Benannte Symbole bilden  Symboltabelle aufbauen  Typen und Typsignaturen bekannt machen Referenz robinsedlaczek robinsedlaczek.wordpress.com
  28. 28. Binder Symboltabelle /// <summary> /// This is the base class for all /// shaders (vertex and fragment). It /// offers functionality which is core /// to all shaders, such as file /// loading and binding. /// </summary> public class Shader { public void Create(OpenGL gl, uint shaderType, string source) { // Create the OpenGL shader object. shaderObject = gl.CreateShader(shaderType); // Set the shader source. gl.ShaderSource(shaderObject, source); // Compile the shader object. gl.CompileShader(shaderObject); // Now that we've compiled the shader, check // it's compilation status. If it's not // compiled properly, we're going to throw // an exception. if (GetCompileStatus(gl) == false) { throw new ShaderCompilationException( string.Format( "Failed to compile shader {0}.", shaderObject), GetInfoLog(gl)); } } Code File var my = new MyType(); public void DoSomething(MyType my) { … } public event EventHandler MyEvent;  Identifier im Code zu Symbolen zuordnen  Bedeutung des Codes  Semantische Analyse robinsedlaczek robinsedlaczek.wordpress.com
  29. 29. Aufbau eines Compilers Zerlegen des Quelltextes in Tokens Parsen der Tokens in die Syntax, die von der Grammatik vorgegeben ist (AST) Typdeklarationen aus Code und Metadaten zu benannten Symbolen (Symboltabelle) Identifier in Code abstimmen/verbinden mit benannten Symbolen Tokenizer/ Lexer Parser Symbols Binder Lexikalische Analyse Syntaktische Analyse Semantische Analyse robinsedlaczek robinsedlaczek.wordpress.com
  30. 30. Aufbau eines Compilers Zerlegen des Quelltextes in Tokens Parsen der Tokens in die Syntax, die von der Grammatik vorgegeben ist (AST) Typdeklarationen aus Code und Metadaten zu benannten Symbolen (Symboltabelle) Identifier in Code abstimmen/verbinden mit benannten Symbolen Plattformunabhängige Optimierungen Plattformabhängige Optimierungen All gesammelten Informationen werden in Binary/Assembly ausgegeben Tokenizer/ Lexer Parser Symbols Binder CodeGen Preprocessor Code Generator CodeGen Postprocessor Lexikalische Analyse Syntaktische Analyse Semantische Analyse Synthese- Phase robinsedlaczek robinsedlaczek.wordpress.com
  31. 31. 03 | APIs Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
  32. 32. APIs  Compiler APIs  Workspace APIs robinsedlaczek robinsedlaczek.wordpress.com
  33. 33. APIs – Compiler Services robinsedlaczek robinsedlaczek.wordpress.com
  34. 34. APIs – Compiler Services  Compiler API - Sprachspezifische Objektmodelle für alle Phasen der Kompilierung - Unveränderlicher Snapshot eines Compiler-Aufrufes - Keine Abhängigkeiten zu Visual Studio  Diagnostics API - Erweiterbare API (Analyzers) - Hängt sich direkt in Analysephase - Fehler, Warnungen, Informationen robinsedlaczek robinsedlaczek.wordpress.com
  35. 35. APIs - Workspaces robinsedlaczek robinsedlaczek.wordpress.com
  36. 36. APIs – Workspaces robinsedlaczek robinsedlaczek.wordpress.com
  37. 37. APIs – Workspaces  Objektmodell zur Darstellung einer Solution  Einstiegspunkt für Solution-weite Analysen und Refactorings  Zugriff auf Compiler Services robinsedlaczek robinsedlaczek.wordpress.com
  38. 38. APIs - Namespaces  Microsoft.CodeAnalysis.dll  Microsoft.CodeAnalysis.Workspaces.dll  Microsoft.CodeAnalysis.CSharp.dll  Microsoft.CodeAnalysis.CSharp.Workspaces.dll  Microsoft.CodeAnalysis.VisualBasic.dll  Microsoft.CodeAnalysis.VisualBasic.Workspaces.dll robinsedlaczek robinsedlaczek.wordpress.com
  39. 39. 04 | Syntax- und Symbolanalyse Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH robinsedlaczek robinsedlaczek.wordpress.com
  40. 40. Syntaxanalyse var tree = CSharpSyntaxTree.ParseText(sourceCode); var node = tree.GetRoot();  SyntaxTree ist abstrakt  Parsing über sprachspezifische Ableitung  SyntaxTree ist immutable robinsedlaczek robinsedlaczek.wordpress.com
  41. 41. Syntaxanalyse node.ChildNodes() node.ChildTokens() node.GetLeadingTrivia() node.GetTrailingTrivia() node.DescendantNodes() node.DescendantTokens() node.DescendantTrivia() token.LeadingTrivia token.TrailingTrivia trivia.GetStructure() trivia.GetStructure() Traversierung des Syntaxbaums robinsedlaczek robinsedlaczek.wordpress.com
  42. 42. public.void.Do(string.what). {. ....var.so.=.true;. . #if.DEBUG. ....so.=.false;. #endif. . ....if.(so.==.what). ........DontDo();. }. Syntax Node  SyntaxNode (Declarations, Statements, Clauses, Expressions) robinsedlaczek robinsedlaczek.wordpress.com
  43. 43. public void Do(string what) {. ....var.so.=.true;. . #if.DEBUG. ....so.=.false;. #endif. . ....if.(so.==.what). ........DontDo();. }. Syntax Node  SyntaxNode (Declarations, Statements, Clauses, Expressions) robinsedlaczek robinsedlaczek.wordpress.com
  44. 44. public void Do(string what) {. ....var.so.=.true;. . #if.DEBUG. ....so.=.false;. #endif. . ....if.(so.==.what)). ........DontDo();. }. Syntax Node  SyntaxNode (Declarations, Statements, Clauses, Expressions) robinsedlaczek robinsedlaczek.wordpress.com
  45. 45. public void Do(string what) {. ....var.so.=.true;. . #if.DEBUG. ....so.=.false;. #endif. . ....if.(so.==.what)). ........DontDo();. }. Syntax Node  SyntaxNode (Declarations, Statements, Clauses, Expressions) robinsedlaczek robinsedlaczek.wordpress.com
  46. 46. public void Do(string what) {. ....var.so.=.true;. . #if.DEBUG. ....so.=.false;. #endif. . ....if.(so.==.what) ........DontDo();. }. Syntax Node  SyntaxNode (Declarations, Statements, Clauses, Expressions) robinsedlaczek robinsedlaczek.wordpress.com
  47. 47. Syntax Node  SyntaxNode (Declarations, Statements, Clauses, Expressions) public void Do(string what) {. ....var.so.=.true;. . #if.DEBUG. ....so.=.false;. #endif. . ....if.(so.==.what) ........DontDo();. }. robinsedlaczek robinsedlaczek.wordpress.com
  48. 48. public void Do(string what) {. ....var.so.=.true;. . #if.DEBUG. ....so.=.false;. #endif. . ....if.(so.==.what) ........DontDo();. }. Syntax Token  SyntaxToken (Keyword, Identifier, Operator, Punctuation) robinsedlaczek robinsedlaczek.wordpress.com
  49. 49. public void Do(string what) {. ....var.so.=.true;. . #if.DEBUG. ....so.=.false;. #endif. . ....if.(so.==.what) ........DontDo();. }. Syntax Token  SyntaxToken (Keyword, Identifier, Operator, Punctuation) robinsedlaczek robinsedlaczek.wordpress.com
  50. 50. public void Do(string what) {. ....var.so.=.true;. . #if.DEBUG. ....so.=.false;. #endif. . ....if.(so.==.what) ........DontDo();. }. Syntax Token  SyntaxToken (Keyword, Identifier, Operator, Punctuation) robinsedlaczek robinsedlaczek.wordpress.com
  51. 51. public void Do(string what) {. ....var.so.=.true;. . #if.DEBUG. ....so.=.false;. #endif. . ....if.(so.==.what) ........DontDo();. }. Syntax Token  SyntaxToken (Keyword, Identifier, Operator, Punctuation) robinsedlaczek robinsedlaczek.wordpress.com
  52. 52. public void Do(string what) {. ....var.so.=.true;. . #if.DEBUG. ....so.=.false;. #endif. . ....if.(so.==.what) ........DontDo();. }. Syntax Token  SyntaxToken (Keyword, Identifier, Operator, Punctuation) robinsedlaczek robinsedlaczek.wordpress.com
  53. 53. Syntax Token  SyntaxToken (Keyword, Identifier, Operator, Punctuation) public void Do(string what) {. ....var.so.=.true;. . #if.DEBUG. ....so.=.false;. #endif. . ....if.(so.==.what) ........DontDo();. }. robinsedlaczek robinsedlaczek.wordpress.com
  54. 54. Syntax Token  SyntaxToken (Keyword, Identifier, Operator, Punctuation) public void Do(string what) {. ....var.so.=.true;. . #if.DEBUG. ....so.=.false;. #endif. . ....if.(so.==.what) ........DontDo();. }. robinsedlaczek robinsedlaczek.wordpress.com
  55. 55. public.void.Do(string.what). {. ....var.so.=.true;. . #if.DEBUG. ....so.=.false;. #endif. . ....if.(so.==.what). ........DontDo();. }. Syntax Trivia  SyntaxTrivia (Leerzeichen, Kommentare, Pre-processor Direktiven) robinsedlaczek robinsedlaczek.wordpress.com
  56. 56. Syntax Kinds  Kind()-Erweiterungsmethode identifiziert exaktes Syntaxelement für Node, Token und Trivia  Enum: Microsoft.CodeAnalysis.CSharp.SyntaxKind (463 Werte)  Enum: Microsoft.CodeAnalysis.VisualBasic.SyntaxKind (642 Werte) public enum SyntaxKind : ushort { None, List, TildeToken = 8193, ExclamationToken, DollarToken, PercentToken, CaretToken, AmpersandToken, AsteriskToken, OpenParenToken, CloseParenToken, … } robinsedlaczek robinsedlaczek.wordpress.com
  57. 57. Syntax Types  Syntaxtypen für alle Syntaxelemente (sprachspezifisch)  Namespace: Microsoft.CodeAnalysis.CSharp.Syntax (214 Klassen)  Namespace: Microsoft.CodeAnalysis.VisualBasic.Syntax (275 Klassen) public.void.Do(string.what). {. ....var.so.=.true;. . #if.DEBUG. ....so.=.false;. #endif. . ....if.(so.==.what). ........DontDo();. }. 2 3 1 4 1 – MethodDeclarationSyntax 2 – ParameterListSyntax 3 – VariableDeclarationSyntax 4 – IfStatementSyntax robinsedlaczek robinsedlaczek.wordpress.com
  58. 58. Syntax Kinds vs. Syntax Types  Was passt hier nicht? 463(C#) 642(VB) TypesKinds vs. 214 (C#) 275 (VB)  Syntax Types sind allgemeiner als Kinds  Ein Typ für ähnliche Syntaxelemente  By Design robinsedlaczek robinsedlaczek.wordpress.com
  59. 59. Syntax Kinds vs. Syntax Types  1 : 1 - Beziehungen zwischen Types und Kinds  Es gibt aber ein paar Ausnahmen!  Beispiele… robinsedlaczek robinsedlaczek.wordpress.com
  60. 60. Syntax Kinds vs. Syntax Types a = 1; a *= 2; a += 4; 1 | 1 true && true; true || false; Kind für jeden binären Operator (logisch, arithmetisch, Bit-Verschiebung, Verbundzuweisung) Ein Syntaxtype für binäre Ausdrücke. Binärer Ausdruck robinsedlaczek robinsedlaczek.wordpress.com
  61. 61. Syntax Kinds vs. Syntax Types myObject.MyMember myObject->MyMember dictionary!name Member-Zugriff (C#) (VB) Kind für einfachen Member-Zugriff, Zugriff über Zeiger und Zugriff auf Dictionary in VB. Ein Syntaxtype für Member-Zugriffe. robinsedlaczek robinsedlaczek.wordpress.com
  62. 62. Semantische Analyse var tree = CSharpSyntaxTree.ParseText(sourceCode); var compilation = CSharpCompilation .Create("HelloWrold") .AddReferences(MetadataReference.CreateFromAssembly(typeof(object).Assembly)) .AddSyntaxTrees(tree); var model = compilation.GetSemanticModel(tree);  Compilation ist abstrakt  Semantische Analyse über Ableitungen  Symboltabelle ist immutable robinsedlaczek robinsedlaczek.wordpress.com
  63. 63. 05 | Code Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH robinsedlaczek robinsedlaczek.wordpress.com
  64. 64. #SpeakRoslyn Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH robinsedlaczek robinsedlaczek.wordpress.com Vielen Dank für Eure Aufmerksamkeit!

×