|
|
|
|
|
by dmm10
1257 days ago
|
|
I believe Alan drew his observation of the 'value rule' from work on ASP, Analytical Spreadsheet Package - a part of Analyst, done in the Xerox Special Information Systems Group. This system is also interesting because it used blocks (aka. closures - the object version of lambdas) as the formulas for cells as pointed out by Kurt Piersol's article in the OOPSLA '86 proceedings, https://dl.acm.org/doi/10.1145/28697.28737 . Spreadsheet rules (or formulas) in The Analyst are kept as Smalltalk blocks. A block is a common Smaiitalk object class which allows a section of compiled code to be kept as an object. They can be passed as arguments and stored as variables. Obviously, they are an ideal choice for rule storage and execution, since they allow the rules to be directly executed by Smalltslk at compiled speeds. The description of ASP (and the Analyst package from which it was split out as a separate product) can be found at http://www.bitsavers.org/pdf/xerox/xsis/XSIS_Smalltalk_Produ... . Of interest is the example of dropping a bitmap image into a cell and having an adjacent cell display the next generation of the game-of-life run on that initial cell. (That as opposed to having each spreadsheet cell in a region represent a cell in a game-of-life automata.) As to homoiconicity, I wouldn't be surprised if Alan didn't at some point have a Smalltalk project window running full screen that was imbedded in a cell of a spreadsheet which was running in a Smalltalk project window within the Smalltalk environment. It's the kind of thing I saw him demonstrate as an aside during presentations as he popped out of the full screen project window which the audience had assumed was the root Smalltalk environment rather than a nested environment. What is a cell or window but a live code object running in the language environment after all? |
|