freenode/#lisp - IRC Chatlog
Search
2:58:18
pillton
defaultxr: Once you get the reader macro working and you like it, I also suggest that you use the named readtables system to simplify read table management.
7:49:26
holycow2
new version of txr is released: https://www.reddit.com/r/lisp/comments/6bc1mt/txr_175_released_ffi/
9:28:15
easye
Younder: Like LOOP, FORMAT is arguably not very Lisp-y, but is so useful that most people "put up with it".
9:31:28
Younder
I would argue that the ability to create sub languages in Lisp is one of it's strengths. But whatever. It was always a compiler prototyping tool.
10:42:28
dim
am I understanding correctly that those `out' implementations are compatible with that of the format-stinks paper?
10:44:15
_death
mcdermott wrote the format-stinks paper, and recommends it there, so I'm guessing it's compatible.. mine is inspired by his, so maybe
10:46:56
_death
for mcdermott's see src/ytools in https://sourceforge.net/p/clocc/hg/ci/default/tree/
10:58:15
splittist
format strings can be commented. That no-one does it is either a bad habit, or a sign that they're not really mysterious write-only incantations after all.
11:08:30
dim
far too easy to make mistakes, some forms are impossible to remember (0-pad a number to n digits on the left?)
11:12:10
_death
dim: I too dislike use of regular expressions.. I agree with Naggum's point of view, that it may be useful as a user-visible feature, but not really for use in programs
11:15:07
axion
pjb: Thank you for replying to peter's sbcl-help message. We have been trying to debug this for a long time, and your answer makes perfect sense, however, the solution is not going to be ideal for us, as it introduces complexity at the macro call site for the user. This macro is actually used by another macro that handles working with several vectors at once, and worse, for several 4x4 matrices.
11:16:32
_death
dim: with out you could also define your own user-op so it's (out (:u hex32 42)) or something
11:27:54
pjb
axion: well, while you have still 3 slots, your macro is ok. But once you have more, you won't have x y z parameters, but &rest values, and you will write: (map-into pv #'identity values).
11:27:59
axion
pjb: peter failed to show why these macros truly exist. In most cases, the user is supplying 3 15-length arrays
11:30:18
pjb
Now, you may want to use a compiler that unroll the loops, or use your own looping macro to unroll them.
11:30:58
axion
To be honest, we are only interested in sbcl performance, however we definitely want conformity/portability
11:32:23
axion
We went through great lengths to type-annotate and inline suitable functions, and wrote macros such as this to make writing and visualizing everything simple.
11:32:24
pjb
Unless you or the compiler can use vectorial instructions. IIRC sbcl can do some, but I don't know on what conditions. You can always implement the needed VOP.
11:33:06
pjb
So you'd write a loop using your own looping macro, but instead it would use vectorial instructions to implement the body.
11:33:43
pjb
(of course, you'd have a conforming implementation of the macro for other implementations or processors).
11:35:00
axion
pjb: Yes VOPs were something we discussed, and the sb-cga system does this already should we need it. This may be used on other implementations though, so portability is a concern.
11:37:31
Younder
Reader macros are by their nature not isolated. In particular packages can't restrict them
11:37:48
axion
pjb: I can give you an example of how this macro is used in the wild, and why it is nice
11:40:02
axion
pjb: https://github.com/mfiano/gamebox-math/blob/master/src/matrix-ops.lisp#L234 pretty much this whole file is it's main use in the form of WITH-MATRIX and WITH-MATRICES, and the macro definitions are in the matrix-base.lisp file.
11:40:25
|3b|
ACTION didn't mean 'local' though, just something like #16!m could expand to symbols M0 .. M16 in some useful form (list of symbol-macrolet definitions, input to some normal macro, etc)
11:41:46
|3b|
that way you get names defined at read time (so in correct package), but without having to type them out explicitly
11:42:11
pjb
axion: yes. You see, if I had to write this matrix-invert! function, I would NOT write it myself! I would write a macro to expand to it!
11:44:17
Younder
Matrices are tricky. Diagonal ones. Sparse ones. Trigonal ones. Lot's of efficiency issues.
11:44:49
|3b|
Younder: simpler for the ones used for 3d transforms though, small and fewer special cases to care about
11:45:01
pjb
axion: now, with-accessor defines symbol-macros that expand to the accessor call each time it's used. This may, or may not be faster than local lexical variables, when you only read the slot several times…
11:46:14
pjb
In the matrix*!, each slot is read 4 times; it could be faster to read it once, store it in a local lexical variable and then read it 4 times from there. If the processor has a lot of registers, those temp could be stored in registers.
11:47:16
axion
pjb: I see, so I'm going to have to discuss with him rewriting the macros for several reasons now.
11:47:34
|3b|
dual quaternions get you a bit better coverage, but still don't handle everything a 4x4 matrix does
11:48:10
axion
Well they do represent scale, but must be normalized and thus losing that information for certain operations
11:48:15
pjb
But for the reader macro idea, you could have something like: [o00 that would expand to (aref o 0 0)
11:48:59
axion
reader macros is actually something I never attempted with CL in my more than a decade of use. Might be fun to learn
11:50:31
|3b|
ACTION was thinking #4m(o out-matrix) that expands to (((o00 math-lib:m00) (o01 math-lib:m01)) ... out-matrix)), used as `(with-accessors ,@#4m(...) ...)
11:50:32
pjb
So you wouldn't even need to have a with-matrices macro, just name your macros with a single letter.
11:51:19
|3b|
though that ends up a bit ugly now that i type it out, probably want a normal macro in the middle to expand the lists instead of ,@ :/
11:53:26
|3b|
ACTION thinks surface syntax should be an editor feature rather than language feature anyway though :p
11:53:27
axion
Well thank you for the suggestions. I am lost when it comes to reader and compiler macros, so I'll have to do some research first.
12:18:35
Younder
Well compiler macros happen just before compilation and after macro expansion. Easy enough to grook really. Just compiler dispatch on types. Look at the source for CL-PPCR fes
12:19:38
BernhardPosselt
why do lisp dialects just keep on popping up? what does lisp do better than haskell? or is it just so simple to write a parser :)
12:20:59
beach
BernhardPosselt: This channel is about Common Lisp, so we don't care about other dialects. :)
12:21:25
easye
BernhardPosselt: It is pretty easy to make a simple Lisp. When encountering a new language, I often try such an implementation.
12:22:12
beach
BernhardPosselt: Here is alist of features of Common Lisp. You can compare it to what Haskell does: http://random-state.net/features-of-common-lisp.html
12:23:00
easye
Younder: A simple Forth is definitely easier that a simple Lisp, but making the Lisp reader for parens tells me a lot about the I/O in the new language.
12:23:09
|3b|
ACTION makes common lisp dialects for same reason, some feature i want that i can't get from the original, or thing i don't like about the original and hope i can do better
14:23:31
argoneus
is lisp/funcprog in general a bad idea for things like IRC bots or network processing stuff in general?
14:23:51
argoneus
when I think about network I think about it imperatively, and I can't really imagine how it'd work with lisp
14:27:27
argoneus
hmm, so all in all it should be pretty much the same difficulty, just a different style so to speak?
14:27:40
rumbler31
also https://github.com/phoe/secure-read exists if you want to make your protocol parseable by lisp (read
14:29:19
rumbler31
i would look at trying to write a server, if thats what you're talking about, with iolib
14:30:36
rumbler31
fair warning, if you're on windows, IOlib might need some work on your part to get built. maybe
14:31:11
beach
argoneus: Common Lisp (the language to which this channel is dedicated) is not particularly "functional" in that sense of the word.
14:31:46
rumbler31
I used (read to prototype a text protocol between two applications. I couldn't be bothered to parse the format they wanted yet, so I made it (read-able and then sat on a telnet session and typed/pasted the data in
14:32:42
beach
argoneus: The absolute "coolest" thing about Common Lisp is not that it allows functional programming. Instead it is its object system, CLOS.
14:32:42
argoneus
I was actually thinking of using Clojure or such, thought this channel was for general lisp dialect discussion
14:38:29
axion
What is more troubling is legal but dangerous code. I believe beach wrote a paper on a sandboxing proposition years ago I helped proof-read. I wonder what the status of the ideas present are these days.
14:46:17
phoe
axion: AFAIK my library returns two values, with the other value being an error code if a reader error happened.