Well, you avoid making every plugin pay the price for the ones that need
access to all of the directives up front. I enjoy the elegance in that. 😎


On Fri, 6 Mar 2026 at 13:00, Martin Blais <[email protected]> wrote:

> On Thu, Mar 5, 2026 at 2:53 PM 'Simon Guest' via Beancount <
> [email protected]> wrote:
>
>> OK, fair cop, I haven't profiled anything!
>>
>> As to what's possible though, it is perfectly possible for a stateful
>> transducer that gives the appearance of operating on each directive at a
>> time to in fact slurp in them all before spitting anything out, so this
>> scenario is covered.
>>
> Yeah but then you won't have any of the benefit
>
>
>
>>   That's part of the genius of the transducer design.  Even if you're not
>> primarily interested in Clojure, Rich Hickey's original presentation on
>> transducers <https://www.youtube.com/watch?v=6mTbuzafcII> is both
>> compelling and entertaining.  Worth a watch.  (And worth thinking about
>> whether there's anything possible like this in Python land, or whatever is
>> your language of choice.)
>>
>
> I used to attend NYC Clojure at Google NYC and I think Rich presented it
> one time. He's a brilliant guy.
>
>
> I do understand that this isn't something that's feasible to change in OG
>> Beancount, but I do think next generation developers should pay attention
>> to such things!
>>
>>
>>
>>
>>
>>
>> On Fri, 6 Mar 2026 at 03:09, Martin Blais <[email protected]> wrote:
>>
>>> It's a bit difficult because some plugins process the entire thing and
>>> insert directives after seeing the entirety of the stream before making
>>> modifications. In other words it's not "online".  I think it's possible for
>>> some subset of plugins though.
>>>
>>> I don't think you'll get a lot of performance benefit from that. Do some
>>> profiling. Maybe finding a way to reuse balance accumulation across plugin
>>> runs might help, but honestly I would let profiling guide us.
>>>
>>>
>>>
>>> On Wed, Mar 4, 2026 at 11:09 PM 'Simon Guest' via Beancount <
>>> [email protected]> wrote:
>>>
>>>> Having been designing a plugins system for limabean using Clojure
>>>> transducers <https://clojure.org/reference/transducers>, I happened to
>>>> notice a very different implementation for plugins in OG Beancount.
>>>>
>>>> Clojure transducers compose, so if you have a number of plugins, the
>>>> limabean plugin framework loops once over all the directives, passing each
>>>> directive through the whole chain of plugins.
>>>>
>>>> I noticed that with the way plugins have been implemented in OG
>>>> Beancount, each plugin iterates over the entire list of directives. And
>>>> then the next plugin does the same, and so on.  I wonder if there is the
>>>> potential here for iterating just once, and passing each directive through
>>>> the chain of plugins?
>>>>
>>>> Just to be clear, I'm only throwing this idea out.  I won't be working
>>>> on this! 😅
>>>>
>>>> cheers,
>>>> Simon
>>>>
>>>> PS. Upon reflection, it may not be very low hanging!  But worth
>>>> considering for vNext, surely.
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Beancount" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> To view this discussion visit
>>>> https://groups.google.com/d/msgid/beancount/CAFhGSbuY8fz7ETo2%3DCJguqYsnhZC0_Um9xoF-8XPh9hAzeARpg%40mail.gmail.com
>>>> <https://groups.google.com/d/msgid/beancount/CAFhGSbuY8fz7ETo2%3DCJguqYsnhZC0_Um9xoF-8XPh9hAzeARpg%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Beancount" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To view this discussion visit
>>> https://groups.google.com/d/msgid/beancount/CAK21%2BhPQvip3AJ6RMemWGH%3D%3D2ZbfT5NcxQOXz_31PJfp50xj5Q%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/beancount/CAK21%2BhPQvip3AJ6RMemWGH%3D%3D2ZbfT5NcxQOXz_31PJfp50xj5Q%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Beancount" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To view this discussion visit
>> https://groups.google.com/d/msgid/beancount/CAFhGSbvS_8NS2QVRer7P4NP3bsEm%3DEFmzVJJpH9Qp8CTH3QwPA%40mail.gmail.com
>> <https://groups.google.com/d/msgid/beancount/CAFhGSbvS_8NS2QVRer7P4NP3bsEm%3DEFmzVJJpH9Qp8CTH3QwPA%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
> --
> You received this message because you are subscribed to the Google Groups
> "Beancount" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion visit
> https://groups.google.com/d/msgid/beancount/CAK21%2BhNDMiS5XQvcAr%3D0hHvjGpengrAQC33L%2BDaFavc%2BugAhrA%40mail.gmail.com
> <https://groups.google.com/d/msgid/beancount/CAK21%2BhNDMiS5XQvcAr%3D0hHvjGpengrAQC33L%2BDaFavc%2BugAhrA%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/beancount/CAFhGSbupdwjH-fki9-GQzM-3S9HGm4r81DGCh19QxtpoZNvqKA%40mail.gmail.com.

Reply via email to