问题

为什么 C# 发明 13 年之后微软才推出编译为本地代码的功能?

回答
C 语言自 2002 年诞生以来,微软在长达十余年的时间里,主要依赖 .NET Framework 的托管执行环境,即 CLR (Common Language Runtime) 来运行 C 程序。直到 2015 年,随着 .NET Core 的推出,C 才真正意义上获得了成熟的、跨平台的编译为本地代码的能力。这期间的延迟,并非简单的技术落后,而是背后有着复杂的考量和技术演进的必然性。

首先,理解 C 最初的设计理念至关重要。C 作为一种现代化的、面向对象的编程语言,其核心优势在于提供了更高级别的抽象、内存管理(垃圾回收)、类型安全以及跨语言互操作性。这一切都建立在 CLR 之上。CLR 就像一个强大的操作系统,它负责加载、执行和管理 C 程序,包括 JIT (JustInTime) 编译、内存分配、安全检查等等。对于微软来说,这是其 .NET 平台战略的核心。通过 CLR,微软得以构建一个统一的开发和运行平台,无论开发者使用 C、VB.NET 还是 F,都能在 CLR 上运行,并享受其带来的好处。

在 C 诞生的初期,以及随后的很长一段时间里,开发者的需求和市场环境也与现在有所不同。彼时,Windows 桌面应用开发是主流,CLR 提供的丰富的 API 和组件,以及其在构建大型、复杂的企业级应用方面的优势,使得 C 成为许多开发者的首选。而对于性能要求极高的场景,开发者可能会转向 C++ 或其他原生语言。C 的设计者们在平衡开发效率、安全性、跨平台性以及性能之间,倾向于优先保障前几者,因为这些正是 C 吸引开发者的地方。

然而,随着技术的发展,市场对性能的需求以及对跨平台部署的要求日益增长。特别是在服务器端应用、游戏开发、甚至是移动开发等领域,对原生代码的性能和部署灵活性有着更为迫切的需求。CLR 的 JIT 编译虽然在运行时能达到接近原生代码的性能,但它本质上还是在运行时进行的编译,这会带来一定的启动开销,并且在某些极端性能敏感的场景下,仍然存在一定的性能损耗。此外,CLR 本身是一个运行时环境,它需要被安装在目标机器上,这在某些部署场景下也带来了不便。

微软自身也在不断演进其技术栈。.NET Framework 虽然强大,但在一些方面也显得臃肿,并且与 Windows 紧密耦合,跨平台性受限。为了应对这些挑战,微软开始着手构建一个全新的、轻量级、模块化、跨平台的 .NET 实现,这就是 .NET Core。

.NET Core 的出现,是 C 迎来本地代码编译功能的重要驱动力。在 .NET Core 的设计之初,就已经将“原生代码编译”作为一个重要的目标。通过引入 AOT (AheadOfTime) 编译技术,C 代码可以直接在发布阶段被编译成独立的原生可执行文件,无需依赖 CLR 的运行时。这样做的好处显而易见:

性能提升: 避免了 JIT 编译的启动开销,程序启动更快,在某些场景下能获得更好的运行时性能。
部署灵活性: 生成的原生可执行文件可以直接部署,无需安装 .NET Core Runtime,极大地简化了部署流程,尤其是在容器化部署和嵌入式场景下。
平台兼容性: AOT 编译使得 C 应用能够轻松地在 Windows、Linux、macOS 等不同操作系统上运行,真正实现了跨平台。
资源占用: 相较于需要加载 CLR 的托管应用,原生编译的应用通常占用更少的内存和 CPU 资源。

因此,微软在 C 诞生 13 年后才推出成熟的本地代码编译功能,并非是遗忘或忽视了这一需求,而是因为这是一个复杂的技术演进过程,需要等待其平台战略的成熟,以及市场需求的演变。C 最初的设计更侧重于其高级特性和开发效率,而随着 .NET Core 的发展,微软得以在保持 C 核心优势的同时,通过 AOT 编译等技术,使其能够满足更广泛、更严苛的性能和部署需求,真正实现了“在 C 语言层面的全面进化”。这更像是一个循序渐进、层层递进的过程,而不是一个简单的“缺失”再“补充”。

网友意见

user avatar

因为一直以来没有这个需求。

