SlideShare a Scribd company logo
1 of 57
김명신 부장
Technical Evangelist
Microsoft Korea
Future of .NET Framework
우리는 혁신이 필요하고 더 빠르게 개발할 수 있기를 바랍니다.
여러 장치에서 동작하는 앱을 개발하고 싶습니다.
오픈소스 전략이 플랫폼과 커뮤니티를 더욱 풍성하게 할겁니다.
하지만 기존의 응용 프로그램은 그대로 수행되어야 해요.
.NET의 지향점
.NET의 혁신 오픈 소스
.NET Core
ASP.NET 5
크로스 플랫폼
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
.NET Framework 4.6
.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
.NET
Framework
4
.NET
Framework
4.5
.NET
Framework
4.5.1
.NET
Framework
4.5.2
.NET Framework 4.6
기능 라이브러리
개선점
런타임 도구
기능
WPF 투명 차일드 윈도우 지원
WPF 터치 동작에 대한 성능과 신뢰성 개선
멀티 터치 이벤트에 대하여 신뢰성 개선
UI 스레드가 바쁜 상황에서도 터치 동작이 원할 하도록 성능 개선
WPF 리스트에 대한 스크롤 가상화 개선
리스트상에 포함된 항목 조회의 신뢰성 향상
가상화 중에 레이아웃이 훼손되지 않도록 개선
WPF High DPI 지원 개선
다중 DPI 커서와 모니터 지원, 프레임워크 요소들에 대한 외곽 처리 개선
윈폼 High DPI 지원 개선
라이브러리
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 개선
암호화 관련 라이브러리 개선
런타임
64비트 JIT 컴파일러 재작성(“RyuJIT”)
대용량의 64비트 클라우드 작업을 수행하기에 적합
64비트 CLR의 SIMD 지원
SSE2, AVX 등의 하드웨어를 지원
하드웨어 중립적인 코드 작성이 가능
가비지 수집기 개선
피닝(pinning)된 객체 최적화
Gen1에서 Gen2로의 프로모션을 메모리 효율적으로 수행하도록 개선
가비지 수집 금지 영역 지정
어셈블리 로더 성능 개선
도구
새로운 Blend
솔루션 탐색기, 팀 탐색기, 편집기 등의 VS 기술을 결합
Roslyn 기반의 새로운 언어 서비스
속도와 신뢰성 개선
코드 중심의 워크스페이스, WPF의 In-Place 편집
디버깅
Xaml UI 디버깅 도구, 디버거가 결합된 분석 도구
분석
타임라인 기반 분석 도구
Demo
참고자료
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
Shared Core Technologies
핵심 기술
64비트 JIT
컴파일러
RyuJIT
새로운 패키지
매니저
nuget
.NET 컴파일러
플랫폼
Roslyn
RyuJit?
• .NET을 위한 차세대 64비트 JIT 컴파일러
• 코드 생성 속도 개선, 코드 품질 개선
• 고급 최적화 기능 포함(e.g. SIMD, …)
코드 품질
How fast generated code runs
코드 생성 속도
How fast JIT compiler generate app code
SIMD(Single Instruction Multiple Data)
• .NET에서 data parallelism을 사용할 수 있도록 함
• 게임, 수식 연산, 이미지 처리 등의 응용 프로그램의 성능을 개선
• nuget을 이용하여 .NET 라이브러리 형태로 이용 가능
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);
Demo
Scalar SIMD (SSE2)
http://nuget.org
Demo
https://github.com/dotnet/roslyn
Team
혁신을 이어갈 수 있는 깔끔한 아키텍쳐
Partners
소스 기반 도구나 확장 도구 개발
Developers
더욱 더 강력한 C# IDE 기능 제공
OSS
1,000,000s
1,000s
10s
Demo
C# 6
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";
}
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";
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)
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)) {}
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)
C# 7 preliminary
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;
}
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);
}
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하지 못함
}
Non-nullable references
Dog! mandatoryDog = new Dog("Mandatory");
mandatoryDog.Bark(); // OK – null 일 수 없으므로 method 호출 가능
string name = mandatoryDog.Name; // OK – null 일수 없으므로 property 참조 가능
.NET Core 5
.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
Demo
.NET Native
UWP 앱을 위해 클라우드에서 수행되는 차세대 클라우드 컴파일러
C#을 머신 코드로 컴파일
정적 링크
극도로 작아진 런타임을 사용하고, VC++의 Optimizer를 이용
MSIL bytecode Machine code
Demo
.NET의 지향점
.NET의 혁신 오픈 소스
.NET Core
ASP.NET 5
크로스 플랫폼
Mono.NET Core 크로스 플랫폼
모바일 개발과
.NET/Xamarin 파트너쉽
.NET
Xamarin
Unity
서비스와 웹 응용 프로그램 모바일 앱
Windows Linux Mac OS X
.NET Core
ASP.NET 5
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
• 리눅스 환경에서도 .NET 기반의 앱과 서비스를 수행
• 리눅스 환경에서 구동되는 .NET 기반의 앱을 Visual Studio를
이용하여 개발, 배포, 디버깅 수행
• OSX 사용자는 Visual Studio Code 등을 이용하여 Mac에서 .NET
code를 편집, 컴파일, 디버깅
• .NET Core 전체가 GitHub를 통해 오픈소스로 제공
개발자를 위한 이점
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
참고자료
.NET의 지향점
.NET의 혁신 오픈 소스
.NET Core
ASP.NET 5
크로스 플랫폼
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
.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)
.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 MiddlewareRx (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/teamhttp://www.dotnetfoundation.org
@dotnetfdn
Mailkit
System.Drawing
ASP.NET 5
Salesforce Toolkits for .NET
NuGetKudu
Cecil
MSBuild
Practices Visibility
Governance
Mentorship
Support
Feedback
Media
Events
Sponsorship
Protection
Licenses
Copyrights
Trademarks
Patents
dotnetfoundation.org
dotnet.github.io
개방
커뮤니티
빠른 혁신
감사합니다.
• MSDN Forum http://aka.ms/msdnforum
• TechNet Forum http://aka.ms/technetforum

More Related Content

Similar to The Future of .NET and C#

ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)
ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)
ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)SangHoon Han
 
