![]() |
1
2
一天下来, 编程语言被编译成运行它们的CPU的本机代码,因此任何语言(不仅仅是编译成MSIL的语言)都可能会遇到同样的问题。 对于本质上只是彼此的语法变体的语言(例如C与VB.NET),我不认为会有太大的区别。但是如果两种语言的差异太大(例如C语言和F语言),那么你就不能真正地进行有效的比较,因为你不能真正地写出两个“等价物” 不平凡的 |
![]() |
2
8
不能保证语言为等价代码生成相同的IL,所以我可以有把握地说,不能保证所有.NET语言都具有相同的性能。 但是,如果它们产生相同的IL输出,则没有区别。 |
![]() |
3
7
但是,BCL(以及其他语言使用的库)的性能确实是相同的,无论您从哪种语言调用它们—这意味着如果您使用一些库进行昂贵的计算或渲染,而不自己进行复杂的计算,你用哪种语言来称呼它其实并不重要。 我认为思考这个问题的最好方法不是思考语言,而是思考这些语言中可用的不同特性和编程风格。以下列出了其中一些:
|
![]() |
4
4
我敢肯定,在某些情况下,当使用一种.NET语言编写时,惯用代码的性能要比另一种语言稍高一些。然而,退一步,这又有什么关系呢?你心里有业绩目标吗?即使在一种语言中,您也常常可以做出影响性能的选择,有时您需要在性能与可维护性或开发时间之间进行权衡。如果您没有一个目标来确定什么是可接受的性能,那么就不可能评估语言之间的任何性能差异是有意义的还是可以忽略的。 此外,编译器也在不断发展,所以今天的相对性能并不一定能持续下去。JIT编译器也在不断发展。甚至处理器设计也是可变的和不断发展的,因此相同的JITTed本机代码可以在具有不同缓存层次结构、管道大小、分支预测等的处理器之间执行不同的操作。 话虽如此,但可能有一些基本上适用的广泛规则:
|
![]() |
5
0
这种语言可以被认为是IL代码的“前端”,因此两种语言之间的唯一区别是编译器将生成相同的IL代码还是效率更低/更高的代码。 从我在网上阅读的大部分内容来看,似乎托管C++编译器是优化IL代码的最好的工作,尽管我没有看到任何显示C语言的C++语言的显著差异。
F级#
C级#
|
![]() |
Thomas · 使类型别名在F中不可互换# 3 年前 |
![]() |
sdgfsdh · 我该怎么说。使用异步转换函数进行收集? 7 年前 |
![]() |
Soldalma · 我可以实例化包含顶级副作用值的类吗? 7 年前 |
![]() |
matekus · F#-包含数字的字符串的自然排序 7 年前 |
![]() |
matekus · F#类型匹配-无法创建映射或匹配记录 7 年前 |
![]() |
Rob Lyndon · 未找到F#ProvidedTypes文件 7 年前 |
![]() |
red-swan · 如何将intro ML.Net演示翻译为F#? 7 年前 |
![]() |
jkone27 · F#-在编译时从字符串生成简单的空类型 7 年前 |