freenode/#clasp - IRC Chatlog
Search
8:29:22
heisig
And I have to admit that, in lack of a specializing client, I never actually ran the hoisting part of the transformation. So it may contain silly bugs.
12:41:16
heisig
drmeister: It replaces each non-immediate literal object in a flowchart (and each load-time-value form) by code that is evaluated at load time.
12:42:34
drmeister
Currently there are load-time-value ast nodes - are there now load-time-value HIR instructions?
12:45:36
Colleen
karlosz: beach said at 2018.07.16 07:40:25: In SFA, if you propagate only when the left-hand side of the assignment has a single defining occurrence, then you get the same result as if you use SSA.
12:50:55
Shinmera
General feedback regarding the notes by the way, would you guys prefer it if the notes were shown in the same channel only, rather than on any channel the same user is observed on like it is now?
12:52:20
karlosz
beach: i agree. i was thinking we have type1 and type2 assignment instructions. type1's output has a signle def, whereas type2 has multiple defs. many flow algorithms treat type1 trivially by just copying the information, whereas type2 will have to perform some meet operation
12:53:02
karlosz
so the different class would only be to allow using generic dispatch instead of a manual case statement
12:54:23
karlosz
well its minor enough that it doesnt matter for the overall design of SFA. i am okay with leaving it be
12:55:05
beach
OK. If we find many situations that could benefit from generic dispatch, we can always add it later.
12:58:09
karlosz
heisig: i've really just been using load-time-value hir nodes blindly in my translation of hir code. would your new code impact unhoisted HIR at all?
12:59:40
karlosz
part of the reason for that is that ive heard the hoisting code was going through a revamp
13:01:14
karlosz
OK. i couldnt find much documentation related to why one would hoist load-time-value. is it just to enforce the separation between whats actually constant and what must be load time value?
13:01:34
karlosz
so far i've just been testing whether the load-time-value form has quote in its car
13:09:54
karlosz
clisp dumps fasls by just making write on a compiled function write out its code vector and constants in a readable way.
13:10:24
karlosz
i imagine it could still be possible to do something like that but have the code vector be native code instead
13:11:58
Colleen
Bike: drmeister said 8 hours, 15 minutes ago: The other reason to do it at runtime is that then I use the same approach for defining lambda lists in clbind. Now - we could come up with another way to write lambda-lists that uses C++ template programming... But that sounds - bleh.
13:12:22
beach
https://github.com/marcoheisig/SICL/tree/load-time-value-hoisting/Code/Cleavir/HIR-transformations/Load-time-value-hoisting
13:13:50
heisig
karlosz: Using my code on clisp, you would be left with just the code vector. All constants would be turned into code.
13:14:19
karlosz
beach: yes, for example (defun g (x) (cons x '(a b c d))) translates into https://paste.gnome.org/pai956pjh
13:16:14
karlosz
i think #Y is just clisp read syntax for a bytecode compiled function. similar to the emacs read syntax
13:16:52
karlosz
beach: the load time value form is stored in the constant vector and it is marked a load time value form in the very last list in the bytecode-function vector
13:19:23
beach
"... the compiler performs its normal semantic processing (such as macro expansion and translation into machine code) on form"
13:22:57
karlosz
well, i just tried compile-filing a function with (l-t-v (incf *gensym-counter*)) and what was dumped was (#.(|COMMON-LISP|::|INCF| |COMMON-LISP|::|*GENSYM-COUNTER*|))
13:25:06
karlosz
the #. thing is kinda interesting though. it makes me think that the value is constructed on read time when its being loaded in
13:30:12
Bike
oh, exotic things like (load-time-value (foo #.(make-instance ...))) that heisig has to worry about
13:34:45
drmeister
Apparently I’m on a train that may stall short of my station. For some reason we are pulling more cars that we should be
13:38:03
beach
I can't tell whether he is talking about a real train or about the image improvement of Clasp.
13:41:51
Bike
schedule problems, i would think. and you know how good us americans are at public transit
13:43:06
Bike
i mean, it depends. apparently the nyc subway has been pretty clogged for years due to arcane decisions about inter train distances
13:49:50
stassats
i'd imagine train engineers are only a small percentage of the whole railroad business
14:10:26
beach
stassats: What would be a good way to associate additional information with threads in SBCL? Just modify the struct?
14:29:10
beach
What I want to do is to implement the debugger interface that I have planned for SICL, but I want to execute my code inside SBCL. My compiled code needs to interrogate this information to determine whether it runs under the control of the debugger. So I guess you are right. I'll just plan for no information to be present and do nothing then.
14:31:57
beach
I could even do a weak hash table so that the information with a thread will disappear if the thread does.
16:26:11
Bike
a Vec0 is a Vec0_impl, but it has a GCVector as a slot, and then a GCVector has a tagged pointer to a GCVector_moveable. we should work out what we actually need these for
16:35:20
beach
Shinmera: Given a stack frame, is it possible to get to the function object that is executing there?
16:35:25
Shinmera
CI really loses a lot of its value if you can't specify dependencies that should trigger builds.
16:35:50
drmeister
Bike: If you have a class X that contains a Vec0<whatever> I think there is only one level of indirection to the stretchy vector that contains the vector of whatevers
16:36:27
drmeister
There are several classes involved and some of them may be removable - but they don't add any runtime cost.
16:36:38
Bike
drmeister: there are two layers in the code. i don't know if the compiler can eliminate one or what.
16:38:18
Bike
like a Vec0_impl has a field with a GCVector, and a GCVector has a field that's a tagged pointer to a GCVector_moveable
16:42:52
Bike
i think that's actually more indirection than a lisp vector, which just has a GCVector_moveable right off
16:51:09
Shinmera
scymtym: It's one thing that makes me feel like travis is just a waste of my time :^)
16:55:04
scymtym
Shinmera: i think travis is better than nothing, but i agree. for dayjob, i made a tool for setting up interdependent Jenkins jobs for large, heterogeneous software systems which scientists tend to build (it is written in lisp and works for asdf projects among others)
16:55:50
Shinmera
beach: Okey, it looks like that symbol was erroneously still exported from the public interface, but the actual slot had disappeared. I pushed a fix.
16:57:32
stassats
Shinmera: but that information hasn't disappeared from non-compile-filed functions
16:57:56
Shinmera
Anyway, I'm interested in the sense that I wish I'd already have it, but I currently don't have the enthusiasm to get into it. When I do, I'll get back to you.
18:01:29
beach
Also, where is the documentation? I can't find the way to retrieve the function of a particular stack frame.
18:01:33
Shinmera
Sure, I just know some people who do use it in applications, which is why I'm distraught.