I'm guessing this is small because it relies on GObject Inspection.
This is a Gnome feature whereby C libraries are accompanied by an XML description of functions and types. The XML description annotates semantics, not only syntax. Like if a function has a pointer parameter, does it have to be malloced, and does the caller free it or the callee? This information is not possible to determine from parsing C header files.
If you can parse the GObject XML, you can then generate FFI bindings (which can be done in Lisp easily without any textual code generation hacks).
Before people get too up-in-arms about that being XML, that is just the first step in the GObject Introspection compilation.
The second step builds a .typelib file which is a mmap()'able data-structure used at runtime by dynamic languages. It's smaller as it doesn't contain things like function/class documentation.
Additionally, the language bindings tend to use the GIRepository base structure which handles loading those mmap()'able data structures with an C API on-top of it.
Well, actually not everything possible via CFFI is possible via GIR. I've run into some issues before. I cannot recall what exactly, but it was a showstopper for me :-(.
Crosscompatiblity? IIRC the same concept was used for some exo-lisp gtk bindings, IIRC fennel, and I couldn't get it work for the life of it under M1 macs....
It's not good D.R.Y. to reinvent a binding library for each and every application language. What's needed is a state-ful GUI markup standard. Then any language that can emit and read XML can use the GUI kit/browser/component, no binders needed.
What you're describing is GObject inspection. It's literally a series of XML documents that can be used to autogenerate ffi bindings in any language. The future is now.
No one will want to write GUI code that directly parses and generates XML, so every language will end up putting wrappers around that, and you are back to where you started with an expensive translation layer in-between.
Having a machine format that describes the interface and facilitates auto-generating the bindings, like GObject introspection is a better option and exists today. Even then the auto-generator will need to be custom for each language, to handle integration with the language's standard library data structures, memory management and the like.
> XML User Interface Language is a user interface markup language developed by Mozilla. XUL is an XML dialect for writing graphical user interfaces, enabling developers to write user interface elements in a manner similar to web pages.
If you did that, you limit what the API of a framework can do, you either can't use ones that fall outside that spec, or you have to jump through hacky hoops to get it working.
Experienced engineers know D.R.Y. has it's uses, but isn't a good hill to die on.
I'm not sure DRY applies across language boundaries. If a binding exists in one language, creating a binding in another isn't really repeating anything.
Does GTK4 finally implement its own C coded unicode text shaper (or at least, a roman script text shaper)? No I don't want that horrible c++ diareha which is harfbuzz.
Harfbuzz exposes a C API, why would you need to use C++?
Additionally, it works extremely well with GTK 4 via Pango and you can often interoperate between the two layers if you even need to touch a hb_face_t/etc. In fact, the only time I had to mess with Harfbuzz was when integrating GPU-rendered glyphs via Behdad's GLyphy shaders.
It has a C API, but it is written using c++. A long time ago, I did a build of GTK3, to remove the c++ dependency, I did an implemention of this C API in C, only for roman scripts though. I bet this C API was "obsolescence planned" and if I ever need GTK again (unlikely), I will code again a C implementation for roman scripts.
There is an alternative from IBM, ICU, it was properly coded in C, but it was switched to toxic c++.
I mean, I don't use it, and I've been writing C for a solid 25 years, but Behdad is one of the best engineers I've ever met in my life. So I definitely don't share your opinion of the code or the quality.
c++ is toxic for humanity because of its grotestquely and absurdely complex and massive syntax and its compilers. This is not a matter of opinion, this is an absolute unquestionable truth.
Carefull, I am not saying plain and simple C is better: it is only orders of magnitude less worse as there is already way too much in its syntax. Some would call that, the "most reasonable compromise".
Indeed, I am currently trying to remove as much as I can gcc and llvm from my stack (I am now targetting much more, probably too much). llvm is financed by apple (vanguard/blackrock), and gcc by the MIT/redhat(IBM). I wish I had that much money to hire ppl in order to remove that toxic c++.
The really sad story is the unjustified amount of shit C++ gets given its history and design goals.
C++ provides features to write much safer and nicer code than with C, for the same effort, with minimal overhead. You have proper constructors and destructors, smart pointers, the STL, templates, and much more.
It is perfectly sensible: c++ syntax and its compilers are grostesquely and absurdely massive and complex, and this is an issue.
There is no opinion here, just facts: for instance, due to the abysmaly (the word is fair) difference between c++ and C, it is reasonable for a team of averagely skilled individuals or individuals to write a naive C compiler, which is absolutely not the case for c++.
If you don't want to acknowlegde this is a issue, at least I tried to open your eyes on the matter.
I love that LibreOffice lets me use the full range of OpenType features in fonts. Do I have Harfbuzz to thank for that?
But please let me edit the sample text in the OpenType features modal, so I can actually see the effects of my changes without leaving the entire Font window :)
This is a Gnome feature whereby C libraries are accompanied by an XML description of functions and types. The XML description annotates semantics, not only syntax. Like if a function has a pointer parameter, does it have to be malloced, and does the caller free it or the callee? This information is not possible to determine from parsing C header files.
If you can parse the GObject XML, you can then generate FFI bindings (which can be done in Lisp easily without any textual code generation hacks).