代码之家  ›  专栏  ›  技术社区  ›  Grant Paul

扩展python和objective-c

  •  1
  • Grant Paul  · 技术社区  · 15 年前

    我喜欢干净的代码。我喜欢我的语言能够表达我想做的事情,但我也喜欢语法来反映这一点。

    例如,我在objective-c中为越狱的iphone开发了很多程序,这些程序使用 method_setImplementation() 运行时的函数。或者,在pyobjc中,我必须使用语法 UIView.initWithFrame_() ,这对于方法名的结构来说也是非常糟糕和不可读的。在这两种情况下,语言在语法上都不支持这一点。我发现了三种基本的方法:

    • 疯狂的宏。看看这个 “船长钩子”,它做我该做的 以一种有用的方式寻找,但是 不是很干净,而且是个少校 乱劈。
    • 还有“logos”,它 实现了一个非常好的语法,但是 用Perl编写,用 大量的正则表达式。这个 吓我一跳。我喜欢增加 %hook类名,但不能使用 解析c或的正则表达式 Objor C
    • 最后,是cycript。这是一个 javascript的扩展 与目标C的接口 运行时并允许您使用 您的 javascript,并将其注入 其他流程。这很可能是 最干净,因为它实际上使用了一个解析器 对于javascript,但我不是 对那种语言的狂热者。

    我应该,而且应该如何创建python和objective-c的扩展来允许我这样做?如果我的语言只是在这样一个非常特殊的领域,那么为它编写一个解析器来将语法转换成更好的东西值得吗?我应该接受默认objective-c钩住或pyobjc的可怕语法吗?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Mike Graham    15 年前

    只有两种编程语言: ,事实是, 每个人都抱怨的和没人用的。 想要制作程序的人不会因为一种语言漂亮或干净而选择它;他们选择它是因为它是受支持的、可用的,而不是因为它糟糕到你不能使用它。

    当你看到一些你认为可以改进的东西时,你会很有诱惑力地说 我能搞定! 然后直接进去,但在这种情况下,成本可能会高于它的价值。没有比成为 有点干净 更一致一点 倾向于不受欢迎,因为这些领域的渐进式发展并不是你真正需要改进软件制作过程的东西。用晦涩难懂的宠物语言做的项目往往会死而复生,因为投入(学习对你来说是新的、没有广泛支持和文档的某人的宠物语言)的成本太高。

    如果你对语言设计和修补感兴趣,这对你来说可能很有趣。所有主要语言的设计者在设计它们时都不得不面对许多折衷,往往为了实用性和兼容性而牺牲美观和纯洁性,这比想象中的要困难得多。另一方面,如果你想编写软件,那就要处理你处理过的不完美的工具。

        2
  •  2
  •   mikerobi    15 年前

    如果你在编译器或解释器设计方面没有任何经验,我的答案是绝对的不,这是计算机科学中最大的挑战之一。

    如果你有经验的话,我的回答是“这真是个愚蠢的想法”。

    你认为这会成为一个大的成熟产品,其他人会想使用吗?如果你不这样做,否则它只会分散你编写伟大的应用程序的注意力。