我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 2970|回复: 4

现代C++与受控代码的对弈:性能 vs 生产力

[复制链接]
  • TA的每日心情
    难过
    2024-5-26 18:39
  • 签到天数: 2 天

    [LV.1]初来乍到

    5734

    主题

    189

    回帖

    4022

    积分

    管理员

    积分
    4022

    社区居民终身成就奖宣传大使奖社区明星

    发表于 2012-4-27 16:27:04 | 显示全部楼层 |阅读模式

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×
    英文原文:Modern C++ vs Managed Code: Performance vs Productivity
      最近,一场有趣的讨论在微软公司的 Herb Sutter 和 Mono 项目的 Miguel de Icaza 之间展开,话题是关于本地代码和 Just-In-Time 编译器的优点对比,双方对各自的观点都提出了比较深刻见解。把他们的观点汇总起来,其实就可以很好地反映出本地代码和受控代码的发展现状。
      Herb Sutter 的观点由他对于一个问题的回答而展开。这个问题是:“什么时候,优秀的 JIT 技术才能拯救受控代码?”Sutter 对此的观点可总结如下:虽然 C++ 和受控代码经常被人们拿来针锋相对地比较,但是,这两种语言在性能和生产力方面做出的基本权衡策略是完全不同的。

                                   
    登录/注册后可看大图

    Herb Sutter 世界首屈一指的 C++ 专家

      Sutter 认为,C++的策略,主要是在侧重在性能方面的提升,而不同的是,受控代码(也就是像 Java/.NET 这些基于虚拟机的代码)则侧重在如何提高程序员的生产力。更深一步,Sutter 表示:首先,JIT 编译技术并不是问题的主要矛盾。主要矛盾来自于更根本的因素,受控语言在设计伊始就考虑如何提高程序员生产力方面深思熟虑,而不惜以牺牲程序的运行的效率为代价
      Miguel de Icaza 在了解了 Sutter 的观点后,随后也提出了自己的观点。
      “受控语言的设计者们在进行设计的时候,优先考虑的是语言的安全性问题,然后才是语言的性能。比如,对数组的越界访问是一种非法操作,当这种操作发生时,受控语言会让程序立刻中止运行,而不是等到其直接造成系统崩溃,或者是留下巨大的安全隐患漏洞。”

                                   
    登录/注册后可看大图

    Miguel de Icaza, Linux 技术界的传奇人物,GNOME 和 Mono Project 的核心人物

      在关于基于 JIT 的语言方面,两位牛人对其是否能产生优化代码这一问题,有截然不同的观点。
      “其次,就算是 JIT 本身的问题,一个 JIT 编译器产生的编译代码肯定不可能比常规的优化编译器产生的编译代码更好。因为 JIT 编译器的主要目的是怎么让程序编译得更快,而不是如何产生优化的代码(让其运行得更快)”,Herb Sutter 这样说道。
      但是,我对上述的说法有点不赞同。总的来说,上面的说法对于早期的 JIT 编译器没有问题,而且 Sutter 所指的可能就正是 Microsoft 早期的 .NET JIT 编译器。但是,现在的 JIT 编译器已经完全不同于他理解中的那种了。 Miguel de Icaza 回应道。
      de Icaza 认为 JIT 编译器必须回应对产生代码质量的质疑:“…在产生代码质量和产生代码的速度的平衡性方面。JIT 编译器更加侧重于如何缩短编译代码的时间,而不是产生代码的质量。”然而,Mono 允许用户使用 LLVM 编译框架,产生更高质量的代码。de Icaza 注释道:“【Mono 用户】LLVM 编译框架,也就是苹果 Mac OS Lion 操作系统使用的编译器,只要这个编译器进步了,Mono 产生的代码的质量也会随之进步。”
      选择 LLVM 编译框架做后端,能让 Mono 用户有机会根据他们特定项目的需要进行选择,是要提高编译的速度,还是要提高产生代码的质量。这就给项目提供了更大的灵活性,在开发进行中,需要反复进行编译的时候,可以选择提高编译速度来降低每次编译的时间。当项目接近结束的时候,则可以选在提高编译代码的质量,来提高终端用户的体验。
      尽管 JIT 选择更加侧重语言的安全性,而不是语言的执行效率,但这并不意味着受控代码的运行时(runtime)执行效率将来不会改进。de Icaza 提出了几个可改进的方面,包括意向,扩展虚拟机,限制动态语言特性,以及更好地支持语言特性和本地硬件之间的映射等等。
      Sutter 则发表了下列评论,作为他最初观点的补充。他认为 C++ 从根本上就具有性能优势。
      “就像‘保健品’和‘处方药’这两个东西有本质的区别一样,在语言性能方面,C++永远只是吃‘保健品’强身健体,而受控语言则是在吃‘处方药’治病救人。受控语言采取了那么多“卓越的手段”提升运行性能,也都是属于吃药治病的范畴。而且“保健品”吃得少,“处方药”吃得多,这种局面是无法避免的。你无法忽略“保健”的作用(某种程度上,你先“保健”,如果“保健”不行,再吃药也不迟。但是,如果你一开始不“保健”,等拖到需要“吃药”的程度,这个时候再“保健”就没有任何意义了。),如果你真的很在意程序的运行性能的控制,那就应该以优化程序运行性能为重(而不是用什么办法来补救性能的缺失)。
      不知道读者对 C++ 和受控代码之间的权衡有什么看法。开发者会推进受控代码不断发展,来弥补其在性能上的不足么?新的 C++ 标准的语言特性又是否需要重新审视一下受控代码开发者的观点呢?
    回复

    使用道具 举报

    该用户从未签到

    3

    主题

    3952

    回帖

    4862

    积分

    二级逆天

    积分
    4862

    社区居民忠实会员最爱沙发终身成就奖优秀斑竹奖

    QQ
    发表于 2014-9-9 09:17:57 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    5 天前
  • 签到天数: 179 天

    [LV.7]常住居民III

    44

    主题

    5329

    回帖

    4485

    积分

    二级逆天

    积分
    4485

    社区居民忠实会员社区劳模原创达人终身成就奖优秀斑竹奖特殊贡献奖原创先锋奖

    QQ
    发表于 2023-12-7 09:13:13 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    5 天前
  • 签到天数: 179 天

    [LV.7]常住居民III

    44

    主题

    5329

    回帖

    4485

    积分

    二级逆天

    积分
    4485

    社区居民忠实会员社区劳模原创达人终身成就奖优秀斑竹奖特殊贡献奖原创先锋奖

    QQ
    发表于 2024-1-29 11:57:18 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 206 天

    [LV.7]常住居民III

    34

    主题

    1万

    回帖

    3万

    积分

    三级逆天

    积分
    34710

    终身成就奖特殊贡献奖原创先锋奖社区居民忠实会员社区劳模最爱沙发原创达人优秀斑竹奖宣传大使奖

    QQ
    发表于 2024-2-12 19:21:02 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    每日签到,有金币领取。


    Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

    本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

    ( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

    平平安安
    TOP
    快速回复 返回顶部 返回列表