扩展Python和Objective-C

1 投票
2 回答
806 浏览
提问于 2025-04-15 20:35

我很喜欢干净的代码。我希望我的编程语言能够清楚地表达我想做的事情,同时语法也能反映这一点。

举个例子,我在很多越狱iPhone的程序中使用Objective-C,这些程序通过运行时的method_setImplementation()函数来修改其他代码。或者在PyObjC中,我需要使用UIView.initWithFrame_()这样的语法,这样的写法也很糟糕,读起来很费劲,因为方法名的结构让人难以理解。在这两种情况下,语言的语法都不支持这样的写法。我发现有三种基本的方法可以做到这一点:

  • 疯狂的宏。看看这个“CaptainHook”,它以一种可用的方式实现了我想要的功能,但并不算干净,算是一种大 hack。
  • 还有“Logos”,它实现了一种非常不错的语法,但它是用Perl编写的,通过大量的正则表达式来解析我的代码。这让我有点害怕。我喜欢添加一个 %hook ClassName 的想法,但不想通过正则表达式来解析C或Objective-C。
  • 最后是Cycript。这是一个JavaScript的扩展,它可以与Objective-C的运行时接口,让你在JavaScript中使用Objective-C风格的代码,并将其注入到其他进程中。这可能是最干净的,因为它实际上使用了JavaScript的解析器,但我对这种语言并不是特别喜欢。

我应该,或者说我该如何为Python和Objective-C创建一个扩展,以便让我做到这一点?如果只是为了这样一个非常专业的小领域,值得为我的语言写一个解析器,把语法转换成更好理解的形式吗?我是否应该就这样忍受默认的Objective-C hooking或PyObjC的糟糕语法呢?

2 个回答

2

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

如果你有相关经验,我的看法就变成“这个主意真的很糟糕。”

你觉得这个项目会发展成一个成熟的大产品,别人也会想用它吗?如果是这样,那就去做吧;否则,这只会让你分心,影响你写出优秀的应用程序。

1

编程语言大致可以分为两种:人们常说,一种是大家都在抱怨的,另一种是没人用的。想要编写程序的人,选择编程语言并不是因为它好看或者很简洁,而是因为它有支持、可以使用,并且不会糟糕到让你根本无法使用。

当你看到一些你觉得可以改进的东西时,可能会很想说我可以修复这个!然后就冲上去,但在这种情况下,成本可能会高得不值得。那些只是在某些方面稍微干净一点或者一致性好一点的编程语言往往不会流行,因为这些小改进并不是你真正需要的,无法有效提升软件开发的过程。那些冷门的小众语言项目往往会失败,因为参与的成本(学习一种对你来说全新的、没有广泛支持和文档的小众语言)太高了。

如果你对语言设计和尝试新东西感兴趣,这可能会对你有吸引力。但这其实比看起来要难,所有主要编程语言的设计者在设计时都必须面对很多权衡,常常为了实用性和兼容性而牺牲了美观和纯粹性。另一方面,如果你只是想写软件,那就好好利用你手头这些不完美的工具吧。

撰写回答