为什么我们不能编写一个可以在mac和pc上运行的程序?

时间:2012-11-25 04:10:54

标签: software-distribution

编程语言与平台无关,那么为什么我们不能编写可在PC和Mac上运行的程序呢?

我想开发一个软件而且我在Mac上,但是我希望它也可以在PC上运行,是否可以开发这样的软件而无需用户下载一个特殊的程序来制作我的程序与他们的计算机兼容?

5 个答案:

答案 0 :(得分:2)

问题在于大多数软件都依赖于操作系统来处理某些任务。是的,大多数编程语言都与许多平台兼容,但操作系统提供了很多支持。当软件使用操作系统时,有时会调用系统调用。如果您希望here提供更多信息。

答案 1 :(得分:2)

理论上,如果你用“高级语言”编写程序,它应该可以在两个操作系统之间移植。

然而,实际上,差异从一开始就开始 - 选择的API,它在一个上工作而在另一个上不起作用(例如,Mac的BSD API与Win32 API不兼容)并归结为最后一个,是,可执行格式,链接器和加载器。每个操作系统都有自己的怪癖。

然后是底层架构之间的区别。以前,Mac使用PowerPC架构和摩托罗拉架构,而PC则使用英特尔。由于Mac已经转向英特尔,因此尝试在Apple内部制作跨平台可执行文件。大多数尝试都失败了。

但是有一种方法可以解决您的问题。您可以使用Python等高级语言编写代码,然后将您的python代码分发给您的PC朋友。(但请记住,您需要在PC好友的计算机上安装Python解释器才能运行程序)。我已成功将Python程序从Mac移植到PC,代码更改为0,有时只需要2-4%的代码更改。

答案 2 :(得分:1)

简单回答:因为语言本身不足以使应用程序跨平台。此外,它使用的框架也必须是跨平台的,所有内容都需要框架:处理数据,显示内容,与硬件通信,多线程等等。

通常可以这样做:

  • 选择像Java这样的完整解决方案,它实际上可以在两个平台上无缝运行,甚至可以使用相同的二进制文件
  • 通过使用C / C ++和跨平台库,以便可以为两个平台编译相同的程序(请记住,您不能分发真正相同的二进制文件,在任何情况下都需要编译两个)
  • 通过使用标准库和标准语言编写程序的逻辑,然后为特定平台附加您需要的任何内容,以构建两个不同的库。当然,你必须尽可能多地包装,以便你的程序的跨平台部分不知道它

请注意,开发跨平台应用程序并不是一个简单的例子,如游戏(有大量的跨平台API),而不使用像Java这样的完整解决方案,这根本不是一件容易的事。特别是因为您可以构建的大多数GUI都是严格特定于平台的,并且依赖于他们自己的框架。

答案 3 :(得分:1)

如果您希望应用程序“在任何地方”运行,那么您最好的选择是JIT类型语言,这意味着它在运行时(Just In Time)为其所在的平台进行编译。真的,我脑子里突出的语言是Java(还有其他人,我个人不喜欢java)。然而,它并不那么简单。例如,Mac计算机上的窗口具有PC上的窗口不具有的部件和功能,反之亦然。而其他操作系统甚至没有Windows或任何等效的东西,但仍然运行像Android或iOS的Java或无数Linux Distros。而这只是一个非常基本的例子,它获得了很多鹞。真正构建可供任何设备上任何设备使用的应用程序的最佳方法是基于Web。

经验教训是,如果这么简单,很多人就不会有工作,而且永远不会那么简单,事情总是会进步和改变,并不是每个人都想要用他们的操作系统做同样的事情和别人一样有一百万种皮肤猫的方法,还有很多方法可以在操作系统中实现。

答案 4 :(得分:1)

是的,有可能。但这很棘手。你需要:

  • 使用跨平台语言(这是一个简单的部分,许多语言在不同的plaftforms上运行)
  • 避免使用任何特定于平台的功能(通常不太难,但需要测试)
  • 确保您拥有所有依赖项的跨平台库(很难!)

由于特别是库问题,跨平台的选项很少。你最好的选择可能是:

  • JVM语言(如Java,Scala或Clojure) - 因为JVM从平台特定功能中抽象出来,纯Java应用程序和库将在任何平台上运行。因此,Java可能拥有最好的跨平台库和工具生态系统。
  • JavaScript - 如果您不介意在浏览器中运行,这是一个非常好的选择。有很多怪癖要处理,但JavaScript是最好的跨平台选项之一,因为它无处不在。