当前位置: 首页 > news >正文

托管执行和公共语言基础结构

    处理器不能直接解释一个程序集。程序集采用的是另一种语言,即公共中间语言(Common Intermediate Language, CIL),或者简称为中间语言(IL)。

    注意:CIL的另一种说法是MSIL,即Microsoft IL。本书采用的是CIL这种术语,因为该术语已被CIL标准采纳。从事C#开发的人在相互交流时,IL这个词显得很贴切,因为他们假定IL是指CIL,而不是其他类型的中间语言。

 

    C#编译器只是将C#源代码文件转化成这种中间语言。为了将CIL代码转换成处理器能够理解的机器码,还是执行一个额外的步奏(该步奏通常是执行时完成的)。这个步奏涉及C#程序执行中一个重要的元素:VES(virtual Execution System, 虚拟执行系统)。VES偶尔也被人们称为运行时,他根据需要来编译CIL代码,这个过程称为及时编译或者JIT编译(just—in—time compilation)。假如代码在像“运行时”这样的一个“代理”的上下文中执行,就将这些代码称为托管代码(managed code),而在“运行时”的控制下执行的过程称为托管执行(managed execution)。之所以叫做托管代码,是因为“运行时”管理着诸如内存分配,安全性和JIT编译等方面,从而控制了主要的程序行为。执行过程中不需要“运行时”的代码称为“非托管代码”(umanaged code)。

   VES规范被包含在一个包容面更广的规范中,即CLI(Common Language Infrastructure,公共语言基础结构)规范。作为一个国际性标准,CLI包含了以下几个方面的规范。

  • VES 或 “运行时”。
  • CIL。
  • 为了语言操作性提供支持的一个类型系统,称为CTS(Common Type System,公共类型系统)。
  • 如何编写能通过各种CLI兼容语言访问的库的指导原则,这部分内容具体放在公共语言规范(Common Language Specification,CLS)中。
  • 使各种服务能被CLI(包括程序集的布局过文件格式规范)识别的元数据。
  • 一个公共编程框架,称为基类库(Base Class Library,BCL),所有语言的开发者都能利用它。

假如在一个CLI实现的上下文中运行,那么程序员不需要直接编写代码,就能够使用大量服务和特性,包括如下方面。

  1. 语言互操作性:不同源语言之间的互操作性。语言编译器将每一种源语言转换成相同的中间语言(CIL),从而实现这种互操作性。
  2. 类型安全:检查类型间的转换,确保只有相互兼容的类型才会转换,这有助于防止缓冲区溢出——造成安全问题的一个主要诱因。
  3. 代码访问安全性:程序集开发者的代码有权在计算机上执行的证明。
  4. 垃圾回收:一种内存管理机制,能自动释放由“运行时”为数据分配的空间。
  5. 平台可移植性:允许一个程序集在多种操作系统中运行。要做到这一点,一个显而易见的限制就是不能使用平台相关的库,所以,同java一样,不可避免地有一些“个性”问题需要解决。
  6. BCL:提供开发者能够(在所有CLI实现中)依赖的一个大型代码库,使他们不必亲自编写这些代码。

 

 

转载于:https://www.cnblogs.com/cwbo-win/archive/2012/12/24/2830698.html

相关文章:

  • iOS 8 自适应 Cell
  • 云计算:大数据时代的系统工程(二)
  • JS组件系列——封装自己的JS组件,你也可以
  • iPad应用开发实践指南:菜鸟如何用ios 5开发ipad上的复杂应用程序
  • swift-var/let定义变量和常量
  • Django数据库迁移组件South的试用 1
  • ios多线程操作(五)—— GCD串行队列与并发队列
  • 推荐 30 款最好的免费项目管理软件
  • 【BZOJ2152】聪聪可可
  • 121231异机恢复oracle数据库
  • Atitit  文件上传  架构设计 实现机制 解决方案  实践java php c#.net js javascript  c++ python...
  • lvs+keepalived负载均衡及高可用
  • android 权限列表permission
  • rhle,centos,ubuntu相关工作笔记
  • float:left和float:right并不是没什么用。
  • Angular6错误 Service: No provider for Renderer2
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • JavaScript函数式编程(一)
  • Linux中的硬链接与软链接
  • magento 货币换算
  • Mithril.js 入门介绍
  • Travix是如何部署应用程序到Kubernetes上的
  • Vue ES6 Jade Scss Webpack Gulp
  • Zsh 开发指南(第十四篇 文件读写)
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 翻译:Hystrix - How To Use
  • 分享一份非常强势的Android面试题
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 树莓派 - 使用须知
  • 小李飞刀:SQL题目刷起来!
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​渐进式Web应用PWA的未来
  • ​如何防止网络攻击?
  • $L^p$ 调和函数恒为零
  • (16)Reactor的测试——响应式Spring的道法术器
  • (2)STM32单片机上位机
  • (C语言)共用体union的用法举例
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (十) 初识 Docker file
  • (十三)Flask之特殊装饰器详解
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)fock函数详解
  • (转)jQuery 基础
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET BackgroundWorker
  • .net 使用ajax控件后如何调用前端脚本
  • .Net 知识杂记
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .net反编译工具