4. Certo non c’è “Linq”, ma...
Nuovo ambiente di sviluppo;
Nuovo TFS;
+296 classi;
Nuovo CLR, con tanto di supporto per
l’hosting side-by-side;
Nuovo linguaggio: F#
5. ...e poi
Nuove versioni per:
Wpf, Wcf, Wf, Asp.net, Entity Framework e
pure per il “defunto” Linq2Sql;
Nuovi attori: Parallel Library e Plinq, Code
Contracts;
Integrazione/diffusione di xaml e... morte di
xoml;
Nuove feature per i “vecchi” linguaggi;
Nuovi strumenti di refactoring;
Nuovi designer;
6.
7. Visual Studio 2010
Multi-targeting: 2.0 -> 4.0;
Nuovi strumenti di Refactoring orientati
anche al TDD;
Nuovi designer;
Sequence Diagram;
Layer Diagram e Architecture Explorer
Code dependencies;
Commenti nel debugger;
Historical Debugger;
Post-mortem debug;
8. Visual Studio 2010
Code Hierarchy;
Nuova dialog Choose Toolbox Items:
Filtri, suddivisa in categorie, sempre lenta...
Wpf, wpf, wfp e ancora wpf;
IDE “quasi” completamente riscritto in wpf;
“Piena” retrocompatibilità con i package e gli
add-in;
“Cider”, l’intellisense per xaml e la nuova
PropertyGrid;
Wpf Tree Visualizer;
9. Visual Studio 2010
Web.config transformation;
Solo per deploy
Solo per “Web”... Forse...
○ Usa MS Build
MEF & Extensions
Microsoft Extensibility Framework != IoC
Nuovo Extension Manager
“Pluggabilità” dell’IDE rivoluzionaria;
15. Dynamically Typed Objects
Calculator calc = GetCalculator();
int sum = calc.Add(10, 20);
object calc = GetCalculator();
Type calcType = calc.GetType();
object res = calcType.InvokeMember("Add",
BindingFlags.InvokeMethod, null,
new object[] { 10, 20 });
int sum = Convert.ToInt32(res);
ScriptObject calc = GetCalculator();
object res = calc.Invoke("Add", 10, 20);
int sum = Convert.ToInt32(res);
dynamic calc = GetCalculator();
int sum = calc.Add(10, 20);
16. Dynamically Typed Objects
Il DLR supporta la creazione di oggetti
C# no;
Non sono supportati gli extension
methods;
Non possono essere usati come
parametri di una chiamata oggetti
Expression;
18. COM Interop news
La firma delle API COM passa da Object
a dynamic:
((Excel.Range)excel.Cells[1, 1]).Value;
excel.Cells[1, 1].Value;
No-PIA: A runtime le informazioni
presenti, e necessarie a design-
time, vengono inglobate dal
compilatore, quindi le/i PIA non vengono
più caricati;
No-ref: COM ref != C# ref -> diventa onere
del compilatore generare le variabili
temporanee da passare “by reference”;
20. Hosting API
2.0 3.0 3.5 4.0
add-in add-in add-in add-in
3.5
3.0
.NET 4.0
.NET 2.0
Processo Host
21. Code Contracts
Sintassi per esplicitare i requisiti sui dati;
Requires();
RequiresAlways();
Static Checker: controllo a compile time;
(a parte per la
B1, http://msdn.microsoft.com/en-
us/devlabs/dd491992.aspx)
Possibilità di fornire i contratti separati;
Contract Invariance;
22. Code Contracts
Pre condizioni
public MyMethod( String argument )
{
Contract.Requires( argument != null );
…
}
Post condizioni
public string GetValue()
{
Contract.Ensures( Contract.Result<String>() != null );
…
return something;
}
23. PEX
Add-in per Visual Studio (anche 2008?)
Genera un set mirato di unit-tests;
Può sfruttare Code Contracts;
24. Multi-Core/Threading/Task...
L’hardware ha preso la sua strada;
Scrivere software che sfrutti più core è
un’operazione complessa, troppo;
Il focus del developer deve essere sul
problema e non sull’infrastruttura che
serve per risolvere il problema;
25. I nuovi attori
Parallel LINQ (aka PLinq)
Task Parallel Library:
Task, Task<T>
Parallel.For, Parallel.ForEach
Parallel.Invoke
Coordination Data Structures:
System.Collections.Concurrent
Primitive per la sincronizzazione
○ Barrier, CountdownEvent, etc.
Unified Cancellation Model:
CancelationToken, CancelationTokenSource;
26. AsParallel is the word <cit.>
var q = from p in people.AsParallel()
where p.Name == query.Name &&
p.State == query.State &&
p.Year >= yearStart &&
p.Year <= yearEnd
orderby p.Year ascending
select p;