TO DO

  • We should extend the benchmarking module to allow

    timethis(main, { MEMOIZED => [ suba, subb ] })

    What would this do? It would time main three times, once with suba and subb unmemoized, twice with them memoized.

    Why would you want to do this? By the third set of runs, the memo tables would be fully populated, so all calls by main to suba and subb would return immediately. You would be able to see how much of main's running time was due to time spent computing in suba and subb. If that was just a little time, you would know that optimizing or improving suba and subb would not have a large effect on the performance of main. But if there was a big difference, you would know that suba or subb was a good candidate for optimization if you needed to make main go faster.

  • Maybe a tied-hash interface to the memo-table, which a hook to automatically populate an entry if no value is there yet?

  • Perhaps memoize should return a reference to the original function as well as one to the memoized version? But the programmer could always construct such a reference themselves, so perhaps it's not necessary. We save such a reference anyway, so a new package method could return it on demand even if it wasn't provided by memoize. We could even bless the new function reference so that it could have accessor methods for getting to the original function, the options, the memo table, etc.

  • The TODISK feature is not ready yet. It will have to be rather complicated, providing options for which disk method to use (GDBM? DB_File? Flat file? Storable? User-supplied?) and which stringizing method to use (FreezeThaw? Marshal? User-supplied?)

  • Maybe an option for automatic expiration of cache values? (`After one day,' `After five uses,' etc.)

  • Put in a better example than fibo. Show an example of a nonrecursive function that simply takes a long time to run. getpwuid for example? But this exposes the bug that you can't say memoize('getpwuid'), so perhaps it's not a very good example.

    Well, I did add the ColorToRGB example, but it's still not so good. These examples need a lot of work. factorial might be a better example than fibo.

  • Add more regression tests for normalizers.

  • Maybe resolve normalizer function to code-ref at memoize time instead of at function call time for efficiency? I think there was some reason not to do this, but I can't remember what it was.

  • Add more array value tests to the test suite.

  • Fix that `Subroutine u rededined ... line 484' message.

  • There was probably some other stuff that I forgot.