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

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

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

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

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

  1. API的文档
  2. 教程
  3. 工具
  4. 支持性社区
  5. cocoaAPI的完整性通过桥梁可用

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

我会回应克里斯的评估,并会扩展一下为什么你应该学习Objective-C来学习Cocoa。 正如克里斯所说,Objective-C是Cocoa的基础和本地语言,它的许多范例与该谱系密不可分。 特别是,需要选择器和动态消息解析以及在运行时修改类的能力来实现Cocoa技术,例如分布式对象和绑定。 虽然这些function可以在其他动态语言(如Ruby和Python)中使用,但语言模型中存在足够的不匹配,您必须至少了解Objective-C才能理解Cocoa。 我建议你看一下上一个问题进一步讨论: 我是否必须学习Objective-C才能进行专业的Mac开发?

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

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

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

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

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

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