PyObjc vs RubyCocoa for Mac开发:哪个更成熟?

时间:2009-01-09 00:16:24

标签: python ruby cocoa pyobjc ruby-cocoa

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

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

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

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

  1. API的文档
  2. 教程
  3. 工具
  4. 支持社区
  5. 通过桥梁获得Cocoa API的完整性
  6. 关于第5点,我不希望整个Cocoa API可以通过任何一个桥接器获得,但我需要有足够的Cocoa API来开发一个正常运行的应用程序。

5 个答案:

答案 0 :(得分:12)

虽然你说你“没时间”独立学习技术,但学习Cocoa的最快途径仍然是用它的母语学习它:Objective-C。一旦你理解了Objective-C并且已经完成了Cocoa框架的初始学习曲线,你就可以更轻松地选择PyObjC或RubyCocoa。

答案 1 :(得分:7)

我会回应克里斯的评估,并会进一步阐述为什么你应该学习Objective-C来学习Cocoa。正如克里斯所说,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,桥接功能非常相似。事实上,他们都使用Apple的BridgeSupport(Leopard附带)来提供桥接描述。两者都得到Apple的支持并随Leopard一起发货。这是个人品味的问题,你喜欢哪种语言。如果你选择Ruby,我建议你看看MacRuby。它绝对是Ruby on OS X的未来,因为它在Objective-C运行时之上重新实现了Ruby运行时。这提供了一些不错的性能和概念优势(包括与Objective-C垃圾收集系统的集成,PyObjC目前缺少使用本机python gc的功能)。 MacRuby还包括一个自定义解析器,它使桥接的objective-c方法的语法更好一些。 MacRuby的缺点是,在撰写本文时(2009年6月),它还没有为生产级别的使用做好准备。因为这听起来像是一个学习项目,这可能不是问题。

答案 2 :(得分:3)

我会说,两者大致相等。在某些地方更好,在其他地方更糟。但我不建议学习Cocoa。像克里斯说的那样,Cocoa需要对Objective-C有所了解。我比Objective-C更喜欢Ruby,但我仍然不建议用它来学习Cocoa。一旦你在Cocoa / Objective-C中有了坚实的基础(没有双关语),那么桥梁对你有用。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

ObjectiveC远不如Python或Ruby那么有趣或高效。这就是为什么人们想要选择具有良好Objective C访问权限的python或ruby。建议他们学习目标C首先忽略了点imo。我对pyobjc有很好的评论。它能够与Objective C框架无痛地进行互操作,这是非常棒的。我对Ruby Cocoa的经验较少,这部分是因为我上次看起来似乎没有那么干净,相对无痛的互操作性。我对MacRuby犹豫不决,因为它看起来太过分了。在pyobjc中,您可以编写普通的python,并且只在您真正想要/意味着时才使用基类和使用Foundation和Cocoa对象。根据我对MacRuby的理解,它是一个基于Cocoa的Ruby。所以字符串总是一个NSString。我对此不太满意。 YMMV。