8

我一直想玩 Ruby 或 Python,同时我一直想做一些 Cocoa 编程。

所以我认为实现这两个目标的最佳方式是使用 Ruby 或 Python 到 Objective-C 的桥(PyObjc 或 RubyCocoa)开发一些东西。

我知道理想情况下,为了获得最好的学习体验,我会独立学习每种技术,但我没有时间。:)

所以我的问题是哪个是更成熟的平台,PyObc 或 RubyCocoa,我正在寻找的主要内容:

  1. API 文档
  2. 教程
  3. 工具
  4. 支持社区
  5. Cocoa API 的完整性可通过桥接器获得

关于第 5 点,我不希望整个 Cocoa API 都可以通过任何一个桥接器使用,但我需要有足够的 Cocoa API 可用于开发功能正常的应用程序。

4

5 回答 5

12

虽然你说你“没有时间”独立学习技术,但学习 Cocoa 的最快途径仍然是用它的母语学习它:Objective-C。一旦您了解了 Objective-C 并克服了 Cocoa 框架的初始学习曲线,您将更容易学习 PyObjC 或 RubyCocoa。

于 2009-01-09T01:08:54.463 回答
7

我会回应 Chris 的评估,并会详细说明为什么你应该学习 Objective-C 来学习 Cocoa。正如 Chris 所说,Objective-C 是 Cocoa 的基础和原生语言,它的许多范例都与该血统密不可分。特别是,选择器和动态消息解析以及在运行时修改类的能力是实现 Cocoa 技术(如分布式对象和绑定)所必需的。尽管这些功能在其他动态语言(如 Ruby 和 Python)中也可用,但语言模型中存在足够多的不匹配,您至少必须了解 Objective-C 才能了解 Cocoa。我建议您看一下之前的问题以进行进一步讨论:我是否必须学习 Objective-C 才能进行专业的 Mac 开发?

幸运的是,Objective-C 非常容易学习。我经常告诉人们,从 C/C++/Java 或 LISP、Scheme 或任何“较新”的动态语言(如 Ruby 和 Python)学习 Objective-C 需要一天的时间。除了扩展您的思维之外,您还将学会至少阅读几乎所有 Cocoa 文档和示例中使用的代码。

至于 Ruby 与 Python,桥接功能非常相似。事实上,它们都使用 Apple 的BridgeSupport(Leopard 附带)来提供桥接描述。两者都受 Apple 支持并随 Leopard 一起提供。您喜欢哪种语言取决于个人喜好。如果你选择Ruby,我建议你给MacRuby看看。这绝对是 Ruby on OS X 的未来,因为它在 Objective-C 运行时之上重新实现了 Ruby 运行时。这提供了一些不错的性能和概念优势(包括与 Objective-C 垃圾收集系统的集成,这是使用本机 python gc 的 PyObjC 目前缺乏的功能)。MacRuby 还包括一个自定义解析器,它使桥接的 Objective-c 方法的语法更好一些。MacRuby 的缺点是在撰写本文时(2009 年 6 月)它还没有完全准备好用于生产级使用。因为听起来这对你来说是一个学习项目,所以这可能不是问题。

于 2009-01-09T21:02:42.940 回答
3

两者大致相等,我会说。在某些地方更好,在其他地方更糟。但我不建议用任何一种方法来学习 Cocoa。正如 Chris 所说,Cocoa 需要对 Objective-C 有所了解。比起 Objective-C,我更喜欢 Ruby,但我仍然不推荐用它来学习 Cocoa。一旦你在 Cocoa/Objective-C 中有一个坚实的基础(不是双关语),那么这些桥梁对你很有用。

于 2009-01-09T01:25:52.667 回答
1

Apple 似乎在为 Cocoa 编写 Ruby 脚本而不是 RubyCocoa。他们正在托管,我相信支持MacRuby。我经常想知道 MacRuby 是否是 Apple 对用于 OSX 原型设计和完整应用程序开发的高级语言的回答。

于 2009-01-09T02:41:13.967 回答
1

ObjectiveC 远没有 Python 或 Ruby 那样有趣或高效。这就是为什么人们想要选择具有良好 Objective C 访问权限的 python 或 ruby​​。建议他们首先学习 Objective C 没有抓住重点。关于 pyobjc,我有很多好话要说。它与 Objective C 框架轻松互操作的能力非常出色。我对 Ruby Cocoa 的经验较少,部分原因是当我上次查看时,它似乎没有那么干净和相对轻松的互操作性。我对 MacRuby 犹豫不决,因为它似乎走得太远了。在 pyobjc 中,您可以编写普通的 python,并且仅在您真正想要/有意时才子类化/使用 Foundation 和 Cocoa 对象。根据我对 MacRuby 的了解,它是 Cocoa 之上的 Ruby。所以一个字符串总是一个 NSString。我对此不太满意。YMMV。

于 2010-10-14T06:19:39.593 回答