GNOME+Rust Hackfest in Thessaloniki

The last GNOME+Rust hackfest just ended, time for a blog post to sum up what happened in this event!

What happened?

Just like usual, a lot of things. This time, we discussed more than usual, mainly about how things should move in gtk-rs future, things to be improved based on users' feedbacks and where Rust could be used in GNOME more generally. Some interesting things came out of those discussions and I can't wait for them to become real. I'll talk about all this when it'll be more concrete.

What about code then? A lot of awesome things:

@philn wrote an amazing improvement on how glib (and therefore, all gtk-rs libraries) handles strings. It avoids a lot of cloning and we expect to get huge performance improvements from it!

@sdroege worked on gobject-subclass. This project will certainly get merged into glib in not so long. It is a cornerstone for the future of gtk-rs since it'll allow to add inheritance on widgets!

@federicomenaquintero continued his work on gnome-class (with the great help of both @alexcrichton and @antoyo!).

I'm pretty sure I missed a lot of amazing other contributions but their authors will certainly write blog posts about it so I'll let them talk about their work themselves! :)

Little changes and (a lot of) scheduling

So what happened on my side? Before the event started, I generated the Rust binding for the Atk library. It allowed me then to integrate it into gtk-rs/gtk and to write an example on how to use it (orca has been really useful to test it!).

We also somewhat officialized that gtk-rs supports the Rust 1.28 version. We had to make a few fixes into gir in order to make it supported in all crates but it's now all working! Discussions about making it (the supported Rust version) official is still going on.

I sent a pull request strenghtened gir's CI in order to be sure that the generated code is valid for high-level generated APIs.

I made a little cleanup on gir repository.

I also added the generation of the Display trait in gir. It was weird to only have the Debug trait, so now this is a weirdness fixed. Therefore, you can now write:

Run let widget = gtk::Button::new_with_label("hello"); println!("This is a {}!", widget);

And you'll get:

This is a Button!

I started working on the "closure user_data" issue. Unfortunately, I didn't have time to finish the pull request. This is one of the last big missing parts of gir and I really want it to be done as quickly as possible. More to come soon!

Scheduling you said?

Yes, I said that we discussed a lot about scheduling but didn't yet said what it was all about. Time to do it!

So we talked about what remained to be done before a 1.0 release. So basically:

Finish improvement of gtk-rs crates' API.

Improve performances (and thanks to @philn's PR, we made a big step!).

Add inheritance so users can write easily (and safely!) their own widgets.

Still a lot of work to do but it's nice to see how much gtk-rs evolved since its beginnings. We also talked more globally about Rust integration into GNOME libraries. Again, more to come later!

Word of the end

Thanks a lot to Sebastian and Vivia for organizing the event and taking care of us. It was an amazing hackfest!

And finally (last but not least):

Thanks to the GNOME Foundation...

... for sponsoring my travel and accomodation during the hackfest!