My 1 cent
a response to @heikkiket.
C is OK…
Now GNOME/newcomers site has links straight to different projects - most interesting of them coded in C. Not very newcomer-friendly…[…]
I would say that Gtk+ has a very good interface in C, and it is easy to get your head around what’s happening. (One of those things that was more magic in – say C++ – is quite straight forward in GObject/GLib code).
Sure, it is lots of code to write and it looks like a mess if you open up old projects, but modern GLib has some very nice macros that does a lot of the heavy lifting for you[1].
The only tedious thing I’ve encountered are doing enum
s “correctly” the GLib way[2]. The second one is creating signals[3] and properties[4].
The rest is very easy to understand and noob friendly now-a-days.
Also: Knowing the C interface is always good, independent of what language you are writing your Gtk+ app in.
Tooling:
Meson is your friend[5].
You can basically use any editor you want, but GNOME has it’s own editor GNOME Builder[6] you can have a look at, it’s quite good.
GNOME Builder has support for a wide range of languages too.
On Vala
Vala is not bad, it is basically like TypeScript or early C++ in that it is a language that compiles to an other language.
I like Vala personally, as it provides so much for you in the end. Even the documentation has come a long way in the last few years[7].
It can also be a good introduction to GLib based programming, as it introduces a lot of concepts and you can just look the the generated C code to figure out what it is doing.
(Personally I’ve seen more programs written in Vala than in Dlang, but that is probably just me).
Python
Use what ever resource you can find to get started if that is the way you want to go.
References
[1] GObject – 2.0
[2] GObject – 2.0
[3] gtk/gtkwidget.c · main · GNOME / gtk · GitLab + gtk/gtkwidget.c · main · GNOME / gtk · GitLab + gtk/gtkwidget.c · main · GNOME / gtk · GitLab (This needs a better tutorial… The one in the reference docs is lacklustre, to say the least.)
[4] GObject – 2.0
[5] Tutorial + GNOME module
[6] Apps/Builder - GNOME Wiki!
[7] Vala Reference Manual - Vala Reference Manual + https://valadoc.org/
[C++] glibmm: glibmm Reference Manual + gtkmm: gtkmm Reference Manual
[D] https://api.gtkd.org/ + GitHub - gtkd-developers/gir-to-d: Create D bindings from GObject introspection files