现代C ++是否可以代替C#?微软是否在推动开发人员采用C ++?[关闭]


91

我听说过现代C ++的流行,也有一些关于从C#或其他类似C的语言迁移回C ++的话题。

我了解C ++ 11的功能,但是我想听听您的经验,尤其是从C#迁移到C ++的开发人员的经验。

更重要的是,微软是否要求开发人员使用C ++?如果是,为什么?


16
我认为C ++一直是使用更广泛的语言,因为它比C#更加完善并且易于移植。我不认为它会取代C#。对于基于Windows的业务应用程序,C#作为一种易于获取且易于完成的语言仍将受到大量需求。C ++从未真正消失过。最近它才刚刚复苏。
KChaloux 2012年

2
我希望不是。Java和C#对开发人员来说是福音,它们仍在不断发展。
Jesse C. Slicer 2012年

4
C ++和C#都是工具:为特定工作选择最佳工具。例如,如果您想编写跨平台代码,则可能要使用C ++。如果您想要不需要安装.NET运行时的小型应用程序,则可能要使用C ++(CRT静态链接);如果您想以RAD方式为Windows开发一些GUI工具,则可能要使用C#和WinForms。等
C64先生2012年

6
这是一个很好的问题,也许需要重新措辞。它不是另一种语言A相对于语言B。而是确切地说,微软的立场是什么,它为什么会发生变化以及它们的发展方向,因为事实是MS足够大,以至于当他们施加影响时,至少会出现较小的山脉移动。是的,在这种情况下,它们肯定会产生影响。
DXM 2012年

9
让我们让每个人都保持文明。不能容忍无礼。
maple_shaft

Answers:


95

是的,您的怀疑是正确的。微软正在推动C ++重新流行起来。

我现在找不到它,但是不久前,我看到一个微软大人物的演讲,整个内容面向开发人员,即将推出Windows 8,尤其是WinRT(以及.NET框架的替代品)。作为Win32 API)。

他有一个时间表,他解释了各种压力如何影响某些时间流行的技术。因此,起初人们想要速度,所以他们都使用C / C ++(两种独立的语言)进行编码。随着硬件变得越来越快,人们的注意力从执行速度转移到了开发速度上,因此高级语言变得越来越流行。

但是,现在的重点越来越转向移动和基于ARM的计算机(Windows 8是第一个针对ARM编译的Windows版本),许多人认为它们将变得越来越流行,并且其中一些将完全取代台式机。因此(至少在Microsoft的眼中)重点重新放在C ++上,因为现在我们在乎电池寿命。更高级别的代码=更多指令=需要更多果汁。

为了支持向C ++的过渡,他们引入了一个全新的Windows 8编程API,称为WinRT(上次我检查过,总之就是这个名字)。该API在其提供的功能范围内遵循.NET Framework的主题,但对于希望编写HTML 5 / Javascript应用程序的人来说,任何使用C ++(通过COM接口),C#或Javascript编码的人都可以使用。他们还将XAML(最新的UI框架WPF中使用的技术)引入C ++。

因此,对我来说,这表明微软肯定比过去更加关注C ++。

更新#1:

由于我刚刚为此获得了一个“不错的答案”徽章,我想也许我应该回来,a)澄清一些事情,b)使事实检查警察感到高兴,因为众所周知,在技术论坛上任何不准确的事情都可能导致战争持续多年。

  1. WinRT不能替代.NET框架,但它是MS Windows开发人员现在拥有的另一种替代方案,MS一直在大力推动人们朝这个方向发展。尽管普通的桌面应用程序也应该能够利用WinRT,但它似乎(如果不是100%准确,请大放异彩)主要是针对Modern UI应用程序。话虽如此,MS仍在强烈要求人们改用a)现代UI应用程序,b)开始使用WinRT,以便平衡转移的人们使用.NET Framework的比例很可能下降。

  2. C ++绝不会替代高级语言,例如C#或python。就像那些语言永远不会取代C ++。这可能是OP问题中最具争议的部分。但这全都与平衡有关,事实是:

    • C ++社区(其中MS占了很大一部分)正在推动强势回归,以将C ++定位为低功率设备的良好语言,近来其市场份额一直在疯狂增长。如果您不相信我,请搜索去年开始的“ GoingNative”系列讲座。
    • 在Microsoft的所有努力和影响下,C ++的使用率肯定会上升,而C#可能会有所下降。这就是MS所追求的目标,正如我在上面的评论中所述,当MS将其资金投入到一个想法之后时,他们的确改变了整个行业。我可能会得到一些人的回应,他们会争辩说:“什么行业,我一直在使用Linux”,对此我唯一的回应是,醒来!是的,还有其他操作系统,但是大多数台式机市场,无论是消费者还是企业,目前都是Windows,而任何希望最大化利用自己的时间价值的认真的开发人员都非常愚蠢,不会瞄准那部分台式机市场。

