The high-level APIs in guile scheme are beautiful. Macro API is beautiful. Continuation API is okay.
On the other hand, I couldn’t stop feeling that many guile scheme APIs like port APIs are ugly. While I read guile scheme manual, I thought I was studying ugly C APIs. Uglier than java and javascript. I realized that these ugly APIs are probably low-level APIs that were designed for performance.
If guile scheme is going to become the foundation of a lisp machine, these low-level APIs can make sense for performance.
Perhaps, one can even write a kernel in scheme with low-level APIs?
I think low-level APIs don’t have to be ugly. They can probably be re-designed to look beautiful, but doing so probably breaks backward compatibility.
If someone was designing a lisp language from scratch for low-level and high-level programming, it can look beautiful for both low-level and high-level APIs.
Is this going to be a herd joke?
This is not a joke. It is simply the impression I got while I was studying guile scheme.
If I was joking, I would make it obvious.
While scheme language standard is fine for programming education, I think scheme has been overhyped a bit. I’m going to use guile scheme, but I don’t love it.
Fortunately, scheme isn’t just a language, it’s a meta-language. The point is that you can design any syntax you feel appropriate. This comes with many of the problems of DSLs, which only become apparent later (if your DSL misses the mark, for example)
I don’t really speak from experience though. So idk.
I like the ports interface. It feels very unixy.
Here’s a speedrun through more advanced integration
A particular pain point of many scheme APIs is place-oriented programming that was criticized by rich hickey.
Most Port functions use positional arguments instead of keyword arguments. They also force you to deal with offset and whence. Offset and whence come from C. Many guile scheme APIs expose you to low-level C abstractions. Dealing with offset manually is painful.
Python has been criticized for many reasons, but its APIs at least give you keyword arguments instead of positional arguments. Python APIs also don’t expose you to things like offset.
I don’t see keyword arguments in low-level programming. That requires management of symbols and usually recursion. You can’t have recursion at the lowest levels.
But again, I really don’t know. You sound smarter than me. It’s really not that unusual around here (which is a good thing)
I guess if I avoid low-level APIs, guile scheme may not irritate me.