我是干净代码的粉丝。我喜欢我的语言能够表达我正在尝试做的事情,但我也喜欢反映这一点的语法。
例如,我在 Objective-C 中为越狱的 iPhone 编写了很多程序,这些程序使用method_setImplementation()
运行时的功能修补其他代码。或者,在 PyObjC 中,我必须使用 syntax UIView.initWithFrame_()
,这对于方法名称的结构方式也非常糟糕且不可读。在这两种情况下,语言在语法上都不支持这一点。我发现了三种基本方法:
- 疯狂的宏。看看这个“CaptainHook”,它以一种可用的方式完成了我正在寻找的事情,但它不是很干净并且是一个主要的 hack。
- 还有“Logos”,它实现了一个非常好的语法,但它是用 Perl 编写的,用大量的正则表达式解析我的代码。这让我害怕。我喜欢添加 %hook ClassName 的想法,但不喜欢使用正则表达式来解析 C 或 Objective-C。
- 最后,还有 Cycript。这是 JavaScript 的扩展,它与 Objective-C 运行时接口,允许您在 JavaScript 中使用 Objective-C 样式代码,并将其注入其他进程。这可能是最干净的,因为它实际上使用了 JavaScript 解析器,但我一般不是该语言的忠实粉丝。
我应该以及应该如何创建 Python 和 Objective-C 的扩展来允许我这样做?是否值得为我的语言编写一个解析器来将语法转换成更好的东西,如果它只是在这样一个非常专业的领域?我应该只接受默认的 Objective-C 挂钩或 PyObjC 的可怕语法吗?