因此可以得出结论:是的,MS正在推动C ++回归,因此很有可能会增加其流行度。不,C ++永远不会取代C#。

更新#2:

我不知道为什么,但是当现实充满了灰色阴影时,技术界往往会以非常绝对的黑白方式看待事物。这是对此帖子中添加的几个新评论的回应:

  1. .NET框架不会很快(或永远不会消失)。自90年代以来,窗户所使用的几乎所有技术都以某种形式或方式存在。因此,对于那些依附于.NET框架的人:a)不必担心它会消失,并且b)不再争论它的好处,好像您的生活依赖它一样,您的API是安全的。

  2. WinRT确实重新实现了Win32和.NET Framework API过去提供的许多功能。想要使用该功能的人可以选择使用WinRT,.NET框架,还是继续使用Win32 API(这两种选择都没有死)。如果WinRT现在不支持轻松创建Web应用程序,则很有可能会在将来支持它们。

微软宣布的立场是,WinRT是一个大型框架,这使微软有机会从头开始,并利用Win32 API和.NET框架本身的经验教训构建了API。我确实尝试寻找该视频,但仍然找不到,但是发言人提到的一件事是.NET框架的某些区域本可以定义为更好/更简单/更干净,并且WinRT公开了相同的功能在新的清洁器界面中。


7
这是Herb Sutter在C ++及更高版本上的演讲,题目为“为什么使用C ++?” 第9频道上有一个视频,尽管我目前无法访问它,可能是因为Redmond主持了一个大型流媒体活动。您的逻辑是有道理的,但是这些类型的声明确实需要使用一些参考来备份,因为这对于Microsoft以及使用Microsoft产品开发软件的任何其他人来说都是重大的战略转变。
罗伯特·哈维

13
WinRT不能替代.NET。请检查您的事实。
欣快的2012年

4
@Euphoric:换句话说,.NET框架永远不会替代Win32 API。同时,当C#出现时,许多人切换了,忘记了对Windows DLL中进行C样式的函数调用的一切。MS现在正在推动相同的开关。是的,.NET框架将在WinRT的框架下继续存在,并确保您仍然可以使用.NET框架,但是MS一直在推动人们转向新的框架。
DXM 2012年

21
@gbjbaanb-这是100%错误。首先,所有.NET始终是Win32库的一个非常好的包装器。其次,Full.NET配置文件和“ WinRT” .NET配置文件之间只有微小的区别,主要区别是删除了10到15年前实施不佳的大量内容,并替换为设计更好的代码。直到他们摆脱Win32库为止,.NET一直存在。您的评论表明,关于.NET和C#语言本身,它完全不了解。
Ramhound 2012年

6
更不用说对于Web应用程序,.NET很棒。如果曾经是“替代品”,那么它将用于桌面应用程序,而不是Web应用程序。
乔治·斯托克2012年

22

