我听说了现代C ++的流行,并谈论了从C#或其他类似C的语言迁移回C ++的话题。

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

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

评论

我认为C ++一直是使用更广泛的语言,因为它比C#更加完善并且易于移植。我不认为它会取代C#。对于基于Windows的业务应用程序,C#仍将是一种易于获取且易于完成的语言,对它的需求仍然很高。 C ++从未真正消失过。最近才刚刚兴起。

我希望不是。 Java和C#对开发人员来说是福音,并且还在不断发展。

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

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

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

#1 楼

是的,您的怀疑是正确的。微软正在推动C ++回来并变得越来越流行。并且即将推出Windows 8,尤其是WinRT(.NET框架和Win32 API的替代品)。某些时候。因此,起初人们想要速度,因此他们都使用C / C ++(两种独立的语言)进行编码。随着硬件变得越来越快,人们的注意力从执行速度转移到了开发速度上,因此高级语言变得越来越流行。基于Windows的计算机(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)使事实检查警察感到高兴,因为众所周知,在技术论坛上任何不准确的事情都可能导致战争它持续了数年。


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

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


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




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

更新#2:

我不知道为什么,但是当现实充满了灰色阴影。这是对本文中添加的一些新评论的回应:.NET框架不会(或永远)不会消失。自90年代以来,窗户所使用的几乎所有技术都以某种形式或方式存在。因此,对于那些非常依赖.NET框架的用户:a)不必担心它消失了,并且b)不再争论它是否像您的生活依赖它一样,您的API是安全的。
WinRT确实重新实现了a Win32和.NET Framework API过去提供的许多功能。想要使用该功能的人可以选择使用WinRT,.NET框架,还是继续使用Win32 API(这两种方法都没有死)。如果WinRT现在不支持轻松创建Web应用程序,则很有可能在将来支持它们。

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

评论


这是Herb Sutter在C ++以及更高版本上的演讲,题目为“为什么要使用C ++?”第9频道上有一个视频,尽管我现在无法访问它,可能是因为Redmond主持了一个大型流事件。您的逻辑是有道理的,但是确实需要使用一些引用来支持这些类型的语句,因为这对于Microsoft以及使用Microsoft产品开发软件的任何其他人来说都是重大的战略转变。

–罗伯特·哈维(Robert Harvey)
2012年10月31日15:19



WinRT不能替代.NET。请检查您的事实。

– up
2012年10月31日在21:27

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

– DXM
2012年10月31日在22:13

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

–猎犬
2012年11月2日13:41



更不用说对于Web应用程序,.NET很棒。如果曾经是“替代品”,那将是桌面应用程序而非Web应用程序。

–乔治·斯托克(George Stocker)
2012年11月2日15:19

#2 楼

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

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

评论


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

– MarkJ
2012年11月1日6:16



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

– Pavel P
2012年11月1日在8:17

@Pavel我不确定您在那说什么。

–丹尼尔·利特尔(Daniel Little)
2012年11月1日,9:13

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

– gbjbaanb
2012年11月2日13:23

#3 楼


我了解C ++ 11的功能,但是我想听听您的经验


人们比C#更喜欢C ++(或者几乎在1990年以后的任何其他文章[非PHP]替代)对于通用编程而言是可笑的。 C ++ 11增加了一些不错的缺失点,但仍然使人难以忘怀。

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

评论


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

– zxcdw
2012年10月31日14:26

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

– Telastyn
2012年10月31日14:40

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

– DXM
2012年10月31日15:22



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

– Telastyn
2012年10月31日15:35



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

– JustinC
2012年10月31日18:45



#4 楼

DXM写道:


因此,焦点(至少在Microsoft看来)重新回到了C ++,因为现在我们在乎电池寿命。更高级别的代码=更多的指令=需要更多的汁液。



因此,选择Java作为Google Android的主要语言/框架是一个错误。不是。高级语言通常意味着可以更快地完成工作,我认为这对Microsoft和Google来说是最重要的。为该平台创建的应用程序越多越好,OS生产者的利润也就越高。 C#/ JavaScript /其他任何东西都是疯狂的。 Microsoft致力于尽可能地向尽可能多的开发人员开发Win8应用程序,这就是我认为他们决定在Win8开发堆栈中支持C ++和JavaScript的原因。

评论


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

– gbjbaanb
2012年11月2日13:20

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

– codesparkle
2012年11月2日15:21

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

– codesparkle
2012年11月3日,0:40



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

– Andres F.
2012年11月25日,0:12



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

– Carson63000
13年1月8日,0:42

#5 楼

C ++仍然具有Header文件,灵活的预处理器(#define)等……某些人认为这些功能“邪恶”或“难以管理”。另一方面,C#使用元数据,无需编写和维护头文件。

关于Microsoft向C ++添加更多功能:这并不奇怪。
/>
每个C ++编译器都添加了更多功能,包括C ++ 11功能。 gcc也是。

评论


如果您对C ++不好说的只是头文件,那么您已经间接证明了这一点。我可以列出大量严重的C#问题,不可移植性,不确定性,运行时开销,专有性等。

–user805547
2012年12月29日19:47

使用正确的工具完成正确的工作。 C ++非常适合像Intel这样的公司,因为它们的各种非托管代码性能需要对奖章项目进行低水平的评估,但是如果您需要每个公司都在使用的网站/网络服务,那么为此付出的努力比C ++好!

–汤姆·斯蒂克(Tom Stickel)
13-10-10在7:04

#6 楼

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

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

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

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

评论


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

–Germán Diago
2014年8月8日11:07



#7 楼

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

评论


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

–位旋转器
13年3月18日在18:26

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

–Germán Diago
2014年8月8日在11:11

#8 楼

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

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


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


又一个:使用C ++和XAML在Windows PHone 8上开发应用程序,我是否只能使用C#+ XAML?

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

我喜欢Microsoft在WinRT和Windows Phone 8上所做的工作,但我希望他们不会超卖其中的一部分,因为一旦他们学会了,它们就会使用户感到沮丧。完全是事实。


这种故意的错误营销浪费了人们的几个月:在我使用Metro应用程序完成所有本机代码路由之前。


评论


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

–李
2012年11月24日19:13

@Lee,是否可以在不使用C#的WP8的情况下开发非Direct3D应用程序?

–Özgür
2012年11月24日22:50