SlideShare une entreprise Scribd logo
1  sur  13
New C#4 Features – Part VI 
Nico Ludwig (@ersatzteilchen)
2 
TOC 
● New C#4 Features – Part VI 
– Beyond Expando Objects: Home-brew Dynamic Dispatch 
– Hosting Scripting Languages 
● Sources: 
– Jon Skeet, CSharp in Depth
3 
If ExpandoObject is not enough 
● We can get very far with ExpandoObject, but data driven APIs require more. 
– The possibility to encapsulate an existing API is often the core paradigm. 
– Adding user defined behavior to get more control (e.g. enforce readonly objects). 
– Sometimes you need or want to deal with operators. 
– The class ExpandoObject is sealed, and can not act as base class. 
● Up to now we've exploited the DLR from the caller side, now we'll implement own dynamic behavior in C#. 
– We can create types, whose interfaces change during run time; and these interface changes are based on how we use the type. 
– That means we'll implement our own dynamic dispatch.
4 
DynamicObject in Action 
<DynamicObjects> 
This example shows home brew dynamic dispatch with the 
CLR type DynamicObject. 
Key aspects of dynamic programming: 
(1. Dynamic Typing) 
(2. Late Binding) 
(3. Duck Typing) 
4. Dynamic Objects
5 
Home-brew Dynamic Dispatch with DynamicObject 
● If you need more than dynamic property bags you can handle the dynamic dispatching yourself in a type derived from 
DynamicObject. 
– E.g. to create methods and properties at run time to create explorative interfaces. 
● E.g. to wrap another API. 
– DynamicObject allows you to dispatch all (twelve) dynamic operations yourself. 
– We have the same abilities to handle unknown methods as in Smalltalk and Obj-C! 
● Instead of overriding "doesNotUnderstand:" (Smalltalk) we have to override "TryInvokeMember()". 
● How to make use of DynamicObject: 
– Import the System.Dynamic namespace. 
– Inherit from DynamicObject. 
– Then you can override the behavior of dynamic operations or define new methods. 
● If you can not derive from DynamicObject, implement IDynamicMetaObjectProvider. 
– But meta programming with Expression trees is not that simple...
6 
Mechanics of Dynamic Dispatch 
● The compiler lets us pass any kind of operation using the dynamic keyword. 
– And the real type has to handle the passed operation. 
– But the operation needs not to be a part of the real type's static interface. 
– The idea is to mix dynamic dispatch with static invocations in a single type. 
– This can be done with dynamic objects. 
● Restrictions: 
– To inspect the run time type of DynamicObject you can't use reflection. 
● (Also you can not check, whether a variable was declared as dynamic reference at run time.) 
● As its type (e.g. the properties and methods) is part of its value. 
● You absolutely have to document how your DynamicObject works! 
– No excuses! The compiler can't help here! 
– Best practice: write unit tests documenting your code!
7 
Dynamic Languages based on .Net 
● Meanwhile there exist a lot of dynamic .Net languages based on the DLR. 
– Iron*, like IronRuby, IronPython, IronScheme etc.... 
– Inspired by the success of Jython on the JVM, IronPython was developed. 
– During run time, scripts get translated into IL code and then executed by the CLR. 
● The new features of Expression trees support enabling scripting with the DLR. 
– The compiler/interpreter pipeline of a DLR-based scripting engine: 
● 1. Lex and parse the script => Expression trees, or abstract syntax trees (AST), 
● 2. pass the AST to the DLR, 
● 3. the DLR then compiles the AST to IL and executes it on the CLR, 
● 4. finally the CLR could JIT IL code to native machine code. 
– Expression trees are to the DLR what IL is to the CLR. 
● Some scripting engines can run in compiler mode. 
– Then methods get compiled into IL code (w/o the Expression tree step).
8 
The Iron Languages 
● The DLR and IronPython have been developed by the same team until 2006. 
– The DLR, IronPython and IronRuby (2008) are all open source (Apache lic. v2). 
● Iron* languages offer great integration with .Net: 
– Easy to use .Net libraries and other .Net languages. 
– Easy to use on .Net hosts and with .Net tools. 
● Iron* languages compile to IL code during run time. 
– During run time: Created Expression trees will finally be compiled to IL code. 
● And the JIT compiler will compile the IL code to machine code. 
● Or you can compile your script code into an assembly! 
● But we also have two type systems to deal with: .Net or the Iron* language's one. 
– Ruby has mutable strings, .Net don't (there is a to_clr_string() conversion method).
9 
Hosting Scripting Languages 
● Scripting languages have been used as glue languages in past. 
– Hosting scenarios allow scripts to be a substantial part of an application. 
– The DLR enables seamless or restricted usage of scripting language as you configure! 
– Hosting can be controlled via App.config (requires no recompilation of your C# code). 
● Exploit collaboration where required: 
– The communication between .Net and DLR-based languages requires no wrappers. 
● Dynamic dispatch enables this. 
– Different dynamic languages use one GC on the DLR! 
● Establish isolation where required: 
– E.g. Iron* can be hosted in a dedicated AppDomain or process, with a different trust. 
● Also on a dedicated physical machine. 
● The intend is to run user scripts with a different security access level (SAL).
10 
The "Big Iron* Hosting Example" 
<IronRubyHosting> 
This set of examples shows hosting of the scripting language 
IronRuby.
11 
DLR in the Web 
● I.e. running the DLR within the browser. 
● ASP-based DLR solutions exist as Codeplex projects, but w/o clear roadmap. 
● Silverlight can script JavaScript via DLR. 
– Other languages (Iron* languages) can be scripted, e.g. via Chiron. 
● Chiron is a packager, packaging Iron* languages' code into Silverlight applications (like class libraries). 
– A modern approach is "Gestalt", which allows "just text" hosting of Iron* languages. 
● "Just text" allows scripting of HTML and XAML with Iron* languages much like JavaScript. 
● Gestalt exploits the Silverlight runtime to host scripting languages used in a site via the DLR. 
● ASP.Net MVC allows using dynamic coding to wire Controllers and Views.
12 
Other new Features in .Net 4 
● Side-by-side (SxS) hosting of different CLRs within one process. 
● New and updated .Net frameworks: 
– New: Parallel Extensions Framework (PXF) 
● Task Parallel Library (TPL), Parallel LINQ (PLINQ) and the types Task and Parallel. 
– New: Managed Extensibility Framework (MEF) and Code Contracts 
– Updates: the new Workflow Foundation (WF) 
● New types: 
– Tuple<T, ...>, IStructuralEquatable and IStructuralComparable, 
– ISet<T>, SortedSet<T>, new types in namespace System.Collections.Concurrent, 
– the namespace System.IO.MemoryMappedFiles, 
– Lazy<T>, IObserver<T> and IObservable<T> and more ... 
– Action<T> and Func<T> are now taking up to 16 arguments. 
– New namespace System.Numeric containing the types BigInteger and Complex.
13 
Thank you!

Contenu connexe

En vedette

Introduction to F#x
Introduction to F#xIntroduction to F#x
Introduction to F#xRyan Riley
 
Introduction to Reactive Extensions
Introduction to Reactive ExtensionsIntroduction to Reactive Extensions
Introduction to Reactive ExtensionsPeter Goodman
 
Reactive Extensions
Reactive ExtensionsReactive Extensions
Reactive ExtensionsKiev ALT.NET
 
Pertemuan 1. introduction to image processing
Pertemuan 1. introduction to image processingPertemuan 1. introduction to image processing
Pertemuan 1. introduction to image processingAditya Kurniawan
 
F:\Universidad Tecnologica Israel
F:\Universidad Tecnologica IsraelF:\Universidad Tecnologica Israel
F:\Universidad Tecnologica Israelsantiago
 
New c sharp3_features_(linq)_part_v
New c sharp3_features_(linq)_part_vNew c sharp3_features_(linq)_part_v
New c sharp3_features_(linq)_part_vNico Ludwig
 
Introduction To Csharp
Introduction To CsharpIntroduction To Csharp
Introduction To Csharpsarfarazali
 
Getting the MVVM Kicked Out of Your F#'n Monads
Getting the MVVM Kicked Out of Your F#'n MonadsGetting the MVVM Kicked Out of Your F#'n Monads
Getting the MVVM Kicked Out of Your F#'n MonadsRichard Minerich
 
Texas STaR
Texas STaRTexas STaR
Texas STaRllyarbro
 
F# with Excel at F# in Finance, London Nov 2013
F# with Excel at F# in Finance, London Nov 2013F# with Excel at F# in Finance, London Nov 2013
F# with Excel at F# in Finance, London Nov 2013Adam Mlocek
 

En vedette (17)

Introduction to F#x
Introduction to F#xIntroduction to F#x
Introduction to F#x
 
Introduction to Reactive Extensions
Introduction to Reactive ExtensionsIntroduction to Reactive Extensions
Introduction to Reactive Extensions
 
Reactive Extensions
Reactive ExtensionsReactive Extensions
Reactive Extensions
 
Introduction to C# 3.0
Introduction to C# 3.0Introduction to C# 3.0
Introduction to C# 3.0
 
Pertemuan 1. introduction to image processing
Pertemuan 1. introduction to image processingPertemuan 1. introduction to image processing
Pertemuan 1. introduction to image processing
 
F:\Universidad Tecnologica Israel
F:\Universidad Tecnologica IsraelF:\Universidad Tecnologica Israel
F:\Universidad Tecnologica Israel
 
New c sharp3_features_(linq)_part_v
New c sharp3_features_(linq)_part_vNew c sharp3_features_(linq)_part_v
New c sharp3_features_(linq)_part_v
 
Introduction To Csharp
Introduction To CsharpIntroduction To Csharp
Introduction To Csharp
 
Getting the MVVM Kicked Out of Your F#'n Monads
Getting the MVVM Kicked Out of Your F#'n MonadsGetting the MVVM Kicked Out of Your F#'n Monads
Getting the MVVM Kicked Out of Your F#'n Monads
 
Texas
TexasTexas
Texas
 
The Power of F#
The Power of F#The Power of F#
The Power of F#
 
Texas STaR
Texas STaRTexas STaR
Texas STaR
 
F# with Excel at F# in Finance, London Nov 2013
F# with Excel at F# in Finance, London Nov 2013F# with Excel at F# in Finance, London Nov 2013
F# with Excel at F# in Finance, London Nov 2013
 
C# 4.0 - Whats New
C# 4.0 - Whats NewC# 4.0 - Whats New
C# 4.0 - Whats New
 
Beginning linq
Beginning linqBeginning linq
Beginning linq
 
Csharp4 generics
Csharp4 genericsCsharp4 generics
Csharp4 generics
 
Generics C#
Generics C#Generics C#
Generics C#
 

Plus de Nico Ludwig

Grundkurs fuer excel_part_v
Grundkurs fuer excel_part_vGrundkurs fuer excel_part_v
Grundkurs fuer excel_part_vNico Ludwig
 
Grundkurs fuer excel_part_iv
Grundkurs fuer excel_part_ivGrundkurs fuer excel_part_iv
Grundkurs fuer excel_part_ivNico Ludwig
 
Grundkurs fuer excel_part_iii
Grundkurs fuer excel_part_iiiGrundkurs fuer excel_part_iii
Grundkurs fuer excel_part_iiiNico Ludwig
 
Grundkurs fuer excel_part_ii
Grundkurs fuer excel_part_iiGrundkurs fuer excel_part_ii
Grundkurs fuer excel_part_iiNico Ludwig
 
Grundkurs fuer excel_part_i
Grundkurs fuer excel_part_iGrundkurs fuer excel_part_i
Grundkurs fuer excel_part_iNico Ludwig
 
(1) gui history_of_interactivity
(1) gui history_of_interactivity(1) gui history_of_interactivity
(1) gui history_of_interactivityNico Ludwig
 
(1) gui history_of_interactivity
(1) gui history_of_interactivity(1) gui history_of_interactivity
(1) gui history_of_interactivityNico Ludwig
 
New c sharp4_features_part_i
New c sharp4_features_part_iNew c sharp4_features_part_i
New c sharp4_features_part_iNico Ludwig
 
New c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_ivNew c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_ivNico Ludwig
 
New c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_ivNew c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_ivNico Ludwig
 
New c sharp3_features_(linq)_part_iii
New c sharp3_features_(linq)_part_iiiNew c sharp3_features_(linq)_part_iii
New c sharp3_features_(linq)_part_iiiNico Ludwig
 
New c sharp3_features_(linq)_part_ii
New c sharp3_features_(linq)_part_iiNew c sharp3_features_(linq)_part_ii
New c sharp3_features_(linq)_part_iiNico Ludwig
 
New c sharp3_features_(linq)_part_i
New c sharp3_features_(linq)_part_iNew c sharp3_features_(linq)_part_i
New c sharp3_features_(linq)_part_iNico Ludwig
 
New c sharp3_features_(linq)_part_i
New c sharp3_features_(linq)_part_iNew c sharp3_features_(linq)_part_i
New c sharp3_features_(linq)_part_iNico Ludwig
 
Review of c_sharp2_features_part_iii
Review of c_sharp2_features_part_iiiReview of c_sharp2_features_part_iii
Review of c_sharp2_features_part_iiiNico Ludwig
 
Review of c_sharp2_features_part_ii
Review of c_sharp2_features_part_iiReview of c_sharp2_features_part_ii
Review of c_sharp2_features_part_iiNico Ludwig
 
Review of c_sharp2_features_part_i
Review of c_sharp2_features_part_iReview of c_sharp2_features_part_i
Review of c_sharp2_features_part_iNico Ludwig
 
(7) c sharp introduction_advanvced_features_part_ii
(7) c sharp introduction_advanvced_features_part_ii(7) c sharp introduction_advanvced_features_part_ii
(7) c sharp introduction_advanvced_features_part_iiNico Ludwig
 

Plus de Nico Ludwig (20)

Grundkurs fuer excel_part_v
Grundkurs fuer excel_part_vGrundkurs fuer excel_part_v
Grundkurs fuer excel_part_v
 
Grundkurs fuer excel_part_iv
Grundkurs fuer excel_part_ivGrundkurs fuer excel_part_iv
Grundkurs fuer excel_part_iv
 
Grundkurs fuer excel_part_iii
Grundkurs fuer excel_part_iiiGrundkurs fuer excel_part_iii
Grundkurs fuer excel_part_iii
 
Grundkurs fuer excel_part_ii
Grundkurs fuer excel_part_iiGrundkurs fuer excel_part_ii
Grundkurs fuer excel_part_ii
 
Grundkurs fuer excel_part_i
Grundkurs fuer excel_part_iGrundkurs fuer excel_part_i
Grundkurs fuer excel_part_i
 
(2) gui drawing
(2) gui drawing(2) gui drawing
(2) gui drawing
 
(2) gui drawing
(2) gui drawing(2) gui drawing
(2) gui drawing
 
(1) gui history_of_interactivity
(1) gui history_of_interactivity(1) gui history_of_interactivity
(1) gui history_of_interactivity
 
(1) gui history_of_interactivity
(1) gui history_of_interactivity(1) gui history_of_interactivity
(1) gui history_of_interactivity
 
New c sharp4_features_part_i
New c sharp4_features_part_iNew c sharp4_features_part_i
New c sharp4_features_part_i
 
New c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_ivNew c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_iv
 
New c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_ivNew c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_iv
 
New c sharp3_features_(linq)_part_iii
New c sharp3_features_(linq)_part_iiiNew c sharp3_features_(linq)_part_iii
New c sharp3_features_(linq)_part_iii
 
New c sharp3_features_(linq)_part_ii
New c sharp3_features_(linq)_part_iiNew c sharp3_features_(linq)_part_ii
New c sharp3_features_(linq)_part_ii
 
New c sharp3_features_(linq)_part_i
New c sharp3_features_(linq)_part_iNew c sharp3_features_(linq)_part_i
New c sharp3_features_(linq)_part_i
 
New c sharp3_features_(linq)_part_i
New c sharp3_features_(linq)_part_iNew c sharp3_features_(linq)_part_i
New c sharp3_features_(linq)_part_i
 
Review of c_sharp2_features_part_iii
Review of c_sharp2_features_part_iiiReview of c_sharp2_features_part_iii
Review of c_sharp2_features_part_iii
 
Review of c_sharp2_features_part_ii
Review of c_sharp2_features_part_iiReview of c_sharp2_features_part_ii
Review of c_sharp2_features_part_ii
 
Review of c_sharp2_features_part_i
Review of c_sharp2_features_part_iReview of c_sharp2_features_part_i
Review of c_sharp2_features_part_i
 
(7) c sharp introduction_advanvced_features_part_ii
(7) c sharp introduction_advanvced_features_part_ii(7) c sharp introduction_advanvced_features_part_ii
(7) c sharp introduction_advanvced_features_part_ii
 

Dernier

Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 

Dernier (20)

Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 

New c sharp4_features_part_vi

  • 1. New C#4 Features – Part VI Nico Ludwig (@ersatzteilchen)
  • 2. 2 TOC ● New C#4 Features – Part VI – Beyond Expando Objects: Home-brew Dynamic Dispatch – Hosting Scripting Languages ● Sources: – Jon Skeet, CSharp in Depth
  • 3. 3 If ExpandoObject is not enough ● We can get very far with ExpandoObject, but data driven APIs require more. – The possibility to encapsulate an existing API is often the core paradigm. – Adding user defined behavior to get more control (e.g. enforce readonly objects). – Sometimes you need or want to deal with operators. – The class ExpandoObject is sealed, and can not act as base class. ● Up to now we've exploited the DLR from the caller side, now we'll implement own dynamic behavior in C#. – We can create types, whose interfaces change during run time; and these interface changes are based on how we use the type. – That means we'll implement our own dynamic dispatch.
  • 4. 4 DynamicObject in Action <DynamicObjects> This example shows home brew dynamic dispatch with the CLR type DynamicObject. Key aspects of dynamic programming: (1. Dynamic Typing) (2. Late Binding) (3. Duck Typing) 4. Dynamic Objects
  • 5. 5 Home-brew Dynamic Dispatch with DynamicObject ● If you need more than dynamic property bags you can handle the dynamic dispatching yourself in a type derived from DynamicObject. – E.g. to create methods and properties at run time to create explorative interfaces. ● E.g. to wrap another API. – DynamicObject allows you to dispatch all (twelve) dynamic operations yourself. – We have the same abilities to handle unknown methods as in Smalltalk and Obj-C! ● Instead of overriding "doesNotUnderstand:" (Smalltalk) we have to override "TryInvokeMember()". ● How to make use of DynamicObject: – Import the System.Dynamic namespace. – Inherit from DynamicObject. – Then you can override the behavior of dynamic operations or define new methods. ● If you can not derive from DynamicObject, implement IDynamicMetaObjectProvider. – But meta programming with Expression trees is not that simple...
  • 6. 6 Mechanics of Dynamic Dispatch ● The compiler lets us pass any kind of operation using the dynamic keyword. – And the real type has to handle the passed operation. – But the operation needs not to be a part of the real type's static interface. – The idea is to mix dynamic dispatch with static invocations in a single type. – This can be done with dynamic objects. ● Restrictions: – To inspect the run time type of DynamicObject you can't use reflection. ● (Also you can not check, whether a variable was declared as dynamic reference at run time.) ● As its type (e.g. the properties and methods) is part of its value. ● You absolutely have to document how your DynamicObject works! – No excuses! The compiler can't help here! – Best practice: write unit tests documenting your code!
  • 7. 7 Dynamic Languages based on .Net ● Meanwhile there exist a lot of dynamic .Net languages based on the DLR. – Iron*, like IronRuby, IronPython, IronScheme etc.... – Inspired by the success of Jython on the JVM, IronPython was developed. – During run time, scripts get translated into IL code and then executed by the CLR. ● The new features of Expression trees support enabling scripting with the DLR. – The compiler/interpreter pipeline of a DLR-based scripting engine: ● 1. Lex and parse the script => Expression trees, or abstract syntax trees (AST), ● 2. pass the AST to the DLR, ● 3. the DLR then compiles the AST to IL and executes it on the CLR, ● 4. finally the CLR could JIT IL code to native machine code. – Expression trees are to the DLR what IL is to the CLR. ● Some scripting engines can run in compiler mode. – Then methods get compiled into IL code (w/o the Expression tree step).
  • 8. 8 The Iron Languages ● The DLR and IronPython have been developed by the same team until 2006. – The DLR, IronPython and IronRuby (2008) are all open source (Apache lic. v2). ● Iron* languages offer great integration with .Net: – Easy to use .Net libraries and other .Net languages. – Easy to use on .Net hosts and with .Net tools. ● Iron* languages compile to IL code during run time. – During run time: Created Expression trees will finally be compiled to IL code. ● And the JIT compiler will compile the IL code to machine code. ● Or you can compile your script code into an assembly! ● But we also have two type systems to deal with: .Net or the Iron* language's one. – Ruby has mutable strings, .Net don't (there is a to_clr_string() conversion method).
  • 9. 9 Hosting Scripting Languages ● Scripting languages have been used as glue languages in past. – Hosting scenarios allow scripts to be a substantial part of an application. – The DLR enables seamless or restricted usage of scripting language as you configure! – Hosting can be controlled via App.config (requires no recompilation of your C# code). ● Exploit collaboration where required: – The communication between .Net and DLR-based languages requires no wrappers. ● Dynamic dispatch enables this. – Different dynamic languages use one GC on the DLR! ● Establish isolation where required: – E.g. Iron* can be hosted in a dedicated AppDomain or process, with a different trust. ● Also on a dedicated physical machine. ● The intend is to run user scripts with a different security access level (SAL).
  • 10. 10 The "Big Iron* Hosting Example" <IronRubyHosting> This set of examples shows hosting of the scripting language IronRuby.
  • 11. 11 DLR in the Web ● I.e. running the DLR within the browser. ● ASP-based DLR solutions exist as Codeplex projects, but w/o clear roadmap. ● Silverlight can script JavaScript via DLR. – Other languages (Iron* languages) can be scripted, e.g. via Chiron. ● Chiron is a packager, packaging Iron* languages' code into Silverlight applications (like class libraries). – A modern approach is "Gestalt", which allows "just text" hosting of Iron* languages. ● "Just text" allows scripting of HTML and XAML with Iron* languages much like JavaScript. ● Gestalt exploits the Silverlight runtime to host scripting languages used in a site via the DLR. ● ASP.Net MVC allows using dynamic coding to wire Controllers and Views.
  • 12. 12 Other new Features in .Net 4 ● Side-by-side (SxS) hosting of different CLRs within one process. ● New and updated .Net frameworks: – New: Parallel Extensions Framework (PXF) ● Task Parallel Library (TPL), Parallel LINQ (PLINQ) and the types Task and Parallel. – New: Managed Extensibility Framework (MEF) and Code Contracts – Updates: the new Workflow Foundation (WF) ● New types: – Tuple<T, ...>, IStructuralEquatable and IStructuralComparable, – ISet<T>, SortedSet<T>, new types in namespace System.Collections.Concurrent, – the namespace System.IO.MemoryMappedFiles, – Lazy<T>, IObserver<T> and IObservable<T> and more ... – Action<T> and Func<T> are now taking up to 16 arguments. – New namespace System.Numeric containing the types BigInteger and Complex.

Notes de l'éditeur

  1. ExpandoObject instances behave differently in VB and in C#, because in VB symbols are case insensitive, but in C# they are case sensitive!
  2. In the accompanying source code, you can find richly commented Smalltalk, Obj-C, Python and Ruby implementations of a property bag. (Please have a look, it is really not difficult to understand in that languages!) It is planned to have a similar home-brew dynamic dispatch support in Scala. If you implement IDynamicMetaObjectProvider you have to program a DynamicMetaObject, in which you code how dynamic operations translate into Expression trees. This flexibility comes with a cost: complexity, as coding of Expression trees, can be very complicated. In .Net 4.5 there&amp;apos;ll be a new type, JsonValue, which allows simple serialization of Json-formatted data. In order to be programmable in a simple way, it implements IDynamicMetaObjectProvide and can be used like ExpandoObject to add new Json elements. So if the out-of-the-box abilities of the DLR are not sufficient for your scenario, you can write own binders and meta-objects.
  3. IronPython 1.0 was even faster than C-based Python, because .Net Delegate-invocations are very fast since .Net 2 (CPython, Jython do only have an own runtime (different from .Net)). So, yes, there exist also variants of the DLR (and IronRuby and IronPython) that run on .Net 2 (then you’ll need to deploy the DLR (Microsoft.Scripting.dll, Microsoft.Dynamic.dll etc.) yourself). E.g. IronRuby has a compiler mode (default). In opposite to the compiler mode the interpreter mode has a better startup time, but the run time is worse.
  4. The open source variant of the DLR (hosted on CodePlex) develops faster currently. The DLR in .Net resides in System.Core.dll. IRON: (kidding) Implementation Running on .Net. For this presentation: IronRuby 1.1.3 was installed as NuGet package for the project. The conversion between Iron* and CLR types does often happen automatically, when it should. E.g. IronRuby types are no CLR types, but they can act as CLR types, when required. Typically CLR types differ from Iron* types as they can not be modified at run time. E.g. creating assemblies from Python scripts: Use ipy.exe with the option &amp;quot;-X:SafeAssemblies&amp;quot;. (In such an assembly you can inspect the DLR CallSite-code created for IronPython (e.g. in Reflector)!) At the time of this writing (September 2011) the Iron* compilers don&amp;apos;t create CLS-compliant assemblies, this means they probably can&amp;apos;t be used in other .Net languages.
  5. The DLR is not able to host a static language within another static language or a static language within another dynamic language. But hosting of static (.Net) languages is in sight with MS&amp;apos;s research on &amp;quot;compilers as a service&amp;quot; (CAAS) with the project &amp;quot;Roslyn&amp;quot;. The DLR hosting API consists of two sets of APIs, one for language consumers and the other for language providers. The file App.config can e.g. control the discovering of script engines). Isolation: the relevant DLR scripting types inherit MarshalByRefObject, thus enabling .Net Remoting.
  6. IronRuby is to be understood as placeholder for any other DLR/.Net based scripting language, like IronPython or IronScheme.
  7. SxS works for CLRs version &amp;gt; 2.0, the hosting works with different AppDomains. Memory mapped files is a powerful means to operate on large data in memory (it is much faster than MemoryStreams) and to establish communication between processes. New overloads of Action&amp;lt;T&amp;gt; and Func&amp;lt;T&amp;gt;: They are present primarily to help support the DLR.