我是干净代码的粉丝。我喜欢我的语言能够表达我想要做的事情,但我也喜欢反射(reflect)这一点的语法。
例如,我在 Objective-C 中为越狱的 iPhone 开发了很多程序,这些程序使用运行时的 method_setImplementation()
函数修补其他代码。或者,在 PyObjC 中,我必须使用语法 UIView.initWithFrame_()
,这对于方法名称的结构方式来说也非常糟糕且不可读。在这两种情况下,该语言在语法上都不支持这种情况。我发现了实现此目的的三种基本方法:
- 疯狂的宏。看看这个 “CaptainHook”,它做的是我的事 以可用的方式寻找,但它 不是很干净而且是一个主要的 黑客攻击。
- 还有“Logos”, 实现了一个非常好的语法,但是 用 Perl 编写并解析我的代码 大量的正则表达式。这 吓到我。我喜欢添加的想法 %hook ClassName,但不使用 解析 C 的正则表达式或 Objective-C。
- 最后是 Cycript。这是一 JavaScript 的扩展 与 Objective-C 的接口(interface) 运行时并允许您使用 Objective-C 风格的代码在你的 JavaScript,并将其注入(inject) 其他流程。这很可能是 最干净,因为它实际上使用解析器 对于 JavaScript,但我不是 总的来说,该语言的忠实粉丝。
我应该并且应该如何创建 Python 和 Objective-C 的扩展来允许我做到这一点?如果只在像这样的非常专业的领域,是否值得为我的语言编写一个解析器来将语法转换为更好的东西?我应该忍受默认的 Objective-C hooking 或 PyObjC 的可怕语法吗?
最佳答案
如果您在编译器或解释器设计方面没有任何经验,我的回答是肯定的,这是计算机科学中最大的挑战之一。
如果您确实有过这样的经历,我的答案就会变成“这真是个愚蠢的主意。”
您认为这会成为其他人想要使用的大型成熟产品吗?如果您这样做,那就继续吧,否则它只会分散您编写优秀应用程序的注意力。
关于python - 扩展 Python 和 Objective-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2474554/