适用于Mac OS X和Linux兼容性的最佳编译语言

8
我们需要编写一些软件,可以在Mac OS X服务器和Ubuntu上编译和运行。我们很想使用Objective-C及其所有的Cocoa好处,但是我们使用的部分的GNUstep实现已经损坏(至少在最新的Ubuntu包中是这样的)。
考虑到这一点,我们应该使用C++(我真的不想),C或者其他我们没有想到的语言?
这是一个非常资源密集型的服务器/后端进程,Java和其他解释版本的软件性能比我们编写的Objective-C概念验证要差得多,因此我们现在希望重新用“编译”语言编写。
(注:有些人可能认为这是主观的,然而归根结底,我们确实需要完成一项工作,这里必须有一个相当合适的正确答案)。
[1]编译成本地CPU指令,而不是编译成“字节码”,然后由解释器运行。

3
出于好奇,为什么它必须是一种编译语言? - Mark Rushakoff
4
您可以在任何平台上使用Objective-C,Objective-C编译器是GCC发行版的一部分。可移植性问题在于苹果公司的Cocoa库。 - Chris Lutz
2
你为什么认为GNUstep不够用呢?听起来你想要编写某种服务器后端,使用GNUstep应该没有问题。 - Felixyz
@Sir Lord Mighty:GNUstep是一个可怕的hack。如果你看一下GNUstep的源代码,你会发现它的源代码上到处都写着“这是一个hack”。这是因为GNU Objective-C运行时很糟糕,而且已经落后了很多。GNUstep强制开发者使用的构建系统远不如使用苹果的额外GCC标志“-framework”那么好用。 - dreamlax
1
看起来最好的答案是使用Objective-C作为C的扩展,但不使用任何苹果/可可框架(即NS*等)并自己编写像NSURLConnection这样的东西。 - corydoras
我们尝试了GNUStep,但有些东西非常简单地出现了问题。NSUrlConnection根本无法正常工作。在OS/X上可以正常运行的简单测试用例,在Ubuntu下会导致分段错误。 - corydoras
11个回答

20

我会使用C语言来实现核心业务逻辑,并花时间编写本机GUI包装器,以适应每个平台的代码——Objective-C / Cocoa 和 GTK / Gnome或其他。


