PyObjc和RubyCocoa用于Mac开发:哪一个更成熟?

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来开发一个功能齐全的应用程序。

5个回答

12

如果你说你“没有时间”独立学习技术,那么学习Cocoa的最快途径仍然是学习它的母语:Objective-C。一旦你理解了Objective-C并且克服了Cocoa框架的初学曲线,你将更容易地学会PyObjC或RubyCocoa。


7
我同意Chris的评估,并会详细阐述为什么你应该学习Objective-C来学习Cocoa。正如Chris所说,Objective-C是Cocoa的基础和本地语言,许多范例与此血脉相连。特别是选择器和动态消息分辨率以及在运行时修改类的能力,这些功能是实现Cocoa技术(如分布式对象和绑定)所必需的。虽然这些功能在其他动态语言(如Ruby和Python)中也可用,但语言模型之间存在足够的不匹配,因此您至少需要了解Objective-C才能理解Cocoa。我建议您查看这个之前的问题以进一步讨论:Do I have to learn Objective-C for professional Mac Development? 幸运的是,Objective-C非常容易学习。我经常告诉人们,如果他们从C / C ++ / Java或LISP,Scheme或任何“新”的动态语言(如Ruby和Python)转入,学习Objective-C只需要一天。除了开拓思路外,你还将学习至少阅读几乎所有Cocoa文档和示例中使用的代码。
关于Ruby和Python的比较,在桥接能力方面非常相似。实际上,它们都使用苹果的BridgeSupport(随Leopard一起提供)来提供桥接描述。两者都得到了苹果的支持并随Leopard一起发货。选择哪种语言是个人口味问题。如果您选择Ruby,我建议您看看MacRuby。它绝对是Ruby在OS X上的未来,因为它在Objective-C运行时之上重新实现了Ruby运行时。这提供了一些不错的性能和概念上的优势(包括与Objective-C垃圾回收系统的集成,这是PyObjC目前缺少的功能)。 MacRuby还包括一个自定义解析器,使桥接的Objective-C方法的语法更加美观。 MacRuby的缺点是,在撰写本文时(2009年6月),它还没有完全准备好用于生产级别的使用。由于听起来这是您的学习项目,所以这可能不是问题。

3

我认为它们两个差不多。有些方面更好,有些方面更差。但我不建议使用它们来学习Cocoa。正如Chris所说,Cocoa需要一定的Objective-C理解能力。我比起Objective-C更喜欢Ruby,但我仍然不建议使用它来学习Cocoa。一旦你掌握了Cocoa/Objective-C的基础(无意冒犯),那么桥梁对你会有用。


1

苹果似乎正在支持Cocoa的Ruby脚本,但不是RubyCocoa。他们正在托管并且我相信支持MacRuby。我经常想知道,MacRuby是否是苹果为OSX原型设计和完整应用程序开发提供更高级别语言的答案。


1
同一位背后推动 MacRuby 的人也是 RubyCocoa 的主要贡献者,而且苹果公司甚至将 RubyCocoa 作为 Mac OS X 的一部分,因此我认为说苹果不支持它是不准确的。MacRuby 是 Mac 上 Ruby 的未来,但这并不意味着你现在不能使用 RubyCocoa。 - Chuck

1

ObjectiveC并不像Python或Ruby那样有趣或高效。这就是为什么人们想要选择一个具有良好Objective C访问权限的Python或Ruby。建议他们先学习Objective C是错失重点的,我对pyobjc有很多好话要说。它与Objective C框架无缝互操作的能力非常出色。我对Ruby Cocoa的经验较少,部分原因是当我最后一次查看时,它似乎没有那么干净和相对无痛的互操作性。我对MacRuby感到犹豫,因为它似乎走得太远了。在pyobjc中,您可以编写纯Python,并且只有在您真正想要/需要时才使用Foundation和Cocoa对象。从我对MacRuby的了解来看,它是基于Cocoa的Ruby。所以字符串始终是NSString,我对此不太满意。你的情况可能会有所不同。


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