(define (makepoint x y) (list (lambda () x) (lambda () y) (lambda (ot) (makepoint (+ x ((car ot))) (+ y ((cadr ot))))))) ((caddr (makepoint 3 6)) (makepoint 4 9)) ((car ((caddr (makepoint 3 6)) (makepoint 4 9)))) ; => 7The text “makes the properties of its argument read-only” stumped me until I finally recalled the peculiar and awkward JavaScript construct where objects may be decorated with a mutable map of strings to values, called ‘properties’. I imagine the logic of the primitive def function presumes there is no utility in maps being mutable. That’s OK with me; I think there is no utility in those maps. I think that in the phrase “all objects transitively reachable from there by reading properties” the sub phrase “reading properties” might need to be extended to ”reading properties and bindings of free variables found in obj”. I am confused here. Who calls “def”? Perhaps the maker of obj. That is the person, presumably, with write access to the code defining obj. If that code refrains from xxx.
There is much work here disabling the spurious JavaScript facilities! I would be curious to know how much use properties are put to in the world.
It sounds like the WeakMap is very much like the Key Indexed Directory of Keykos used by T. It is an efficient form of synergy. The description speaks of “object-identity”. I think that suffices here because ‘object references’ in JavaScript do not include ‘rights’ as are often found in capabilities. Markm considers caps with different ‘data bytes’ (or ‘facet ids’ to be to different objects.) Cap systems often allow ‘rights’ within a cap and caps to the same object with different rights are not equal. Thus the KID index is the cap, and not the identity of what it ‘designates’. Perhaps languages should consider including ‘rights’ in object references not because it adds to expressivity, but because it is sometimes very efficient. [[They do via v-tables!! but that is slightly heavy and slow]]
Section 2.4 is a better synopsis of browser logic than I have found. I still need more. Perhaps it should say “shared nothing mutable” rather than “shared nothing”. Markm tells me the phrase comes from Erlang.
“Q thus extends JavaScript …”: ‘Q’? Look ½ page ahead for subroutine.
I find the semantics of Q confusing. I do not see how such an action can happen in an event loop system. I thought the stack had to be empty when communication happened. Perhaps Q is not a normal subroutine.
Somewhere you might need to say that all identifiers are in some outer scope. This is actually in contrast to the ‘global’ notion. I remember being surprised at this first with Algol 68. ‘Global’ is still a good short cut.
Regarding confine: Since the native language of Keykos is machine language, the operation corresponding to confine is to set a new domain about executing the exprSrc argument, with access to an array of keys to the elements of endowments. I presume that dangerous JavaScript functions can be shadowed by the endowments.
I think that a property belongs not to a symbol but to an object. I think that a property of an object serves as a method on that object. I spent some time with the ES6 manual and could neither confirm nor refute these.
Also that manual does not explain promises.