1

我是干净代码的粉丝。我喜欢我的语言能够表达我正在尝试做的事情,但我也喜欢反映这一点的语法。

例如,我在 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 的可怕语法吗?

4

2 回答 2

2

如果您在编译器或解释器设计方面没有任何经验,我的回答是坚决否定,这是计算机科学中最大的挑战之一。

如果您确实有经验,我的答案将转变为“那是一个非常愚蠢的想法”。

您是否设想这会成为其他人想要使用的大型成熟产品?如果你这样做,那就继续吧,否则只会分散你编写出色应用程序的注意力。

于 2010-03-19T02:29:28.137 回答
1

编程语言只有两种:不言而喻,一种是人人都在抱怨的,一种是没人用的。想做程序的人不会因为漂亮或干净而选择语言;他们之所以选择它,是因为它受支持、可用,而且不会太糟糕以至于您无法使用它。

当你看到一些你认为可以改进的东西时,很有可能会说我可以解决这个问题!并直接运行,但在这种情况下,成本可能高于它的价值。没有比更干净更一致的更大目标的编程语言往往不会流行,因为这些领域的渐进式进步并不是你真正需要改进软件制作过程的事情。使用晦涩的宠物语言的项目往往会消亡并且不会流行,因为贡献的成本(学习某人的宠物语言,对您来说是新的并且没有广泛的支持和文档)太高了。

如果您对语言设计和修补感兴趣,这对您来说可能很有趣。这比看起来更难——所有主要语言的设计者在设计它们时都不得不进行大量权衡,经常为了实用性和兼容性而牺牲美观和纯度。另一方面,如果您想编写软件,请处理您所处理的不完善的工具。

于 2010-03-19T06:15:56.110 回答