34

[Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Embed Size (px)

DESCRIPTION

[Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Citation preview

Page 1: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)
Page 2: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Presentando .NET 4.0

Diego González

PabloZaidenvoren

Page 3: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Agenda

C# 4.0Dynamic Language RuntimeKeyword “dynamic”Co y Contra-VarianzaCode ContractsParametros opcionales

Base Class LibraryTask Parallel Library

Cambios en el IDE

Page 4: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Novedades en C# 4.0

Page 5: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Dynamic Language Runtime

Page 6: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Dinámico vs. Estático

Lenguajes Dinámicos

Simples

Tipos implícitos

Meta-programación

Sin compilación

Lenguajes Estáticos

Robustos

Rápidos

Herramientas inteligentes

Compilados

Page 7: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Common Language Runtime

Tipos estáticos

C#VB

RubyPython

Tipos dinámicos

Dynamic Language Runtime

Page 8: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Common Language Runtime

C#VB

RubyPython

Dynamic Language Runtime

Tipos estáticos

Tipos dinámicos

Dynamic Language Runtime

Page 9: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Keyword “dynamic”

Page 10: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Keyword dynamic

Permite utilizar a estructuras dinámicas desde C#.

Clase DynamicObject expone comportamiento dinámico.

Page 11: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Demo

Page 12: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Dynamic Language RuntimeUn puente para operar con

estructuras dinámicasReduce la complejidad de

programaciónFacilita la implementación de

lenguajes dinámicos

Page 13: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Demo DLR

Page 14: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Co-varianza y Contra-varianza segura

Page 15: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

List<string> strings = GetStringList();Process(strings);

Co- and Contra-varianza

void Process(object[] objects) { … }

string[] strings = GetStringArray();Process(strings);

void Process(IEnumerable<object> objects) { … }

Los arrays en .NET son co-variantes

…pero no son co-variantes

seguros

Hasta ahora los generics en C# era

invariantesC# 4.0 soporta en

forma segura co- and contra-

varianza

void Process(object[] objects) { objects[0] = "Hello"; // Ok objects[1] = new Button(); // Exception!}

void Process(IEnumerable<object> objects) { // IEnumerable<T> is read-only and // therefore safely co-variant}

Page 16: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

public interface IComparer<T>{ int Compare(T x, T y);}

public interface IComparer<in T>{ int Compare(T x, T y);}

public interface IEnumerator<T>{ T Current { get; } bool MoveNext();}

public interface IEnumerator<out T>{ T Current { get; } bool MoveNext();}

public interface IEnumerable<T>{ IEnumerator<T> GetEnumerator();}

public interface IEnumerable<out T>{ IEnumerator<T> GetEnumerator();}

Co- and Contra-varianza segura

out

IEnumerable<string> strings = GetStrings();IEnumerable<object> objects = strings;

IComparer<object> objComp = GetComparer();IComparer<string> strComp = objComp;

in

Page 17: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Code Contracts

Page 18: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Demo

Page 19: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Code Contracts

Pre-CondicionesPost-CondicionesInvariantes

Page 20: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Parámetros

Page 21: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Parámetros opcionales

public StreamReader OpenTextFile( string path, Encoding encoding, bool detectEncoding, int bufferSize);

public StreamReader OpenTextFile( string path, Encoding encoding, bool detectEncoding);

public StreamReader OpenTextFile( string path, Encoding encoding);

public StreamReader OpenTextFile( string path);

Método primario

Overloads secundarios

Llamada al primario con

valores default

Page 22: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

public StreamReader OpenTextFile( string path, Encoding encoding, bool detectEncoding, int bufferSize);

public StreamReader OpenTextFile( string path, Encoding encoding = null, bool detectEncoding = true, int bufferSize = 1024);

Parámetros opcionales

Parametros opcionales

OpenTextFile("foo.txt", Encoding.UTF8);OpenTextFile("foo.txt", Encoding.UTF8, bufferSize: 4096);

Argumentos con nombre

OpenTextFile( bufferSize: 4096, path: "foo.txt", detectEncoding: false);

Los argumentos con nombre

deben ir al final

Los que no son opcionales se

deben especificar

Los argumentos se evaluan en el

orden que se escriben

Los argumentos con nombre pueden ir en

cualquier orden

Page 23: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Base Class Library

Page 24: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Task Parallel Library

Page 25: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Concurrencia

Parallel Pattern Library

Resource Manager

Task Scheduler

Task Parallel Library

PLINQ

Managed Library

Native Library

Key:

Threads

Operating System

Concurrency Runtime

Programming Models

Agents

Library

ThreadPool

Task Scheduler

Resource Manager

Data

Stru

cture

s

Data

Str

uct

ure

s

Integrated Tooling

Tools

ParallelDebugger

Toolwindows

Profiler Concurren

cyAnalysis

Programming Models

Concurrency Runtime

Messaging Blocks

Page 26: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Concurrencia

Task SchedulerCoordination Data StructuresTask Parallel LibraryParallel LINQ

Page 27: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Demo

Page 28: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Cambios en IDE

Page 29: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Cambios en IDE

Editor totalmente renovadoDiálogo “New Project” mejoradoZoom integrado“Add Reference” más rápidoSoporte para F#Herramientas para debug concurrente

Page 30: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Cambios IDE

Call Hierarchy navigationNavigate to symbolReference highlightErrores semánticos mejorados

Page 31: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Cambios IDE

Debug concurrenteDebug históricoAnálisis de dumps

Page 32: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

Otras novedades

Side-by-side execution mejoradoLazy InitializationMás espacio en Isolated StorageGC corre en backgroundMemory Mapped FilesPIAs integradas en otras assemblies

Page 33: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)

¿Preguntas?

Page 34: [Run Reloaded] Presentando .NET 4.0 (Diego González + Pablo Zaidenvoren)