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.
