首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何规划多平台应用程序开发

如何规划多平台应用程序开发
EN

Software Engineering用户
提问于 2014-04-13 02:57:36
回答 2查看 1.9K关注 0票数 1

在编程的早期,我使用Visual进行学习。它教会了我许多概念,而且我能够制作一些很酷的程序(在我看来,无论如何.)。我已经将我的视野扩展到基本的C/C++、PHP和MySQL。

我最喜欢的项目之一,我想变成一个多平台(对于x86/x64)窗口应用程序,并拥有开放源码。我已经决定了许可证,但我想知道,在我开始用一种新的语言开发之前,我如何选择使用哪种语言,即多平台,并允许创建窗口?我不希望使用web技术,因为应用程序一次将处理大量本地文件。

这不是关于哪种技术更好的问题,而是哪种技术对这个项目有用的问题。我知道一些事情必须是可能的,因为有一些应用程序运行为Mac二进制文件,Windows二进制文件,甚至Linux二进制文件,都在windows中运行(如VLC媒体播放器、Firefox (Ice Wheazel)等等)

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2014-04-13 15:37:38

这主要取决于你所瞄准的平台。

如果您只针对PC平台(这些平台都不是很奇特的),那么您就有许多关于语言的选项(C++、Java、Python、Go等)。以及跨平台图形用户界面框架(Qt、GTK、SWT、Swing、wxWidgets等).在为PC专用程序选择语言时,可移植性不应该是主要考虑因素(几乎所有非操作系统特定的程序都应该是可移植的)。

如果你想瞄准个人电脑和更多的东西(网络或移动),你需要更高的可移植性。架构风格至关重要,因为您希望将特定于平台的部分与可移植代码隔离开来。解决可移植性需求的最流行风格是分层体系结构(可移植代码进入中间层)。每一层都可以(而且经常是)用不同的语言编写。您可能需要考虑在只使用PC程序的情况下,将您的代码构造成层(特定于操作系统的东西可能会弹出)。

当目标不仅仅是个人电脑时,语言的可能性就会缩小。根据您感兴趣的特定平台,它还可以使以一种语言编写所有东西变得不可能(除非您已经为编写自己的编译器做好了准备)。

  • 对于PC和移动设备,C++是编写可移植代码(逻辑层)的正确选择,因为所有主流移动平台都支持它。对于移动GUI - Qt或特定于平台的解决方案(Java、ObjC和C#).选择Qt可以加快一切(大多数代码都运行在任何地方),但要使其工作,可能需要一些Qt和移动平台的底层知识。您拥有的GUI越多,选择Qt就越有利可图。
  • 如果您想以PC和web为目标,您可以使用Java、Python和Go语言。如果您选择Java,那么您将拥有更一致的一切(像GWT和Vaadin这样的框架允许用Java编写客户端代码)。如果您选择Go,您将拥有比Java更年轻(更新鲜)的语言,这需要更少的样板,并且不需要VM来运行(更少的参与者=更少的问题),但是对于web需要不同的语言(JavaScript或Dart)。
  • 如果你想让你的程序在个人电脑、网络和移动设备上运行,并且你希望PC和移动版本能够自给自足(不需要服务器组件),事情会变得非常复杂。在这种情况下,没有一种语言会在任何地方运行。我可能会对逻辑代码采用PC+mobile方法(用C++编写它),然后要么创建绑定到web平台上可用的其他语言,要么用C++编写服务器软件。另一种可能是用Java (PC+web方法)编写逻辑,然后编写(使用LLVM)一个编译器,将java翻译成目标移动平台上可用的语言。无论哪种方式,都需要额外的努力才能使它在第三种平台类型上工作。

上述清单既不详尽,也不完整。

在选择技术之后,我建议设计层间的接口,然后规划实现。

票数 2
EN

Software Engineering用户

发布于 2014-04-13 08:37:50

每个OS都为可执行文件和共享库使用自己的文件格式,每个OS也有自己的应用程序API来与其交互。这意味着一般情况下,为OS A构建的二进制文件不能在OS B上使用。

编写可在多个平台上使用的应用程序的方法有两种:

  1. 您使用的虚拟机(VM)隐藏了OSes之间的所有/大部分差异。Web技术是基于这一点的(浏览器提供VM),但也是一种语言,如Java和解释语言。
  2. 您为所支持的每个操作系统构建单独的二进制文件,并使用跨平台库将OSes之间的大部分差异隐藏在主应用程序逻辑中。

在选择一种用于多平台开发的语言时,主要考虑的事项是

  • 我想支持哪些平台?
  • 我喜欢用什么语言?
  • 这些语言中有哪些是针对所有所需平台的VMs还是编译器?
  • 这些语言是否支持我想要的特性(例如GUI),可能是通过库
  • 对于本地编译的语言,有跨平台库支持所有所需的平台,或者我准备自己编写一个平台。
票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/235811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档