SlideShare ist ein Scribd-Unternehmen logo
1 von 24
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@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)
RobinSedlaczek
RobinSedlaczek.wordpress.com
Robin Sedlaczek
RobinSedlaczek@live.de
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
Warum Immutables?
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
MOTIVATION
Abhängiger
Code
Global
Variable/State
Abhängiger
Code
Abhängiger
Code
Abhängiger
Code
Abhängiger
Code
Global
Variable/State
Abhängiger
Code
Abhängiger
Code
Abhängiger
Code
Abhängiger
Code
Abhängiger
Code
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
MOTIVATION
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
DEFINITION
 Ein immutable (unveränderliches) Objekt ist ein
Objekt, dessen Zustand nach der Erzeugung nicht
mehr verändert werden kann.
 Immutable ist auch, wenn der Zustand eines
Objektes nach Außen unveränderlich erscheint,
auch wenn sich intern benutzte Attribute ändern.
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
WEAK VS. STRONG
 Nur einige Felder eines Objektes sind immutable
 Weakly immutable
 Alle Felder eines Objektes sind immutable
 Immutable
 Klasse kann nicht durch andere Klasse erweitert werden
 Strongly immutable
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
VORTEILE
 Immutables sind Inhärent Thread-safe
 Immutables sind leichter zu verstehen
 Annahmen können leichter getroffen werden
 Immutables können Speicherverbrauch reduzieren
 Immutables können Performance verbessern
 Immutables sind sicherer
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
.NET Immutable Collections
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
INFOS
• Arbeit begann 12/2012, erste Beta-Versionen wurden unabhängig vom .NET Framework-Releasezyklus
ausgeliefert (wegen gewünschtem Feedback aus der Community)
– September 2013 dann erstes stabiles Release v1.0.27
• Immutable Collections sind Teil der BCL
• Seit v1.1.32-beta anderer Namespace: Umzug von Microsoft.Bcl.Immutable zu System.Collections.Immutable
• Aktuelle Version 1.1.37
• Können ab .NET 4.5 verwendet werden
– für Desktop, Windows Store, Portable Class Library, Windows Phone 8)
• Können via NuGet bezogen werden: https://www.nuget.org/packages/System.Collections.Immutable
• Große Beliebtheit:
– 1,196,190 Downloads
– 2,202 Downloads durchschnittlich pro Tag
• Implementierungsdetails:
– For efficiency reasons, the implementation uses a sharing mechanism to ensure that newly created instances share as much data as
possible with the previous instance while ensuring that operations have a predictable time complexity.
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
C# - Sprachmerkmale
zur Unterstützung von Immutables
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
NEU IN C# 6
 Initialisierung von Read-Only Auto-Properties in Deklaration
 Initialisierung von Read-Only Auto-Properties in Konstruktor
 Expression-bodied Properties und Functions
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
NEU IN C# 7
 Immutable Object Creation
 Pattern Matching und Deconstruction
 With-Expressions
 Object Initializers für immutable Objects
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
NEU IN C# 7
public class Person
{
public string FirstName { get; }
public string LastName { get; }
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
}
var p = new Person { FirstName = "Mickey", LastName = "Mouse" }; // object initializer
if (p is Person("Mickey", *)) // positional deconstruction
{
return p with { FirstName = "Minney" }; // with-expression
}
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
Fallstudie Roslyn
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
WAS IST ROSLYN
 Aufbrechen der klassischen 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
