After my combinators post I was curious why chaining map performs so much better than the composition operator I wrote in Ruby. I thought to myself, maybe I just need to write it in C? So, I wrote another C extension: Proc#compose.

As I did last time, I started out with just a basic experiment then I extracted it into a gem. The experiment includes some information about the main gem I found offering compose: funkify. (It is much slower than the Ruby version I wrote, but it’s not a totally fair comparison.)

Anyway, the C extension’s performance is better than its Ruby counterpart, but still not as good as just chaining:

proc#compose

Unfortunately, I haven’t yet answered my own question as to why it still performs better to just chain map rather than use compose. If/when I figure it out, I’ll post an update. If you’re curious as well, a good place to start is my comparison script.