Openshift 활용을 위한 Application의 준비, Cloud Native
Openshift 활용을 위한 Application의 준비, Cloud NativeOpenshift 활용을 위한 Application의 준비, Cloud Native
Openshift 활용을 위한 Application의 준비, Cloud Nativerockplace
 
DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기SeungYong Baek
 
델파이 소스코드의재발견
델파이 소스코드의재발견델파이 소스코드의재발견
델파이 소스코드의재발견Devgear
 
20170623 최신OS와 멀티플랫폼 개발 전략 with RAD Studio
20170623 최신OS와 멀티플랫폼 개발 전략 with RAD Studio20170623 최신OS와 멀티플랫폼 개발 전략 with RAD Studio
20170623 최신OS와 멀티플랫폼 개발 전략 with RAD StudioDevgear
 
Backend.AI: 오픈소스 머신러닝 인프라 프레임워크
Backend.AI: 오픈소스 머신러닝 인프라 프레임워크Backend.AI: 오픈소스 머신러닝 인프라 프레임워크
Backend.AI: 오픈소스 머신러닝 인프라 프레임워크Jeongkyu Shin
 
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable FunctionsJongin Lee
 
Enterprise 환경에서의 오픈소스 기반 아키텍처 적용 사례
Enterprise 환경에서의 오픈소스 기반 아키텍처 적용 사례Enterprise 환경에서의 오픈소스 기반 아키텍처 적용 사례
Enterprise 환경에서의 오픈소스 기반 아키텍처 적용 사례Yousun Jeong
 
Azure Red Hat OpenShift 4를 통한 더 빠르고 쉬운 애플리케이션 구축
Azure Red Hat OpenShift 4를 통한 더 빠르고 쉬운 애플리케이션 구축Azure Red Hat OpenShift 4를 통한 더 빠르고 쉬운 애플리케이션 구축
Azure Red Hat OpenShift 4를 통한 더 빠르고 쉬운 애플리케이션 구축rockplace
 
멀티티어 애플리케이션 개발과 배포
멀티티어 애플리케이션 개발과 배포멀티티어 애플리케이션 개발과 배포
멀티티어 애플리케이션 개발과 배포Devgear
 
Meetup tools for-cloud_native_apps_meetup20180510-vs
Meetup tools for-cloud_native_apps_meetup20180510-vsMeetup tools for-cloud_native_apps_meetup20180510-vs
Meetup tools for-cloud_native_apps_meetup20180510-vsminseok kim
 
Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.효근 박
 
