freenode/#clasp - IRC Chatlog
Search
21:59:17
kpoeck
Yes, I believe this one is important. I tried to understand what is being done here but didn't suceed
22:03:05
Bike
https://github.com/clasp-developers/clasp/blob/dev/src/lisp/kernel/cmp/codegen-special-form.lsp#L1372-L1432
22:04:18
Bike
it uses internals from literals, which is probably where that unbound variable is coming from
22:05:38
Bike
we might want to put the lisp functions in some kind of more global table rather than hack up the literals table like this
22:08:48
Bike
kpoeck: if you have a file with just the %defcallback, do you still get the dlsym problem, or is that caused by the use of %callback? I suspect the latter.
22:09:30
Bike
kpoeck: actually - i think the %callback form is wrong - the name shouldn't be quoted. is that what cffi expands to?
22:12:08
Bike
i think defcallback not working when loaded from source has been the case since i rewrote it, so while unfortunate that's less of a concern than the dlsym problem
22:15:43
kpoeck
Did I now say something wrong, what does not work are the cffi-tests, so right now it does not work, even compile-filed
22:16:12
Bike
right, if it doesn't work when compile filed that's definitely a problem, but maybe it's as simple to fix as replacing %callback with %get-callback
22:50:55
drmeister
The issue may be that the defcallback symbol is not external linkage. Can you get the llvm-ir for the generated code?
22:59:51
drmeister
If it were an internal symbol it would be "define internal i8 @clasp_ffi_cb_SUM-UNSIGNED-CHAR"
23:00:25
drmeister
The presence of "internal" means it's internal linkage. No "internal" means "external" linkage.
23:14:29
Bike
yeah. well, thes econd value would be the error string, but we can see that in inferior lisp anyway
23:14:39
Bike
i'll rewrite it to signal an actual error. this will not fix the actual problem, of course
23:16:40
Bike
oh, we have clasp-ffi:%dlsym but also core:dlsym. having one function for everything is too hard
23:17:33
Bike
core:dlsym even returns the same values, but it takes an additional argument as rtld_default or what eer
0:16:16
Bike
it's the first block in https://github.com/clasp-developers/clasp/issues/943, except i took out the quote in the TEST function.
0:17:40
drmeister
Bike: You rewrote defcallback - right? I had a horrid macroexpansion hack to make it work.
0:18:11
Bike
https://github.com/clasp-developers/clasp/blob/dev/src/lisp/kernel/cmp/codegen-special-form.lsp#L1372-L1432 here again
0:32:01
drmeister
Ok, I'm just doing some graph theory code. I have to finish it up or I'll lose my place.
0:34:28
drmeister
The (similarity-graph molecules similarity-matrix) generates a single graph - but there are disconnected subgraphs within it.
0:34:54
drmeister
(connected-components graph) returns list of list of vertices. Each list of vertices is vertices from one subgraph.
0:36:46
drmeister
The edges are molecuels that are similar to each other and the weight is the similarity score.
0:37:59
drmeister
The work we are doing requires each graph to contain one single connected component - so I'm isolating the components.
0:38:57
drmeister
Right - I didn't state that - but yes - there will be only one edge between each pair of vertices.
0:39:39
drmeister
I think it is - but the picture is a bit too low res for you to see. Let me check though - you make a good point.
0:41:34
Bike
component-edges = (remove-if-not (lambda (edge) (or (find (vertex1 edge) component) (find (vertex2 edge) component))) remaining-edges)
0:42:32
Bike
this also isn't very efficient either way, but i guess if the graphs are small enough to look at it won't matter too much
0:42:50
drmeister
Yes yes - you are right. Then I want 'append' rather than 'collect' in the loop - right?
0:44:00
drmeister
I want all the component-edges to be all the edges that connect vertices in the component
0:45:15
Bike
at the end i'd do (setf remaining-edges (set-difference remaining-edges component-edges))
0:47:07
Bike
the remove-if-not just looks through the edges and collects only those that have a vertex in the component
0:47:56
Bike
and "for efficiency" i'd skip the remaining-edges stuff and just keep looking through all of the edges - you'll do redundant searching, but it should cons less, which seems more important
0:53:05
Bike
you could also go through the whole list separating out the component... let me write that out
0:54:05
no-defun-allowed
Well, if you put the objects through a filter, are you going to keep the objects that are stuck in the filter or the objects that go through?
0:55:00
no-defun-allowed
List.partition returns a tuple with the objects in the filter and the objects that fell through.
0:56:13
no-defun-allowed
(defun partition (predicate list) (loop for item in list if (funcall predicate item) collect item into positive else collect item into negative finally (return (values positive negative)))) ;; look ma, no parens
0:59:57
no-defun-allowed
Very funny, but you can use it. Short of some α-transforms (renaming) there's few reasonable ways to do that, IMO.
1:03:39
no-defun-allowed
Maybe too much of a stretch, but you could invent a function that's called like (list-funcall-if <test> (lambda (object) <then>) (lambda (object) <else>) <list>)
3:43:15
drmeister
I put in a question to Lang Hames. I feel like it might be something I have to tell the JIT to do.
3:44:19
drmeister
Yes. It's something recent I came up with. The faso/fasp files add object files to the JIT.
3:45:38
drmeister
I don't know if you remember the old "Palmolive" commercials? https://www.youtube.com/watch?v=_bEkq7JCbik
3:55:20
drmeister
I can load the faso file multiple times - so the external linkage symbol isn't creating a collision.
3:56:03
drmeister
I've spent months working out how to get faso files to work without external linkage symbols. Now I've forgotten what to do when I want an external linkage symbol.
3:57:40
Bike
going to sleep. night. if you have any other ideas for what i should focus on fixing before release i'm all ears, though i suppose now might not be the time.