【问题标题】:Best compiled language for Mac OS X and Linux compatibility [closed]Mac OS X 和 Linux 兼容性的最佳编译语言 [关闭]
【发布时间】:2023-04-08 08:51:01
【问题描述】:

我们需要编写一些可以在 Mac OS X 服务器和 Ubuntu 上编译和运行的软件。我们很乐意使用具有 Cocoa 优点的 Objective-C,但是我们正在使用的部分的 GNUstep 实现被破坏了(无论如何在最新的 Ubuntu 包中。)

鉴于此,我们应该使用 C++(我真的不想)、C 还是其他我们没有想到的东西?

这是一个非常耗费资源的服务器/后端进程,该软件的 Java 和其他解释版本的性能比我们编写的 Objective-C 概念证明要差得多,因此我们现在希望重新编写一种“编译[1]”语言。

(注意:有些人可能会认为这是主观的,但归根结底我们确实需要完成工作,这里必须有一个合理适当的正确答案)。

[1] 编译为本机 CPU 指令,而不是编译为必须由解释器运行的“字节码”。

【问题讨论】:

  • 出于好奇,为什么它必须是一种编译的语言?
  • 您可以在任何平台上使用 Objective-C - Objective-C 编译器是 GCC 发行版的一部分。可移植性问题在于 Apple 的 Cocoa 库。
  • 是什么让你认为 GNUstep 不会削减它?听起来您想编写某种服务器后端,使用 GNUstep 执行此操作应该没有问题。
  • @Sir Lord Mighty:GNUstep 是一个可怕的黑客。如果你看一下 GNUstep 的源代码,它的字面意思是“这是一个 hack”。这是因为 GNU Objective-C 运行时很垃圾,而且确实落后了。 GNUstep 强加给开发人员的构建系统远没有使用 Apple 的额外 GCC 标志 -framework 好。
  • 看起来最好的答案是使用objective-c作为c的扩展,但不使用任何apple/cocoa框架的东西,(即NS *的东西)并编写类似的东西NSURLConnection 我们自己。

标签: objective-c linux compatibility gnustep


【解决方案1】:

我会在 C 中实现核心业务逻辑,并花时间为每个平台的代码编写原生的 GUI 包装器——Objective-C /Cocoa 和 GTK/gnome 或其他。

