It's Like Déjà Vu All Over Again
"You could probably waste an entire day on the preceding links alone. But why take chances? We also give you Paul Snively..." — John Wiseman, lemonodor
Trampolined Style. Trampolined Style, Steven E. Ganz, Daniel P. Friedman, and Mitchell Wand, ICFP 1999.
I was sure this paper was linked here before, but I can't seem to find it.
Since two of my students recently needed this paper for projects they are doing, I decided it may be of interests to loyal LtU readers.
A trampolined program is organised as a single loop in which computations are sechduled and their execution allowed to proceed in discrete steps.
Trampolining can be used as a way to avoid stack-overflow in interpreters written in languages not supporting proper tail-calls. More interesting uses are for debugging (stepping, breakpoints etc.) and multithreading. These can be based on trampoilining the interpreter, or the program itself.
I'm not sure about this, but isn't "trampolining" also used to describe the process of integrating a new function call site into existing code? I associate it with object systems "trampolining" a new method into place that shadows an older one, as in the PCL implementation of CLOS. I wonder if the concepts are related, or it's just an accidental terminological collision.
11:43:58 PM
Recent decisions by major J2EE app server vendors to extend J2EE in proprietary directions has made official what has been known for a long time[sigma]the promise of Java is now dead.
Mainly about BEA's WebLogic specific Cajun framework, but also about IBM WebSphere 4.0 and Oracle 9iAS.
This is just ridiculous. You have to wonder whether the author has ever actually worked in a J2EE shop. App-server vendors adding proprietary extensions to standards-compliant systems isn't a deathknell. Nor is the fact that standards, especially new ones, have gaps. But I have exactly the same J2EE system on my iMac as on my Win2K box at work as on one of the Solaris boxen at work. "Write once, run anywhere" is far from an unfulfilled promise, and the promise of Java is far from dead.
11:34:52 PM
The technique is based on three well-known transformations that can be done automatically: conversion to CPS, lambda lifting, and defunctionalization. These partition the the program into separate interactive steps, so computation can halt conveniently between them. Small changes then convert the program into a standard CGI script.
As always, fascinating stuff. I wonder if there's some way to automate this approach for Java, to ease the pain of server-side Java development. It would be pretty tricky to figure out how to map certain traditional constructs to, say, EJBs etc. though.
9:37:11 PM