<bigwig>
<bigwig> is a domain-specific language for web development that includes statically-checked, higher-order templates and a “session-based” model of a web interaction as a single, coherent flow-of-control. Through flow-based analysis, <bigwig> programs are statically checked for template consistency — for example, that a template includes an expected form field name — and HTML validity. <bigwig> is implemented with a custom Apache module that allocates and maintains a server process for eachuser session.
Though its support for form-based interaction is strong, <bigwig> is unsuitable for content-focused web applications because of its limited support for custom hyperlinks. It provides a “document reference” operator that allows one template to contain a hyperlink to another, forming a — potentially cyclic — “document cluster” of the templates. These clusters must be comprised of templates in the same scope that have identical form elements. <bigwig> has no analogue to
send/suspend/dispatch
.<bigwig> has coped with the lack of backtracking in its linear, process-based model of interaction by disallowing the back button in users’ browsers. It accomplishes this by always redirecting the user’s brower to a consistent URL that identifies the session, while the content at that URL changes dynamically. The session only generates a single entry in the browser’s history, so if the user clicks “back,” the browser will go to the page that immediately preceeded the start of the session. We believe this solution is unsatisfactory because it does not conform to users’ expectations of back button behavior, and eliminates the common use and usefulness of the back button as an “undo” for intermediate steps in web interactions.
JWIG, the Java-based successor to <bigwig> is based on, and compatible with, standard Java, and is implemented with a combination of Java libraries and a preprocessor that converts the JWIG language extensions into standard Java and performs the static verifications.
Attractions
- Custom high-level, domain-specific language that compiles down into server- and client-side implementations
- Sessions are explicit… but do they have environments?
- Temporal logic and other static analysis
- “Session-centered” approach, which means non-CPS web programming
- Uses suspended threads to simulate continuations
- Flow analysis to make sure templates are constructed correctly from fragments
- Allows for “simple” inline templates to be automatically replaced by more elaborate external versions (presumably written by a web designer)
- Nifty sub-page caching of templates (though it requres JavaScript and eliminates searchability)
- Handles compiling validation code into both client- and server-side versions, including an extension to regular expressions that supports binary decision trees (for form validation that spans several fields)
Detractions
- Superceded by JWIG
- Punts on the back button. Disallows it. Says bookmarking is stupid. Tells you to write your own back functionality if you really want it. Usability score: -89.12
- Template fragments cannot contain closures. “Code fragments” can only reference global methods and variables. (Though they don’t really have any higher-order functions.)
- Not much support for arbitrary graphs of pages and links (i.e.: what you’d need for a CMS or blog)