On Dec 22, 2015, at 08:26 , james anderson james.anderson@setf.de wrote:
good morning;
On 2015-12-21, at 20:15, Attila Lendvai attila@lendvai.name wrote:
i wrote up some ideas here:
https://github.com/cffi/cffi/wiki/Type-propagation-proposal
you're invited to comment/edit it.
[transported from otherwise private correspondence…]
On 2015-12-22, at 00:16, Attila Lendvai attila@lendvai.name wrote:
hello,
[…]
the question is, did you consider using declarations and environments? i have found the sbcl implementation of those to be quite serviceable and i would expect it to provide all of the definition and access facilities which type-based operations could require.
as this is CFFI it should be portable, but i'm willing to give this up if sane implementations can be made to work. there's an issue already with portable access to the environment, but that has been dealt with already.
I beg to differ. There is NO code out there that correctly and portably has access to “the environment”. I.e., at the level of CLtL2 Chapter 8.5.
do you think this could be implemented portably in a sane way? if so maybe we should do that, but i never used user declarations.
i have never tried to validate my particular current use of the declaration facilities against some implementation other than sbcl, but i recall using them in lispworks, allegro and even mcl and see that ccl appears to implement them as well. the are cltl2 rather than ansi, but as they expose something which any implementation must already implement, they are a reasonable expectation.
Alas, they are not. At this point only Allegro offers a working (and incomprehensibly non-cltl2-compliant - cfr., the return values order) version. CMUCL and CCL do a reasonable job as does LW.
SBCL has lost SB-CLTL2 in the most recent (Mac) version.
ABCL’s maintainers are on record (personal communication :) :) :) ) as being ready to provide CLtL2 Chapter 8.5 functions “Very Soon Now”(TM).
I cannot say anything for ECL, CLISP or other implementations at this point.
for sbcl i recall to need only to include :sb-cltl2 as an asdf dependency.
See above.
the mechanism is pretty much transparent as to what the declaration can carry- that is, subject to scope and extent requirements, you can do pretty much whatever you want.
If it worked.
Having said that, I point you guys to CLAST: http://clast.sourceforge.net; any help is welcome, especially in lobbying the implementors to support CLtL2 Chapter 8.5.
I would like to have you note that CLAST constructs a “source level” AST for CL code, and that the PARSE-FORM generic function is the “form-level” hook to actually write an extension for CFFI definition forms.
Cheers
-- Marco Antoniotti