* rfc: (ice-9 accumulate)
@ 2010-01-09 10:44 Thien-Thi Nguyen
2010-01-09 21:55 ` Andy Wingo
2010-01-11 0:48 ` Ludovic Courtès
0 siblings, 2 replies; 11+ messages in thread
From: Thien-Thi Nguyen @ 2010-01-09 10:44 UTC (permalink / raw)
To: guile-devel
Would there be any interest in adding (ice-9 accumulate) to Guile?
- http://www.gnuvola.org/software/guile/doc/Efficient-Accumulation.html
I can see several arguments against doing so:
- It is a thin layer around (ice-9 q) functionality; possible to
reimplement using (ice-9 q), in fact. When the layer is thin, i
wonder if the usefulness is more personal (a matter of taste) than
general. (See e.g., ttn-do macro `FE'.)
- The interface is procedural, possibly defeating compiler optimization.
When i wrote it, it was an exercise for hobbit. The hope was that
hobbit could eventually learn to optimize usage of (ice-9 accumulate)
calls to (strength-, complexity-)reduce them to (ice-9 q) calls, where
other data-oriented optimizations can come into play. Perhaps that
hope was only a non-compiler-geek dream (sounds nice but unfeasible).
Perhaps Andy can either revive this hope or kindly kill it off now?
- There is already something in Guile. [If so, where? Thanks.]
Of course, the primary argument *for* adding it would be to make porting
my stuff to Guile easier. That's a selfish argument, so take it FWIW.
thi
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: rfc: (ice-9 accumulate)
2010-01-09 10:44 rfc: (ice-9 accumulate) Thien-Thi Nguyen
@ 2010-01-09 21:55 ` Andy Wingo
2010-01-11 6:05 ` Thien-Thi Nguyen
2010-01-11 0:48 ` Ludovic Courtès
1 sibling, 1 reply; 11+ messages in thread
From: Andy Wingo @ 2010-01-09 21:55 UTC (permalink / raw)
To: Thien-Thi Nguyen; +Cc: guile-devel
Greets,
On Sat 09 Jan 2010 11:44, Thien-Thi Nguyen <ttn@gnuvola.org> writes:
> Would there be any interest in adding (ice-9 accumulate) to Guile?
>
> -
> http://www.gnuvola.org/software/guile/doc/Efficient-Accumulation.html
Speaking only for myself, I would be unlikely to use it; but OTOH I am
not against having it.
> I can see several arguments against doing so:
You are not selling your idea very well here. But I'm still OK with it :)
> - The interface is procedural, possibly defeating compiler optimization.
> When i wrote it, it was an exercise for hobbit. The hope was that
> hobbit could eventually learn to optimize usage of (ice-9 accumulate)
> calls to (strength-, complexity-)reduce them to (ice-9 q) calls, where
> other data-oriented optimizations can come into play. Perhaps that
> hope was only a non-compiler-geek dream (sounds nice but unfeasible).
> Perhaps Andy can either revive this hope or kindly kill it off now?
So, here's the deal, as far as I understand inlining... (And your
question is about inlining, afaics, in the sense that the Waddell paper
treats inlining)
(1) Inlining across module boundaries: personally I have no intention of
hacking on this, beyond approaches like define-integrable (see the end
of http://www.scheme.com/tspl3/syntax.html).
The fundamental issue is that our modules are first-class rather than
syntactic. Define-integrable allows you to make a step towards the
syntactic, a very useful step.
(2) Inlining of procedures defined within one file/module: We will
probably do this, probably by treating private bindings from a module as
being letrec-bound within the module.
(3) Inlining of let or letrec-bound procedures: We will do this at some
point, and do it fairly well.
But, in this case, we still wouldn't be able to inline very well,
because it's an side-effecting interface. Once you have side effects, it
gets hard to reason about, especially in the presence of
continuations -- and you usually don't know when a continuation may be
captured.
So this particular construct is unlikely to be inlined nicely. However,
it's useful to you, and might be useful to someone else.
> - There is already something in Guile. [If so, where? Thanks.]
There's lots of stuff in ice-9 that noone knows about, but I don't think
there's something like this. Hopefully we can document more of it using
the new (texinfo reflection) infrastructure.
> Of course, the primary argument *for* adding it would be to make porting
> my stuff to Guile easier. That's a selfish argument, so take it FWIW.
Well, we'd like your energy as well, so selfishness on all sides...
Cheers,
Andy
--
http://wingolog.org/
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: rfc: (ice-9 accumulate)
2010-01-09 10:44 rfc: (ice-9 accumulate) Thien-Thi Nguyen
2010-01-09 21:55 ` Andy Wingo
@ 2010-01-11 0:48 ` Ludovic Courtès
2010-01-11 5:51 ` Thien-Thi Nguyen
1 sibling, 1 reply; 11+ messages in thread
From: Ludovic Courtès @ 2010-01-11 0:48 UTC (permalink / raw)
To: guile-devel
Hello!
Thien-Thi Nguyen <ttn@gnuvola.org> writes:
> Would there be any interest in adding (ice-9 accumulate) to Guile?
>
> - http://www.gnuvola.org/software/guile/doc/Efficient-Accumulation.html
I’m currently unconvinced.
> I can see several arguments against doing so:
>
> - It is a thin layer around (ice-9 q) functionality;
FWIW I’m personally not fond of ‘(ice-9 q)’ because it’s undocumented it
provides an imperative interface. I have a functional implementation of
purely functional FIFO queues (F. W. Burton, "An Efficient
Implementation of FIFO Queues"), which I’d rather push instead of an
imperative one.
Besides, the first idiom at [0] is about as concise as the one that uses
this API; in addition, it is likely to be more widely understood than
the latter. This makes this API unappealing to me.
[0] http://www.gnuvola.org/software/guile/doc/Efficient-Accumulation.html
[...]
> Of course, the primary argument *for* adding it would be to make porting
> my stuff to Guile easier. That's a selfish argument, so take it FWIW.
Heh, although I’m unconvinced about this one module I hope we can find
ways to help port your software!
Thanks,
Ludo’.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: rfc: (ice-9 accumulate)
2010-01-11 0:48 ` Ludovic Courtès
@ 2010-01-11 5:51 ` Thien-Thi Nguyen
2010-01-11 13:26 ` Ludovic Courtès
0 siblings, 1 reply; 11+ messages in thread
From: Thien-Thi Nguyen @ 2010-01-11 5:51 UTC (permalink / raw)
To: guile-devel
() ludo@gnu.org (Ludovic Courtès)
() Mon, 11 Jan 2010 01:48:19 +0100
FWIW I’m personally not fond of ‘(ice-9 q)’ because it’s undocumented
it provides an imperative interface.
I infer an "although" in that sentence. Re (ice-9 foo) documentation, i
took some pains to fill in the gaps w/ Guile 1.4.x:
- http://www.gnuvola.org/software/guile/doc/Module-Index.html
Shall i submit those (the relevant ones) as doc patches?
I have a functional implementation of purely functional FIFO queues
(F. W. Burton, "An Efficient Implementation of FIFO Queues"), which
I’d rather push instead of an imperative one.
Note that (ice-9 q) can add to the head of the queue, too. A quick scan
of <http://www.cl.cam.ac.uk/teaching/2000/FoundsCS/queues.ML> doesn't
seem to show similar functionality.
Besides, the first idiom at [0] is about as concise as the one that uses
this API; in addition, it is likely to be more widely understood than
the latter. This makes this API unappealing to me.
I'm sorry, i don't follow. What are you referring to as "the latter"?
Heh, although I’m unconvinced about this one module I hope we can find
ways to help port your software!
OK. I'll look for other ways to be lazy...
Hmmm, would it be possible to install (ice-9 accumulate) as is, w/o
changes, somewhere under ${prefix}/share/guile (perhaps a site/ dir)?
Would Guile be able to locate and load it?
thi
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: rfc: (ice-9 accumulate)
2010-01-09 21:55 ` Andy Wingo
@ 2010-01-11 6:05 ` Thien-Thi Nguyen
2010-01-11 13:21 ` Ludovic Courtès
0 siblings, 1 reply; 11+ messages in thread
From: Thien-Thi Nguyen @ 2010-01-11 6:05 UTC (permalink / raw)
To: guile-devel
() Andy Wingo <wingo@pobox.com>
() Sat, 09 Jan 2010 22:55:58 +0100
You are not selling your idea very well here.
But I'm still OK with it :)
Well, spewing all manner of code is breathing in, dropping thin
interfaces is breathing out...
So, here's the deal, as far as I understand inlining... (And your
question is about inlining, afaics, in the sense that the Waddell
paper treats inlining)
I'm not sure what my dreaming was about, exactly...
[inlining opportunities / plans]
So this particular construct is unlikely to be inlined nicely.
OK, i'll go mull on that for a bit. Thanks for the overview.
There's lots of stuff in ice-9 that noone knows about, but I don't
think there's something like this. Hopefully we can document more of
it using the new (texinfo reflection) infrastructure.
In reply to a similar comment from Ludovic, i offered to submit patches
for missing (ice-9 foo) documentation. I hereby revise that offer to
submit patches using this infrastructure, once i get around to playing
with it. I imagine it can't be much different from Guile 1.4.x's.
thi
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: rfc: (ice-9 accumulate)
2010-01-11 6:05 ` Thien-Thi Nguyen
@ 2010-01-11 13:21 ` Ludovic Courtès
2010-01-11 14:16 ` Thien-Thi Nguyen
2010-01-11 20:57 ` Andy Wingo
0 siblings, 2 replies; 11+ messages in thread
From: Ludovic Courtès @ 2010-01-11 13:21 UTC (permalink / raw)
To: guile-devel
Hello,
Thien-Thi Nguyen <ttn@gnuvola.org> writes:
> There's lots of stuff in ice-9 that noone knows about, but I don't
> think there's something like this. Hopefully we can document more of
> it using the new (texinfo reflection) infrastructure.
>
> In reply to a similar comment from Ludovic, i offered to submit patches
> for missing (ice-9 foo) documentation. I hereby revise that offer to
> submit patches using this infrastructure, once i get around to playing
> with it. I imagine it can't be much different from Guile 1.4.x's.
I’d prefer if it were used only for non-ice-9 modules. I really
sympathize with what the GCS says (info "(standards) Doc Strings and
Manuals"):
Some programming systems, such as Emacs, provide a documentation
string for each function, command or variable. You may be tempted to
write a reference manual by compiling the documentation strings and
writing a little additional text to go around them--but you must not
do it. That approach is a fundamental mistake. The text of
well-written documentation strings will be entirely wrong for a
manual.
Thanks,
Ludo’.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: rfc: (ice-9 accumulate)
2010-01-11 5:51 ` Thien-Thi Nguyen
@ 2010-01-11 13:26 ` Ludovic Courtès
2010-01-11 14:34 ` Thien-Thi Nguyen
2010-01-11 20:51 ` Andy Wingo
0 siblings, 2 replies; 11+ messages in thread
From: Ludovic Courtès @ 2010-01-11 13:26 UTC (permalink / raw)
To: guile-devel
Hi,
Thien-Thi Nguyen <ttn@gnuvola.org> writes:
> Re (ice-9 foo) documentation, i took some pains to fill in the gaps w/
> Guile 1.4.x:
>
> - http://www.gnuvola.org/software/guile/doc/Module-Index.html
>
> Shall i submit those (the relevant ones) as doc patches?
Would be nice, though I think it should be decided on a per-module
basis. There are some modules that it may be worth deprecating and
leaving undocumented, perhaps.
> I have a functional implementation of purely functional FIFO queues
> (F. W. Burton, "An Efficient Implementation of FIFO Queues"), which
> I’d rather push instead of an imperative one.
>
> Note that (ice-9 q) can add to the head of the queue, too. A quick scan
> of <http://www.cl.cam.ac.uk/teaching/2000/FoundsCS/queues.ML> doesn't
> seem to show similar functionality.
Yes, because it’s a FIFO. ;-)
> Besides, the first idiom at [0] is about as concise as the one that uses
> this API; in addition, it is likely to be more widely understood than
> the latter. This makes this API unappealing to me.
>
> I'm sorry, i don't follow. What are you referring to as "the latter"?
The ‘accumulate’ API doesn’t lead to more concise code, but it leads to
“non-standard” code, which makes it unappealing to me.
> Hmmm, would it be possible to install (ice-9 accumulate) as is, w/o
> changes, somewhere under ${prefix}/share/guile (perhaps a site/ dir)?
> Would Guile be able to locate and load it?
Setting $GUILE_LOAD_PATH and $GUILE_LOAD_COMPILED_PATH appropriately
should be enough.
Thanks,
Ludo’.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: rfc: (ice-9 accumulate)
2010-01-11 13:21 ` Ludovic Courtès
@ 2010-01-11 14:16 ` Thien-Thi Nguyen
2010-01-11 20:57 ` Andy Wingo
1 sibling, 0 replies; 11+ messages in thread
From: Thien-Thi Nguyen @ 2010-01-11 14:16 UTC (permalink / raw)
To: guile-devel
() ludo@gnu.org (Ludovic Courtès)
() Mon, 11 Jan 2010 14:21:15 +0100
I’d prefer if it were used only for non-ice-9 modules.
OK, i'll just take the .texi (output of Guile 1.4.x extraction),
clean it up for 1.9, and post them for review.
thi
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: rfc: (ice-9 accumulate)
2010-01-11 13:26 ` Ludovic Courtès
@ 2010-01-11 14:34 ` Thien-Thi Nguyen
2010-01-11 20:51 ` Andy Wingo
1 sibling, 0 replies; 11+ messages in thread
From: Thien-Thi Nguyen @ 2010-01-11 14:34 UTC (permalink / raw)
To: guile-devel
() ludo@gnu.org (Ludovic Courtès)
() Mon, 11 Jan 2010 14:26:46 +0100
Would be nice, though I think it should be decided on a per-module
basis. There are some modules that it may be worth deprecating and
leaving undocumented, perhaps.
Certainly each module will have it's own doc patch.
However, i strongly discourage leaving things undocumented. For some,
undocumented might mean "don't use". For others (who peruse source
code), it might mean "implementation so stable, it's self-documenting".
Better to be explicit: If you want to deprecate something, the
documentation is ALSO a good place to make that clear.
Another benefit to documenting stuff that you want to deprecate is that
the sifting process may reveal bits or techniques you want to keep.
> Besides, the first idiom at [0] is about as concise as the one
> that uses this API; in addition, it is likely to be more widely
> understood than the latter. This makes this API unappealing to
> me.
>
> I'm sorry, i don't follow. What are you referring to as "the latter"?
The ‘accumulate’ API doesn’t lead to more concise code, but it leads to
“non-standard” code, which makes it unappealing to me.
I can understand this point somewhat (what is unfamiliar often seems
non-standard). However, i still fail to understand your sentence above;
do you mean "the latter" == "(ice-9 accumulate)"?
In any case, the API does indeed lead to more concise code, if the
original code that it replaces is `cons' plus `reverse!'. But that's
neither here nor there...
> Hmmm, would it be possible to install (ice-9 accumulate) as is, w/o
> changes, somewhere under ${prefix}/share/guile (perhaps a site/ dir)?
> Would Guile be able to locate and load it?
Setting $GUILE_LOAD_PATH and $GUILE_LOAD_COMPILED_PATH appropriately
should be enough.
OK, i'll give moving the module to ttn-do a try.
thi
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: rfc: (ice-9 accumulate)
2010-01-11 13:26 ` Ludovic Courtès
2010-01-11 14:34 ` Thien-Thi Nguyen
@ 2010-01-11 20:51 ` Andy Wingo
1 sibling, 0 replies; 11+ messages in thread
From: Andy Wingo @ 2010-01-11 20:51 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: guile-devel
On Mon 11 Jan 2010 14:26, ludo@gnu.org (Ludovic Courtès) writes:
> Thien-Thi Nguyen <ttn@gnuvola.org> writes:
>
>> Hmmm, would it be possible to install (ice-9 accumulate) as is, w/o
>> changes, somewhere under ${prefix}/share/guile (perhaps a site/ dir)?
>> Would Guile be able to locate and load it?
>
> Setting $GUILE_LOAD_PATH and $GUILE_LOAD_COMPILED_PATH appropriately
> should be enough.
Setting $GUILE_LOAD_PATH is enough if you are fine with autocompilation
and caching in your ~/.cache directory, as is the default.
Andy
--
http://wingolog.org/
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: rfc: (ice-9 accumulate)
2010-01-11 13:21 ` Ludovic Courtès
2010-01-11 14:16 ` Thien-Thi Nguyen
@ 2010-01-11 20:57 ` Andy Wingo
1 sibling, 0 replies; 11+ messages in thread
From: Andy Wingo @ 2010-01-11 20:57 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: guile-devel
On Mon 11 Jan 2010 14:21, ludo@gnu.org (Ludovic Courtès) writes:
> Hello,
>
> Thien-Thi Nguyen <ttn@gnuvola.org> writes:
>
>> There's lots of stuff in ice-9 that noone knows about, but I don't
>> think there's something like this. Hopefully we can document more of
>> it using the new (texinfo reflection) infrastructure.
>>
>> In reply to a similar comment from Ludovic, i offered to submit patches
>> for missing (ice-9 foo) documentation. I hereby revise that offer to
>> submit patches using this infrastructure, once i get around to playing
>> with it. I imagine it can't be much different from Guile 1.4.x's.
>
> I’d prefer if it were used only for non-ice-9 modules. I really
> sympathize with what the GCS says (info "(standards) Doc Strings and
> Manuals"):
>
> Some programming systems, such as Emacs, provide a documentation
> string for each function, command or variable. You may be tempted to
> write a reference manual by compiling the documentation strings and
> writing a little additional text to go around them--but you must not
> do it. That approach is a fundamental mistake. The text of
> well-written documentation strings will be entirely wrong for a
> manual.
I agree with this, largely; but of course texi documentation has the
disadvantage that it can (and does) grow out-of-sync with source.
For small modules, a nicely written commentary plus an expository (i.e.,
in-order) layout of exported procedures, along with their docstrings,
can get you 80% of the way there, very easily. And at least that way you
know it's accurate.
Also we could hack up other in-source documentary mechanisms that
approach manual-style documentation more closely. For example a Manual
block, like we now have Commentary.
Andy
--
http://wingolog.org/
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2010-01-11 20:57 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-01-09 10:44 rfc: (ice-9 accumulate) Thien-Thi Nguyen
2010-01-09 21:55 ` Andy Wingo
2010-01-11 6:05 ` Thien-Thi Nguyen
2010-01-11 13:21 ` Ludovic Courtès
2010-01-11 14:16 ` Thien-Thi Nguyen
2010-01-11 20:57 ` Andy Wingo
2010-01-11 0:48 ` Ludovic Courtès
2010-01-11 5:51 ` Thien-Thi Nguyen
2010-01-11 13:26 ` Ludovic Courtès
2010-01-11 14:34 ` Thien-Thi Nguyen
2010-01-11 20:51 ` Andy Wingo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).