Search code examples
cgccvalagobject

How much optimized is Vala generated C code over hand written C code?


Is Vala generated code are optimized like normal hand-written C code? Is there any performance overhead in using GObject system over not using it?

NOTE: In my next C project I am researching over to use Vala or not. The project is not a GUI application, it is an interpreter kind of application which has to be platform independent. I am using gcc as compiler.


Solution

  • As a Vala developer I wouldn't suggest Vala for an interpreter. In an interpreter you're going to create many objects for ast, data types, possible intermediate objects, codegen objects and so on. In Vala itself I've personally measured that the major overhead is creating objects (that are simple GTypeInstance, not even GObject). Vala is designed to work with gobjects, but gobjects aren't designed to be allocated fast.

    So, for your project I'd still be using glib/gio for cross-platform stuff, like networking, string utils, unicode, data structures and so on, because they have a clean, consistent and convenient API, but I wouldn't create ast objects as gobjects/gtypeinstance. In an interpreter you want fast allocation, that's the whole point.

    My personal advice is: use vala if you want to build desktop applications, dbus services, gstreamer stuff or anything that touches the g* world, nothing else.