AFC - Abacus Formula Compiler for Java

Developer’s Journal

This is an unstructured journal regarding the development of AFC. I use it to keep track of ideas, goals and discussion notes. Note that the former name of AFC was SEJ (Spreadsheet Engine for Java).

Check the release notes for what’s already been done.

November 2007

Nov 06

Refactoring the Reference Tests – Goals: ...more

October 2007

Oct 16

Typing, Rewrites, and Transforms – Currently, AFC transforms the computation model constructed from the spreadsheet as follows: ...more

August 2007

Aug 17

SUM and DSUM, etc. – The definition of the plain and the database aggregators should really be the same. What I need is a fold/reduce operation that applies equally to plain and database aggregations. ...more

Aug 08

Implementation of LOOKUP, MATCH, and INDEX – The LOOKUP function, and its foundations MATCH and INDEX, are likely to be heavily used in Abacus’ financial applications. So they must be implemented efficiently both space- and runtime-wise. ...more

May 2007

May 25

Scale vs. Precision with BigDecimal EnginesAFC currently uses a fixed scale for BigDecimal computations. For anything more complicated than basic addition, subtraction and multiplication, a minimum precision seems more desirable. Problem is, Abacus uses fixed scales internally, too. What do we do? ...more

May 16

Who Parses Function Names? – We have been running against a table size limit in CUP. So I replaced CUP by JavaCC. With great results so far. ...more

April 2007

Apr 24

Modules and IDEs – I have implemented the internal modularization as described earlier on. However, I have not split the project up into modules. Here’s why. ...more

January 2007

Jan 22

ModularizationSEJ is quite nicely modularized in theory. In practice, though, there are a number of problems in the current project setup. ...more

December 2006

Dec 29

Decompiling Generated Engines – The design document makes “trustworthiness” a major goal of SEJ. It suggests that SEJ should, in parallel to the default byte-code generator, include a source-code generator. This would allow users to inspect the code SEJ generates for their spreadsheets. Maybe the JODE Java decompiler can get us this feature for free. ...more

Dec 18

Vector Operators – I just discovered that Excel supports vector operators. Both combinations of vectors and scalars are supported, as well as combination of vectors with vectors (which are pairwise operations returning another vector). ...more

Dec 15

Ranges Overlapping Section Bounds – I have started to implement support for DFOLD() over dynamic sections in the data. For this to work reasonably, I have to first support range references that overlap section bounds. This is because DSUM() et al. only take a single range reference in their arguments. ...more

Dec 14

XmlProc – I have had an idea for a very convincing demo application for SEJ (I think). It is a batch processor that transforms XML data using a spreadsheet-defined computation. See here. ...more

Dec 14

Dynamic Sections and External Data – I recently discovered a little feature in Excel that might point the way to an explicit representation of dynamic sections. When importing external data, you can set the flags “Fill down formulas in columns adjacent to data” and “Insert entire rows for new data”. Imported XML data is even better. ...more

Dec 05

Database Functions – I have started implementing the database functions like DSUM(). Here I intend to sketch out the cases SEJ is going to support, and how. ...more

November 2006

Nov 29

Array Functions – I am implementing IRR( values [, guess] ) and similar functions to see what new expression language and/or template function constructs are needed to support this kind of function. IRR is a function that takes a range of values in its first argument, has a second, optional argument, and is, internally, an iterative solver. This poses a number of new (or not so new) problems. ...more

Nov 22

Robust Engine Storage – I have decided that SEJ’s current engine storage format (a .jar file) is robust enough to let SEJ evolve while maintaining compatibility with existing engines. Contrary to my earlier thoughts, I also don’t think SEJ should store a description of the engine in the .jar for helping with problem diagnosis. Here are my reasons. ...more

Nov 17

Repeating Sections and Caching – Right now, SEJ mandates caching for engines with repeating sections. This is because, internally, SEJ constructs an array of section element engines for every element in a repeating section when the section is first accessed. This is a cache, and so SEJ mandates Resettable on your output interface. ...more

Nov 16

Common Sub-Expressions In Large Sheets – The following sheet, while grossly oversimplified, seems to be a very typical sheet for the insurance models used by insurance companies (a relative of mine is a mathematician at one of them). The typical things are the large table and its inhomogeneity (in practice, the tables are much larger than the one here). This is not a simple repeating section with a perfectly homogeneous structure. ...more

October 2006

Oct 03

Generating Compilers – I have started to write the hacking docs. As usual, having to explain things made me realize how important it is to make them as simple as possible. Right now, when you add a new function to SEJ, you have to ...more

Older Entries

...can be found here.