Recommended 【Brocade OpenStack ソリューション】LBaaS プラグイン
【Brocade OpenStack ソリューション】OpenStack 概要
OpenStackやりたい人、必見!ネットワークから見たOpenStack導入のヒント
20131212 Okinawa OpenDays OpenStack
memcached + selinux engine
Dot netcore multiplatform 2
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
今から始める、Windows 10&新.NETへの移行戦略
DEV-002_.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来
今から始める、Windows 10&新.NETへの移行戦略
Linux & Mac OS でも動く! ~ クロスプラットフォーム対応に見る ASP.NET Core 5 の可能性 ~
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~
20170311 Developing & Deploying .NET Core on Linux
dotnetconfJP2017_netcore2
.NET Coreから概観する.NETのOSSへの取り組み
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
The Next Generation for C# Developers
More Related Content 【Brocade OpenStack ソリューション】LBaaS プラグイン
【Brocade OpenStack ソリューション】OpenStack 概要
OpenStackやりたい人、必見!ネットワークから見たOpenStack導入のヒント
20131212 Okinawa OpenDays OpenStack
memcached + selinux engine
Similar to CLI と BCL (20) Dot netcore multiplatform 2
Cloud から IoT まで、なんでもおまかせ ~ .NET 5 正式リリース!
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
Linux & Mac OS でも動く! ~ オープンソース & クロスプラットフォーム .NET の歩き方 ~
今から始める、Windows 10&新.NETへの移行戦略
DEV-002_.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来
今から始める、Windows 10&新.NETへの移行戦略
Linux & Mac OS でも動く! ~ クロスプラットフォーム対応に見る ASP.NET Core 5 の可能性 ~
.NET Core 5 ~ Windows, Linux, OS X そして Docker まで ~
20170311 Developing & Deploying .NET Core on Linux
dotnetconfJP2017_netcore2
.NET Coreから概観する.NETのOSSへの取り組み
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
The Next Generation for C# Developers
CLI と BCL3. 標準化
• Common Language Infrastructure
ISO/IEC 2721
ECMA-335
JIS X3016
• Microsoft Open Promise
• Microsoft Reference Source
• .NET Core - MIT License
4. CLI とは (※)
• 第1章 概念とアーキテクチャ
• 第2章 メタデータ定義及び意味論
• 第3章 CIL 命令集合
• 第4章 プロファイル及びライブラリ
• 第5章 デバッグ情報交換形式
• 第6章 付属書
適用範囲、見本プログラム、CIL アセンブラの実装、
クラス ライブラリの設計ガイドライン、可搬性に関する考察、
厳密でない違反、並列ライブラリ
※JIS X3016 より引用
5. 第 1 章 概念とアーキテクチャ (※)
• 6. 共通言語基盤の概要
型安全との関係、管理下駆動実行との関係
• 7. 共通言語仕様 (CLS)
• 8. 共通型システム (CTS)
• 9. メタデータ
• 10. 共通言語仕様のための名前及び型の規則
※JIS X3016 より引用
6. 6. 共通言語基盤の概要 (※)
• 共通型システム (CTS)
• メタデータ
• 共通言語仕様 (CLS)
• 仮想実行システム (VES)
仮想実行システム(VES)はCTSモデルを実装し強制する。VESは,
CLIのために書かれたプログラムのロード及び実行を行う。
• CLIのこれらの側面は,分散コンポーネント及びアプリケーション
を設計し,開発し,配置し,実行するための統一フレームワークを
形作る。
※JIS X3016 より引用
7. 第 2 章 メタデータ及び意味論 (※)
• 24. メタデータの物理的な配置
PE (Portable Executable) フォーマット
※JIS X3016 より引用
PE ヘッダー
PE 拡張ヘッダー
メタデータ
ヘッダー
メタデータ
10. VES の仕組みを考えてみる
アセンブリ メタデータ
ローダー 実行時クラス情報
EEClass
クラス
ローダー
フィールド データ
インスタンス
メソッド テーブル
メソッドA
メソッドB
メソッドC
…
CIL テーブル
実装A
実装B
実装C
…
Native Cache
実装A
実装B
実装C
…
JIT
実行時クラス
インスタンス
11. VES の特徴
• ターゲットを特定していない仮想実行システム
• アセンブリ (PE フォーマット) をロードする
• 管理下データ (Managed Data) = GC
• 型安全 (Type Safe) = スタック ウォークなど
• アプリケーション ドメインが実行単位
CLRは、アプリ、Shared、System の 3ドメイン
• コードの最適化 = JIT による実行時の最適化
ターゲット プラットフォームごとに異なる JIT 実装が可能
AOT や NGEN は、実行時の最適化ではない
12. 1.8 共通型システム
• 目的:関数型、手続型、オブジェクト指向にも提供される
型
値型 参照型 AppDomain 内の同一性
AssemblyLoadContext
Built-in 利用者定義 自己記述 Interface ポインタ Built-in
delegate
array
基底クラスは、System.Object
CLR は mscorlib.dll、CoreCLR 2.x は System.Private.CoreLib.dll
Object
String
13. .NET Standard とは何か
• BCL あるいは FCL を置き換えるための仕様
• パッケージの依存関係を管理するためのメタ パッケージ
• CoreFx のアセンブリ群は、細分化されたパッケージで構成
• バージョンは、各パッケージの開発ペースで変化
• ターゲット プラットフォーム単位にサポート バージョンを定義
• 2.0 と 1.6 では仕組みが大幅に変更となった
14. .NET Core と Target Platform
• 対象フレームワークに応じてメタ パッケージを決定
対象フレームワーク 最新Ver フレームワーク モニカ NET Standard メタ パッケージ
.NET Standard 2.0 netstandard2.0 N/A NETStandard.Library
Net Core App 2.0 netcoreapp2.0 2.0 Microsoft.NetCore.App
.NET Framework 4.7.1 net47 1.5 N/A
15. .NET Core とパッケージ
• ターゲット プラットフォーム
• メタ パッケージを決定
• メタ パッケージ
• パッケージの依存関係を定義
• .NET Standard 2.0 では状況が異なる
• パッケージ
• nuget パッケージ
• マルチ プラットフォーム サポート
• Runtime.json による プラットフォーム識別子
16. test.csproj
• フレームワークを 「netcoreapp2.0」と定義
• Microsoft.NET.Sdk が、.NET Core SDK を意味する
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
</Project>
17. project.assets.json 抜粋 1/3
{
"version": 3,
"targets": {
".NETCoreApp,Version=v2.0": {
"Microsoft.NETCore.App/2.0.0": {
"type": "package",
"dependencies": {
"Microsoft.NETCore.DotNetHostPolicy": "2.0.0",
"Microsoft.NETCore.Platforms": "2.0.0",
"NETStandard.Library": "2.0.0"
},
"compile": {
"ref/netcoreapp2.0/Microsoft.CSharp.dll": {},
"ref/netcoreapp2.0/Microsoft.VisualBasic.dll": {},
"ref/netcoreapp2.0/Microsoft.Win32.Primitives.dll": {},
"ref/netcoreapp2.0/System.AppContext.dll": {},
"ref/netcoreapp2.0/System.Buffers.dll": {},
18. project.assets.json 抜粋 続き 2/3
"Microsoft.NETCore.Platforms/2.0.0": {
"type": "package",
"compile": {
"lib/netstandard1.0/_._": {}
},
"runtime": {
"lib/netstandard1.0/_._": {}
}
},
"NETStandard.Library/2.0.0": {
"type": "package",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0"
},
"compile": {
"lib/netstandard1.0/_._": {}
},
"runtime": {
"lib/netstandard1.0/_._": {}
19. project.assets.json 抜粋 続き 3/3
"NETStandard.Library/2.0.0": {
"sha512":
"7jnbRU+L08FXKMxqUflxEXtVymWvNOrS8yHgu9s6EM8Anr6T/wIX4nZ08j/u3Asz+tCufp3YVwFSEvFTPYm
BPA==",
"type": "package",
"path": "netstandard.library/2.0.0",
"files": [
"LICENSE.TXT",
"THIRD-PARTY-NOTICES.TXT",
"build/NETStandard.Library.targets",
"build/netstandard2.0/NETStandard.Library.targets",
"build/netstandard2.0/ref/Microsoft.Win32.Primitives.dll",
"build/netstandard2.0/ref/System.AppContext.dll",
"build/netstandard2.0/ref/System.Collections.Concurrent.dll",
"build/netstandard2.0/ref/System.Collections.NonGeneric.dll",
"build/netstandard2.0/ref/System.Collections.Specialized.dll",
21. メタデータ 1/2
Token Version Flags PublicKey Name Culture HashValue
23000001 4.1.0.0 0 b03f5f7f11d50a3a System.Runtime
23000002 4.0.0.0 0 b03f5f7f11d50a3a System.Console
AssemblyRef(0x23)
Token ResolutionScope Name Namespace
01000003 23000001 DebuggableAttribute System.Diagnostics
…
01000008 23000001 Object System
01000009 23000002 Console System
TypeRef(0x01)
TypeRef メタデータは、ResolusionScope によってアセンブリを特定する
AssemblyRef メタデータは、アセンブリ識別子を記録している
22. メタデータ 2/2
Token ResolutionScope Name Namespace
01000003 23000001 DebuggableAttribute System.Diagnostics
…
01000008 23000001 Object System
01000009 23000002 Console System
TypeRef(0x01)
Token MemberRefParent Name Signature
0a000001 01000001 .ctor 0x20010108 (引数1、I4、void)
…
0a000007 01000009 WriteLine 0x0001010e (引数1、string、void)
0a000008 01000009 ReadLine 0x00000e (引数無し、string)
MemberRef(0x0a)
シグネチャは、メソッドの呼び出し規約、パラメータ、戻り値などを符号化した値
シグネチャによって、オーバーロードされたメソッドを特定できる
23. Bait and Switch
• 型を参照することをメタデータでは
• アセンブリ参照(アセンブリ識別子)
• 型(クラス)名
• メソッド名とメソッド シグネチャ
• パッケージ システムを使ったテクニック
• コンパイル時は、メタデータのみを解決
• 配布時にプラットフォーム固有のアセンブリに置き換える
• メタデータの特徴を活用したテクニック
• AssemblyRef, TypeRef, MemberRef
24. まとめ
• .NET Core とは CLI を実装したもの
• CLR と完全に同じではない
• AssemblyLoadContext – AppDomain
• マルチ プラットフォーム対応
• Bait and Switch テクニックによる
• .NET Standard ライブラリ
• API セットによる依存関係管理の仕組み
• Target Platform になることで、Bait and Switch を支援