좋은 개발자 되기
좋은 개발자 되기좋은 개발자 되기
좋은 개발자 되기Sunghyouk Bae
 
RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장
RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장
RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장Devgear
 
Pivotal 101세미나 발표자료 (PAS,PKS)
Pivotal 101세미나 발표자료 (PAS,PKS) Pivotal 101세미나 발표자료 (PAS,PKS)
Pivotal 101세미나 발표자료 (PAS,PKS) VMware Tanzu Korea
 
크로스플랫폼으로 다시 태어난 ASP.NET Core
크로스플랫폼으로 다시 태어난 ASP.NET Core크로스플랫폼으로 다시 태어난 ASP.NET Core
크로스플랫폼으로 다시 태어난 ASP.NET CoreSangHoon Han
 
Open standard open cloud engine for digital business process
Open standard open cloud engine for digital business process Open standard open cloud engine for digital business process
Open standard open cloud engine for digital business process uEngine Solutions
 
RAD스튜디오 100% 활용하기
RAD스튜디오 100% 활용하기 RAD스튜디오 100% 활용하기
RAD스튜디오 100% 활용하기 Devgear
 
S#03 김용현:VS2010으로 마이그레이션
S#03 김용현:VS2010으로 마이그레이션S#03 김용현:VS2010으로 마이그레이션
S#03 김용현:VS2010으로 마이그레이션codercay
 
애플리케이션 최적화를 위한 컨테이너 인프라 구축
애플리케이션 최적화를 위한 컨테이너 인프라 구축애플리케이션 최적화를 위한 컨테이너 인프라 구축
애플리케이션 최적화를 위한 컨테이너 인프라 구축rockplace
 

Similar to The Future of .NET and C# (20)

ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)
ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)
ASP.NET Core 3.0과 Blazor를 활용한 새로운 WEB 개발(그리고 Try.NET)
 
Openshift 활용을 위한 Application의 준비, Cloud Native
Openshift 활용을 위한 Application의 준비, Cloud NativeOpenshift 활용을 위한 Application의 준비, Cloud Native
Openshift 활용을 위한 Application의 준비, Cloud Native
 
DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기DevOps - CI/CD 알아보기
DevOps - CI/CD 알아보기
 
델파이 소스코드의재발견
델파이 소스코드의재발견델파이 소스코드의재발견
델파이 소스코드의재발견
 
20170623 최신OS와 멀티플랫폼 개발 전략 with RAD Studio
20170623 최신OS와 멀티플랫폼 개발 전략 with RAD Studio20170623 최신OS와 멀티플랫폼 개발 전략 with RAD Studio
20170623 최신OS와 멀티플랫폼 개발 전략 with RAD Studio
 
Backend.AI: 오픈소스 머신러닝 인프라 프레임워크
Backend.AI: 오픈소스 머신러닝 인프라 프레임워크Backend.AI: 오픈소스 머신러닝 인프라 프레임워크
Backend.AI: 오픈소스 머신러닝 인프라 프레임워크
 
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
 
Enterprise 환경에서의 오픈소스 기반 아키텍처 적용 사례
Enterprise 환경에서의 오픈소스 기반 아키텍처 적용 사례Enterprise 환경에서의 오픈소스 기반 아키텍처 적용 사례
Enterprise 환경에서의 오픈소스 기반 아키텍처 적용 사례
 
Azure Red Hat OpenShift 4를 통한 더 빠르고 쉬운 애플리케이션 구축
Azure Red Hat OpenShift 4를 통한 더 빠르고 쉬운 애플리케이션 구축Azure Red Hat OpenShift 4를 통한 더 빠르고 쉬운 애플리케이션 구축
Azure Red Hat OpenShift 4를 통한 더 빠르고 쉬운 애플리케이션 구축
 
멀티티어 애플리케이션 개발과 배포
멀티티어 애플리케이션 개발과 배포멀티티어 애플리케이션 개발과 배포
멀티티어 애플리케이션 개발과 배포
 
Meetup tools for-cloud_native_apps_meetup20180510-vs
Meetup tools for-cloud_native_apps_meetup20180510-vsMeetup tools for-cloud_native_apps_meetup20180510-vs
Meetup tools for-cloud_native_apps_meetup20180510-vs
 
Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.Big Data platform을 위한 Sencha Ext JS 사례.
Big Data platform을 위한 Sencha Ext JS 사례.
 
