Live data from Hacker News

Modern, functional Common Lisp: myths and best practices

ambrevar.xyz

21–30 of 161 posts

Re: Modern, functional Common Lisp: myths and best practices

#21
post #17
post #2

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 :))

Outside of k8s, which I'm not familiar with, ssh can do port forwarding.

Re: Modern, functional Common Lisp: myths and best practices

#22
post #5

Earlier 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…

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.

Re: Modern, functional Common Lisp: myths and best practices

#23
post #21
post #17

Earlier 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.

Sure, I know general techniques and k8s-specific ones (and have used production SSH-to-programming environment REPLs with twisted). I’m asking partially because my job these days is to secure setups like these :)

Re: Modern, functional Common Lisp: myths and best practices

#24
post #17

Earlier 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.

I know of NodePort, but last i checked it’s a low-level constrict that doesn’t do anything like, say, authn—so that doesn’t seem like a complete answer.

Re: Modern, functional Common Lisp: myths and best practices

#25
post #5

Earlier 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.

For immutable data structures, there is this helper library which can help: http://quickdocs.org/immutable-struct/

Re: Modern, functional Common Lisp: myths and best practices

#26
post #13
post #5

Earlier 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…

Are you aware of any memory-leak issues with fset? I once used it in a game where I updated an fset sequence in real-time. I let it run for a while, after coming back I noticed my computer was completely frozen (out of RAM).

Re: Modern, functional Common Lisp: myths and best practices

#27
post #13
post #5

Earlier 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…

Didn't know about this, it looks very cool indeed! Thanks for sharing!

Re: Modern, functional Common Lisp: myths and best practices

#28
post #17

Earlier 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.

What sort of encryption and authentication can I expect if I do that? Can anybody who guesses the port dump code into my running Lisp instance?

Re: Modern, functional Common Lisp: myths and best practices

#29
post #5

Earlier 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…

[deleted]

Re: Modern, functional Common Lisp: myths and best practices

#30

Earlier 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.

I agree with GP about refraining from "best practices" type advice -- at most leave it as "I prefer doing it this way". (Example: There was no mention of qlot for a form of version pinning, which would be considered a "best" or at least "standard" practice in other ecosystems, but while I use it I'm not going to insist other Lispers I don't work with do so too. They can keep doing things how they like. Common Lisp is not for the strongly opinionated.)

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

Post reply on HN