Federico Mena-Quintero, a GNOME developer, writes about maintaining librsvg and porting it from C to Rust.
Commenters praise his work and point to his librsvg Rust porting talk and his post on Rust's lack of a stable ABI, discussed in C-to-Rust threads.
You may also consider doing it in Rust.
It's possible to implement GObject subclasses in Rust which little additional overhead as compared to doing it in C, but you get the syntactical niceties of for each loops, traits, and other features of Rust.
librsvg makes good use of these bindings, and is undergoing a rewrite in Rust. Gstreamer bindings are also becoming more complete, and example implementations of many of the standard plugins have been rewritten. The official implementation is still in C though.
Vala is a neat concept though and a pretty clean language.
https://people.gnome.org/~federico/blog/librsvg-gobject-in-rust.html
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs
Staying a little more focused, I have reasons for none of the languages you mention, but in terms of ease of integration of C and Rust, here’s one real world example: https://people.gnome.org/~federico/blog/librsvg-build-infrastructure.html
Which recently passed a milestone of having less C than Rust: https://www.reddit.com/r/rust/comments/8ofa0w/librsvg_has_now_more_rust_code_than_c_code/?st=JI35DG9U&sh=2e2ab3ec
At this point I personally find it much easier to move C to Rust than C++, and end up with a much safer codebase.
Have you tried Rust?
The ABI in Rust is doable: https://people.gnome.org/~federico/blog/rust-stable-abi.html
And it doesn't feel like C++ when writing it. The syntax and language features are nice and feel modern.
It does require more attention because of what it compiles down to, but the compiler is there to help with it.
I haven't been excited about any programming languages in years, but Rust has certainly taken my attention lately.
This comes up a lot with my work on compiling the Linux kernel with LLVM. So much so I've made a tier list to describe what I picture as a Venn diagram of support: https://clangbuiltlinux.github.io/
Also recently seen on this topic:
https://people.gnome.org/~federico/blog/librsvg-rust-and-non-mainstream-architectures.html
https://www.reddit.com/r/rust/comments/lfysy9/pythons_cryptography_package_introduced_build/gmq9vi8/
One example: librsvg was rewritten from C into Rust, gradually, while retaining the C API:
https://gitlab.gnome.org/GNOME/librsvg
https://people.gnome.org/~federico/news-2016-10.html
(I do not necessarily endorse this, as I find the dependency on a Rust compiler of very recent vintage, to be much more annoying than depending on any decent C compiler from the last 7 years or so.)
For more detail into the porting effort, I recommend taking a look at these slides, taken from a talk the author gave last year:
https://people.gnome.org/~federico/blog/docs/fmq-porting-c-to-rust.pdf
"Rust revived my interest in maintainership. It is very empowering to finally have a good language that I can use at the level of the stack where I work."