Extending Programming Languages

Posted by chpwn on Stack Overflow See other posts from Stack Overflow or by chpwn
Published on 2010-03-19T02:01:08Z Indexed on 2010/03/19 2:11 UTC
Read the original article Hit count: 1033

(Since I just posted this in another question, but my browser had to be annoying and submit it without content first, here it is again:)

I'm a fan of clean code. I like my languages to be able to express what I'm trying to do, but I like the syntax to mirror that too.

For example, I work on a lot of programs in Objective-C for jailbroken iPhones, which patch other code using the method_setImplementation() function of the runtime. Or, in pyobjc, I have to use the syntax UIView.initWithFrame_(), which is also pretty awful and unreadable with the way the method names are structured. In both cases, the language does not support this in syntax. I've found three basic ways that this is done:

  • Insane macros. Take a look at this "CaptainHook", it does what I'm looking for in a usable way, but it isn't quite clean and is a major hack.
  • There's also "Logos", which implements a very nice syntax, but is written in Perl parsing my code with a ton of regular expressions. This scares me. I like the idea of adding a %hook ClassName, but not by using regular expressions to parse C or Objective-C.
  • Finally, there is Cycript. This is an extension to JavaScript which interfaces with the Objective-C runtime and allows you to use Objective-C style code in your JavaScript, and inject that into other processes. This is likely the cleanest as it actually uses a parser for the JavaScript, but I'm not a huge fan of that language in general.

Basically, this is a two part question. Should, and how should, I create an extension to Python and Objective-C to allow me to do this? Is it worth writing a parser for my language to transform the syntax into something nicer, if it is only in a very specialized niche like this? Should I just live with the horrible syntax of the default Objective-C hooking or pyobjc?

© Stack Overflow or respective owner

Related posts about python

Related posts about objective-c