It's usually lack of garbage collection that gets to me the fastest. Closures are a close second, but those you can easily fake in nearly any language. In Java, anonymous classes usually do the job. In C with GNU extensions, you can use nested functions as callbacks, with the caveat that they'll only be available within the dynamic scope of the caller.