freenode/#clasp - IRC Chatlog
Search
12:51:33
pfdietz
makomo: your macro functions are accessing some sort of global state, so order of macroexpansion is important?
12:52:33
makomo
pfdietz: yeah, pretty much. the "<-" macro would associate the given signal with the *current* process (that's the global state)
12:53:23
makomo
that might not mean anything to you, but in short -- my macro can take multiple processes (which are bodies of code that contain the <- macro)
12:54:54
makomo
it's supposed to arrange for these process bodies to be compiled (by creating functions out of them via LAMBDA) and therefore the <- macro to be expanded within them
12:55:31
pfdietz
In general, you don't want macros to access (or modify) global state. If you want to pass information down into a macro from surrounding lexical scope, it's best to use that weird &environment parameter, with surrounding forms populating it with fake macrolets whose purpose is not to be expanded into code, but to be queried by other macro functions.
12:58:47
Bike
if a <- is part of one process and that's obvious from source code you can probably have each <- be aware of its process that way, tho.
13:03:30
pfdietz
Passing information back up is harder. Probably the best way would be for the macro for <- to fully (or mostly) expand forms under it, then grovel over those expansions for information. Fully expanding all macros requires a code walker though.
13:04:11
makomo
Bike: multiple processes might use <- (if i correctly understood what your assumption was)
13:06:14
makomo
Bike: oh, nope. every <- appears *within* a process and is associated exactly with that process only
13:11:15
makomo
Bike: this is in regard to the "passing information down" technique, right? so, as suggested, i could wrap every process' body within a macrolet that defines <- but with a process-specific part within the definition?
13:11:51
Bike
or you could wrap it in (symbol-macrolet ((this-process whatever)) ...) and have a global <- macro that does (macroexpand 'this-process env).
13:17:17
pfdietz
The particular use case I had for that was a DSL layered in top of Common Lisp that included some varieties of declarations. A fake macrolet was used to implement what amounts to a symbol table.
16:48:17
Bike
ideally i'd like to make this an exported interface, for people who want just in time to be before they start
16:50:14
Bike
yeah. i'm not sure exactly when sbcl does compiles for dispatch, but it's probably less often than potentially every call like in fastgf
17:03:44
Colleen
Generic-function staple:infer-project https://shinmera.github.io/staple#GENERIC-FUNCTION%20STAPLE%3AINFER-PROJECT
17:05:28
Bike
so anyway, doing discriminating functions ahead of time involves issues about stamps being the same at compile and at load, but i suspect that they're less of a problem than effective methods, of which there aremore
17:09:45
drmeister
Shinmera: Not in the past two days - I've been doing a buildbot sprint to figure out how to make buildbot work with amazon spot instances.
17:11:30
drmeister
It's remarkable that AWS machines don't know who they are. Figuring out who they are requires this...
17:13:02
drmeister
This looks like a hack - but apparently it's not a hack: requests.get("http://169.254.169.254/latest/meta-data/instance-id")
17:13:28
drmeister
"Call this magic number and the person on the other end will tell you who you are".
22:05:28
drmeister
::notify kpoeck I'd like to incorporate the tests you have developed into the CI framework that I'm developing. I have clasp and cando building using 'buildbot'. What do you think?
22:07:35
drmeister
I got the whole CI thing working using AWS spot instances. I figured out how to do it with only one Amazon Machine Instance (AMI) that reconfigures itself based on the name given to it by the master. It's really slick.
22:14:52
makomo
pfdietz: regarding your DSL and that symbol table thingy, when did you actually *use* the information that you stored away during macroexpansion time? at run-time or?