RobinSedlaczek@live.de
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
RobinSedlaczek@live.de
COMPILER SERVICES (APIs)
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
SYNTAXANALYSE
var tree = CSharpSyntaxTree.ParseText(sourceCode);
var node = tree.GetRoot();
 SyntaxTree ist abstrakt
 Parsing über sprachspezifische Ableitung
 SyntaxTree ist immutable
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
SEMANTISCHE ANALYSE
var compilation = CSharpCompilation
.Create("CodeInCurrentProject")
.AddReferences(references)
.AddSyntaxTrees(trees);
var semanticModel = compilation.GetSemanticModel(tree);
var emitResult = compilation.Emit(path);
 Compilation ist abstrakt
 daher wieder sprachspezifische Ableitungen
 Compilation ist immutable
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
UNTER DER HAUBE
Der Code (links) wurde mehrfach der Syntaxanalyse unterzogen. Beim ersten Durchlauf wurden
1665 Objekte erzeugt. Beim zweiten waren es nur noch 16 Objekte. Hinter der unveränderlichen
Fassade optimiert Roslyn den Speicherverbrauch (siehe Red-Green-Trees).
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
UNTER DER HAUBE
Für jeden Parsing-Vorgang werden bereits gecachte Objekte
wiederverwendet. Auch wenn der Code ein ganz anderer ist.
Eine detaillierte technische Erläuterung der Cache-
Implementierung in Lexer und Parser befindet sich hier:
http://bit.ly/1VAoVY8
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
UNTER DER HAUBE
Red Tree: Immutable nach außen!
Green Tree: interne Optimierung
Red-Green-Trees stellen einen Optimierungsansatz dar: die
eigentliche interne Struktur zur Darstellung eines Syntaxbaums
(Green Tree) ist wesentlich kleiner als der immutable Syntaxbaum,
den der Client sieht (Red Tree).
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
Thread-safe .NET durch Immutables
Robin Sedlaczek
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de

Weitere ähnliche Inhalte

Andere mochten auch

TPC Corporate Profile --Finalize (1)
TPC Corporate Profile --Finalize (1)TPC Corporate Profile --Finalize (1)
TPC Corporate Profile --Finalize (1)
Danish Mahanga
 
Candiani poster sif_
Candiani poster sif_Candiani poster sif_

Andere mochten auch (10)

TPC Corporate Profile --Finalize (1)
TPC Corporate Profile --Finalize (1)TPC Corporate Profile --Finalize (1)
TPC Corporate Profile --Finalize (1)
 
Hands on Windows Azure
Hands on Windows AzureHands on Windows Azure
Hands on Windows Azure
 
Jyotish Shastri
Jyotish ShastriJyotish Shastri
Jyotish Shastri
 
Instrumentacion
InstrumentacionInstrumentacion
Instrumentacion
 
BBFC Ratings
BBFC RatingsBBFC Ratings
BBFC Ratings
 
Programlanabilir DDRx Denetleyicileri
Programlanabilir DDRx DenetleyicileriProgramlanabilir DDRx Denetleyicileri
Programlanabilir DDRx Denetleyicileri
 
Candiani poster sif_
Candiani poster sif_Candiani poster sif_
Candiani poster sif_
 
Looper case study
Looper case studyLooper case study
Looper case study
 
Team Foundation Server 2012 Reporting
Team Foundation Server 2012 ReportingTeam Foundation Server 2012 Reporting
Team Foundation Server 2012 Reporting
 
Team Foundation Server - Tracking & Reporting
Team Foundation Server - Tracking & ReportingTeam Foundation Server - Tracking & Reporting
Team Foundation Server - Tracking & Reporting
 

Ähnlich wie Thread-safe .NET durch Immutables

Ähnlich wie Thread-safe .NET durch Immutables (20)

#ADC 2016 - Roslyn & Visual Studio Extensions
#ADC 2016 - Roslyn & Visual Studio Extensions#ADC 2016 - Roslyn & Visual Studio Extensions
#ADC 2016 - Roslyn & Visual Studio Extensions
 
BASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
BASTA! Spring 2018 - Architekturen für .NET Core-AnwendungenBASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
BASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
 
Dream-Team: Roslyn & Visual Studio Extensions
Dream-Team: Roslyn & Visual Studio ExtensionsDream-Team: Roslyn & Visual Studio Extensions
Dream-Team: Roslyn & Visual Studio Extensions
 
BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...
BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...
BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...
 
Magdeburger Developer Days 2018 - Warum warten auf die IDE?
Magdeburger Developer Days 2018 - Warum warten auf die IDE?Magdeburger Developer Days 2018 - Warum warten auf die IDE?
Magdeburger Developer Days 2018 - Warum warten auf die IDE?
 
.NET Core Architecture (UI)
.NET Core Architecture (UI).NET Core Architecture (UI)
.NET Core Architecture (UI)
 
Architekturen für .NET Core-Anwendungen
Architekturen für .NET Core-AnwendungenArchitekturen für .NET Core-Anwendungen
Architekturen für .NET Core-Anwendungen
 
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...
 
