.NET 平台从入门到上台(3)

从成熟的开始学起, 等到 Core 成熟之后再开始 Core 为妙.

下面来看一些基础知识.

  1. 什么是 .NET Framework
    它就是一个平台而已, 这个平台被设计为支持多种语言.
  2. 在 .NET Framework 中都有些什么东西?
    里面包含了成千上万的为客户语言提供支持的库(诸如 C#). 这些库分布在多个不同的模块中, 比如在其中定义了基本类型(basic types), 这样的话, 使用 .NET Framework 的不同语言实际都是在使用同一套类型系统, 而这个类型系统就是 CTS (Common Type System).
    除了 CTS 这个重要内容外, .NET Framework 中还包含了 CLR ( Common Language Runtime), 它负责执行所有使用 .NET 平台开发的程序.
  3. 在 .NET 平台上的编译并非直接将代码编译为汇编代码, 而是分为两个步骤的:
    1. 首先将代码编译为 CIL (Common Intermediate Language) 代码, 这个中间代码和操作系统无关, 和语言无关. 它相当于是 .NET 平台上的"字节代码".
    2. CIL 再通过 JIT (Just-In-Time) 编译器编译为本地可执行代码, JIT 是等到需要的时候才会进行编译, 就是说编译过程可能会当程序在运行的时候才会执行. 但开发者往往不需要去关注这样的细节了. 正是由于 JIT 的存在, 才能将统一的 CIL 代码通过不同的 JIT 编译器编译为在不同平台上执行的程序.
  4. 编译好的 CIL 代码存放在 Assembly 中, 它实际上是一个资源包, Assembly 包含的内容有:
    • CIL 代码文件.
    • meta data: 这个 Assembly 中包含的所有内容的信息, 可以理解为对这个 Assembly 自己的描述.
    • 可选的资源文件: 比如声音或图片.
  5. 在 .NET Framework 上, 允许将可重用的 Assembly 放到统一的位置, 这个位置就是 GAC (global Assembly cache). 而放置的方式也很简单, 就是把 Assembly 放到包含 GAC 的文件夹内即可.
  6. .NET Framework 平台程序执行的时候被 CLR 托管(managed). 意味着 CLR 可以帮助管理内存, 处理安全问题, 跨语言调试等等. 相对地, 也有非托管(unmanaged)程序, 比如某些使用 C++ 写的程序. 不过, 在 C# 中只能写托管程序.
  7. 垃圾回收: 垃圾回收是托管环境提供的一个重要功能. .NET 通过垃圾回收来释放内存空间, 从而实现自动内存管理. .NET 中的垃圾回收是定期检查内存然后清理, 而清理时机和清理的频率也并非固定, 可能一秒钟若干次, 也可能几秒钟一次. 这个在编程的时候应该了然于心.

总结一下上述流程: 首先高级语言编写代码(如C#代码)-->高级语言代码编译为 CIL-->CIL连同资源和自描述信息打包到 Assemble 发布-->运行的时候进行 JIT 编译为本地代码-->在托管环境下执行

最后来了解一下链接过程:
由于可能将代码分布在多个不同的源代码文件中, 在编译为 CIL 的过程中, 这些源码文件被链接后存放到同一个 CIL 文件, 这个过程就是链接.

你可能感兴趣的:(.NET 平台从入门到上台(3))