6
这正是苹果公司会给你的建议。将代码划分为GUI和应用逻辑两个部分,为每个你想在其上运行的平台编写本地化GUI。如果你尝试使用像Qt这样的跨平台GUI库,你的应用程序将效果不佳。 - NSResponder
1
@NSResponder - 那么苹果公司解决可移植跨平台GUI库的问题的方法是为每个应用程序编写自己的库?这听起来像是一种糟糕的做事方式。 - Chris Lutz
3
如果您有无限的时间和预算,那么这可能是理想情况。然而,我们并不知道提问者是否能够负担得起这个费用。 - ConcernedOfTunbridgeWells
1
我将选择这个作为最接近正确答案的选项。我会遵循这个建议,除此之外,我还会使用gcc的Objective-C支持。我所要做的就是避免所有的NS*类,这将会很烦人(: - corydoras
@corydoras:如果你使用GNUstep,你可以使用许多NS*类。 - Amok

6

您想要创建什么类型的软件?

最可能的答案是C / C ++。


7
C/C++并非一种语言。 - David Thornley
2
你居然因为那个给我投了反对票?我的朋友,你有问题。 - phoebus
我不会给你投反对票,但这是一个相当糟糕的建议。旧的C API(Carbon)已经在OSX上停止维护,这使得 C 和/或 C++ 只有在您想留在32位世界并确保错过GUI前沿所有未来开发时才是一个答案。前进的方式可能是使用某些语言,这些语言最终将具有其GUI层的Cocoa支持实现(例如Java),或者像Skype和其他公司一样使用特定于平台的GUI,使用共享代码。不幸的是,我尚未看到一个很好的跨平台库,用于C或C++并使用Cocoa。 - Fredrik
1
我想你应该很清楚我所指的是在C或C++中实现基础逻辑,并在Mac上使用Cocoa来进行UI设计。这也是Objective-C和Objective-C++的优点之一,可以轻松地将其他纯C和纯C++应用程序的逻辑移植进来。 - phoebus

6
考虑使用Python。你可以使用wxPython编写本地化应用程序,使其在两个平台上的外观相同。
Python自带Max OS X和Ubuntu桌面版,您的应用程序可以打包成任何其他本地应用程序的外观和行为。

1
Python的运行速度比C/C++慢得多,但如果执行速度不是关键因素,那么Python应该是一个不错的选择。 - David Z
@Jacob,它不是编译成机器码,而是进行了字节编译。 - dreamlax
@dreamlax - 大多数脚本语言都是编译型的,但我很确定这不是 OP 的意思。当人们说“编译型”语言时,通常是指可以编译成本机机器码的语言,因此您不需要运行时解释器。 - Chris Lutz
1
我没有意识到有些人可能会将编译解释为将一种语言编译成中间字节码,然后在字节码解释器下运行。 - corydoras

6
我建议使用Objective-C,因为它具有可移植性和易用性。如果你想在Linux上运行,就不能使用Cocoa,但是Objective-C是一种非常好的语言,可以让你轻松地与普通的C代码进行交互。

1
我同意,我一直使用Objective-C而不是C++,因为我觉得它更容易使用。 - dreamlax
对于这个想法点赞。此外,对于你认为可能喜欢的Foundation/Cocoa相关内容,通常编写一个类来模仿其仅适用于苹果的同类功能并不是非常困难。 - alesplin

4

Java怎么样?

如果你需要一些真正本地的东西,你可以随时使用JNI


3

哇,那让我回想起了过去! - Jay
我是一名全职的 Delphi 开发人员,我认为 FreePascal 很酷,等等,但没有一个完全成熟的 GUI 绑定可以在 Linux 和 OS X 上进行跨平台。GTK 的东西需要在 Mac OS X 上使用 X11。丑陋,不具有本地外观。 - Warren P

2
假设您想创建一个带有图形用户界面的应用程序,我认为C++/QT是最有可能的选择。我不知道其他任何已成熟的工具包支持OSX和Linux的编译语言。
  1. 通过“编译”,我假设您的意思是“生成本机可执行文件”。

2
在 OS X 上发布的任何应用程序中,请勿使用 Qt。 - NSResponder
2
为什么不呢?你在OSX上有QT的个人经验想要分享吗? - ConcernedOfTunbridgeWells
我使用 Qt 遇到的唯一问题就是在 OS X 上它的体验不太像原生应用,但这个问题几乎所有跨平台工具包都会遇到。除非你想为每个平台编写自定义界面,否则无法达到本地的外观和感觉。 - Amok
它不仅不会“感觉本地化”,或者看起来本地化,而且它将在applescript支持方面遇到麻烦,在文档架构方面也需要Cocoa应用程序才能真正符合文档架构的要求。 - Warren P

0

我猜C/C++是最明显的平台无关语言。

(我真的不太想这么说)

为什么不呢?你计划开发什么样的软件呢?


3
并不存在“C/C++”这样的编程语言。 - David Thornley

0

这取决于你想做什么。如果你正在寻找非常高性能的应用程序,你的选择是C/C++。如果你正在寻找快速开发,你的选择是Java/Python。


@Jacob:我非常确定在使用Java源代码之前必须进行编译。结果可能不是最终的二进制文件,因为当JVM拥有所有需要优化它的信息时,最终的编译才会完成,但肯定已经编译过了。但我想你应该知道这一点。 - Fredrik
你必须编译Java才能使用它。 我同意使用Python,但我专注于跨平台和快速开发。 - rjoshi

0

我会投票支持与POSIX配合使用的ANSI C或C++。


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