跨平台桌面编程:C ++与Python


11

好了,首先,我有作为业余Obj-C / Cocoa和Ruby w / Rails程序员的经验。这些功能很棒,但是它们对于编写跨平台应用程序并没有真正的帮助(希望GNUStep有一天可以足够完整,对于第一个成为多平台的应用程序,但是今天不是今天)。

据我所知,C ++非常强大,但它却是一个庞大,丑陋的庞然大物,需要花费半年甚至更长的时间才能掌握。我还读到,由于内存管理完全是手动的,因此您不仅可以轻松地用脚开枪,还可以用它把整个腿炸掉。显然,这一切都令人生畏。这是正确的吗?

Python似乎提供了C ++的大部分功能,并且以速度为代价更容易上手。这个牺牲有多大?它有意义还是可以忽略?

在合理的时间内,哪一个让我编写快速,稳定,高度可靠的应用程序?

另外,将Qt用于您的UI还是为每个平台维护单独的本机前端会更好吗?

编辑:为了更加清晰,我想编写两种类型的应用程序:一种是极其友好和方便的数据库前端,另一种无疑是稍后会出现的3D世界编辑器。


您正在问的问题将是高度主观的-IMHO不是建设性的,因此投票关闭。您还会同时问至少4个不同的问题。哪有人,但知道,如果C ++或Python是更好的选择?我建议您尝试使用Python(应该花费不超过一天的时间)构建一个小型GUI应用程序,并使用C ++构建相同的应用程序,然后自己进行比较。
Doc Brown

我想我真正要问的是给我想要的东西,客观上这是更好的选择?
约翰·威尔斯

您能否提供一些额外的背景信息-您的桌面应用程序需要做什么?数学很多吗?生产力应用程序?数据库访问?一个游戏?
JBR威尔金森

添加了编辑以阐明我想做的事情。
约翰·威尔斯