DNUGBB 2017 - .Net, .Net Core, .Net Standard
DNUGBB 2017 - .Net, .Net Core, .Net StandardDNUGBB 2017 - .Net, .Net Core, .Net Standard
DNUGBB 2017 - .Net, .Net Core, .Net Standard
 
Developer Week 2019: Architekturen für .NET Core-Anwendungen
Developer Week 2019: Architekturen für .NET Core-AnwendungenDeveloper Week 2019: Architekturen für .NET Core-Anwendungen
Developer Week 2019: Architekturen für .NET Core-Anwendungen
 
Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...
Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...
Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...
 
BASTA! Spring 2017 - C# Script in Action
BASTA! Spring 2017 - C# Script in ActionBASTA! Spring 2017 - C# Script in Action
BASTA! Spring 2017 - C# Script in Action
 
Developer Week 2019: .NET, .NET Core und .NET Standard - Ein Richtungskompass
Developer Week 2019: .NET, .NET Core und .NET Standard - Ein RichtungskompassDeveloper Week 2019: .NET, .NET Core und .NET Standard - Ein Richtungskompass
Developer Week 2019: .NET, .NET Core und .NET Standard - Ein Richtungskompass
 
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
 
Azure Hybrid Connections
Azure Hybrid ConnectionsAzure Hybrid Connections
Azure Hybrid Connections
 
.NET Summit 2017 - .NET, .NET Core, .NET Standard
.NET Summit 2017 - .NET, .NET Core, .NET Standard.NET Summit 2017 - .NET, .NET Core, .NET Standard
.NET Summit 2017 - .NET, .NET Core, .NET Standard
 
Codewiederverwendung in Xamarin-Apps maximieren
Codewiederverwendung in Xamarin-Apps maximierenCodewiederverwendung in Xamarin-Apps maximieren
Codewiederverwendung in Xamarin-Apps maximieren
 
ADC Core 2017 - Warum warten auf die IDE?
ADC Core 2017 - Warum warten auf die IDE?ADC Core 2017 - Warum warten auf die IDE?
ADC Core 2017 - Warum warten auf die IDE?
 
BASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot Framework
BASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot FrameworkBASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot Framework
BASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot Framework
 
.NET Core, .NET Standard & ASP.NET Core - Eine Übersicht
.NET Core, .NET Standard & ASP.NET Core - Eine Übersicht.NET Core, .NET Standard & ASP.NET Core - Eine Übersicht
.NET Core, .NET Standard & ASP.NET Core - Eine Übersicht
 

Mehr von Robin Sedlaczek

Mehr von Robin Sedlaczek (9)

Developer Week 2019: Identity & Access Management in der Realitaet
Developer Week 2019: Identity & Access Management in der RealitaetDeveloper Week 2019: Identity & Access Management in der Realitaet
Developer Week 2019: Identity & Access Management in der Realitaet
 
Magdeburger Developer Days 2018 - Das perfekte Anwendungsmodell
Magdeburger Developer Days 2018 - Das perfekte AnwendungsmodellMagdeburger Developer Days 2018 - Das perfekte Anwendungsmodell
Magdeburger Developer Days 2018 - Das perfekte Anwendungsmodell
 
GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!
GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!
GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!
 
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
 
#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...
#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...
#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...
 
#ADC 2016 - C# Script in Action
#ADC 2016 - C# Script in Action#ADC 2016 - C# Script in Action
#ADC 2016 - C# Script in Action
 
#ADC 2016 - Conversational User Interfaces
#ADC 2016 - Conversational User Interfaces#ADC 2016 - Conversational User Interfaces
#ADC 2016 - Conversational User Interfaces
 
Roslyn - Ein offener Compiler. Ja, und nun?
Roslyn - Ein offener Compiler. Ja, und nun?Roslyn - Ein offener Compiler. Ja, und nun?
Roslyn - Ein offener Compiler. Ja, und nun?
 
Code Reviews - Best Practices
Code Reviews - Best PracticesCode Reviews - Best Practices
Code Reviews - Best Practices
 

Thread-safe .NET durch Immutables

Hinweis der Redaktion

  1. 1
  2. 24