좋은 개발자 되기
좋은 개발자 되기좋은 개발자 되기
좋은 개발자 되기
 
RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장
RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장
RAD스튜디오 100% 활용하기 - 최신 기술 적용과 확장
 
Pivotal 101세미나 발표자료 (PAS,PKS)
Pivotal 101세미나 발표자료 (PAS,PKS) Pivotal 101세미나 발표자료 (PAS,PKS)
Pivotal 101세미나 발표자료 (PAS,PKS)
 
크로스플랫폼으로 다시 태어난 ASP.NET Core
크로스플랫폼으로 다시 태어난 ASP.NET Core크로스플랫폼으로 다시 태어난 ASP.NET Core
크로스플랫폼으로 다시 태어난 ASP.NET Core
 
Open standard open cloud engine for digital business process
Open standard open cloud engine for digital business process Open standard open cloud engine for digital business process
Open standard open cloud engine for digital business process
 
RAD스튜디오 100% 활용하기
RAD스튜디오 100% 활용하기 RAD스튜디오 100% 활용하기
RAD스튜디오 100% 활용하기
 
S#03 김용현:VS2010으로 마이그레이션
S#03 김용현:VS2010으로 마이그레이션S#03 김용현:VS2010으로 마이그레이션
S#03 김용현:VS2010으로 마이그레이션
 
애플리케이션 최적화를 위한 컨테이너 인프라 구축
애플리케이션 최적화를 위한 컨테이너 인프라 구축애플리케이션 최적화를 위한 컨테이너 인프라 구축
애플리케이션 최적화를 위한 컨테이너 인프라 구축
 

More from 명신 김

업무를 빼고 가치를 더하는 클라우드 기술
업무를 빼고 가치를 더하는 클라우드 기술업무를 빼고 가치를 더하는 클라우드 기술
업무를 빼고 가치를 더하는 클라우드 기술명신 김
 
[2020 Ignite Seoul]Azure에서 사용할 수 있는 컨테이너/오케스트레이션 기술 살펴보기
[2020 Ignite Seoul]Azure에서 사용할 수 있는 컨테이너/오케스트레이션 기술 살펴보기[2020 Ignite Seoul]Azure에서 사용할 수 있는 컨테이너/오케스트레이션 기술 살펴보기
[2020 Ignite Seoul]Azure에서 사용할 수 있는 컨테이너/오케스트레이션 기술 살펴보기명신 김
 
Best of Build Seoul 2019 Keynote
Best of Build Seoul 2019 KeynoteBest of Build Seoul 2019 Keynote
Best of Build Seoul 2019 Keynote명신 김
 
Passwordless society
Passwordless societyPasswordless society
Passwordless society명신 김
 
DevOps and Azure Devops 소개, 동향, 그리고 기대효과
DevOps and Azure Devops 소개, 동향, 그리고 기대효과DevOps and Azure Devops 소개, 동향, 그리고 기대효과
DevOps and Azure Devops 소개, 동향, 그리고 기대효과명신 김
 
Serverless design and adoption
Serverless design and adoptionServerless design and adoption
Serverless design and adoption명신 김
 
Durable functions
Durable functionsDurable functions
Durable functions명신 김
 
Azure functions v2 announcement
Azure functions v2 announcementAzure functions v2 announcement
Azure functions v2 announcement명신 김
 
Azure functions
Azure functionsAzure functions
Azure functions명신 김
 
Azure event grid
Azure event gridAzure event grid
Azure event grid명신 김
 
Serverless, Azure Functions, Logic Apps
Serverless, Azure Functions, Logic AppsServerless, Azure Functions, Logic Apps
Serverless, Azure Functions, Logic Apps명신 김
 
Microservices architecture
Microservices architectureMicroservices architecture
Microservices architecture명신 김
 
Visual studio 2015를 활용한 개발 생산성 및 코드 품질 혁신
Visual studio 2015를 활용한 개발 생산성 및 코드 품질 혁신Visual studio 2015를 활용한 개발 생산성 및 코드 품질 혁신
Visual studio 2015를 활용한 개발 생산성 및 코드 품질 혁신명신 김
 
Connect(); 2016 한시간 총정리
Connect(); 2016 한시간 총정리Connect(); 2016 한시간 총정리
Connect(); 2016 한시간 총정리명신 김
 
