freenode/lisp - IRC Chatlog
Search
17:42:41
pfdietz
I was slurping in large amounts of lisp code to act as fodder for random input generation for testing the compiler, and didn't want to have to have all the packages defined.
17:43:08
pfdietz
So if I came across FOO::BAR and FOO wasn't a package I wanted an API to turn that into something else.
17:43:58
pfdietz
The reading did not have to be faithful, just mostly ok, because the forms were then shuffled and hacked up anyway.
17:52:08
_death
I see.. btw a coverage-guided fuzzer doesn't seem that far-fetched given the existence sb-cover, right?
17:55:49
pfdietz
Idea was to hack the point data structure to be more general, and provide a version that allows checkpointing and rollback. When an input is found that increases coverage, add it to the pot. The rollback is for test minimization.
17:56:54
pfdietz
What it did not do is use local structure of code to guide search, like some fuzzers now do. But one could imagine doing that too.
17:58:49
_death
not long ago I saw it mentioned in https://events19.linuxfoundation.org/wp-content/uploads/2017/11/Syzbot-and-the-Tale-of-Thousand-Kernel-Bugs-Dmitry-Vyukov-Google.pdf
19:11:08
|3b|
cl-opengl users please test https://github.com/3b/cl-opengl/tree/dev with your code, needs more feedback to decide if recent changes are safe enough to release to quicklisp
19:12:34
|3b|
in particular looking for errors like `:foo is not defined as a keyword for enum type #<...>.`, found a few in the examples already, so a bit wary of releasing it
21:40:01
LdBeth
Shinmera: save only the difference between the old and new image instead of a standalone new image
21:47:40
harovali
While trying, some aparent normal uses yielded some conditions, I wonder how to handle that
21:49:25
LdBeth
I see why SBCL can't do so "The system expects to be loaded into a fixed-at-compile-time location in virtual memory"
21:51:25
_death
LdBeth: you could easily do that.. I saved a core to file "one", then ran sbcl --core one and save a core to file "two".. ran bsdiff one two one-to-two ... this created a 900K diff file.. the only issue is that it takes a bit of time
22:07:43
phoe
LdBeth: it supports dumping incremental updates to heap image, except they are called FASLs
23:05:03
jmercouris
the designer of spicelisp apparently invented :-) and :-( https://en.wikipedia.org/wiki/Scott_Fahlman
1:46:58
no-defun-allowed
You can use a special variable: (defvar *a*) (defun abc () (setf *a* 10)) ... (let ((*a* 5)) ...)
1:48:40
no-defun-allowed
DEFVAR is required so that the function ABC knows it is going to modify a special variable, but you can also (declare (special *a*)) in every use of the special variable.
1:49:56
no-defun-allowed
Another option is to use a box (a small structure with one element, or a 0-dimensional array), but then you have to unbox the value to use it and have to setf the value of the box to modify it.
1:50:38
no-defun-allowed
eg (defun abc (b) (setf (box-value b) 10)) (let ((a (box 5))) (abc a) (print (box-value a)))
1:50:51
no-defun-allowed
(The implementations of BOX, (SETF BOX-VALUE) and BOX-VALUE are left to the reader)
1:58:19
pjb
asdf_asdf_asdf: have a look at: http://informatimago.com/articles/usenet.html#C-like-pointers-in-Lisp
2:16:27
pjb
asdf_asdf_asdf: well, actually the problem is the function call, since it's pass by value.
2:17:15
no-defun-allowed
Another solution would be to create a closure and have the function call that to set the value: (defun abc (c) (funcall c 10)) (let ((a 5)) (abc (lambda (n) (setf a n))) (print a))
2:17:19
pjb
asdf_asdf_asdf: you could kludge it with defining defun defmethod let let* progv etc so that all the variables would be symbol-macrolets to closures.
2:27:01
asdf_asdf_asdf
no-defun-allowed, OK. But I want, that in scope (defun abc (c) value was changed, not in scope (let ((a 5)).
2:28:11
no-defun-allowed
Modifying the binding for C that ABC gets won't affect the binding for whatever is in the LET.
2:29:23
no-defun-allowed
You need to pass the value through some kind of "box" as you would in C, or use a special variable to let ABC modify the binding established by LET.
2:30:55
no-defun-allowed
As I said, (defun abc (b) (setf (box-value b) 10)) (let ((a (box 5))) (abc a) (print (box-value a)))
2:31:23
no-defun-allowed
The box can be a CONS (and the value its CAR), a structure with one value which is the box's value, or a 0-dimensional array whose only value is the box's value.
2:31:32
pjb
asdf_asdf_asdf: you are being dumb. This is lexical, therefore the variables are know to YOU when you write the fucking code! Just use different variable names!
2:32:38
pjb
and since we have pass by value, don't try to mutate the variable in functions, instead get the result!
2:33:12
pjb
(defun abc (a) (let ((x 5)) (if (zerop a) (setf a (abc 1)) (setf a 100)) (values a x))) (abc 0) #| --> 100 ; 5 |#
2:44:04
asdf_asdf_asdf
OK, thanks. Maybe I select option 1. How change local var into global var using declare? I (declare (special x)), not working.