freenode/#clasp - IRC Chatlog
Search
3:16:15
Bike
there'd be fewer but i didn't bother installing the inline definitions for rplaca and such
3:22:19
beach
I guess since this is SBCL and SBCL stores global function definitions in function cells in symbols, calling FDEFINITION won't hurt performance too much, if the purpose of this exercise is to check performance of the generated code.
3:24:08
Bike
well, i just wanted something that would work. and there's no "fdefinition hoisting" code to use that i'm aware of
3:25:57
Bike
anyway, yeah, i wrote a basic compile file, it binds the variables and handles conditions and such. most of the effort was handling load time values properly, and i hit an sbcl bug while doing that too
3:26:27
Bike
i could have done it easier by just configuring it so that cleavir considers all constants immediate
3:27:32
Bike
but sbcl's defun expansion involves a structure, and that structure doesn't have a constructor so #s can't be used, so i had to use make load form and it ballooned
3:31:37
Bike
I mean, it's all through cleavir-env. You could pass a different environment to cleavir if you wanted.
3:33:03
beach
My question was whether you used a SICL first-class global environment, i.e., an instance that contains all the global definitions, or whether you just provide methods on the environment functions to access THE global SBCL environment.
3:33:36
beach
When I say first-class global environment, I mean a SICL standard instance that contains definitions.
3:34:24
Bike
it doesn't just copy the sbcl environment verbatim, it has macro definitions for a few special operators, and i can add compiler macros and stuff.
3:35:46
Bike
(defmethod cleavir-env:function-info ((env sb-kernel:lexenv) (symbol (eql 'cl:defun))) ...whatever...)
3:36:16
Bike
https://github.com/robert-strandh/SICL/blob/master/Code/Cleavir/Environment/Examples/sbcl.lisp#L156-L158 oh, i have one in there, even.
3:36:51
beach
I don't think I have ever given much thought to using the native environment this way.
3:36:56
Bike
i guess if it was a real copy of the environment i could make modifications that wouldn't affect sbcl.
3:37:59
beach
When I think of using the native environment, I am only thinking of using all the native definitions, so no sophisticated use like that.
3:38:49
Bike
yeah, that won't really work. you have to define something for unwind-protect and so on since cleavir doesn't, the implementation has other special operators, stuff like that.
3:39:05
Bike
since i just do this to test cleavir itself i don't mind not being able to use it effectively for system construction or whatnot
3:39:31
Bike
if anything, having definitions i didn't write forces me to fix problems, like with the struct
3:49:14
beach
If you want to be able to use Cleavir primops and such, I think the easiest thing is to use a SICL first-class global environment.
3:49:54
beach
It is always possible to import from the host all the stuff you don't care about defining yourself. That's what I do for the SICL bootstrapping process.
3:50:52
beach
In fact, the first environment created during the bootstrapping process is pretty much just a clone (as a first-class global environment) of that of the host.