Coded UI test를 이용한 테스트 자동화
Coded UI test를 이용한 테스트 자동화Coded UI test를 이용한 테스트 자동화
Coded UI test를 이용한 테스트 자동화명신 김
 
VS2015 C++ new features
VS2015 C++ new featuresVS2015 C++ new features
VS2015 C++ new features명신 김
 
Welcome to the microsoft madness
Welcome to the microsoft madnessWelcome to the microsoft madness
Welcome to the microsoft madness명신 김
 
Azure service fabric
Azure service fabricAzure service fabric
Azure service fabric명신 김
 

More from 명신 김 (20)

업무를 빼고 가치를 더하는 클라우드 기술
업무를 빼고 가치를 더하는 클라우드 기술업무를 빼고 가치를 더하는 클라우드 기술
업무를 빼고 가치를 더하는 클라우드 기술
 
[2020 Ignite Seoul]Azure에서 사용할 수 있는 컨테이너/오케스트레이션 기술 살펴보기
[2020 Ignite Seoul]Azure에서 사용할 수 있는 컨테이너/오케스트레이션 기술 살펴보기[2020 Ignite Seoul]Azure에서 사용할 수 있는 컨테이너/오케스트레이션 기술 살펴보기
[2020 Ignite Seoul]Azure에서 사용할 수 있는 컨테이너/오케스트레이션 기술 살펴보기
 
Best of Build Seoul 2019 Keynote
Best of Build Seoul 2019 KeynoteBest of Build Seoul 2019 Keynote
Best of Build Seoul 2019 Keynote
 
Passwordless society
Passwordless societyPasswordless society
Passwordless society
 
DevOps and Azure Devops 소개, 동향, 그리고 기대효과
DevOps and Azure Devops 소개, 동향, 그리고 기대효과DevOps and Azure Devops 소개, 동향, 그리고 기대효과
DevOps and Azure Devops 소개, 동향, 그리고 기대효과
 
Serverless design and adoption
Serverless design and adoptionServerless design and adoption
Serverless design and adoption
 
Durable functions
Durable functionsDurable functions
Durable functions
 
Azure functions v2 announcement
Azure functions v2 announcementAzure functions v2 announcement
Azure functions v2 announcement
 
Azure functions
Azure functionsAzure functions
Azure functions
 
Logic apps
Logic appsLogic apps
Logic apps
 
Serverless
ServerlessServerless
Serverless
 
Azure event grid
Azure event gridAzure event grid
Azure event grid
 
Serverless, Azure Functions, Logic Apps
Serverless, Azure Functions, Logic AppsServerless, Azure Functions, Logic Apps
Serverless, Azure Functions, Logic Apps
 
Microservices architecture
Microservices architectureMicroservices architecture
Microservices architecture
 
Visual studio 2015를 활용한 개발 생산성 및 코드 품질 혁신
Visual studio 2015를 활용한 개발 생산성 및 코드 품질 혁신Visual studio 2015를 활용한 개발 생산성 및 코드 품질 혁신
Visual studio 2015를 활용한 개발 생산성 및 코드 품질 혁신
 
Connect(); 2016 한시간 총정리
Connect(); 2016 한시간 총정리Connect(); 2016 한시간 총정리
Connect(); 2016 한시간 총정리
 
Coded UI test를 이용한 테스트 자동화
Coded UI test를 이용한 테스트 자동화Coded UI test를 이용한 테스트 자동화
Coded UI test를 이용한 테스트 자동화
 
VS2015 C++ new features
VS2015 C++ new featuresVS2015 C++ new features
VS2015 C++ new features
 
Welcome to the microsoft madness
Welcome to the microsoft madnessWelcome to the microsoft madness
Welcome to the microsoft madness
 
Azure service fabric
Azure service fabricAzure service fabric
Azure service fabric
 