不,Windows 8就是使用您需要(或知道)完成工作的任何语言。同样支持JavaScript,.Net语言(C#)和C / C ++。

什么都不会被取代,最终还是要由开发人员来决定。但是,人们一直在追求更好的电池寿命,这使WinRT变得更容易。

C ++获得更多支持的游戏是个例外,尤其是在Windows Phone 8上,而托管语言没有本机支持(又名xna)。


1
+1微软渴望在智能手机和平板电脑市场采用Windows 8。苹果单从iPhone上获得的收入就比微软多。一个障碍是与已建立的平台相比,用于Windows Phone /平板电脑的应用程序很少。因此,他们希望所有人都可以使用自己喜欢的语言来创建应用。C#,C ++或JavaScript。
MarkJ 2012年

我不知道他们为什么决定从Windows Phone 7开始放弃对本地c / c ++的支持。从那天起,Windows + Windows Mobile已从90%的主要平台变成了我们公司的重要地位。10%仅仅是因为最好的开发工具(Visual Studio),否则即使Windows桌面我们也不再生产产品。
Pavel P

1
我@Pavel不知道你在说什么有..
丹尼尔·利特尔

@Pavel-他们从WinPhone7删除了本机代码,然后从WinPhone8删除了托管代码。也许您现在可以重新访问该平台,或者只是忽略它,直到/如果它获得更大的市场份额。
gbjbaanb 2012年

19

我知道C ++ 11的功能,但我想听听您的经验

人们认为通用编程比C#更喜欢C ++(或几乎其他任何1990年以后的非PHP替代语言),这是可笑的。C ++ 11增加了一些不错的缺失点,但它仍在为狗钉钉子

C ++具有一些优势,在某些编译器支持有限的平台上,它仍然是最佳选择。但是,没有,现代C ++除了可能陈旧,损坏的C ++之外,几乎无法替代任何东西。


31
阅读您所写的内容。您完全宣称使用C ++通过C#进行通用编程是可笑的。这是您真诚地相信的事实,还是仅仅是您自己的夸大意见?
zxcdw 2012年

38
@zxcdw-如果我有100个常规编程问题,那么使用C#或Java或Python或Scala或其他方法,我将以更快,更好的方式解决其中的90个问题,而且错误更少,而且这很慷慨。这是我认识的几乎所有专业程序员的共同观点;甚至那些使用C ++作为主要语言的人。
Telastyn 2012年

33
@zxcdw:我是一名核心C ++开发人员。我从事C ++已有15年以上,主要从事需要C ++的后端应用程序的工作。我遍历了STL和Boost的一半。让我的团队感到沮丧的是,我在一些我认为值得的地方引入了模板元编程。我要说明的一点是,我喜欢C ++并使用它。话虽如此,我同意Telastyn的观点,如果我遇到的一般性问题不需要C ++提供,我宁愿选择C#甚至Python。它们是高级语言,您只需使用它们就能更快地完成工作。这至少说明真正的胜利的开发者
地塞米松

5
@MadKeithV-如果我不是在OSX,iOS和Android上运行的C#应用​​程序上工作,则可以给该跨平台参数更多的权重。即使忽略了这一点,当跨平台成为一个重要问题时,我列出的非C#语言几乎总是比C ++更好的选择。C ++ 11并没有做很多事情来推动这些选择。
Telastyn 2012年

14
如果您只有锤子,那么一切看起来都像钉子。C ++ 11中的改进不会减少C#和其他类似语言的普遍影响,但也许会支持更多与平台无关的语言,反而会使它继续运转。C ++ 11的最大卖点仍然是,它可以成为系统的端到端语言,可以深入到系统的各个角落,但却为修改高阶抽象提供了机会。
JustinC

2

DXM写道:

因此(至少在Microsoft的眼中)重点重新放在C ++上,因为现在我们在乎电池寿命。更高级别的代码=更多指令=需要更多果汁。

据此,选择Java作为Google Android的主要语言/框架是一个错误。不是。高级语言通常意味着可以更快地完成工作,我认为这对Microsoft和Google来说是最重要的事情。为该平台创建的应用程序越多越好,操作系统生产商的利润就越高。

另一方面,仍然有许多适用于Windows的软件仍然是用C ++编写的,因此促使那些开发人员切换到C#/ JavaScript /其他任何东西都将是疯狂的。Microsoft致力于尽可能多地向开发人员提供Win8应用程序开发的可能性,这就是我认为他们决定在Win8开发堆栈中支持C ++和JavaScript的原因。


5
Java是一个错误。如果您想要原始性能(并且经常这样做),那么您想使用C / C ++编写。如果您想提高开发人员的工作效率,则需要使用更高级别的语言,例如Python或PHP或Ruby或JS。Java(和C#)是中端系统,无法为您提供最佳性能或最佳生产力。实际上,C ++并不坏-一旦知道自己在做什么,就可以从中获得良好的生产力。
gbjbaanb 2012年

8
@gbjbaanb我对您的评论有不同的看法:几年前,将Java和C#置于相同的抽象级别是很有意义的,但是在较新版本的.NET中引入LINQ,lambda表达式和异步编程功能已成为现实。将C#提升到了一个更高的水平(Java将追赶JDK8中缺少功能性编程的情况,但这仍处于早期访问阶段)。
codesparkle

2
@gbjbaanb幸运的是,WCF只是.NET的一小部分,将其推广到C#语言是无效的。从.NET 3开始,您是否实际使用过这些新功能?因为VS根本不是一个很好的开发环境(实际上,没有ReSharper确实很烦人)。因此,考虑到这个站点(以及整个SE网络)都是使用C#构建的,因此您的注释似乎有点不准确。
codesparkle

1
@rotman请不要在您自己的答案中回复其他人的答案。答案只能解决原始问题:)
Andres F.

6
@gbjbaanb:我要说的是断言,没有证据表明不能为您提供最佳性能或最佳生产率的中层系统是一个错误。鉴于性能和生产力都很重要,因此最好的解决方案是兼顾两者,并且对于许多用例而言,像Java或C#这样的中立选择都是一个很好的选择。
Carson63000

2

C ++仍然具有Header文件,灵活的预处理器(#define)等……某些人认为这些功能“邪恶”或“难以管理”。

另一方面,C#使用元数据,无需编写和维护头文件。

关于Microsoft向C ++添加更多功能:这并不奇怪。

每个C ++编译器都添加了更多功能,包括C ++ 11功能。gcc也是。


7
如果您对C ++不好说的只是头文件,那么您已经间接证明了这一点。我可以列出严重的C#事项,非便携性,不确定性,运行时开销,专利等一大堆
user805547

1
使用正确的工具完成正确的工作。C ++非常适合像Intel这样的公司,因为它们的各种非托管代码性能需要对奖章项目进行低级的评估,但是如果您需要每个公司都在使用的网站/网络服务,那么为此C ++会带来好运!
汤姆·斯蒂克

1

可能只是我一个人,但是我看到的C语言用法要比C ++多得多。

C ++吞噬了普通的C语言,这一事实使得很难推断出谁在使用什么。

但是C开源项目比C ++多得多。

我的看法是,如果您需要接近于金属速度,请使用C。如果需要兼具合理性能的灵活性和可管理性,请使用C#或Java。如果您希望快速完成干净的设计,请使用Python,Scala,Groovy或多种功能齐全的语言中的任何一种。


2
不,我认为您在这里错了。只要您知道自己在做什么,C ++(如果禁用了例外)就和C一样接近金属。问题是ABI。在C ++中,这种情况仍然有待解决,他们正在努力解决。一旦做到这一点,我认为使用C而不是C ++会没有太大吸引力,而事实上C ++具有更好的错误检查功能并且是超集,因此该工具在那时将是更好的。
赫尔曼DIAGO

0

C ++不能替代C#。让我们看看在哪里使用c ++语言。在需要高性能,编写中间件库,低级别访问以及为资源受限的设备编写代码时使用它。尽管您可以对其中一些使用c#,但c ++更适合于这些。微软对c ++的推动与它对移动领域的大力推动高度相关。没有人会要求您用C ++编写下一个Web应用程序。但是对于Qt,生产率论点不能反对c ++。但是我认为很多人都不熟悉Qt。


C ++仍在非垂直商业Windows软件开发中大量使用。
旋转木马

1
C ++就像您可以用来编写软件的最专业的工具。但是您必须熟练地编写良好的代码,因为它是免费的,并且对向后兼容性有一些怪癖。实际上,我认为它非常适合除脚本之外的所有软件。问题是学习曲线。使用现代图书馆,即使在生产力方面也非常胜任。并且认为如果该应用程序成功,则必须移植它。使用C / C ++代码库进行移植更容易,对编译器的可用性也是如此。软件用C ++编写的名单是无止境的:亚马逊,谷歌,Dropbox的,电信,游戏,Facebook的...
赫尔曼DIAGO

-4

不,C ++不能替代C#,因为所有非Direct3D Windows Phone 8应用程序都必须使用C#开发。您不能仅使用C ++或HTML5 / Javascript将应用程序开发和发布到wp8应用程序商店。只要Microsoft不取消此限制,C ++就不会替换任何东西。结果,我相信很少有人会开发WP8。可怜的诺基亚,又失去了一次时间。

这是微软开发中心的摘录:

Windows Phone 8不支持Windows Store应用程序支持的带有C ++代码隐藏应用程序模型的XAML UI。

完后还有:

这是否意味着我不能将C ++与XAML一起使用来在Windows PHone 8上开发应用程序,我是否只能使用C#+ XAML?

那是对的。XAML只能与C#一起使用。C ++可以用于C#项目使用的WinRT组件。

甚至Microsoft MVP都声称该谣言是Microsoft自己故意制造的错误信息:

我喜欢Microsoft在WinRT和Windows Phone 8上所做的事情,但是我希望他们不会卖得过多,因为一旦他们了解了事情的真相,这只会使用户感到沮丧。

这种故意的错误营销浪费了人们的时间

在我使用Metro应用程序走完所有本机代码路线之前,很高兴知道这个MONTHS AGO。


1
您的链接都表明您可以使用C ++进行WP8开发,并且只有XAML才需要C#。此外,Direct3D仅受C ++支持。

@Lee,是否可以在不使用C#的WP8的情况下开发非Direct3D应用程序?
Özgür的
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.