Upload
robin-sedlaczek
View
87
Download
0
Embed Size (px)
Citation preview
Roslyn – Produktivitätssteigernder Einsatz eines offenen Compilers Robin Sedlaczek | CTO Fairmas GmbH | .NET User Group Berlin
RobinSedlaczek
Robin Sedlaczek
RobinSedlaczek
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, Force Feedback)
Click to edit Master subtitle style
RobinSedlaczek
01 | Überblick
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
[email protected] 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 10 1 11 1 0 1 01 1 10 1 1 1 1 0 0 11 0 1 0 11 1 0 0 1 0 1 10 1 1 1 0 11 1 0 1 0 0 0 11 0 1 0 10 1 1 1 1 0 0 11 0 1 0 11 1 0 0 1 0 1 10 1 1 0 11 0 1 0 1
Binary File
RobinSedlaczek
[email protected] 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
[email protected]Ö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
[email protected]/NUTZEN
Zugriff auf Compiler-Wissen zu jeder Zeit Code-bezogenen Aufgaben in eigenen Anwendungen Metaprogrammierung Codetransformation und Codegenerierung Interaktivität (VS Immediate Window, C# Script, REPL) Einbettung C#/VB in DSLs
RobinSedlaczek
[email protected] 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
[email protected] 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
Click to edit Master subtitle style
RobinSedlaczek
Real World Example | Semantic Versioning
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek
[email protected] 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
[email protected] 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
02 | Visual Studio Extensibility
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
Click to edit Master subtitle style
RobinSedlaczek
Real World Example | Critical Code
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
[email protected] CODE
Verwendung von kritischen Code visuell hervorheben
kritischen Code markieren z.B. mit Marker-Interface
oder Attributen
RobinSedlaczek
[email protected] 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
Real World Example | Alive
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
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
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
Real World Example | Application Scripting
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
[email protected] 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
[email protected] SCRIPTING
Script erlaubt direkten Zugriff auf Anwendungsobjekte
es können aber auch eigene Objekte erzeugt werden
RobinSedlaczek
[email protected] 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
[email protected] 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
Real World Example | Force Feedback Programming
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
[email protected] FEEDBACK PROGRAMMING
Force Feedback Programming erzwingt sauberen (Clean) Code 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
[email protected] FEEDBACK PROGRAMMING
Wer nicht hören will, muss fühlen! Es wird anstrengend, wenn man versucht, unsauberen Code zu erweitern…
RobinSedlaczek
[email protected] 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
Roslyn – Produktivitätssteigernder Einsatz eines offenen Compilers
„Seid kreativ!“
RobinSedlaczek.wordpress.comRobinSedlaczek