Questioning the Assumptions Behind Symbolic Computation Systems
Software systems for symbolic computation are large-scale and complex, built on software stacks that span the gamut from machine instruction selection to web interface technology. Systems such as Maple, Mathematica and Reduce have code bases whose development can be measured in terms of person-centuries so, understandably, no-one is eager to rewrite such systems in their entirety. At the same time, these code bases have essential components that have not been significantly updated in decades. Many of the assumptions in their design are based on system characteristics that are no longer germane.
For example, memory characteristics and multiprocessing capabilities have changed significantly. Likewise, programming languages such as Rust, C++20, Julia and Typescript allow coding styles that were not possible when the large computer algebra systems were initiated. In this talk, we examine the assumptions behind the underlying layers of the computer algebra software stack, namely those of memory management and integer arithmetic. We explore the design space available today, and which choices might have the most impact in updating software systems.