Kartik Agaram
...all design elements be exposed in a structured space of publicly addressible names...In more detail:
We propose an aggressive program to assimilate the functions of traditional programming languages and their component systems, by stratifying them vertically into two parts:
* On top, an integration domain which encodes not only relations between runtime values, but also the structure of any adaptations expressed in the “virtual class” idiom seen in section 4.3, using the selector structure described in section 6.1.1 to predicate the addresses of these relations and the targets of these adaptations. In order to retain the symmetry implied by our “algebra of differences”, all component structure is expressed within the integration domain, that is, it encodes all classes as well as virtual classes.
* Below the integration domain, then, remains a highly impoverished language dialect that just consists of free functions which express any remnant computation that could not be effectively expressed in the integration domain. The free functions in the impoverished language are addressible through stable names in their own global namespace, and each of them obeys the Law of Demeter strongly, in that they are pure functions of their immediate arguments.
...assimilating the power of reference to the addresses of state into an integration domain which is incapable of computation...[1] Promoted from https://futureprogramming.slack.com/archives/C5T9GPWFL/p1543845454059000?thread_ts=1543729043.042700&cid=C5T9GPWFL
Bosmon
12/08/2018, 11:33 AMKartik Agaram
Kartik Agaram
.h
file that doesn't include implementations, or a Java .class
file distributed in binary form with just APIdoc-generated comments. Whereas you're assuming that you can see inside classes, you just can't (or choose not to) modify them directly. Which leads naturally to the DOM model of hanging listeners and overrides on the skeleton of a given set of classes. I wonder if this distinction is worth explicitly drawing out. Otherwise you're bringing in distracting associations for your reader. (I've had this issue with past papers as well, now that I think about it.) This sort of reasoning is why I lately try to avoid the terms 'reuse' and 'abstraction' (and a few others).
The statement of the principle at the start didn't immediately paint a crisp picture in my mind. It wasn't obvious why "fire up your text editor and modify a few lines of code" was not following the principle. (https://xkcd.com/722 came to mind.) At the same time, I could imagine other readers with a different background seeing it and thinking, "this is why we have late binding/dynamic dispatch/polymorphism/inheritance/..." So depending on the reader, the principle as stated will seem either trivially satisfied or a nice ivory-tower goal but not very actionable.
By the time you return to it in section 5, my sense of your meaning is a lot more rich. But perhaps you should start with a problem rather than the principle? Hmm, which arguably is what you're doing in sections 2-4, but I didn't realize that at the time. Maybe you need to condense the problem down a bit?
Speaking of that, I found Table 2 quite confusing. Coming from a Lisp background, I found myself wondering if you were just looking for some maximally-flexible way to specify lexical and dynamic scope. It was only when I got to section 3.3.2 that I realized that β
may be deep inside the implementation of α
. The colons obfuscate that because they make the pattern seem like a superficial use of an existing type.
2. It's hard to discuss a general term like 'reuse', particularly after bringing up economic considerations, without causing me to wonder precisely what is difficult about modifying some code directly rather than adapting or extending it. Might the paper benefit from a focus in a specific language's operational eco-system? For example, if you were speaking in terms of Python you'd be able to say something concrete like, "it's useful not to modify alpha directly because it comes from a package downloaded from pypi and you don't want to fork the upstream package and be responsible for merging in all future changes." Newspeak or Beta may have different reasons, and I'm not familiar with their eco-system. Why is it not an option to modify these classes directly? What exactly causes the network horizon in these situations? (I have my own answers to these questions, but I'm not sure if my answers match yours.)
3. A slightly less subtle way to beat my own drum:
...“available for use” meant that a module’s content should not be modifiable by its consumers, promoting uses such as caching, verification, etc.Can we verify use even in the presence of modification, based on type checks, contracts, ahem tests, etc.?
Bosmon
12/11/2018, 11:26 AMBosmon
12/11/2018, 11:47 AMKartik Agaram