Brutkey

Barry Schwartz πŸ«–πŸ«–
@chemoelectric@masto.ai

@eruwero@ieji.de I think you can probably only rely on single recursion. I am pretty sure ECL is not good with all tail calls, for instance.

This is true of Standard ML. I tested it in Standard ML. I think it was Poly/ML that handled mutual recursion but MLton that didn’t.

Standards-conforming Scheme handles ANY tail call, even across module boundaries.

(CHICKEN implements this is in a really weird way. It lets the stack blow up and then switches to a new stack!)

eruwero
@eruwero@ieji.de

@chemoelectric@masto.ai You are probably right. I am mostly using sbcl and I think it supports most kinds of tail calls, at least I never had problems with that. I think abcl maybe doesn't support tail calls at all because of limitations of the JVM, but I'm not sure.

I think it's great that it's in the scheme standard and that scheme generally encourages a more functional style.


Barry Schwartz πŸ«–πŸ«–
@chemoelectric@masto.ai

@eruwero@ieji.de Even Schemes for the Java VM do not do proper tail calls, at least unless you use an option. The same is true of one other that compiles to C but whose name I do not remember. But some will refuse to call such an implementation β€˜Scheme’. Most implementations do handle tail calls correctly.

This applies even to call-with-current-continuation. Sometimes this is very inefficient. In Guile it is very inefficient, but works. In CHICKEN or Chez Scheme it is efficient. (And Chez is FAST.)

eruwero
@eruwero@ieji.de

@chemoelectric@masto.ai it's incredible IMO how fast some schemes or lisps in general (in particular SBCL) can be, even though they allow much more powerful abstractions. It's just that by default they focus on safety and sanity. Really shows that there is no real reason for using something like C++ :)

Barry Schwartz πŸ«–πŸ«–
@chemoelectric@masto.ai

@eruwero@ieji.de (But I do not like Chez, because it is R⁢RS rather than R⁷RS. In fact, R⁢RS is basically an attempt to make everybody be Chez Scheme. :) )

Barry Schwartz πŸ«–πŸ«–
@chemoelectric@masto.ai

@eruwero@ieji.de SBCL supposedly supports all the optimizations. I haven’t really tested it. It is the go-to if you have a powerful enough system. But I noticed Maxima for Termux (a distro for Android phones) is built with ECL. Which makes a kind of sense, because ECL is meant for embedded systems--though I think that’s supposed to be for the separate compilation aspect of ECL, not for how one uses it to compile Maxima.

Barry Schwartz πŸ«–πŸ«–
@chemoelectric@masto.ai

@eruwero@ieji.de SBCL supposedly supports all the optimizations. I haven’t really tested it. It is the go-to if you have a powerful enough system. But I noticed Maxima for Termux (a distro for Android phones) is built with ECL. Which makes a kind of sense, because ECL is meant for embedded systems--though I think that’s supposed to be for the separate compilation aspect of ECL, not for how one uses it to compile Maxima.

Barry Schwartz πŸ«–πŸ«–
@chemoelectric@masto.ai

@eruwero@ieji.de I am not upset with NixOS BTW. Despite that Nix is not a Lisp, the difference is that Nix has a more complex syntax (which makes a Lisp-like macro system impractical--but check out the mixins in D: https://dlang.org/articles/mixin.html -- D is the only C derivative I kind of like).

I was able to set up an OpenVPN server with very little configuration.

I did a LOT of screaming at the screen along the way, but it was because there was so little documentation. I had to randomly find the best way.

Barry Schwartz πŸ«–πŸ«–
@chemoelectric@masto.ai

@eruwero@ieji.de I am not upset with NixOS BTW. Despite that Nix is not a Lisp, the difference is that Nix has a more complex syntax (which makes a Lisp-like macro system impractical--but check out the mixins in D: https://dlang.org/articles/mixin.html -- D is the only C derivative I kind of like).

I was able to set up an OpenVPN server with very little configuration.

I did a LOT of screaming at the screen along the way, but it was because there was so little documentation. I had to randomly find the best way.

Barry Schwartz πŸ«–πŸ«–
@chemoelectric@masto.ai

@eruwero@ieji.de Basically all I had to do was tell it to use nftables instead of iptables, and tell NixOS to do NAT for me.

I had been struggling with trying to get iptables and systemd (yuck! why can’t I just use ip route?) to do NAT and probably NixOS was trying to stop me from succeeding. :)

I have this server running on a mini PC with fast Ethernet that I got just for the purpose. Now I do not have to use the garbagy OpenVPN server that is in my Netgear router.

Barry Schwartz πŸ«–πŸ«–
@chemoelectric@masto.ai

@eruwero@ieji.de Basically all I had to do was tell it to use nftables instead of iptables, and tell NixOS to do NAT for me.

I had been struggling with trying to get iptables and systemd (yuck! why can’t I just use ip route?) to do NAT and probably NixOS was trying to stop me from succeeding. :)

I have this server running on a mini PC with fast Ethernet that I got just for the purpose. Now I do not have to use the garbagy OpenVPN server that is in my Netgear router.

eruwero
@eruwero@ieji.de

@chemoelectric@masto.ai the main reason I use guix instead of Nix is because it's one of the few fully free operating systems. Scheme as a configuration language is also great, I think it actually was what brought me to lisp. And that it doesn't use systemd is also a plus. But I'm sure Nix is great too, all the functional package management stuff is the same.

eruwero
@eruwero@ieji.de

@chemoelectric@masto.ai the main reason I use guix instead of Nix is because it's one of the few fully free operating systems. Scheme as a configuration language is also great, I think it actually was what brought me to lisp. And that it doesn't use systemd is also a plus. But I'm sure Nix is great too, all the functional package management stuff is the same.