1

编程语言是独立于平台的,那么为什么我们不能编写一个可以同时在 PC 和 Mac 上运行的程序呢?

我想开发一个软件,我在 Mac 上,但我也希望它在 PC 上运行,是否可以开发这样的软件而不必要求用户下载一个特殊的程序来使我的程序兼容用他们的电脑?

4

5 回答 5

2

这样做的问题是大多数软件都依赖于操作系统来处理某些任务。是的,大多数编程语言都与许多平台兼容,但操作系统提供了很多支持。当软件使用操作系统时,有时称为进行系统调用。如果你想要这里是一些更多的信息。

于 2012-11-25T04:18:09.563 回答
2

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

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

然后是底层架构之间的区别。以前 Mac 运行在 PowerPC 架构和摩托罗拉架构上,而 PC 使用 Intel。自从 Mac 改用 Intel 以来,一直在尝试在 Apple 内部制作跨平台的可执行文件。大多数尝试都失败了。

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

于 2012-11-25T04:18:13.893 回答
1

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

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

特别是由于库问题,跨平台工作的选项很少。您的最佳选择可能是:

  • 一种 JVM 语言(如 Java、Scala 或 Clojure)——因为 JVM 从特定于平台的特性中抽象出来,所以纯 Java 应用程序和库可以在任何平台上运行。因此,Java 可能拥有最好的跨平台库和工具生态系统。
  • JavaScript - 如果您不介意在浏览器中运行,这是一个不错的选择。有很多怪癖需要处理,但 JavaScript 是最好的跨平台选项之一,因为它无处不在。
于 2013-01-03T15:02:28.660 回答
1

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

这通常可以做到:

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

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

于 2012-11-25T04:16:18.697 回答
1

如果您希望应用程序“在任何地方”运行,那么您最好的选择是 JIT 类型语言,这意味着它会在运行时(及时)针对它所在的平台进行编译。在我看来,真正突出的语言是 Java(还有其他语言,我个人不喜欢 Java)。然而,事情并不是那么简单。例如,Mac 计算机上的 Window 具有 PC 上的 Window 所没有的部分和功能,反之亦然。其他操作系统甚至没有 Windows 或任何类似的东西,但仍然运行 Java,例如 Android 或 iOS 或无数 Linux 发行版。这只是一个非常基本的例子,它变得更加猎兔犬。真正构建一个任何人都可以在任何设备上使用的应用程序的最佳方式是基于网络。

教训是,如果这么简单,很多人就不会有工作,也永远不会那么简单,事情总是会进步和变化,并不是每个人都想像其他人一样用他们的操作系统做同样的事情. 给猫剥皮的方法有一百万种,在操作系统中实现某些东西的方法还有很多。

于 2012-11-25T04:58:43.300 回答