💾 Archived View for rwv.io › 2020-11-25.gmi captured on 2024-03-21 at 15:01:41. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2023-01-29)

-=-=-=-=-=-=-

Almost two weeks of racket

Short version: good stuff!

My first application in racket is creeping out of the non-trivial zone into something which let's me get to know racket at bit more. I am still very happy with the experience but also found some its rougher patches.

dʒɛmɪni, my first racket application

First the good! Racket is very expressive and the "minimal" distribution is very complete. I never needed to install some extra package to get my things done. For instance: I never opted to look for some package to do file extension to mime-type mapping because it's very easy to just read a mime.types file yourself in standard racket, just a couple of lines.

I feel I still haven't scratched the surface of rackets capabilities and I am eager to explore some more soon. Especially the ability to write specialized languages is very appealing. I'd like to experiment with that in dʒɛmɪni to whip up some kind of templating language.

Integration with emacs is very good. Yes, that's something you'd expect from a lisp but still, being spoiled with clojure and cider, racket-mode really delivers especially with racket-xp-mode.

https://racket-mode.com/

But.. that brings me to performance because, especially with racket-xp-mode turned on, emacs tends to be a bit sluggish. Also dʒɛmɪni isn't as fast as I'd like it to be but that's probably totally on me. I should probably try and understand raco exe and raco distribute to get some performance gains too.

About that, it's hard, at least for me, to find good examples of applications written in racket. It took me awhile to figure out how to write tests and have a main loop in the same file without those two being in each others way. I still miss destructuring but did find out about match and match-let so I'm almost over that.

Also some of the stuff I came up with is just weird and probably wrong. For instance: to implement SNI, the only way I could find out how to determine what server name the caller is asking for is through setting a callback. But how do you get that in your tcp-accept loop? I ended up with putting the server name in a thread-cell but it just doesn't feel right, even after bashing it with a lot of concurrent hits and it still working properly.

This SNI business bugs me, so I wanted to go and ask the friendly community and join the mailinglist. There isn't any, it's a google group, I don't feel like making a new google account for that just yet. But from what I've seen they do seem to be a lively and helpful community so maybe I'll join somewhere in the future. For now, I'm fine with the excellent documentation.

So that's my first experience with racket. If racket is still on your list of things to dip into, gemini is a great opportunity to start. Build your own client, server, CGI or whatever. It's fun!

Cheers,

R.

--

📅 2020-11-25

🏷 racket, programming

📧 hello@rwv.io

CC BY-NC-SA 4.0