The Future of .NET and C#

  • 1.
  • 2. 김명신 부장 Technical Evangelist Microsoft Korea Future of .NET Framework
  • 3. 우리는 혁신이 필요하고 더 빠르게 개발할 수 있기를 바랍니다. 여러 장치에서 동작하는 앱을 개발하고 싶습니다. 오픈소스 전략이 플랫폼과 커뮤니티를 더욱 풍성하게 할겁니다. 하지만 기존의 응용 프로그램은 그대로 수행되어야 해요.
  • 4. .NET의 지향점 .NET의 혁신 오픈 소스 .NET Core ASP.NET 5 크로스 플랫폼
  • 5. 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
  • 7. .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
  • 10. 기능 WPF 투명 차일드 윈도우 지원 WPF 터치 동작에 대한 성능과 신뢰성 개선 멀티 터치 이벤트에 대하여 신뢰성 개선 UI 스레드가 바쁜 상황에서도 터치 동작이 원할 하도록 성능 개선 WPF 리스트에 대한 스크롤 가상화 개선 리스트상에 포함된 항목 조회의 신뢰성 향상 가상화 중에 레이아웃이 훼손되지 않도록 개선 WPF High DPI 지원 개선 다중 DPI 커서와 모니터 지원, 프레임워크 요소들에 대한 외곽 처리 개선 윈폼 High DPI 지원 개선
  • 11. 라이브러리 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 개선 암호화 관련 라이브러리 개선
  • 12. 런타임 64비트 JIT 컴파일러 재작성(“RyuJIT”) 대용량의 64비트 클라우드 작업을 수행하기에 적합 64비트 CLR의 SIMD 지원 SSE2, AVX 등의 하드웨어를 지원 하드웨어 중립적인 코드 작성이 가능 가비지 수집기 개선 피닝(pinning)된 객체 최적화 Gen1에서 Gen2로의 프로모션을 메모리 효율적으로 수행하도록 개선 가비지 수집 금지 영역 지정 어셈블리 로더 성능 개선
  • 13. 도구 새로운 Blend 솔루션 탐색기, 팀 탐색기, 편집기 등의 VS 기술을 결합 Roslyn 기반의 새로운 언어 서비스 속도와 신뢰성 개선 코드 중심의 워크스페이스, WPF의 In-Place 편집 디버깅 Xaml UI 디버깅 도구, 디버거가 결합된 분석 도구 분석 타임라인 기반 분석 도구
  • 14. Demo
  • 15. 참고자료 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
  • 17. 핵심 기술 64비트 JIT 컴파일러 RyuJIT 새로운 패키지 매니저 nuget .NET 컴파일러 플랫폼 Roslyn
  • 18. RyuJit? • .NET을 위한 차세대 64비트 JIT 컴파일러 • 코드 생성 속도 개선, 코드 품질 개선 • 고급 최적화 기능 포함(e.g. SIMD, …) 코드 품질 How fast generated code runs 코드 생성 속도 How fast JIT compiler generate app code
  • 19. SIMD(Single Instruction Multiple Data) • .NET에서 data parallelism을 사용할 수 있도록 함 • 게임, 수식 연산, 이미지 처리 등의 응용 프로그램의 성능을 개선 • nuget을 이용하여 .NET 라이브러리 형태로 이용 가능
  • 20. 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);
  • 21. Demo
  • 24. Demo
  • 26. Team 혁신을 이어갈 수 있는 깔끔한 아키텍쳐 Partners 소스 기반 도구나 확장 도구 개발 Developers 더욱 더 강력한 C# IDE 기능 제공 OSS 1,000,000s 1,000s 10s
  • 27. Demo
  • 28. C# 6
  • 29. 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"; }
  • 30. 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";
  • 31. 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)
  • 32. 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)) {}
  • 33. 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)
  • 35. 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; }
  • 36. 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); }
  • 37. 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하지 못함 }
  • 38. Non-nullable references Dog! mandatoryDog = new Dog("Mandatory"); mandatoryDog.Bark(); // OK – null 일 수 없으므로 method 호출 가능 string name = mandatoryDog.Name; // OK – null 일수 없으므로 property 참조 가능
  • 40.
  • 41. .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
  • 42. Demo
  • 44. UWP 앱을 위해 클라우드에서 수행되는 차세대 클라우드 컴파일러 C#을 머신 코드로 컴파일 정적 링크 극도로 작아진 런타임을 사용하고, VC++의 Optimizer를 이용 MSIL bytecode Machine code
  • 45.
  • 46. Demo
  • 47. .NET의 지향점 .NET의 혁신 오픈 소스 .NET Core ASP.NET 5 크로스 플랫폼
  • 48. Mono.NET Core 크로스 플랫폼 모바일 개발과 .NET/Xamarin 파트너쉽 .NET Xamarin Unity 서비스와 웹 응용 프로그램 모바일 앱 Windows Linux Mac OS X .NET Core ASP.NET 5
  • 49. 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
  • 50. • 리눅스 환경에서도 .NET 기반의 앱과 서비스를 수행 • 리눅스 환경에서 구동되는 .NET 기반의 앱을 Visual Studio를 이용하여 개발, 배포, 디버깅 수행 • OSX 사용자는 Visual Studio Code 등을 이용하여 Mac에서 .NET code를 편집, 컴파일, 디버깅 • .NET Core 전체가 GitHub를 통해 오픈소스로 제공 개발자를 위한 이점
  • 52. .NET의 지향점 .NET의 혁신 오픈 소스 .NET Core ASP.NET 5 크로스 플랫폼
  • 53. 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
  • 54. .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)
  • 55. .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 MiddlewareRx (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/teamhttp://www.dotnetfoundation.org @dotnetfdn Mailkit System.Drawing ASP.NET 5 Salesforce Toolkits for .NET NuGetKudu Cecil MSBuild
  • 57. 감사합니다. • MSDN Forum http://aka.ms/msdnforum • TechNet Forum http://aka.ms/technetforum

Editor's Notes

  1. Announcing .NET Framework 4.6 .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
  2. Demo 시연
  3. Demo 시연
  4. Demo 시연
  5. 개발자는 개발시에 준 컴파일러  개발도구는 개발자를 더 잘 이해할 필요가 있다.  이를 위해서 개발 도구는 컴파일러를 이해해야 한다.
  6. Demo 시연
  7. Demo 시연
  8. Cold Startup 40% 빨라지고, Memory Usage는 13% 정도 개선 Tailored to Mobile and Client Desktop .NET is designed for a variety of client, server, and enterprise scenarios. 1.8 billion machines use Desktop .NET and it’s deployed as part of the OS. .NET needs to run on phones and smaller. .NET Native has a small footprint. Updates Don’t Break Developers .NET Native statically links framework libraries with the application. Apps adopt library innovations on their cadence. Library innovations are delivered consistently across all devices. Developers can be confident that Windows Update won’t break their app. Better Optimizations JIT-ing has to happen quickly. Optimized compiling doesn’t. Moving all compilation steps to build time allows us to implement better optimizations. We now use the C++ backend. T
  9. New runtime mrt.dll(MR.T) 300K로 줄였다. CLR 6M가 넘는다. Why store app : scope, Desktop .NET은 NET의 usage scenari가 매우 복잡하고 많다. 다 할 수가 없다. 그래서 Win Store App 먼저.. 하지만 멈추지 않을 것이다. Command line이나 WPF 응용 프로그램 등으로 확장 될 것이다. .NET Deployment와 상관이 없다. 단일의 binary/ 더 이상 .net 을 설치할 필요가 없다. Runtime 조차도 xcopy로 복사 No JIT, S아 released Static compilication of your .NET code C++ compiler back end in order to generate MDIL Machine Dependent IL -- > Native binary Trident on windows phone, not need to load jit JIT x64,32bit, arm. C# doesn’t are MDIL binary that go on device and then the native major C++ excellect optimization No JIT, little bit of JIT, Jit can be useful(runtime compilation) No JITing이 핵심은 아니다. .NET nativ는 단지 핵심적으로 성능과 관련된 여러가지 작업들을 수행했다. Startup 시간은 최대 60% 빨라지고, 평균 40%정도 빨라진다. 이는 ngen이나 Trident CLR runtim도 최적화 하였다. MRt100.dll minimum runtime static compile global 분석, global optimizatio을 수행, refactored and optimized libraries frame refactored and again optimized to make sure that app runs faster, Today focus on store app for modern windows app for now Tool Chain C# code ->csc.exe->app.exe->ilc.exe(<-corefx.dll, not the same implementation but same framework, optimized winrt framework) Ilc.exe has bunch of steps MCG(Marshing Code Generation) -> g.cs 가 MCG로 들어간다. 다음으로 IL Transform->app.ildll ->Tree shaking UGC backend->MDIL(app.mdil)->rhbind -> app.exe, app.dll Windows Phone world. Compliation is happed cloud. Windows Phone compiler doing(Mdil COMPILER) Reflection is not allowed
  10. Demo 시연