C#、VB.net、J#等语言 是同一个编译器吗?

querystringcom 2014-08-22 10:42:17
如题,如果不是 那中间语言是不是也不相同?
...全文
99 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2014-08-22
  • 打赏
  • 举报
回复
引用 3 楼 querystringcom 的回复:
[quote=引用 2 楼 caozhy 的回复:] 当然不是。 首先语言和编译器无关,其次语言和它编译的目标也无关。 严格来说,现在的C#编译器已经是多目标的编译器了,常规代码被编译为IL,但是其实LINQ调用被编译为存储表达式,而C#还可以编译为Sliverlight的运行时支持的中间语言(可以视作IL的精简版)以及本地代码。
IL应该是由CLR中的JIT编译器再次编译成本地代码才能运行的吧, 像你说的LINQ调用被编译为存储表达式,是不是代表着它不再被托管,没有被托管的话CLR就对他不起作用了吧,那它如何在本地执行呢,谢谢,有点乱[/quote] 你可以理解为编译器将抽象语法树保存在了程序中,而没有翻译成最终代码。 这些存储的表达式可以被LINQ Provider模块理解和翻译成SQL,而SQL被数据库系统解释执行(在SQL那一端)。 当然LINQ Provider并非都是将存储表达式翻译为SQL的,你甚至可以写一个Provider将存储表达式拿到另一台计算机上执行。
querystringcom 2014-08-22
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
当然不是。 首先语言和编译器无关,其次语言和它编译的目标也无关。 严格来说,现在的C#编译器已经是多目标的编译器了,常规代码被编译为IL,但是其实LINQ调用被编译为存储表达式,而C#还可以编译为Sliverlight的运行时支持的中间语言(可以视作IL的精简版)以及本地代码。
IL应该是由CLR中的JIT编译器再次编译成本地代码才能运行的吧, 像你说的LINQ调用被编译为存储表达式,是不是代表着它不再被托管,没有被托管的话CLR就对他不起作用了吧,那它如何在本地执行呢,谢谢,有点乱
threenewbee 2014-08-22
  • 打赏
  • 举报
回复
当然不是。 首先语言和编译器无关,其次语言和它编译的目标也无关。 严格来说,现在的C#编译器已经是多目标的编译器了,常规代码被编译为IL,但是其实LINQ调用被编译为存储表达式,而C#还可以编译为Sliverlight的运行时支持的中间语言(可以视作IL的精简版)以及本地代码。
LoveNet_ 2014-08-22
  • 打赏
  • 举报
回复
IL是一样的,编译器不同

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