freenode/#clasp - IRC Chatlog
Search
11:29:52
beach
Well, this truly is great (or will be). I just replaced a slot in the DEFCLASS form for FUNCTION by a different one. I then re-ran the bootstrapping, and it just works.
11:33:28
makomo
beach: is that a consequence of never using slots directly but always relying on accessors?
11:34:15
beach
No, not this time. It is a result of my insisting on every class definition to be "natural" and having the bootstrapping procedure turn it into something executable.
11:34:41
beach
So this is the definition (defclass function (t) ((...) (...)) (:metaclass built-in-class))
11:39:42
heisig
Nice! The pleasures of using CLOS. I had a similar moment of joy yesterday, when I introduced a new data type in Petalisp. Thanks to CLOS, it took me 3 lines of code in the frontend and 6 lines of code in the backend.
11:40:26
makomo
beach: very nice. how exactly does the bootstrapping procedure turn it into something executable (actually, what does that even mean)?
11:41:46
beach
Well, most of my class definitions are not operational. Take this one, for instance: (defclass standard-class () (...))
11:42:05
beach
STANDARD-CLASS is an instance of STANDARD-CLASS so it must exist in order to be created.
11:42:53
beach
makomo: I solve this conundrum by having the host (in this case SBCL) execute the definition for me. But I use first-class global environments to avoid clobbering the host global environment (which would not have worked anyway).
11:47:07
beach
No existing Common Lisp implementation (that I am aware of) starts bootstrapping by building the MOP classes. :)
11:55:14
heisig
So many possibilities once the bootstrapping works... like starting with (defclass number (t) () (:metaclass built-in-class)).
11:58:29
beach
heisig: Soon-ish, I will eliminate the (old) Boot directory and replace it with what is now in New-boot.
12:01:40
heisig
Thank you for the warning. I won't mourn after the old bootstrapping code :) The new code is much easier to understand.
13:32:12
Kevslinger
More errors are coming to the surface -- I'm considering that a good thing (as opposed to having lots of phantom bugs lurking around at night)
15:06:15
Colleen
Shinmera: drmeister said 17 hours, 51 minutes ago: Say I loaded staple into clasp after starting everything else out. I'd like to generate some documentation for some packages. I tried (staple:generate :my-system :packages (list (find-package :chem))) but that just generated an error that it couldn't determine the project (Cannot generate documentation for :MY-PACKAGE: Could not find or infer a project.)
15:08:29
Shinmera
no idea what broke colleen now, but anyway https://shinmera.github.io/staple/#GENERIC-FUNCTION%20STAPLE%3AINFER-PROJECT
15:11:00
drmeister
Shinmera: Hmm, the examples I used were not ASDF systems. I didn't know that was a requirement. So staple needs an ASDF system definition - correct?
15:11:43
drmeister
I do have ASDF systems that I want to document - I also have a few builtin packages - I started with the builtin packages and obviously got nowhere.
16:08:52
drmeister
My AWS bill last month was $500 because I wasn't careful and left a few things running. It's way to easy to do that.
17:00:23
drmeister
You have a C++ string and you want to do assoc on a list that contains Common Lisp strings - right?
17:03:49
drmeister
codeship.com uses AWS EC2 instances. There is no point in using codeship - we should just roll our own.
17:05:52
drmeister
The alternative, of comparing the C++ string to the characters in the CL string objects means you would have to handle a lot of string variants base-char, character, simple vs non-simple
17:06:55
dvssa
drmeister: How long does it normally take to load a .bc file into clasp? I got the helloword example compiling but when I try load its taking really long (6min so far and no reporting).
17:07:12
Bike
a bit annoying,since this is in findPackage,which after all started with a lisp string most of thetime...
19:28:50
beach
But the Common Lisp HyperSpec page on CALL-METHOD says: The macro call-method invokes the specified method, supplying it with arguments and with definitions for call-next-method and for next-method-p.
19:29:40
beach
How can a macro that takes a method metaobject with an existing method function "supply definitions" to that method?
19:30:05
Bike
the clhs page on call-method contradicts the MOP definition of make-method-lambda in several places. that'sone.
19:33:37
Bike
oh, and you are right, the method-lambda is in the lexical environment of the defmethod.
19:39:23
beach
So many the Common Lisp HyperSpec meant for the method body to be evaluated in the null lexical environment augmented with next-method-p and call-next-method?
19:39:44
beach
If so, the method object would not contain the method function but the method lambda expression.
19:40:49
Bike
i don't think they knew what they wanted in CLHS, but MOP spends a fair bit of time on the subject, so i'll go with it
19:45:16
Bike
MOP is pretty specific about this stuff. Its solution is debatable, I think, but you rely on MOP pretty heavily for fastgf...
19:46:52
beach
If DEFMETHOD results in a method metaobject with a method-function in it that is already a function an not a form...
19:47:26
beach
Then what is referred to by call-next-method and next-method-p in the body of that defmethod form?
19:51:25
Bike
(defmethod ...) expands to like (make-instance whatever-method-class :method-function (lambda (args next-methods) (flet ((call-next-method ...) ...) method body goes here))
19:52:20
Bike
make-method-lambda is called during the macroexpansion, which is most of why it's a weird part of the protocol
19:55:07
Bike
AMOP discusses this- I think there's an expansion outlined where it saves the lambda expression and, magically, the lexical environment
19:59:50
Bike
there's also pascal costanza's "make-method-lambda considered harmful", which i don't think is the best alternate solution, but it lays out some of the issues
20:12:29
makomo
interesting discussion! the MAKE-METHOD-LAMBDA thing which is called at macroexpansion-time reminds me of my DSL problem, beach. interesting to see that the technique has been tried and used with success
20:13:23
beach
makomo: I am very pleased that you take an interest in these implementation details in addition to your specific problem.
20:15:36
makomo
beach: :-). implementation details discussions are always very interesting and informative. it's very nice and rewarding when you know what makes a system tick
20:17:15
makomo
beach: hopefully i'll take a look. i don't yet have a complete idea of what Cleavir is supposed to do, so using it seems daunting right now
20:22:34
makomo
Bike: hah. for my purposes it probably won't be required, but it should be extensible (although probably not right away)
20:23:00
makomo
i'm not sure i want to implement typing and all, so i'll just use lisp objects for the signal's values
20:23:57
makomo
i think synthesis would be much harder, because that's basically writing a proper compiler for some device. not to mention that most of the devices are proprietary and what not, so i don't even know how that would go
20:24:45
makomo
i'm not even sure how a behavioral description of a hardware device is compiled into a "netlist" of logical gates -- that seems like a very interesting area but i haven't read much about it
20:32:25
makomo
the main goal of the project is not to simulate "industry-level" hardware devices though, but just basic devices that serve to illustrate computer architectures. it's a project that one of my professors started, but ofc not in lisp
20:32:48
makomo
it's a custom VHDL-like language with a lexer, parser, bytecode compiler, blah blah. not yet functional or anything, but the idea is there
20:33:13
makomo
it's supposed to be used for laboratory exercises and the like. i set out to "rewrite" it in Lisp, because i would get the language for free, instead of having to reinvent everything
20:35:53
makomo
hopefully with my approach, i'll get most of it for free through lisp. additionally we would like a GUI and "component-specific debugging" (e.g. modeling a CPU and debugging code for that CPU), which i hope to achieve through CLOS with "protocols" that a component can implement, etc.
20:36:40
makomo
and of course, i'll completely avoid having to compile any code myself just by reusing the Lisp compiler :-D
20:37:49
Bike
i mostly used stuff for synthesis in school,so i'm less conversant about the sim parts
20:57:14
Kevslinger
And then nglview has a get-structure-string function, which returns chem:get-name
20:57:50
drmeister
I thought the get-structure-string function returns a massive string that contains the entire structure in either mol2 format or pdb format?
20:58:54
drmeister
Ok, the name can be NIL - when I didn't have an obvious name to assign it I just left it as NIL.
21:02:13
drmeister
(or (chem:get-name agg) "dummy-name") is a compact way to achieve the same thing.
21:07:11
Bike
well, i have a branch where package local nicknames work. needs some polish though. and i kind of don't like that flag