我看到大多数包含大量GUI内容的应用程序通常都是使用C ++开发的。大多数游戏/浏览器都是用C ++编写的。
我们不能仅使用最新的动态语言开发更好的GUI应用程序吗?我知道Java并不是一个很好的选择。但是,像python这样的语言本来就建立在C上呢?最新的语言难道不应该比他们的祖先更好吗?为什么相对于最新的语言,为什么我们仍然需要使用古老的C ++?
我也想知道,在C ++中,什么是负责GUI处理的更快速度?另一方面,其他最新语言缺乏什么呢?
我看到大多数包含大量GUI内容的应用程序通常都是使用C ++开发的。大多数游戏/浏览器都是用C ++编写的。
我们不能仅使用最新的动态语言开发更好的GUI应用程序吗?我知道Java并不是一个很好的选择。但是,像python这样的语言本来就建立在C上呢?最新的语言难道不应该比他们的祖先更好吗?为什么相对于最新的语言,为什么我们仍然需要使用古老的C ++?
我也想知道,在C ++中,什么是负责GUI处理的更快速度?另一方面,其他最新语言缺乏什么呢?
Answers:
我是编写C ++ GUI应用程序的人之一(大多数用于Windows)。确切地说,使用Qt。我的理由:
new
,我也很少delete
显式地进行任何操作,因为我使用了智能指针或QObject
层次结构。如您所见,这些大多是个人喜好。我发现使工作愉快是很重要的,C ++向我提供了这一点。
因为速度很重要。
游戏使用C ++进行核心任务,而其中的性能至关重要。他们使用动态语言来编写脚本,而灵活性非常重要。
桌面GUI应用程序:例如,Visual Studio是用.NET而不是本机C ++编写的。对于IDE来说,它似乎工作得很好,因为IDE本身不需要执行很多性能密集型任务。(编译器,链接器和其他工具不一定是用.NET编写的-尽管正如wawa在评论中指出的那样,有些似乎是(例如VB.NET))
浏览器也需要快速。毕竟它们是辅助操作系统。另一方面,您可能会说Firefox的大部分实际上是用javascript写的,因为Mozilla框架似乎严重依赖javascript。
综上所述:我不会说C ++一定是首选,但是如果您有性能瓶颈,则必须更接近金属,然后再遇到C ++(或者C)。有时,用一种语言用C ++进行所有操作会更容易。
您看到用C ++编写的GUI应用程序通常是这样做的,这是出于遗留原因。对于GUI应用程序,Python(带有Qt或Gtk)非常可行,如果您在Windows房屋中工作,则C#也是如此。当新的开始的东西,要么是非常多的首选C ++的,因为缺乏管道的工作有许多工作要做。
因为无论.NET之类的人群显示多少性能测试,无论它们在基准测试中的排名有多接近,最终C ++应用程序都会脱颖而出。冷启动时速度更快,更灵活,并且有更多改进方法。
我在项目开始阶段就听到了无数种证明,.NET是必经之路,但是一旦选择它,它们最终就成了沉重的麻烦。
而且,当今的C ++非常安全且易于使用,尤其是对于Qt或WTL之类的框架。
大多数游戏引擎都是用C ++编写的。同样,许多浏览器引擎都是用C ++编码的。但是浏览器GUI经常使用一些轻量级脚本(JavaScript,Python)进行编码。除了Source Engine以外,大多数游戏引擎还使用脚本语言(例如Lua或Python)。[供参考:Lua脚本游戏列表 ]
还可以使用流行的C ++ GUI库,例如Qt。在当前版本(4.7)中,它将QML用于GUI。QML基本上是带有Qt绑定的JavaScript。
因此,确实没有C ++ 与动态语言混合在一起。
原因是您对所有发生的事情都有更多的控制权。如果要使用C#编写Photoshop,则对于某些任务,您将遇到严重的性能问题。在具有更多控制权的较低级语言中,您可以采用快捷方式,针对更复杂的内容进行优化。当然,这假定您在非托管代码中使用C ++,而不是.NET中的C ++。
请参阅此处以获取快速示例。
给出的大多数原因是技术原因或“高于要求” ...以下是业务原因或“低于要求”:
分发已编译代码与分发源代码。在c / c ++中开发时,您将分发二进制文件。如果您正在使用一种现代语言进行开发,则可以分发源代码。很难将混淆器的想法卖给必须向股东/投资者做出回应的管理人员,这样就不必打扰。
愚蠢的用户:至少在管理人员的头脑中。他们仍然认为他们的用户几乎无法双击“ setup.exe”。如果您将口译的安装作为安装的一部分,他们会左右摇头。
旧的开发人员:大多数有经验的人已经存在了很长时间,并且没有保持最新状态。他们使用C ++编程,而不使用更新的语言编程,因为他们不了解更新的语言。
我会将问题的范围从GUI扩展到预期具有竞争力的软件。C ++不涉及目标平台的税,因为它涉及处理能力,已安装的运行时,框架等。因此,与以托管/解释语言编写的类似解决方案相比,C ++可以在更有限的客户硬件上运行。在成功的商业软件的情况下,开发成本(对于C ++而言可能更高)由销售数量摊销。
另外,C ++通常提供对系统api(如GUI)的直接访问,这提供了最佳机会来优化利用率并使其与同类解决方案区分开。
对于要取代C ++或Java的语言,它除了要发挥自己的优势外,还必须做这些语言中非常想念的事情。同样,这些语言也投入了大量资金。这意味着在许多平台上都有一个标准的C ++库,浏览器,游戏和此类程序可以轻松使用。因此必然会有一些惯性。与其他软件不同,语言倾向于缓慢发展。
如果您看一看,Anaconda(RedHat的安装程序)已经存在了大约10年了,从一开始就是用Python编写的。Anaconda刚推出时,Python并不流行。
Google的Go(golang.org)发展非常迅速。编译器尚未启动。为了使其流行起来,它的库必须稳定,应该引导编译器,并且,更多的人必须使用它。我听说Google以外的一个生产程序是用Go编写的,据报道在它已经使用了一年多的时间里还没有出现停机。