【讨论】:

  • 这正是 Apple 会给你的建议。分解您的代码以将 GUI 与应用程序逻辑分开,并为您要运行的每个平台编写本机 GUI。如果你尝试使用像 Qt 这样的跨平台 GUI 库,你的应用会很糟糕。
  • @NSResponder - 所以 Apple 解决可移植跨平台 GUI 库问题的方法是为您编写的每个应用程序滚动您自己的库?这听起来像是一种糟糕的做事方式。
  • 实际上,如果您有无限的时间和预算,这可能是理想的选择。但是,我们真的不知道 OP 是否真的能负担得起。
  • 我将把它打勾为最接近正确答案。我将遵循这个建议,除了我还将使用 gcc 的目标 c 支持。我所要做的就是避免所有的 NS* 课程,男孩会很烦人(:
  • @corydoras:如果您使用 GNUstep,您可以使用许多 NS* 类。
【解决方案2】:

您要创建什么样的软件?

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

【讨论】:

  • 没有像 C/C++ 这样的语言。
  • 你真的因此而否决了我?你有问题,我的朋友。
  • 我不会投票给你,但这是一个相当糟糕的建议。旧的 C API (Carbon) 已在 OSX 中停止使用,只有当您想留在 32 位世界并确保错过 GUI 前端的所有未来开发时,才使 C(和/或)C++ 成为答案.要走的路很可能要么使用某种语言,最终将有一个 Cocoa 支持的 GUI 层实现(如 java),要么像 Skype 和其他人一样,使用共享代码拥有一个特定于平台的 GUI。不幸的是,我还没有看到一个使用 Cocoa 的 C 或 C++ 跨平台库。
  • 我想我只是认为我的意思是用 C 或 C++ 实现底层逻辑并在 Mac 上使用 Cocoa 来完成 UI,如果你愿意的话。这是 Objective-C 和 Objective-C++ 的优点之一,可以轻松地从其他 vanilla-C 和 vanilla-C++ 应用程序中移植逻辑。
【解决方案3】:

我会推荐 Objective-C 的可移植性和易用性。如果你想在 Linux 上运行,你不能使用 Cocoa,但是 Objective-C 是一种非常好的语言,它让你可以轻松地与常规 C 代码交互。

【讨论】:

  • 我同意,我一直在不使用 Cocoa 的情况下使用 Objective-C,因为我发现它比 C++ 更容易使用。
  • 这个想法+1。此外,对于您认为自己可能喜欢的 Foundation/Cocoa 内容,编写一个非常接近它的 Apple 表亲的功能的类通常并不难。
【解决方案4】:

考虑使用 Python。您可以使用wxPython 在两个平台上编写外观原生的应用程序。

Python 随 Max OS X 和 Ubuntu 桌面一起提供,您的应用程序可以被打包,使其外观和行为与任一平台上的任何其他本机应用程序一样。

【讨论】:

  • Python 不如 C/C++ 快(运行),但如果执行速度不重要,它应该是一个不错的选择。
  • @Jacob,没有编译成机器码,但是是字节编译的。
  • @dreamlax - 现在大多数脚本语言都是,但我很确定这不是 OP 的意思。当人们说“编译”语言时,他们通常指的是一种编译为本机代码的语言,因此您不需要运行时解释器。
  • 我没有意识到有些人可能会将编译后的语言解释为包含编译成中间字节码的语言,然后必须在字节码解释器下运行。
【解决方案5】:

Java 怎么样?

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

【讨论】:

    【解决方案6】:

    如果您对 GUI 开发感兴趣,FreePascal 或者 Lazarus 怎么样?

    【讨论】:

    • 哇,这让我记忆犹新!
    • 我是一名全职的 Delphi 开发人员,我认为 FreePascal 很酷,而且一切都像这样,但是没有一个完全成熟的 GUI 绑定,它可以在 Linux 和 OS X 上跨平台。GTK Mac OS X 上的东西需要 X11。丑陋且非本地外观。
    【解决方案7】:

    假设您想创建一个具有图形用户界面的应用程序,我认为 C++/QT 是最有可能的候选者。我不知道任何其他在 OSX 和 Linux 上具有成熟工具包支持的编译[1]语言。


    1. 通过“已编译”,我假设您的意思是“生成本机可执行文件”。

    【讨论】:

    • 不要将 Qt 用于您计划在 OS X 上发布的任何应用程序。
    • 为什么不呢?您是否有一些关于 OSX 上 QT 的个人经验,您可能想分享一下>
    • 我在 Qt 上遇到的唯一问题是它在 OS X 上感觉不是很原生,但这是任何跨平台工具包都会遇到的问题。除非您想为每个平台编写自定义界面,否则您不会拥有原生的外观和感觉。
    • 它不仅不会“感觉原生”或看起来很原生,它还会遇到 AppleScripting 支持的问题,以及需要 Cocoa 应用程序真正符合文档架构的文档架构的问题。
    【解决方案8】:

    我会投票支持 ANSI C 或 C++ 加上 POSIX。

    【讨论】:

      【解决方案9】:

      鉴于下面的其他答案,我认为您需要做出两个选择

      1) 如果您需要一个 GUI,您不需要选择 UI 库或者跨平台的一个 ee.g QT、wx 等,或者为 OSX 和 Linux 编写不同的 UI 库 - Apples 首选方式,我认为让您获得最佳外观并在每个平台上感受

      2) 您的应用程序是否需要快速计算,因为这可能会推动您的语言选择,例如C++/C/Objective-C vs python

      这两个选项是分开的,因为您可以将大多数 GUI 选项与不同的语言混合使用。

      【讨论】:

        【解决方案10】:

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

        (我真的不想)

        为什么不呢?您打算开发什么样的软件?

        【讨论】:

        • 没有像 C/C++ 这样的语言。
        • 哈哈感谢您指出这一点:P
        【解决方案11】:

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

        【讨论】:

        • @Jacob:我很确定在使用它们之前我必须编译我的 java 源代码。结果可能不是最终的二进制文件,因为最终编译是由 JVM 进行的,当它具有正确优化它所需的所有信息但它确实被编译时。但我想你知道。
        • 你必须编译java才能使用它。我同意 python,但我专注于跨平台和快速开发。
        猜你喜欢
        • 2010-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-03
        • 1970-01-01
        • 1970-01-01
        • 2015-10-25
        • 2013-01-24
        相关资源
        最近更新 更多