Many worlds software: exponential leverage, all decision kept and competing
Timothy Corrie Jr
Night Math Teacher at Huntington Learning Center. I wrote 32digit/more code running in calc.exe since 1999, still going. Posts and articles have source code and videos of my many projects, hundreds of posts.
Making and testing 284+ lisp variants, testing(15M+) not only for validity but for footprint and timing is not only easy to do but essential in small groups. No major decision in allocation means has been lost, they all still compete, and disparate means are combined in unforeseen ways. At any point in time we can see which combination of ideas gives us the fastest and/or the smallest footprint of lisp. No new build processes needed, I used make, a script( bash ) and another script( awk ) but anything like that will work. Snapshot link to bitbucket of private project build here=> https://bitbucket.org/timcdoc/manyworldsmake/ The build matrix looks like {cygwin,linux}x{arm7,x86_64,i686}x{32bits,64bits}x{alloc,master branches}x{debug,release,{debug*}}x{1,10 threads}x{typeless data,typed data}x{malloc,brick,atomic,array}x{x11,x11+audio,base no frills} Lots of these combinations were not foreseen by us but appeared as variants just from the closure, typeless atomic was one of these.
How was this accomplished? In the source code we macroized everything at the lower levels. The lisp code is no longer tied to any particular allocation specifics and doesn't know what is happening at the lower levels. Throwing defines in the build selects what to do in the macros. On the make side. A Makefile (296 lines) sits at the top calls into a build.sh (72 lines) which has awk generated included .sh files and calls back into the makefile a few tens of lines, that's it, no need for thousands of lines of cmake or other obscure things. I would encourage anyone to look at that bitbucket link above if interested in leveraging this idea for yourself. Following is an image of the master branch of make runs using make build This branch is lisp specific but 99.99% the same as the alloc branch, when development is done.