有普遍的语言吗? 这是一个关于IT技术的问题。

6
我们正在设计一款可以在Windows、OSX、iOS和Android上运行的应用程序。最好能够至少使用一种语言编写大部分代码,而不是针对苹果版本使用Objective C,针对Windows使用C#或C++,以及针对Android使用Java。
我们曾考虑使用Flex(尽管存在很多问题),作为避免使用不同语言的方法,但Adobe已经放弃了这个方案,从长远来看,这并不能完成任务。Java曾经承诺成为通用语言,但似乎苹果不再支持它作为分布式操作系统的一部分,据我所知,微软也从未支持过。我们不希望用户必须下载和安装某些东西才能使用我们的应用程序。
是否有解决方案?还是只能使用多种语言构建应用程序?

2
大多数平台都有常见语言的编译器。更大的问题是跨平台框架。 - outis
需要注意的一点是,重要的不是编程语言本身,而是编译器将其编译成什么。从逻辑上讲,问题应该是:是否存在一种通用编译器,可以将{放置语言名称}编译成任何东西。 - liamzebedee
Java对于除了iOS之外的所有平台都是一个简单的解决方案,尽管每个平台的GUI不同。 - bestsss
9个回答

16

HTML+CSS+JavaScript!

在标准Web服务器上运行应用程序。以上所有内容都具有符合标准的Web浏览器,所有这些都支持JavaScript和AJAX。唯一真正变化的是屏幕大小,可以通过为每个目标浏览器使用自定义.css文件轻松处理。


2
我投票支持这个答案,但建议优先考虑设备功能而非浏览器嗅探来提供CSS。 - Dallas
我们需要一个实际可下载的应用程序。在很多实际功能方面,我们可以按照您的建议进行操作,但仍然需要一个不像其他浏览器的应用程序供用户下载。 - TomJeffries
你可以将你的应用程序嵌入到“Jetty” Web 服务器中。 - James Anderson

8

您可以在服务器上托管Web应用程序,并使用应用程序浏览器与应用程序交互。

虽然不是本地应用程序,但所有设备都可以使用它。

缺点是需要服务器连接,不过这可能不是问题。


我们可能最终不得不采用这种方式,但我们仍然必须为每个平台拥有本地应用程序。 - TomJeffries

6
"

全球性语言最可能使用虚拟机,因此您无法避免“用户必须下载和安装某些东西才能使用应用程序”的问题......如果您不想处理编译成本机代码的语言的问题,那么我认为Java是您最好的选择。

"

好的,这基本上就是我想到的。我猜在Windows上安装Java运行时存在相当大的阻力。据我了解,Mac的Lion之前版本都预安装了Java,但我认为iOS没有。当然,在Android上,这将是一个绝佳选择。 - TomJeffries
顺便说一句,我没有考虑过Russell所说的...但是我几周前遇到了一个叫做Mosync(http://mosync.com)的SDK。他们说你可以编写HTML5/CSS3/JavaScript和C++代码,并将它们编译成本地应用程序(每个平台生成不同的文件扩展名,如android.apk、windows .exe等)。你可以试试看...我没有使用它,因为我目前正在使用与Dreamweaver CS5集成的PhoneGap库,所以我不能告诉你更多。 - WoLfulus
非常有趣。我们还需要在Windows和OSX上的应用程序,我们可以使用Mosync实现吗? - TomJeffries
实际上是的,但你需要一个苹果开发者账户。如果我没记错的话,Mosync会为你生成Xcode项目,然后你只需要在OSX环境中打开并编译它。 - WoLfulus

4

您可以在所有这些平台上使用C#:

  • 在Windows上使用“普通”的.NET
  • 在OSX上使用Mono
  • 在Android上使用MonoDroid
  • 对于iOS,可以使用MonoTouch

(如果您曾经想过为Windows Phone 7编写应用程序,那么在那里也没问题。)

当然,在不同的平台之间,UI部分将必须发生显着变化,我怀疑它不会特别“无缝”,但至少值得考虑。


有趣。我不知道Mono。然而,如果我理解正确的话,它仍然需要下载运行时,并且我敢打赌,在苹果产品上这样做会遇到相当大的阻力。 - TomJeffries
@user792826:你可能可以将其嵌入到你的应用程序中,但我不确定。不过这几乎肯定会增加本地应用程序的大小要求。 - Jon Skeet

2

我不是很确定,但我听说Python是一种通用语言。我已经在Mac和Windows上尝试过了,对于其他平台我不太确定。


2
我相信C++代码可以在所有这些平台上运行:Windows完全支持它;Android有NDK;而你可以在iOS上使用Objective-C++(我认为OSX也是如此!)。
我不会说它是最好的选择,但我觉得值得一提。
最终很多事情都取决于您正在开发的应用程序的性质。如果它是一个大型应用程序,我强烈建议与具有相关经验的人进行详细咨询:由于不同平台的差异,这是一个经验至关重要的领域。

Objective C与C++相似但并非完全相同。在OSX(以及我相信的iOS)上运行C++代码是可能的,但整个UI架构是不同的。我真正寻找的是一种在所有机器上使用相同代码的方法,看起来这不是一个选项。 - TomJeffries
1
如果你想要构建一个本地应用程序,那么你总是需要编写一些特定于平台的代码。使用C++可以让你拥有共同的核心代码,但你需要自己编写API来与不同的平台进行接口。我曾经参与过成功的项目,这些项目都做到了这一点,但是构建API需要大量的工作。正如我所建议的那样,这可能不是最好的选择,特别是如果你只是编写一个应用程序。 - vaughandroid

2

根据您的应用需求,有多种选择:

第一种,使用Web应用程序,与最大公约数相同 - 很小。

第二种,在C/C++中构建您的应用程序核心,并使用适合您需求的框架来创建接口。这些建议真的非常好。您甚至可以为每个平台单独开发界面,在Android中使用Java,在iOS中使用Objective C等。

请记住,永远不要指望在所有平台上运行相同的代码。即使是最简单的应用程序也会有一些部分需要使用#define MAC#define ANDROID。完全相同的代码运行是不可能的。

除非是一个

void main(void){}

即使是Web应用程序也会有类似以下的代码:

if(browser()==Safari) {}
else {}

1

我认为答案取决于你要构建什么样的应用程序。

如果像 Twitter 那样,一个良好的 Web 接口是最好的选择。每个客户端只需要处理 GUI 工作,使用平台自己的语言和库。

如果是游戏,不需要与服务器通信。我更喜欢使用 C 和脚本语言 Lua 来构建应用程序的核心。

“有解决方案吗?或者我们必须使用多种语言来构建应用程序?”

没有解决方案。我们使用不同的编程语言是因为它们运行在不同的平台上。通用语言(如 HTML)有很多限制,因为为了成为通用语言,必须削减所有差异。这是所有平台的交集,非常非常小。


1

使用HTML和Javascript可能是最好的方法。另一个在这些平台上运行的选项是Java FX 2.0。


苹果公司不喜欢Java,因此iPhone/iPad上没有Java。我每天都为iOS开发人员感到遗憾。Objective-C中的语法和方法签名长度非常尴尬。 - bestsss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接