libera/#lisp - IRC Chatlog
Search
9:33:32
port19
Hi fellow lisp enjoyers. I've been writing clojure for several months now and am greatly enjoying the combination of lisp and functional programming. One thing that becomes increasingly annoying tho is the platform. I mostly develop small webscraping utilities for my own enjoyment and would greatly prefer to distribute a binary. Because of this I'm considering common lisp and racket as alternatives. I have toyed around with common lisp
9:33:32
port19
before, but CLOS seems to not work well with the FP mindset on first glance, not to mention archaeic function names (wtf is "car" or "cdr" supposed to stand for). What can you recommend for a lisp with native compilation?
9:55:49
aeth
CL has some poorly named things and some things with inconsistent orders (e.g. NTH vs ELT) because it can't break compatibility.
9:57:40
aeth
SBCL is the main compiled CL implementation (CCL the next most popular); Chez is probably the "main" compiled Scheme implementation but is far from the most popular; Racket has the most focus on FP and is mostly Scheme
9:58:26
aeth
CL probably has the most libraries, but you have to use one if you want a bunch of FP data structures
9:58:51
port19
I assume the performance differnece is small enough that it won't matter in a program that does network requests
9:59:38
mariari
copying objects haven't been too noticable in applications I write. It seems yours is network bound so that would be bigger
9:59:54
mariari
when thinking about functional things, you have to consider the allocation of a new object, but this is true in ocaml, haskell, clojure etc
10:01:09
mariari
yes, I mention them solely to show you what functional compilers do, which isn't magic
10:01:13
port19
I might want to read up on CLOS. Can you, or someone else, recommend a good article providing a high level overview?
10:01:44
mariari
I don't have anything off hand sorry, I use some MOP to make it work nicely functionally
10:03:18
aeth
in particular https://gigamonkeys.com/book/object-reorientation-generic-functions.html and https://gigamonkeys.com/book/object-reorientation-classes.html
10:05:03
aeth
In practice, CL mutates a lot less than you would think for a language that isn't strictly FP because of the expression-based syntax... a lot of things that would normally set don't need to when everything returns a value, even e.g. COND (if/then/else)
10:16:01
pranavats
port19: About CLOS, Daniel Bobrow has an excellent lecture on it. From 1987: https://www.youtube.com/watch?v=IrmHp1rRQ68
12:07:35
port19
Oh right, one thing I forgot to ask earlier in the racket vs common lisp for me as a clojure dev seeking native binaries: startup time is about equal? My main bottlenecks are network requests and always will be, but when that isn't the case (e.g. you invoke my program with the help flag) I want a near instant response (< 1 display frame / 16ms)
12:08:19
port19
Basically do I assume correctly that both racket and common lisp binaries start fast enough?
14:17:33
mdhughes
Schemes are generally much faster on startup, Chez is the language under Racket and it's fast enough for scripting.
14:47:19
rozenglass
moon-child: maybe a chain nth would be more readable and generic, something like (deep-nth 1 2 3 some-list), or some threading-like thingy like (->> some-list (nth 1) (nth 2) (nth 3)) I guess
14:47:50
rozenglass
not sure if those would have had significant performance impact on the machines of old
18:14:56
skin
Clojure has something like that. `get-in` https://clojuredocs.org/clojure.core/get-in . Trying to think of how to do it in Common Lisp better tho