Archive for March 6, 2005

Sunday, March 6, 2005

Adobe Open Source

Sean Parent on Adobe’s Adam and Eve libraries (via Brent Fulgham):

Adam is a modeling engine and declarative language for describing constraints and relationships on a collection of value, typically the parameters to an application command. When bound to a human interface (HI) Adam provides the logic that controls the HI behavior. Adam is similar in concept to a spreadsheet or a forms manager. Values are set and dependent values are recalculated. Adam provides facilities to resolve interrelated dependencies and to track those dependencies, beyond what a spreadsheet provides.

Eve consists of a declarative language and layout engine for constructing an HI. The layout engine in Eve takes into account a rich description of UI elements to achieve a high quality layout—rivaling what can be achieved with manual placement. A single HI description in Eve suffices for multiple OS platforms and languages. This document describes Eve2, the latest version of Eve. Eve2 was developed to work with Adam and to incorporate many improvements that have been requested since Eve1 was written.

I am convinced that writing correct, high performance, and feature rich systems can be orders of magnitude simpler than it currently is. By my estimate, 70% of Adobe’s current code base could be better represented declaratively.

It’s interesting to compare Adobe’s approach with Adam to Apple’s with Cocoa Bindings. It used to be Apple that favored ambitious, heavyweight solutions, and then had trouble getting them adopted. Bindings are lightweight and can be incorporated incrementally, but their uses are more limited and they’re probably less scalable.