当前位置:编程学习 > C#/ASP.NET >>

.net FCL类的小疑问

看《.net框架》的时候Jeffrey Richter建议我们多使用FCL类型名,而少使用编译器所支持的基元类型。
FCL类型?貌似就是像System.Int32,System.Boolean这样的类型。

我的疑问是
1.FCL这些类库是用什么语言写的?是IL汇编语言写的吗?
2.比如我们要做一个编译器,那么我们是不是首先要定义生成的中间代码和机器指令的对应关系,然后再去实现代码编译这一块的内容?(我觉得微软在.net上是首先做好了IL语言和机器指令的对应关系,然后再在上层开发的多种编程语言。)
大家都来说说吧 --------------------编程问答-------------------- FCL类型,没有上下文,不知道什么意思,但是我觉得指的是FCL定义的类型,FCL是庞大的类库,里面定义的所有类型都是FCL类型。甚至包括Random Regex DataSet

1.FCL这些类库是用什么语言写的?是IL汇编语言写的吗?
大部分是C#写的。
2.比如我们要做一个编译器,那么我们是不是首先要定义生成的中间代码和机器指令的对应关系,然后再去实现代码编译这一块的内容?(我觉得微软在.net上是首先做好了IL语言和机器指令的对应关系,然后再在上层开发的多种编程语言。)
如果你为.NET Managed编写语言,你只需要产生IL就可以了。不需要代码生成,那是JIT干的事情。本质上说,C# VB都是IL的马甲语言而已。微软并行地开发编译器和JIT,不存在什么先后关系。 --------------------编程问答-------------------- 看《.net框架》的时候Jeffrey Richter建议我们多使用FCL类型名,而少使用编译器所支持的基元类型。
任何建议都要看它的适用场合。就你这个建议来说,没有什么根据。

倒是如果开发FCL本身,应该尽量使用CLS兼容的类型,因为者有这样,才能保证被所有的语言都支持调用。请注意前提,是开发FCL本身,而不是一般的应用程序。一般的应用程序,应该尽量使用语言本身的关键字,这样的代码更优雅,更符合语言本身的习惯。 --------------------编程问答--------------------
引用 1 楼 caozhy 的回复:
FCL类型,没有上下文,不知道什么意思,但是我觉得指的是FCL定义的类型,FCL是庞大的类库,里面定义的所有类型都是FCL类型。甚至包括Random Regex DataSet

1.FCL这些类库是用什么语言写的?是IL汇编语言写的吗?
大部分是C#写的。
2.比如我们要做一个编译器,那么我们是不是首先要定义生成的中间代码和机器指令的对应关系,然后再去实现代码编译这一块的内容?(我觉得微软在.net上是首先做好了IL语言和机器指令的对应关系,然后再在上层开发的多种编程语言。)
如果你为.NET Managed编写语言,你只需要产生IL就可以了。不需要代码生成,那是JIT干的事情。本质上说,C# VB都是IL的马甲语言而已。微软并行地开发编译器和JIT,不存在什么先后关系。

有点糊,FCL和上层的C#、VB、F#在层次上是一种什么关系呢?因为你说FCL大多数是C#开发的 --------------------编程问答--------------------
引用 3 楼 wangzhen199009 的回复:
Quote: 引用 1 楼 caozhy 的回复:

FCL类型,没有上下文,不知道什么意思,但是我觉得指的是FCL定义的类型,FCL是庞大的类库,里面定义的所有类型都是FCL类型。甚至包括Random Regex DataSet

1.FCL这些类库是用什么语言写的?是IL汇编语言写的吗?
大部分是C#写的。
2.比如我们要做一个编译器,那么我们是不是首先要定义生成的中间代码和机器指令的对应关系,然后再去实现代码编译这一块的内容?(我觉得微软在.net上是首先做好了IL语言和机器指令的对应关系,然后再在上层开发的多种编程语言。)
如果你为.NET Managed编写语言,你只需要产生IL就可以了。不需要代码生成,那是JIT干的事情。本质上说,C# VB都是IL的马甲语言而已。微软并行地开发编译器和JIT,不存在什么先后关系。

有点糊,FCL和上层的C#、VB、F#在层次上是一种什么关系呢?因为你说FCL大多数是C#开发的


使用C#开发,通过C#编译器得到IL,等价于直接使用IL开发,但是后者花费的代价太大了,明白么。

