[e-lang] Initial draft Caja design docs & library now available

Kevin Reid kpreid at mac.com
Sat Nov 3 17:52:06 EDT 2007

On Oct 11, 2007, at 21:41, Mark Miller wrote:

> The initial draft design doc is at
> http://google-caja.googlecode.com/files/caja-spec-2007-10-11.pdf
> At the moment, much of the substance appears only in the tables in  
> the back, sorry.

There are two problems with the serving of this file (and the later  
updated version):
   - A HEAD request erroneously returns 404 where GET does not.
   - The response contains 'Content-Disposition: attachment' (a hint  
that the file should be "downloaded" rather than viewed in the  
browser), which is in my opinion inappropriate for this document.

Comments on caja-spec.pdf:

Isn't the name capitalized "JavaScript"?

"Object references thereby become the sole representation of rights  
to effect the world"
-- should be "affect"

The second sentence in the footnote seems clunky; perhaps "ca" and  
"Ja" should be italicized to clarify why this is being said.

"No shared global scope."
-- The proper term is "environment". I would really like to see us  
stop propagating this misuse of terms, including in E.

(Example usage:

   function f(x) {
     return x * 5;

The scope of x is the function body, "return x * 5"; it is a lexical/ 
static property. The environment of that expression is, for the  
example call, {x: 10}; it is a runtime property.

"Crazy things" is a bit strong for eval.

The notation of Figure 2 is not explained; in particular, the dotted  

The inline circle symbols are too high and the arrows are too low;  
their centerlines ought to be the same.

The first circle mentioned in the text is (2) rather than (1); this  
is somewhat disconcerting.

"The (3)→(4) transition is not a technical change, but a change in  
where the user’s value resides, and thus a change in the user’s  
-- I think calling this a transition at all is not good, but I don't  
know what to say instead.

Related thought: Another improvement to passages would be to allow  
them to have stylesheets. One could define a rewriting of a CSS  
stylesheet such that all its selectors operate as if the passage is  
the root element.

"A web app, on detecting the presence of a powerbox, could offer to  
edit a local file chosen by the user."
-- I think "editing" is a poor choice of description, as it doesn't  
reflect what people think of web-apps as being useful for today; this  
is obviously a circular problem but I don't have a better example.

"The object-capability alternative naturally supports POLA, the  
principle of least authority, shown in the upper right."
-- add "of Figure 2" - my reaction was to look at Figure 4 which is  
in the upper right of this page.

"Browser compatibility. ... EC3." -- typo for ES3?

"(Imagine a frozen surface covering a liquid lake.)"
-- this metaphor seems worthless, as it conveys very little about the  
relation of the frozen objects to its components. Now if the surface  
ice had broken up into floating, mobile sections, that would be a  
vaguely useful metaphor, but rather convoluted.

"RegExp syntax" -- could the translation instead be something like  
"new ImmutableRegExp(/pattern/)", thus getting the "compilation"  
benefits from the implementation?

In pages such as 8 and 11, it is hard to find the beginning of the  
normal text, distinguishing it from the figures. It might help to  
reduce the margins above the captions, and increase those below.

> The untested first stab at a Caja runtime library that corresponds to
> this spec is at
> http://google-caja.googlecode.com/svn/trunk/src/js/com/google/caja/ 
> caja.js

For such a well-defined and error-prone task, it seems hazardous to  
me to write an implementation without aid of tests.

Kevin Reid                            <http://homepage.mac.com/kpreid/>

More information about the e-lang mailing list