我选择使用与操作系统和/或GUI库相同的语言。您可以更轻松地对UI进行更多深度操作。尝试在高级语言(例如Java或C#)中模拟全屏(在浏览器中按F11)之类的简单操作。我休息一下 与Java之类的高级解决方案相比,本机解决方案可移植到各种设备上。
Tydus勋爵,2012年

Answers:


9

C / C ++速度很快。现实情况是,大多数应用程序都不需要具有当前硬件状态的性能。通常的方法是使用高级语言(例如python)开发应用程序,而不是在需要时使用低级语言(例如C / C ++)进行优化。

Python将大大提高您的生产力,它易于学习且相当快。有Cython,您可以使用它来编写C扩展名,以类似Python的语法在您的python应用程序中使用,以加速瓶颈。

对于标准的GUI应用程序,python可以为您提供足够的性能。python有一个非常酷的东西叫Kivy,它是一个GUI框架,可在Mac,Windows,Linux,Android和iOS上运行,并支持多点触控。奖励部分是,使用Cython用C优化了性能关键部分。


1
您可能对速度是正确的。Kivy似乎非常有能力,但是它可以绘制系统本地的小部件吗?
约翰·威尔斯

不会,它使用OpenGL ES将其自己的图形引擎用于小部件。Qt可能是跨平台本机小部件的最佳选择。
哈坎·德里亚

5

我会选择使用Python,因为它可以大大提高您的生产率。您仍然可以使用C ++ 编写应用程序中需要速度的部分,有一个Cython项目可以直接在Python中使用C ++库。如果您担心源代码的安全性,Cython也可以提供帮助,您可以使用它来将常规的python代码编译为C ++代码。

我建议嵌入Chrome引擎并为UI使用HTML5 + CSS3 + Javascript + JQuery + Canvas之类的技术。

有一个框架可以轻松将Chrome引擎嵌入到C ++应用中,该框架称为CEF-Chromium Embedded Framework。它支持Windows,Linux,Mac OS。

如果您喜欢Python,请查看CEF Python,这是一个为CEF框架提供python绑定的项目(通过使用Cython)。CEF python当前仅支持Windows,但是还有其他OS的计划。

这是使用CEF成功的应用程序列表(从此处获取):

  • Adobe Brackets-网络代码编辑器
  • Adobe Edge-多媒体创作工具
  • AppJS-使用Node.js构建桌面应用程序
  • AOL Instant Messenger-Windows客户端使用CEF
  • Cubiez-将您喜欢的内容集成到桌面
  • Desura-在线游戏平台
  • Dish World IPTV-流视频平台
  • Evernote-记笔记软件
  • ExeOutput-允许您将html5 / php应用程序部署为桌面应用程序
  • Windows版GitHub-Windows版GitHub客户端软件
  • Janetter-Twitter客户端软件
  • mChef-mIRC浏览器插件
  • MediaMan-组织者软件
  • MetaVR-地理模拟软件
  • MTG Studio-游戏组织者软件
  • OpenSpace3D-3D开发平台
  • Rdio-流媒体音乐平台
  • Spotify-流媒体音乐平台
  • Steam Client-在线游戏平台
  • 腾讯QQ-即时通讯程序和Web浏览器
  • 趋势科技-互联网安全软件
  • WBEA Desktop-允许您将html5应用程序部署为桌面应用程序

也可以查看此博客文章:在Web Technologies上构建桌面质量的应用程序 -Brackets编辑团队解释了他们如何使用CEF框架和Web技术构建它,如jQueryBootstrapLESS CSSrequireJS用于单元测试的JasmineJSlint

免责声明:我是CEF Python项目的作者。


感谢您的输入!CEF看起来相当不错,但我希望尽可能在每个平台上提供本机体验,而使用HTML,CSS和JS很难复制。
约翰·威尔斯

@JohnWells,为什么是本地人?人们习惯了网络体验。看看Windows 8,Microsoft的每个下一个操作系统都与本机无关,它们正在迫使Web技术发展,这就是未来,没有“本机体验”之类的东西,这已经成为过去。
Czarek Tomczak 2012年

这取决于您在谈论什么软件。面向消费者的应用程序可能带有“ Web”的感觉,但是对于以内容创建为中心的软件来说,效果并不理想。同样,尽管Windows 8可能面向网络技术,但Mac OS仍牢固地扎根于本土,其用户倾向于不喜欢与之偏离的软件。
约翰·威尔斯

1
完全正确的JBRWilkinson,但我真的不想为每个平台编写类似widget的CSS(对于CEF)。
约翰·威尔斯

1
作为我自己的Mac用户,本机体验对我很重要。在我看来,没有什么比没有出现并且运行的操作系统与之一致的应用程序更糟了。甚至像大规模生产力提升之类的东西都不足以抵消它。
约翰·威尔斯

5

C ++的Qt方式既好又干净,所以请丢掉“丑陋的庞然大物”部分,我都尝试过它们,而且个人而言,与Python的Qt绑定相比,我对Qt / C ++的工作效率更高/更舒适。如果您选择使用Qt,那是我的建议。加上Qt小部件提供的本机体验,具有QML技术的Qt5和QtQuick2以及将JavaScript和HTML5嵌入到您的应用程序中的能力,如果您愿意的话,可以为您带来现代的Web外观。

那么,为什么我在桌面应用程序中不喜欢Python,而更喜欢保留它用于脚本或服务器端呢?

  • Python打破了跨平台的喜悦,您的客户端必须安装Python才能运行您的应用程序(尤其是在Windows上),并且python官方网站上的不同Python版本现在使客户端感到困惑,需要下载/安装该客户端。

  • Python到exe,制作更大的应用程序(就大小而言)。

  • Python应用程式会消耗更多的记忆体。

这是个人观点。Qt的父系统,智能指针,不会让您用脚开枪,没有腿,C ++ 11将为您提供更多功能。


3
“您的客户端必须安装Python才能运行您的应用程序”-您可以随您的应用程序一起分发python dll,而无需用户手动安装python。您不需要使用py2exe或其他有问题的exe生成器(根据我的经验),请参阅Python Embedding,它只是几行c ++代码,用PyRun_SimpleFile替换PyRun_SimpleString,您可以自己轻松编译它,这不会造成任何开销您应用的大小。“ Python应用程序会占用更多内存。” -使用Cython优化应用程序的内存需求部分。
Czarek Tomczak 2012年
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.