These are the slides from my talk about immutable types in Microsoft .NET and how they are used in Roslyn from the Parallel Conference 2016 in Heidelberg.
10. 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.
14. 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
}
17. 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
23. 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).