第16页到第33页

昨天没好好学习,今天补上。

不安全代码,这个只有在托管类的才能看到。JIT验证和编译代码的时候可以有效控制安全性。在代码执行前添加了一层果然有用,可以做很多事情。不安全代码通过两个attribute来规范用户的使用习惯。

代码的安全性是CLR的JIT来验证的,它调用被依赖的程序集的元数据来验证。input(IL code,referred assembly metadata)。

作者承认了一点C#编译出来的工程,它的知识产权其实是没有办法保障的。他提出的一种最有效的方式,让敏感的代码部分用native code实现,通过跨语言op来实现知识产权保护。

NGen.exe 是想到的预先把IL编译为native code来执行,想提高性能,节约内存,降低程序集。然后,效果未必如预期所想,它的编译看来不是全局编译,能够独立于CLR而执行的,还是得用到CLR的,这是最根本的,所以综合而言,没有那么强大。

实践下来发现大部分程序NGen.exe的性能反而慢5%。个人来看,这是NGen.exe没有做好,应该是team没有花费足够的时间和精力来做这个。毕竟普通的app,性能要求并没有那么苛刻。C#的定位不在于此。

遇到个奇怪的问题,书中前面一部分提到IL指令是typeless,后面又说CLR是围绕类型展开的,提供了CTS来作为基础映射集映射类型。

它的意思应该是IL指令的操作数是没有类型的限制?听起来也不对,验证的过程中就会验证IL指令的类型。所以综合而言,前面那一部分的描述是不准确的,IL指令也是有类型需求的。CTS是定义在IL层面的。

protected internal居然是并起来的效果(对于CTS层面的family or assembly),程序集内部或者子类可以访问。

将CLR和COM进行了对比,他们都实现了跨语言。但CLR本身是通过搭建了平台实现了跨语言,所有的语言都编译为遵循CTS,提供元数据描述,基于CLR运行的IL代码,所以能够互相调用。而COM则是一套通信标准,不同的语言通过COM协议进行通信,运行在操作系统上。虽然他们实现了相同的目标,但是走的路子不一样。现在来看,CLR更简单,容易使用。COM实在是烦外加难用的很。

CTS定义了CLR提供的所有类型,用IL汇编语言都可以实现它的所有功能。然后,高级编程语言都是暴露了CTS的部分。所有编程语言的交集就是被通用的,微软估计挑选了不少语言,然后找出了这个子集,然后把它提交去哪儿,起了个名字叫做CLS。

利用一个CLSCompliant attribute就能够检测现在的code是否符合CLS规范。它将会检查public以及protected的field,method,member以及event。

csc.exe的编译条件放在响应文件里,响应文件。。。一个大大的吐槽,这中文翻译的,也是醉了。anyway,这个文件是用来避免多次输入的,很方便的一种工具,如果不用ide,而用类似于makefile这样的东西,这个文件就有用了,不过现在开发大都用vs,估计这也就是个概念股了。

可以回忆起来,一个托管模块首先是一个PE文件,所以它有一个PE头。作为一个托管模块,它有一个CLR头,

OK,今天就看到元数据概述这儿,下一个部分元数据描述是挺重要的额一份。而现在我旁边坐了个感觉很有魅力的妹子,我心有旁骛,就早点撤退吧。勾引妹子?不行,年龄大了,小姑娘很喜欢,但是我真的自己年龄大了。给自己设置bar?这样也不好。anyway,不能这样盲目地投入感情了。撤退!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值