好比Windows操作系统大部分的代码使用C编写的(UNIX也是),包括Win32 API中的函数,而我们也可以用C作为应用程序的编程语言,或者用任意的语言。 --------------------编程问答-------------------- 如果把CLR比喻成OS,那么FCL相当于OS的API。
理论上说,任何程序代码都可以翻译成IL在CLR上跑。 --------------------编程问答--------------------
引用 4 楼 caozhy 的回复:
Quote: 引用 3 楼 wangzhen199009 的回复:

Quote: 引用 1 楼 caozhy 的回复:

FCL类型,没有上下文,不知道什么意思,但是我觉得指的是FCL定义的类型,FCL是庞大的类库,里面定义的所有类型都是FCL类型。甚至包括Random Regex DataSet

1.FCL这些类库是用什么语言写的?是IL汇编语言写的吗?
大部分是C#写的。
2.比如我们要做一个编译器,那么我们是不是首先要定义生成的中间代码和机器指令的对应关系,然后再去实现代码编译这一块的内容?(我觉得微软在.net上是首先做好了IL语言和机器指令的对应关系,然后再在上层开发的多种编程语言。)
如果你为.NET Managed编写语言,你只需要产生IL就可以了。不需要代码生成,那是JIT干的事情。本质上说,C# VB都是IL的马甲语言而已。微软并行地开发编译器和JIT,不存在什么先后关系。

有点糊,FCL和上层的C#、VB、F#在层次上是一种什么关系呢?因为你说FCL大多数是C#开发的


使用C#开发,通过C#编译器得到IL,等价于直接使用IL开发,但是后者花费的代价太大了,明白么。

好比Windows操作系统大部分的代码使用C编写的(UNIX也是),包括Win32 API中的函数,而我们也可以用C作为应用程序的编程语言,或者用任意的语言。

比如工作组A开发编译器,工作组B做JIT开发。他们事先定义好了IL的语法。
A就负责将高级的计算机语言到IL的转化。
B就负责IL到机器指令的转化
因为IL的语言是公共已知的,所以他们可以并行的开发。可以这样理解伐? --------------------编程问答-------------------- --------------------编程问答--------------------
引用 6 楼 wangzhen199009 的回复:
Quote: 引用 4 楼 caozhy 的回复:

Quote: 引用 3 楼 wangzhen199009 的回复:

Quote: 引用 1 楼 caozhy 的回复:

FCL类型,没有上下文,不知道什么意思,但是我觉得指的是FCL定义的类型,FCL是庞大的类库,里面定义的所有类型都是FCL类型。甚至包括Random Regex DataSet

1.FCL这些类库是用什么语言写的?是IL汇编语言写的吗?
大部分是C#写的。
2.比如我们要做一个编译器,那么我们是不是首先要定义生成的中间代码和机器指令的对应关系,然后再去实现代码编译这一块的内容?(我觉得微软在.net上是首先做好了IL语言和机器指令的对应关系,然后再在上层开发的多种编程语言。)
如果你为.NET Managed编写语言,你只需要产生IL就可以了。不需要代码生成,那是JIT干的事情。本质上说,C# VB都是IL的马甲语言而已。微软并行地开发编译器和JIT,不存在什么先后关系。

有点糊,FCL和上层的C#、VB、F#在层次上是一种什么关系呢?因为你说FCL大多数是C#开发的


使用C#开发,通过C#编译器得到IL,等价于直接使用IL开发,但是后者花费的代价太大了,明白么。

好比Windows操作系统大部分的代码使用C编写的(UNIX也是),包括Win32 API中的函数,而我们也可以用C作为应用程序的编程语言,或者用任意的语言。

比如工作组A开发编译器,工作组B做JIT开发。他们事先定义好了IL的语法。
A就负责将高级的计算机语言到IL的转化。
B就负责IL到机器指令的转化
因为IL的语言是公共已知的,所以他们可以并行的开发。可以这样理解伐?


我们不了解微软内部的工作情况。不好猜测。

不过可以介绍一些披露出来的情况,甚至很让人吃惊。64bit的JIT编译器不是JIT团队写的,而是C++编译器的后端团队写的。因为后者在代码生成和优化方面水平更高。换一句话说,C#程序和C++共用一个后端编译器。不过微软正在开发下一代的JIT,将重新统一各个平台的JIT。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,