58
김명신 / 한국 마이크로소프트 Windows, Linux, Mac 신경 안 쓴다 .NET 2015와 C# 살짝 훔쳐보기

[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

Embed Size (px)

Citation preview

Page 1: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

김명신 / 한국 마이크로소프트

Windows, Linux, Mac 신경 안 쓴다

.NET 2015와 C# 살짝 훔쳐보기

Page 2: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

우리는 혁신이 필요하고 더 빠르게 개발할 수 있기를 바랍니다.

여러 장치에서 동작하는 앱을 개발하고 싶습니다.

오픈소스 전략이 플랫폼과 커뮤니티를 더욱 풍성하게 할겁니다.

하지만 기존의 응용 프로그램은 그대로 수행되어야 해요.

Page 3: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

.NET의 지향점

.NET의 혁신 오픈 소스

.NET Core

ASP.NET 5

크로스 플랫폼

Page 4: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

RyuJIT + SIMD

Garbage Collector

Runtime components Compilers

.NET Compiler Platform (Roslyn)

Languages innovation

.NET Framework 4.6

Fully-featured and integrated

.NET libraries and runtime for Windows

Modular and optimized

.NET libraries and runtimes

Base class libraries

NuGet packages

Libraries

Page 5: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

.NET Framework 4.6

Page 6: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

.NET SxS 배포, 대체 업데이트

.NET 4 .NET 4.5 .NET

4.5.1

.NET

4.5.2 .NET 4.6

.NET 2.0 .NET 3.0 .NET 3.5

2002 2003 2005 2006 2008 2010 2012 2013 2014 2015

.NET 1.0

.NET 1.1

Page 7: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

.NET

Framework

4

.NET

Framework

4.5

.NET

Framework

4.5.1

.NET

Framework

4.5.2

.NET Framework 4.6

Page 8: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

기능 라이브러리

개선점

런타임 도구

Page 9: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

기능

WPF 투명 차일드 윈도우 지원

WPF 터치 동작에 대한 성능과 신뢰성 개선 멀티 터치 이벤트에 대하여 신뢰성 개선

UI 스레드가 바쁜 상황에서도 터치 동작이 원할 하도록 성능 개선

WPF 리스트에 대한 스크롤 가상화 개선 리스트상에 포함된 항목 조회의 신뢰성 향상

가상화 중에 레이아웃이 훼손되지 않도록 개선

WPF High DPI 지원 개선 다중 DPI 커서와 모니터 지원, 프레임워크 요소들에 대한 외곽 처리 개선

윈폼 High DPI 지원 개선

Page 10: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

라이브러리

WCF 개선 기존 SSL 3.0, TLS 1.0 지원에 TLS 1.1, TLS 1.2 지원 추가

다수의 HTTP 연결을 통해 메시지 전송

ADO.NET 개선 SQL Server 2016에서 사용할 수 있는 Always Encrypted 기능 지원

Async 비동기 제어 흐름상에서 특정 데이터를 유지할 수 있는 기능 추가

Network 관련 타입 개선 System.Net.Sockets, System.Uri 개선

암호화 관련 라이브러리 개선

Page 11: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

런타임

64비트 JIT 컴파일러 재작성(“RyuJIT”) 대용량의 64비트 클라우드 작업을 수행하기에 적합

64비트 CLR의 SIMD 지원 SSE2, AVX 등의 하드웨어를 지원

하드웨어 중립적인 코드 작성이 가능

가비지 수집기 개선 피닝(pinning)된 객체 최적화

Gen1에서 Gen2로의 프로모션을 메모리 효율적으로 수행하도록 개선

가비지 수집 금지 영역 지정

어셈블리 로더 성능 개선

Page 12: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

도구

새로운 Blend 솔루션 탐색기, 팀 탐색기, 편집기 등의 VS 기술을 결합

Roslyn 기반의 새로운 언어 서비스 속도와 신뢰성 개선

코드 중심의 워크스페이스, WPF의 In-Place 편집

디버깅 Xaml UI 디버깅 도구, 디버거가 결합된 분석 도구

분석 타임라인 기반 분석 도구

Page 13: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

Demo

Page 14: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

참고자료 Announcing .NET Framework 4.6

http://blogs.msdn.com/b/dotnet/archive/2015/07/20/announcing-net-framework-4-6.aspx

.NET Framework의 새로운 기능

https://msdn.microsoft.com/library/ms171868.aspx#v46

NET Framework 4.6의 응용 프로그램 호환성

https://msdn.microsoft.com/library/dn833127.aspx

.NET Framework 4.6 list of changes

https://github.com/Microsoft/dotnet/blob/master/docs/releases/net46/dotnet46-changes.md

.NET Framework API diff

https://dotnet2015.blob.core.windows.net/changes/diff_net452_net46.html

.NET Framework Targeting Pack

http://www.microsoft.com/ko-kr/download/details.aspx?id=48136

Web installer(preferred)

http://www.microsoft.com/ko-kr/download/details.aspx?id=48130

Offline installer

http://www.microsoft.com/ko-kr/download/details.aspx?id=48137

Page 15: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

Shared Core Technologies

Page 16: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

핵심 기술

64비트 JIT 컴파일러

RyuJIT

새로운 패키지 매니저

nuget

.NET 컴파일러 플랫폼

Roslyn

Page 17: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

RyuJit?

• .NET을 위한 차세대 64비트 JIT 컴파일러

• 코드 생성 속도 개선, 코드 품질 개선

• 고급 최적화 기능 포함(e.g. SIMD, …)

코드 품질 How fast generated code runs

코드 생성 속도 How fast JIT compiler generate app code

Page 18: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

SIMD(Single Instruction Multiple Data)

• .NET에서 data parallelism을 사용할 수 있도록 함

• 게임, 수식 연산, 이미지 처리 등의 응용 프로그램의 성능을 개선

• nuget을 이용하여 .NET 라이브러리 형태로 이용 가능

Page 19: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)
Page 20: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

