Post on 26-Jan-2017
transcript
Offener C# Compiler Robin Sedlaczek | CTO Fairmas GmbH | .NET User Group Berlin
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.de
Dream-Team:Roslyn & Visual Studio Extensions Robin Sedlaczek | CTO Fairmas GmbH | .NET User Group Berlin
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.de
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.de
CTO der Fairmas GmbH in Berlin Community Leader DNUG Berlin Blogger / .NET Code Geek Sprecher MSDN Moderator Freier Autor (Entwickler.de, Heise, DotNetPro, Informatik aktuell) Open Source (SharpGL, Roslyn, FxCopAnalyzers)
Robin Sedlaczek
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.de
Click to edit Master subtitle style
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.de
.NET Compiler Platform (“Roslyn”) | Überblick
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.deOPEN SOURCE
Roslyn ist Open Source! https://github.com/dotnet/roslyn
Verwaltet von der .NET Foundation http://www.dotnetfoundation.org/projects
Einblicke und Debugging des Codes Mitwirkung der Community Fork für eigene Zwecke
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.deVISUAL STUDIO
VS 2015: umfassender Umbau der IDE; Editor- und Sprachfeatures basieren nun auf Roslyn
.NET Compiler Platform SDK als VS-Extension verfügbar 3 Projektvorlagen (Analyzer, Refactoring, Stand-Alone) Syntax Visualizer Visual Studio 2015 SDK vorausgesetzt
Compiler/Workspace-APIs als NuGet-Packages verfügbar Scripting-API als NuGet-Package verfügbar
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.deAUFBAU 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
PreprocessorCode
GeneratorCodeGen
Postprocessor
Lexikalische Analyse
Syntaktische Analyse
Semantische Analyse
Synthese-Phase
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.deAPI 1 – COMPILER SERVICES
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.deAPI 2 – WORKSPACES
Click to edit Master subtitle style
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.de
Real World Example | Breaking Changes
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.deBREAKING CHANGES
v1v2v3v4
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.deSEMVER.ORG
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.deVERFOLGEN VON API-ÄNDERUNGEN
öffentliche APIs in separater Datei API-Änderungen durch Compiler prüfen lassen API-Änderung nicht in Definition Kompilierfehler Code-Fix hilft
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.deVERFOLGEN VON API-ÄNDERUNGEN
Nutzen Änderungen und Erweiterungen von APIs werden durch Compiler und Tooling kontrolliert Dokumentation von API-Änderungen out-of-the-box Prozesssicherheit, da Prozess automatisch ist API-Liste kann im Review verwendet werden Inkompatible API-Änderungen können sofort erkannt werden Versionsvergleiche von Code-Dateien nicht mehr nötig
Visual Studio Extension Roslyn.Diagnostics.Analyzers Analyzer und Code-Fix via NuGet verfügbar:
https://www.nuget.org/packages/Microsoft.Net.RoslynDiagnostics/ (Microsoft.Net.RoslynDiagnostics) Quellcode ist Open Source auf GitHub: https://github.com/dotnet/roslyn-analyzers
Click to edit Master subtitle style
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.de
02 | Visual Studio Extensibility
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.wordpress.comRobinSedlaczek@live.de
Click to edit Master subtitle style
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.de
Real World Example | Critical Code
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.deCRITICAL CODE
Verwendung von kritischen Code visuell hervorheben
kritischen Code markieren z.B. mit Marker-Interface
oder Attributen
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.deCRITICAL CODE
Nutzen Kritischer Code und seine Anwendung wird sichtbar Entwickler wird sensibilisiert im Umgang mit kritischen Code,
Fehler und falscher Umgang können so reduziert werden In Code-Reviews kann gezielt kritischer Code unter die Lupe genommen werden, ohne diesen lange zu
suchen
Visual Studio Extension WaveDev.SensitiveCodeMarker von Robin Sedlaczek Quellcode ist Open Source auf GitHub:
https://github.com/robinsedlaczek/WaveDev.SensitiveCodeMarker Demoprojekt auf GitHub: https://github.com/robinsedlaczek/WaveDev.RoomsReservationSystemDemo
Click to edit Master subtitle style
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.de
Real World Example | Alive
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.de
Funktionsausführung direkt im Code-Editor Eingabe von Funktionsparametern via Popup Ergebnis und lokale Zustände werden direkt angezeigt direkt Anpassung lokaler Parameter möglich
ALIVE
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.deALIVE
Nutzen Code-Ausführung ohne Anwendungsstart und Debugger Laufzeitverhalten von Code kann im Code-Editor direkt durchgespielt und analysiert werden Kontextwechsel zwischen Kodieren und Programmausführung fällt weg Ohne Kontextwechsel kann der Entwickler konzentrierter am Code arbeiten Ursache und Wirkung rücken dichter zusammen Direktes Feedback: Auswirkungen des Codes sind direkt am Entstehungsort sichtbar – im Editor Steigerung der Effizienz Reduktion von Entwicklungszeiten
Visual Studio Extension ALIVE von Code Connect (http://blog.comealive.io/Three-Months-of-Alive/) CodeConnect gehört nun zu Microsoft (http://blog.comealive.io/Code-Connect-Joins-Microsoft/) Extension ist momentan leider nicht über die Visual Studio Gallery verfügbar!
Click to edit Master subtitle style
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.de
Real World Example | Application Scripting
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.deAPPLICATION SCRIPTING
eigene Anwendung Script-fähig machen C# als Script-Sprache verwenden Roslyn bietet dafür die C# Scripting API
Fallbeispiel ModelR Kollaboratives 3D Modelling Tool Client-Server-Anwendung (basierend auf SignalR) Integriertes Scripting mit der C# Scripting API Script-Editor mit Syntax Highlighting Ausgabe von Kompilierfehlern Live Script Execution beim Tippen
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.deAPPLICATION SCRIPTING
Script erlaubt direkten Zugriff auf Anwendungsobjekte
es können aber auch eigene Objekte erzeugt werden
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.deAPPLICATION SCRIPTING
Nutzen für Benutzer Flexibilität – Anwendung kann in sich erweitert werden, ohne Neukompilierung durch den Benutzer Erweiterbarkeit – Anwendung kann von allen Benutzer beliebig erweitert werden Effektivität – komplexe wiederkehrende Prozesse können vom Benutzer automatisiert werden Anpassbarkeit – ein Nutzer kann sich die Anwendung nach seinen Vorstellungen/Vorgaben anpassen
Nutzen für Entwickler Beliebige APIs können dem Scripting zur Verfügung gestellt werden APIs sind dann zur Anwendungslaufzeit verfügbar und können dort ausprobiert werden Kontextwechsel zwischen Kodieren und Programmausführung fällt weg Code kann dort geschrieben werden, wo er seine Auswirkung hat Direktes Feedback der Auswirkungen sichtbar Steigerung der Effizienz Reduktion von Entwicklungskosten
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.deAPPLICATION SCRIPTING
Fallbeispiel ModelR WaveDev.ModelR von Robin Sedlaczek Quellcode ist Open Source auf GitHub: https://github.com/robinsedlaczek/ModelR Clonen, Kompilieren, Ausführen: WaveDev.ModelR.Server zuerst starten, danach WaveDev.ModelR 4 vordefinierte ModelR-Benutzer: Robin (PW: robin), Sarah (PW: sarah), Jan (PW: jan), Sebastian (PW:
sebastian) Script-Kontext über globale Eigenschaft „ModelR“ bereitgestellt Über den Script-Kontext kann auf die Anwendungsobjekte zugegriffen werden (Users, SceneObjects) Neue Objekte werden aus Script ausgelesen und automatisch in die Szene übernommen
Click to edit Master subtitle style
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.de
Real World Example | Force Feedback Programming
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.deFORCE FEEDBACK PROGRAMMING
Force Feedback Programming soll helfen, sauberen (Clean) Code zu schreiben Sauberkeit muss zuerst sichtbar gemacht werden Anwendung von Metriken (z.B. Anzahl Zeilen von Methoden) Ergebnisse werden direkt im Code visualisiert Entwickler erhält damit direktes Feedback zur Code-Qualität
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.deFORCE FEEDBACK PROGRAMMING
Wer nicht hören will, muss fühlen! Es wird anstrengend, wenn man versucht, unsauberen Code noch zu erweitern…
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.deFORCE FEEDBACK PROGRAMMING
Nutzen Unterstützung bei dem Vorhaben, Clean Code zu schreiben Direktes Feedback zur Code-Qualität – genau dort, wo der Code entsteht (in-time, in-place) Entwickler werden gezwungen darüber nachzudenken, was sauberer Code ist Erschwertes Tippen zwingt den Entwickler, mehr sauberen Code zu schreiben Trainingswerkzeug für Einsteiger, Auszubildende und Junior-Entwickler Sauberer Code erhöht die Wartbarkeit und Erweiterbarkeit Steigerung der Entwicklereffizienz Reduktion von Entwicklungskosten
Visual Studio Extension Force Feedback Programming von Ralf Westphal und Robin Sedlaczek Quellcode ist Open Source auf GitHub: https://github.com/robinsedlaczek/ForceFeedbackProgramming Extension via Visual Studio Gallery verfügbar:
https://visualstudiogallery.msdn.microsoft.com/d909888c-fdf0-492c-bfd9-6596e56530a8
Click to edit Master subtitle style
RobinSedlaczek
RobinSedlaczek.comRobinSedlaczek@live.de
Dream-Team: Roslyn & Visual Studio Extensions„Nun seid Ihr dran!“
RobinSedlaczek.comRobinSedlaczek
RobinSedlaczek@live.de