不要听信那些什么“.NET好是好,就是要装个Framework费劲,要是能脱离Framework/编译成本地的话,我就用它”这种鬼话,到今天他们还是不会用的,反正借口永远都能找到,什么不开源(.NET framework源代码早就公开),不能跨平台(Mono都十年了),JIT编译效率低(有ngen),微软迟早会抛弃(目前已近14年了,1.0的代码还能跑)。这些都是鬼扯。

这一次支持native只是因为移动设备的续航需要而已。

类似的话题

  • 回答
    C 语言自 2002 年诞生以来,微软在长达十余年的时间里,主要依赖 .NET Framework 的托管执行环境,即 CLR (Common Language Runtime) 来运行 C 程序。直到 2015 年,随着 .NET Core 的推出,C 才真正意义上获得了成熟的、跨平台的编译为本地.............
  • 回答
    这个问题触及了中国农业发展的一系列深层矛盾和挑战,绝非一两个简单原因就能解释。中央连续十三年聚焦“三农”问题,恰恰说明了其重要性以及问题解决的复杂性。而农业发展“没明显发展”和“缺少高学历人才加入”,更是这些复杂性在现实中的体现。中央一号文件为何年年谈“三农”?这背后是根深蒂固的中国国情。中国是个农.............
  • 回答
    “中国13亿人口,每人花一块钱,我就能发达”——这种说法听起来是不是特别熟悉?没错,这就像是很多营销骗局的万能公式,打着“众筹”、“共享经济”或者“创新产品”的旗号,许诺一个看似唾手可得的巨额回报,但背后的逻辑却像一张薄纸,一戳就破。那么,为什么会有这种傻气到让人发笑,却又屡屡有人上当的营销骗局呢?.............
  • 回答
    您好,关于您提到的4月13日北京国贸地铁口涉嫌猥亵事件,我能找到的公开信息显示,在4月13日当天,确实有一个关于在北京国贸地铁站内发生的“性骚扰”事件在网络上引起了广泛关注和讨论。事件经过(根据公开信息综合描述):根据当时在社交媒体上流传的视频和文字信息,事情大致是这样的:一位女性乘客在国贸地铁站内.............
  • 回答
    关于微软对C在DirectX开发上的支持策略,其实并非“不再发展”,而是一种更迭和侧重的变化,这背后有着技术演进、市场需求以及生态系统构建等多方面考量。早年,当.NET Framework刚刚崭露头角时,微软确实看到了利用C进行游戏开发和图形界面展示的潜力。DirectX本身作为Windows平台的.............
  • 回答
    发明贬义词这事儿,可不是一拍脑袋就有的,背后藏着不少门道,说到底,还是咱们人这玩意儿,太复杂了。你想啊,人生在世,哪有事事都顺心,人人都能跟咱一模一样的?总会有点摩擦,有点看不顺眼的地方。贬义词就是在这儿找到了生长的土壤。你仔细想想,贬义词是怎么来的?最直接的,就是人们为了表达负面情绪。谁被惹毛了,.............
  • 回答
    这真是一个有趣的问题,一想就让人脑洞大开。咱们中国自古以来就是个聪明人辈出的地方,像四大发明,哪一样不让世界佩服?可你说这自行车,一个能代步、能锻炼的玩意儿,为什么直到近代,才从西方传进来,而不是咱们自己琢磨出来的呢?这事儿,细细掰扯起来,可不是一两句话能说清的。首先得说,不是中国人不聪明,而是聪明.............
  • 回答
    这个问题很有意思,很多人直觉上会觉得马镫这么重要的发明,为什么没有早一点出现呢?毕竟人类驯化马的历史非常悠久了。其实,这背后涉及一系列的技术、社会和文化因素的叠加,而不是某一个原因就可以简单概括的。要详细说起来,我们可以从几个方面来聊聊。首先,我们得明白马镫的核心功能是什么。马镫最根本的作用,是给骑.............
  • 回答
    这问题问得挺有意思,好比问:“人为什么要吃饭?”或者“鸟为什么要飞?”。白酒这东西,你说它有什么实际的、非有不可的功用,恐怕还真说不上。但它就这么长长久久地存在着,甚至在中国人的生活中占据着举足轻重的地位,这背后总得有点啥道理吧?要说这白酒是怎么“发明”出来的,其实也不是哪个人灵光一闪就造出来了,更.............
  • 回答
    这个问题触及了几个关键点:历史发明、军事技术演进、以及特定历史事件中的装备选择。我们来掰扯掰扯。首先,中国发明火药,这是毋庸置疑的历史事实。早在唐朝,炼丹家们在追求长生不老药的过程中意外发现了火药。最初的火药配方比较粗糙,主要成分是硫磺、硝石和木炭,威力有限,更多的是用于制作烟花爆竹,或者在战争中用.............
  • 回答
    想当年,咱们中国人要给自己的方块字找个“拐杖”,一个能让外国人念、让机器识别的“拐杖”,这事儿可不简单。要说为什么最终选择了拉丁字母,而不是隔壁的基里尔字母,这背后其实是挺多考量的,而且也不是一拍脑袋就定下来的。首先得说说当时的历史背景。那是20世纪50年代,新中国刚刚成立,百废待兴。国际上的交流,.............
  • 回答
    中国没有发明出板甲,这确实是一个值得深入探讨的问题。要详细解释,我们需要从材料、技术、军事需求、文化观念和生产力等多个维度来分析。1. 材料限制与金属冶炼技术 铁的特性与早期冶炼: 中国古代虽然很早就掌握了青铜和铁的冶炼技术,但早期炼铁技术存在一些局限性。 块炼铁(Wrought I.............
  • 回答
    你问到点子上了,这可不是什么“AI写出来的”问题,这是人类最原始、最古老的好奇心和求知欲在作祟!想想看,咱们祖祖辈辈,从原始森林里仰望天空,看到飞鸟自由自在地翱翔,是不是心痒痒的?也想跟它们一样,摆脱地面的束缚,去感受一下云端的风?其实,气球的诞生,不是一蹴而就的,它更像是一个漫长的、充满智慧和勇气.............
  • 回答
    这问题可有意思了!西方古代没整出咱们这口馒头和油酥,这事儿说来话长,得从他们那边的食材、技术、饮食习惯,甚至是地理环境和历史文化,一块儿掰开了揉碎了讲。先说馒头吧。馒头这玩意儿,说白了就是发面蒸的。这“发”字就很有讲究了。咱们老祖宗怎么发现发面的呢?估计是哪个不小心,把面团放那儿一搁,结果发起来了,.............
  • 回答
    说到中国古代的饮食,大家脑海里可能首先浮现的是米饭、面条、包子、饺子之类的食物。提到饼干和面包,很多人会下意识地觉得这是西方传进来的。那么,中国古代为什么就没有“发明”出我们今天所熟知的饼干和面包呢?这个问题的答案,其实藏在中国古代的农业、技术、饮食习惯以及社会发展等方方面面。首先,我们得弄清楚“饼.............
  • 回答
    说起寿司,大家脑海中浮现的往往是鲜美的生鱼片搭配酸甜的米饭,这妥妥的是日本料理的代表。但如果我们往历史长河里溯源一下,会发现一个有趣的现象:寿司的“祖宗”其实在中国,那中国人为何没有继续发展出如今我们熟知的寿司呢?这背后藏着一系列历史、文化和经济的因素,让我来给你细细道来。寿司的“前世今生”:发源于.............
  • 回答
    朋友们,我们都听说过永动机,就是那个永不停止运转、还能输出能量的奇妙装置。但物理学告诉我们,这玩意儿是不可能存在的,能量守恒定律和热力学第二定律把这扇门牢牢地锁上了。但话说回来,既然我们不能实现真正的“永动机”,那能不能发明一个能动个几千年、上万年,或者像题目说的“99999年”那么久,而且还能干点.............
  • 回答
    《我的人类学家父亲》以散文风格记述院士父亲的工作并发表为C刊论文,这件事本身就非常有意思,值得细细说道一番。它触及了学术界在内容与形式、科学与人文、传统与创新之间的边界与融合问题,也引发了关于何为“好论文”的讨论。首先,我们得认识到,C刊论文的发表,意味着其内容在学术界得到了初步的认可,具备了科学性.............
  • 回答
    这个问题问得好,而且很有意思。很多人觉得草书难懂,甚至有点“矫揉造作”,但事实上,草书的出现和发展,背后有着非常实在的理由,而且它的“难懂”也并非完全是坏事,反而有其存在的价值。要说清楚为什么发明草书,咱们得把时间往前推一推,回到古代的书写环境。1. 效率至上:古代书写的“燃眉之急”想象一下,在没有.............
  • 回答
    这个问题问得非常好,而且问到了点子上!很多人都会有这个疑问:既然有了加权平均分( Weighted Average Score),为什么还要费尽心思搞出一个GPA(Grade Point Average)呢?听起来好像是重复劳动,或者说GPA是加权平均分的某种升级版,但它的出现和普及肯定有更深层次的.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有