freenode/#clasp - IRC Chatlog
Search
16:25:09
beach
You can have it expand to (make-instance 'standard-method :lambda-list ... :function <arg>)
16:25:39
beach
The lambda list values and the rest would be taken from the generic function that you are processing.
16:26:25
Bike
the form is specified to be evaluated in an environment that's null plus a binding for call-method
16:26:58
Bike
(and as a separate question, if there are custom method classes involved i'm not sure standard-method is always appropriate, but i'm not concerned with that at the moment)
16:28:05
beach
But isn't it the case that the evaluation of the form resulting from compute-effective-method is always evaluated in the null lexical environment?
16:28:42
Bike
sure, but what if the effective method has (let ((cl-user:whatever ...)) (make-method ...))?
16:30:21
beach
Where does it say that the calls to make-method are evaluated in the null lexical environment?
16:30:44
Bike
"The form used with make-method is evaluated in the null lexical environment augmented with a local macro definition for call-method and with bindings named by symbols not accessible from the COMMON-LISP-USER package."
16:36:22
Bike
The thing is that I'm seeing whether I can serialize (dump-to-FASL) effective methods. What we have right now is very roughly equivalent to (defmacro make-method (form) (compile nil `(lambda ... ,form))). so the macroexpanded form has functions in it, and functions can't be serialized.
16:38:14
Bike
I know that, but it's going to be annoying if I'm only hamstrung by this obscure requirement.
16:42:58
Bike
it doesn't seem very odious for the user if it's not a null lexical environment... i mean, they can just shadow whatever they want
16:51:58
Bike
sure. if i could have make-method macroexpand into a lambda expression that would be fine.
16:54:21
Bike
maybe i could just have (load-time-value (lambda ...)), since load-time-value ensures a null lexical environment
16:57:57
beach
In SICL, I have the concept of a "code object" that is the result of compiling a file. It contains the machine code of the entire file, debugging information, debugger support, source information, etc. A function is just an environment and an entry point into the machine code vector of the code object. So I could serialize the code object and just create the function at load time. At least I think so.
16:59:20
beach
jackdaniel: Well, that's how I intend to load the fasl, but once the code in it has been executed, I will close it.
16:59:28
Bike
beach: I know I could do something like that,and it's an interesting idea, but requiring new and interesting semantics for the sake of make-method mostly makes me think i'm misunderstanding make-method.
17:00:09
Kevslinger
::notify drmeister As a housekeeping, don't forget about your CISE meeting tomorrow.
17:54:40
Colleen
karlosz: Bike said 15 hours, 47 minutes ago: yeah, i basically just redid your incremental ownership changes myself, since i'd changed a bunch of other stuff. it's within 2x of generate-ast now.
18:01:37
pfdietz
The next entry might also be of interest here, as it goes into the guts of the things LLVM is doing.
18:02:55
pfdietz
In fairness, McKeeman started the random testing thing on C compilers. Csmith took it to another level though.
18:25:32
beach
It is interesting that the paper lists a number of problems that would be way less so in the context of Common Lisp than in the context they are targeting.
18:28:48
Bike
undefined behavior is kind of interesting, really... C and CL both have a lot of it but it seems to go in different directions
18:30:56
Bike
i see C people saying they should remove UB entirely sometimes, and it's like, maybe just start by taking it out of arithmetic and see how that works for you
18:32:27
beach
The article I often quote "C is not a low-level language" is kind of interesting here.
18:32:50
beach
And I am willing to bet that all "system code" written in C relies on undefined behavior.
18:35:05
beach
But when people claim that you can't write an OS in Common Lisp, they often mean that you can't write it using only standard behavior. Yet, they are convinced that the same thing is possible for C.
18:36:35
stassats
although the poor instruction selector in SBCL has been on my TODO list for a long time, but it'll result in minuscule performance wins
18:50:21
Bike
it expands into code that installs a call history that doesn't involve any runtime compilation but is i think still correct, provided the situation at macroexpansion time matches that at loadtime
18:53:04
Colleen
drmeister: Kevslinger said 1 hour, 52 minutes ago: As a housekeeping, don't forget about your CISE meeting tomorrow.
18:53:48
Bike
drmeister: can you update clasp-developers's concrete-syntax-tree to match upstream? i kind of messed up the wscript
18:54:06
drmeister
pfdietz: I read that ycombinator article before. There is a new llvm instruction selector mechanism being built called GlobalISel. I'm hoping to find out more about it at the llvm meeting.
19:09:01
Bike
actually kind of neat how easy this was. few hours of messing around, like eighty lines of code
19:12:53
pfdietz
drmeister: from my extremely cursory knowledge, there's a fast "cleanup" optimization in llvm that might be profitable to apply, even if optimization is otherwise disabled, just to reduce the load on the instruction selection. It might get rid of some cruft your front end is putting in.
19:16:41
Bike
scymtym made some breaking changes several weeks ago and i fixed clasp's cst stuff for em
19:31:22
kpoeck
pfdietz: the random test that run you on clasp, was that like:(let ((*random-state* (make-random-state t))) (test-random-integer-forms 100 4 10000))
19:46:24
pfdietz
I also did random-type-prop tests, which you find in ansi-tests/random/, if you have that directory. These are a different kind of random test, and showed that crasher bug with non-simple strings.
19:46:59
pfdietz
(make-random-string 1) would crash with some nonzero probability, when it hit the bug.
19:48:51
kpoeck
Ok, am still running (test-random-integer-forms 100 4 10000), but am already at nearly 23 GB (16 real GB memory)
20:00:19
pfdietz
Yeah, mine died after < 1000 iterations. There was a compiler option ("-fPIC", maybe?) that seemed to reduce the growth rate.
20:01:25
pfdietz
(t-r-i-f ...) caused two bugs to pop up: (complex <integer> 0) was not being made an integer, and some problem with load-time-value. These showed up with size 10.
20:06:11
kpoeck
If drmeister could have another look at https://github.com/clasp-developers/clasp/pull/594
20:12:39
kpoeck
Yes, I think the only issue i that I put a question in a comment and drmeister answered the question
20:14:29
Bike
if we can answer questions you probably don't need to put them in comments- just cos, we'll have to clean that out
20:16:48
usha
there is a huge C++ library exposed within the lisp that implements atoms, residues, bonds, molecules, force-fields, atom types, energy minimizers, superposers, stereochemistry - all sorts of chemical concepts that you have access to.
20:17:36
drmeister
Oh - that's all in there already. Did you clone cando into clasp before building it?
20:19:56
drmeister
Ok - there are no full instructions for building cando+clasp. I'll add something to the cando readme so that you can get that installed.
20:21:16
kpoeck
(LOAD-TIME-VALUE (COERCE -3699196576 'INTEGER) NIL) -> :POISON-VALUE-FROM-CODEGEN-RTV is not of type INTEGER.
20:44:29
drmeister
the :poison-value-from-codegen-rtv shouldn't be happening (obviously) - it bubbles out of the literal compiler when a load-time-value expression of an immediate value is evaluated.
20:52:59
kpoeck
just that it is in void asAbstractSimpleVectorRange(AbstractSimpleVector_sp& sv, size_t& start, size_t& end) const final { in array.h at line 1115
20:54:45
drmeister
The literal compiler serves two masters - the bclasp compiler and cleavir - getting it right for both cases is the trick here.
20:59:24
drmeister
Now it returns (values immediate nil) - the second value indicates that the first value is not an index into the literal vector but is instead an immediate value.
21:00:59
drmeister
That checks the second return value and creates a clasp-cleavir:immediate-literal if the value returned from codegen-rtv was an immediate
21:01:23
drmeister
bclasp doesn't use the return value. In bclasp you pass in the destination where the value gets written to.
21:02:02
drmeister
I had it return the :poison-whatever so that if it bubbled out of the system we could search for that string and find the source - and here we are.
21:03:30
drmeister
I could split it into two different functions. codegen-rtv-bclasp and codegen-rtv-cclasp
21:11:14
drmeister
CatchMe: I don't have a lot of spare time - I'm kind of tied up with other things. If you examine the code and ask good questions I can try to answer them.
21:12:45
drmeister
CatchMe: You can also check out this - it's a bit old - but still very relevant: https://clasp-developers.github.io/clbind-doc.html
21:15:00
drmeister
::notify Shinmera Say I loaded staple into clasp after starting everything else out. I'd like to generate some documentation for some packages. I tried (staple:generate :my-system :packages (list (find-package :chem))) but that just generated an error that it couldn't determine the project (Cannot generate documentation for :MY-PACKAGE: Could not find or infer a project.)
21:40:01
kpoeck
pfdietz: I think the bus error is caused by a form like (make-array 1 :element-type (array-element-type "") :displaced-to "" :displaced-index-offset 4000)
21:51:23
kpoeck
The compiler-macro for make-array does not seem to handler :displaced-to, so can I fix this just in make-array in lisp?
21:52:51
drmeister
kpoeck: I don't understand - do you want to modify the make-array compiler macro to handle :displaced-to? Go ahead.
21:53:54
kpoeck
I just want to fix make-array (function), since the compiler-macro does seem to return form unchanged if :displaced-to is passed
22:11:18
drmeister
::notify Bike It just occurred to me - we are also generating a lot of metadata when generating llvm-ir - I wonder if that is costing us a lot of compilation time.