Vector<int>.Count

var v1 = new Vector<int>(src1, i);

var v2 = new Vector<int>(src2, i);

var sum = v1 + v2;

sum.CopyTo(dest, i);

Page 21: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

Demo

Page 22: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

Scalar SIMD (SSE2)

Page 23: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

http://nuget.org

Page 24: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

Demo

Page 26: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

Team 혁신을 이어갈 수 있는 깔끔한 아키텍쳐

Partners 소스 기반 도구나 확장 도구 개발

Developers 더욱 더 강력한 C# IDE 기능 제공

OSS

1,000,000s

1,000s

10s

Page 27: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

Demo

Page 28: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

C# 6

Page 29: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

public class Customer

{

public string First { get; set; } = "Jane";

public string Last { get; set; } = "Doe";

}

Initializers for auto-properties(C# 6.0)

Getter-only auto-properties(C# 6.0)

public class Customer

{

public string First { get; } = "Jane";

public string Last { get; } = "Doe";

}

Page 30: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

Expression bodies on method-like members(C# 6.0)

public Point Move(int dx, int dy) => new Point(x + dx, y + dy);

public static Complex operator +(Complex a, Complex b) => a.Add(b);

public void Print() => Console.WriteLine(First + " " + Last);

public string Name => First + " " + Last;

public Customer this[long id] => store.LookupCustomer(id);

Expression bodies on property-like function members(C# 6.0)

String interpolation(C# 6.0)

var s = $"{p.Name} is {p.Age} year{{s}} old";

var s = $"{p.Name} is {p.Age} year{(p.Age == 1 ? "" : "s")} old";

Page 31: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

using static System.Console;

using static System.Math;

using static System.DayOfWeek;

class Program

{

static void Main()

{

WriteLine(Sqrt(3 * 3 + 4 * 4));

WriteLine(Friday - Monday);

}

}

using static(C# 6.0)

Page 32: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

int? length = customers?.Length; // null if customers is null

Customer first = customers?[0]; // null if customers is null

int length = customers?.Length ?? 0; // 0 if customers is null

Null-conditional operators(C# 6.0)

nameof expressions(C# 6.0)

if (x == null) throw new ArgumentNullException(nameof(x));

WriteLine(nameof(person.Address.ZipCode)); // prints "ZipCode"

Exception filters(C# 6.0)

try { … }

catch (MyException e) when(myfilter(e)) {}

Page 33: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

Index initializers(C# 6.0)

var numbers = new Dictionary<int, string> { [7] = "seven", [9] = "nine", [13] = "thirteen" };

try { res = await Resource.OpenAsync(…); }

catch (ResourceException e)

{ await Resource.LogAsync(res, e); }

finally { if (res != null) await res.CloseAsync();}

await in catch and finally blocks(C# 6.0)

Page 34: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

C# 7 preliminary

Page 35: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

Pattern Matching

if (o is Point p && p.X == 5) { WriteLine(p.Y); }

if (o is Point{ X is 5, Y is var y }) { WriteLine(y); }

if (o is Point(5, var y)) { WriteLine(y); }

switch (o)

{

case string s:

WriteLine(s);

break;

case Point(int x, int y):

Console.WriteLine($"({x},{y})");

break;

case null:

Console.WriteLine("<null>");

break;

}

Page 36: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

Tuple

public (int sum, int count) Tally(IEnumerable<int> values) { … }

var t = Tally(myValues);

Console.WriteLine($"Sum: {t.sum}, count: {t.count}");

public async Task<(int sum, int count)> TallyAsync(IEnumerable<int> values) { … }

var t = await TallyAsync(myValues);

Console.WriteLine($"Sum: {t.sum}, count: {t.count}");

public (int sum, int count) Tally(IEnumerable<int> values) { var s = 0; var c = 0; foreach (var value in values) { s += value; c++; } return (s, c); }

Page 37: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

nullable references

Dog? nullableDog = new Dog("Nullable");

nullableDog.Bark(); Compiler Error – nullable 참조로는 dereference 하지 못함

cannot dereference nullable reference(yet)

if (nullableDog != null)

{

// 컴파일러는 이 scope 내에서는 nullableDog가 null이 아님을 안다.

nullableDog.Bark(); // OK

}

else

{

// 컴파일러는 이 scope 내에서는 nullableDog가 null임을 안다.

nullableDog.Bark(); // Compiler Error – nullable 참조로는 dereference하지 못함

}

Page 38: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

Non-nullable references

Dog! mandatoryDog = new Dog("Mandatory");

mandatoryDog.Bark(); // OK – null 일 수 없으므로 method 호출 가능

string name = mandatoryDog.Name; // OK – null 일수 없으므로 property 참조 가능

Page 39: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

.NET Core 5

Page 40: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)
Page 41: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

.NET Core 5

Modular and optimized

.NET libraries and runtimes

.NET Framework의 하위 집합

이식이 가능한 모듈화 개발 모듈 세분화, 의존관계 최소화

오픈소스로 진행 .NET Core runtime : CoreCLR

https://github.com/dotnet/coreclr

.NET Core libraries: CoreFX

https://github.com/dotnet/corefx

Page 42: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

Demo

Page 43: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

.NET Native

Page 44: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

UWP 앱을 위해 클라우드에서 수행되는 차세대 클라우드 컴파일러

C#을 머신 코드로 컴파일

정적 링크

극도로 작아진 런타임을 사용하고, VC++의 Optimizer를 이용

MSIL bytecode Machine code

Page 45: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)
Page 46: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

Demo

Page 47: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

.NET의 지향점

.NET의 혁신 오픈 소스

.NET Core

ASP.NET 5

크로스 플랫폼

Page 48: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

Mono

.NET Core 크로스 플랫폼 모바일 개발과 .NET/Xamarin 파트너쉽

.NET

Xamarin

Unity

서비스와 웹 응용 프로그램 모바일 앱

Windows Linux Mac OS X

.NET Core

ASP.NET 5

Page 49: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

64-bit JIT + SIMD

Garbage Collector

Runtime components Compilers

.NET Compiler Platform (Roslyn)

Languages innovation

.NET Framework 4.6 .NET Core 5

Fully-featured and integrated

.NET libraries and runtime for Windows

Modular and optimized

.NET libraries and runtimes

Base class libraries

NuGet packages

Libraries

Page 50: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

• 리눅스 환경에서도 .NET 기반의 앱과 서비스를 수행

• 리눅스 환경에서 구동되는 .NET 기반의 앱을 Visual Studio를

이용하여 개발, 배포, 디버깅 수행

• OSX 사용자는 Visual Studio Code 등을 이용하여 Mac에서 .NET

code를 편집, 컴파일, 디버깅

• .NET Core 전체가 GitHub를 통해 오픈소스로 제공

개발자를 위한 이점

Page 51: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

https://dotnet2015.blob.core.windows.net/binaries/PartsUnlimited-demo-app-darwin.tar.gz

https://dotnet2015.blob.core.windows.net/binaries/PartsUnlimited-demo-app-linux.tar.gz

http://code.visualstudio.com

http://aka.ms/vslovesdocker

Create Cross-Platform .NET Apps

https://github.com/Microsoft/PartsUnlimited

http://github.com/dotnet

참고자료

Page 52: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

.NET의 지향점

.NET의 혁신 오픈 소스

.NET Core

ASP.NET 5

크로스 플랫폼

Page 53: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

SSCLI (“Rotor”)

Mar 2002

WiX

Apr 2004

F#

May 2005

ASP.NET

Mar 2012

TypeScript

Oct 2012

Roslyn

Apr 2014

.NET Core

Nov 2014

Mono V1

Jun 2004

Mono Started

~2002

Page 54: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

.NET의 오픈 소스화 플랫폼

크로스 플랫폼 지원

오픈소스

RyuJIT, SIMD

Core-CLR

Runtime components

Compilers .NET Compiler Platform

(“Roslyn”)

Languages

.NET Core 5 Libraries

.NET Framework 4.6 Libraries

Libraries

.NET

Framework 4.6

.NET

Core 5

github.com/microsoft/dotnet

What is Microsoft open sourcing? (2015)

Page 55: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

.NET API for Hadoop WebClient

.NET Compiler Platform ("Roslyn") .NET Map Reduce API for Hadoop

.NET Micro Framework

ASP.NET MVC

ASP.NET Web API

ASP.NET Web Pages

ASP.NET SignalR

MVVM Light Toolkit

.NET Core 5

Orleans

MEF (Managed Extensibility Framework)

OWIN Authentication Middleware Rx (Reactive Extensions)

Orchard CMS Windows Azure .NET SDK

Thinktecture IdentityManager

WnsRecipe

Mimekit Xamarin.Auth

Xamarin.Mobile

Couchbase for .NET

Meet the people behind the .NET Foundation

http://www.dotnetfoundation.org/team http://www.dotnetfoundation.org @dotnetfdn

Mailkit

System.Drawing

ASP.NET 5

Salesforce Toolkits for .NET

NuGet Kudu

Cecil

MSBuild

Page 56: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

Practices Visibility Governance Mentorship Support Feedback

Media Events Sponsorship

Protection Licenses Copyrights Trademarks Patents

dotnetfoundation.org

dotnet.github.io

개방

커뮤니티

빠른 혁신

Page 57: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

감사합니다.

• MSDN Forum http://aka.ms/msdnforum

• TechNet Forum http://aka.ms/technetforum

Page 58: [Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)

http://aka.ms/td2015_again

TechDays Korea 2015에서 놓치신 세션은 Microsoft 기술 동영상 커뮤니티 Channel 9에서

추후에 다시 보실 수 있습니다.