Writing Node.js modules in C++

Today I found myself looking at how to write node.js modules in C++. I read @izs’s article on the How to Node website and felt tempted to explore the C++ route, being already familiar with their JavaScript counterparts.

I am no C++ expert, in fact I’m quite a noobie, but I have read a lot of it (it is used to ilustrate programming concepts in sooooo many books) and even managed to write a couple of command line tools for my own use. Anyway, the idea in this post is to show the most basic interaction between a C++ module and node.js. The examples I have seen have been very useful, but I felt the need to simplify the code even more and reduce the “hello world” module into the bare minimum.

So this is my go at it:

This code registers a module called cpphello. This module has one method called foo, and this method simply returns a string (“Hello World”).

UPDATE: This example has been updated thanks to pull requests from kul

So from a node.js JavaScript file we could use it like this:

You can get the whole source code for this hello world module from GitHub (https://github.com/lupomontero/node-cpphello). There you will find the .cpp file with the c++ source and a JavaScript file using the module together with the build script.

Ok, so now that I have a basic hello world module I can’t help but wondering, how much faster will the C++ code run? Well, at this point I just had to, so I wrote a really quick and dirty test. The test implements the exact same piece of code both in C++ and JavaScript and then compares execution times. You can download the test also from GitHub: https://github.com/lupomontero/node-cppspeed.

The results:

foo run in 167ms
cppfoo run in 18ms
c++ was 9.3 times faster

Other examples:

https://github.com/pkrumins/node-async
https://github.com/isaacs/node-async-simple