Common Lisp is also a pleasure to use for k8s-hosted services. Just deploy your Lisp-based service to k8s, forward the sly/slime port to your local system, and continue to work on it interactively with emacs and sly/slime. It's really the most interactive development approach for k8s-hosted services. See https://github.com/container-lisp/s2i-lisp
How do you do the forwarding? (That’s an interesting question to me by itself, but I ask because it seems like that feature is just as good outside of k8s too :))
Modern, functional Common Lisp: myths and best practices
21–30 of 161 posts
Re: Modern, functional Common Lisp: myths and best practices
#22Earlier quoted context omitted.
Immutability is something I'm still exploring in Common Lisp. Any pointer, anyone?
https://common-lisp.net/project/fset/ By the way, I found a lot of your best practices questionable to say the least. Since it's obvious that you are a newcomer to CL, I would refrain from producing "best practices" type blog posts until I had a few years of experience under my belt. For that reason, I also found your post confusing and I'm inclined to categorize it as "mostly rehashing stuff that is already there" r…
I understand your comment as a bit judgmental, if not rude. Please keep the tone friendly, it helps if we want to have constructive discussions. I'd be happy (as well as everyone around here I'm sure) to discuss what you find questionable.
Re: Modern, functional Common Lisp: myths and best practices
#23Earlier quoted context omitted.
How do you do the forwarding? (That’s an interesting question to me by itself, but I ask because it seems like that feature is just as good outside of k8s too :))
Outside of k8s, which I'm not familiar with, ssh can do port forwarding.
Re: Modern, functional Common Lisp: myths and best practices
#24Earlier quoted context omitted.
How do you do the forwarding? (That’s an interesting question to me by itself, but I ask because it seems like that feature is just as good outside of k8s too :))
With k8s, you just create a service of type NodePort and it assigns a free external port for that service, which is mapped back to a specific port in the Lisp container.
Re: Modern, functional Common Lisp: myths and best practices
#25Earlier quoted context omitted.
Immutability is something I'm still exploring in Common Lisp. Any pointer, anyone?
What I do: Write pure functions, but don't shy away from mutating lexically scoped state in order to improve performance. For global stuff, wrap it with classes since objects are a commonly understood way to reason about state.
Re: Modern, functional Common Lisp: myths and best practices
#26Earlier quoted context omitted.
Immutability is something I'm still exploring in Common Lisp. Any pointer, anyone?
It's a matter of not modifying things once constructed. CL has hooks to help do that, although a user can always get around them. A package I've been involved with lately is fset, which is available through quicklisp, or at https://github.com/slburson/fset It has some interesting features, including "functional setf expansion". This would turn something like (setf (fcar x) y) into something equivalent to (setf x (con…
Re: Modern, functional Common Lisp: myths and best practices
#27Earlier quoted context omitted.
Immutability is something I'm still exploring in Common Lisp. Any pointer, anyone?
It's a matter of not modifying things once constructed. CL has hooks to help do that, although a user can always get around them. A package I've been involved with lately is fset, which is available through quicklisp, or at https://github.com/slburson/fset It has some interesting features, including "functional setf expansion". This would turn something like (setf (fcar x) y) into something equivalent to (setf x (con…
Re: Modern, functional Common Lisp: myths and best practices
#28Earlier quoted context omitted.
How do you do the forwarding? (That’s an interesting question to me by itself, but I ask because it seems like that feature is just as good outside of k8s too :))
With k8s, you just create a service of type NodePort and it assigns a free external port for that service, which is mapped back to a specific port in the Lisp container.
Re: Modern, functional Common Lisp: myths and best practices
#29Earlier quoted context omitted.
Immutability is something I'm still exploring in Common Lisp. Any pointer, anyone?
https://common-lisp.net/project/fset/ By the way, I found a lot of your best practices questionable to say the least. Since it's obvious that you are a newcomer to CL, I would refrain from producing "best practices" type blog posts until I had a few years of experience under my belt. For that reason, I also found your post confusing and I'm inclined to categorize it as "mostly rehashing stuff that is already there" r…
Re: Modern, functional Common Lisp: myths and best practices
#30Earlier quoted context omitted.
https://common-lisp.net/project/fset/ By the way, I found a lot of your best practices questionable to say the least. Since it's obvious that you are a newcomer to CL, I would refrain from producing "best practices" type blog posts until I had a few years of experience under my belt. For that reason, I also found your post confusing and I'm inclined to categorize it as "mostly rehashing stuff that is already there" r…
Thanks for the fset link. I understand your comment as a bit judgmental, if not rude. Please keep the tone friendly, it helps if we want to have constructive discussions. I'd be happy (as well as everyone around here I'm sure) to discuss what you find questionable.
Apart from that though I do think it's useful to have the occasional new posts showcasing rebuttals to a few "myths" that won't die, so I appreciated your post. Some gifs of editor interactivity (like in https://malisper.me/debugging-lisp-part-1-recompilation/) would make it better. Though ironically (one myth has been "it has no libraries") perhaps some people might be turned off by the mention of so many libraries ("ok such-and-such is there after all but I have to type a quickload, why can't it come without any work?" -- programmers are often lazy in the worst ways). Before using every utility library under the sun and then some, I'd encourage people to get to know the base language... It's typically quite sufficient for many tasks. But hey, libraries are cool too.
Two other persistent data structure libs that came up in a thread the other day (though fset seems to be the most popular): https://github.com/danshapero/cl-hamt/ and https://github.com/ndantam/sycamore