freenode/#lisp - IRC Chatlog
Search
2:20:38
aeth
tetero: This is a channel for Common Lisp, often just referred to as Lisp. ##lisp is for the Lisp family of languages. The fastest Lisp you'll find, though, is probably SBCL, a CL implementation. There are also some fast Schemes, but the popular/complete Schemes aren't as fast as those.
2:21:25
aeth
It looks like uLisp is very similar to Common Lisp, perhaps even a subset, but it's a subset that doesn't include many things you'd want if you wanted to write very fast CL. This appears to be all of it: http://www.ulisp.com/show?3L
2:23:32
|3b|
(well, maybe you would, but i'd probably just go straight to memory access instead of full CL arrays)
2:24:56
aeth
Oh, I forgot to mention that SBCL is fast at the expense of RAM (64 bit SBCL takes about 100 MB as a minimum on startup). And the style I use generally prioritizes CPU at the expense of RAM, too.
2:25:23
aeth
But a lot of the principles are in common, and so a slim CL would have many shared features with what you'd want in a fast SBCL or CCL program.
2:30:37
|3b|
ulisp looks nicer than the last microcontroller lisp i looked at, may have to consider that next time i think about doing hardware stuff
2:41:48
aeth
"slim CL" as in, it looks mostly like a subset of CL, instead of being Scheme-style or radically different and just parenthesized.
2:41:57
random_numbers
The only one I know of that's cross-compiled is ChickenScheme. Then again I only started looking today.
2:42:19
random_numbers
Any other one you'd recommend? (I discount Hy and Clojure. They're interpreted, not compiled.)
2:43:31
aeth
On the surface, it looks very CL-style, although it's disappointing that it doesn't have arrays or structs.
2:44:09
|3b|
from their benchmarks seems to be ~500-1000 times less efficient than sbcl by instruction count
2:44:33
random_numbers
aeth: Bike: Yes. I'm disregarding VMs because those aren't quite practical on small SoCs.
2:44:58
|3b|
hard to say how much of that is from running heavily recursive but otherwise simple benchmarks
2:45:36
random_numbers
Hy is transformed into Python AST and executed the same as native code so it depends on circumstances. Still all runs on Python VM.
2:45:38
Bike
not having arrays is kind of weird. structs would be more difficult since you'd probably want something more like c structs. or at least with typed slots.
2:46:10
random_numbers
Being used to Clojure I'd say that if maps aren't too heavy/slow, they can do pretty well in a pinch.
2:46:47
aeth
Bike: I use typed slots in my structs in CL, and I assume that they do something in SBCL.
2:47:07
random_numbers
Really? Well. That's kind of a significant change that doesn't make that much sense. It's not as though macros are ever executed at run-time.
2:56:19
random_numbers
Mostly that it does interop properly and compiles. I'm not asking for something that generates legible/maintainable code.
3:06:41
vtomole
I can't hack clojure cause the arguments for procedures are represented as vectors instead of lists. (square brackets, uh)
3:21:50
random_numbers
tetero: Yeah, I found it and wondered what people thought of it and if they'd heard of it. Some people dug into it far more than I expected and found it was somewhat lacking.
3:34:51
akkad
Quadresce: actually for mobile LambdaNative uses gambit and is much more performant than chicken.
3:51:03
random_numbers
Having read through some of ECL's docs, I like what they did with the implementation.
4:36:40
aeth
tetero: sorry, my brain's parser must be broken. I didn't parse the "ulisp" within the URL further up and thought that you were the first mention
6:26:10
reinuseslisp
shka: bt is for (logical?) threads, I mean something like unix's sysconf(_SC_NPROCESSORS_ONLN)
6:40:32
jackdaniel
reinuseslisp: bordeaux threads is just a portability layer which maps into threads in common lisp implementation
6:42:27
reinuseslisp
I just didn't find a word to differentiate CPU cores/threads and application (bordeaux-) threads
6:56:51
reinuseslisp
https://stackoverflow.com/questions/150355/programmatically-find-the-number-of-cores-on-a-machine
7:11:46
jackdaniel
there are bindings to openmp for CL, if that's not an overkill, you could use that
7:50:03
schweers
does anyone have an idea why `prin1' or `format' with "~S" would emit a linefeed after printing a symbol? It seems to me that this only happens when printing on a socket stream.
7:54:34
schweers
I could swear that the code in question worked before, I’m really stumped why this happens now
8:01:49
schweers
well, I have to change the readtable-case as I’m interacting with a scheme, but that’s disabled for now
8:03:59
schweers
wait, pp should not be turned on, that’s why I’m using prin1 and/or format with "~S"
8:05:24
schweers
well, I can’t reproduce it outside of my program, which I find quite disconcerting. Oh well, more debugging it is.
8:06:26
schweers
Well, if no one else has an idea, I suspect it really is a problem with some other code I’ve written, i.e. the problem is not me misunderstanding `prin1'
11:04:34
phoe
Is there any function that, given a cons and a value, destructively updates that cons in a way similar to PUSH?
11:05:05
phoe
Like - I can write it myself, it's simple, but is there anything like that out in the wild already?
11:30:36
TMA
phoe: you mean something like (lambda (cons value) (push (cdr cons) (car cons)) (setf (car cons) value)) ?
11:31:41
Bike
the parameter names in the defgeneric are irrelevant except for debugging, so i can imagine it working and an implementation not bothering ot check