GObjects are nice for language inteop with GI indeed, but they aren't as cheap
That's a good point, it should be cheap because for the symbol tree code, all the `TMTag`s have to be wrapped by `GeanySymbol` first and it would be best to have the overhead as small as possible. If we wanted, we could change `GeanySymbol` to something like ```C typedef struct GeanySymbol { ExternalSymbol *ext; TMTag *tag;
gint refcount; } GeanySymbol; ``` where `ExternalSymbol` would contain all the other members so `GeanySymbol` with the `TMTag` "backend" would be smaller and would not have to zero-fill so many members.
GBoxed works for non-C. You just have to add a non-C-friendly allocation/constructor because there's no generic g_boxed_new().
For GeanySymbol, this is hidden behind the two constructors: ```C GeanySymbol *geany_symbol_new_from_tag(TMTag *tag); GeanySymbol *geany_symbol_new(gchar *name, gchar *detail, gchar *scope, gchar *file, TMParserType lang, glong kind, gulong line, gulong pos, guint icon); ``` so I believe it should be satisfied already.