Okay, this isn't quite a lazyweb request, and I should probably post this in the forum at
Lambda-the-Ultimate and reveal my ignorance to all. You see, I love programming languages, and the theory behind them, especially semantics and type systems. Unfortunately, I know enough to be a great BS artist. As with most autodidacts, there are big gaping holes in my knowledge. So, I will likely get some crazy terminology below.
Okay, so one "cool" thing about a language with tuples and pattern matching is that you can envision every function as a function of one argument, and through a visual "trick" the parenthesis around the arguments actually makes the arguments a tuple literal, which is the one argument to the function.
Now, let's look at message passing, if we were concerned with type safety, our messages would likely have some notion of the "type" of receivers it can be sent to. And the message itself is also a tuple(much like the parameters to a function call). Now, if we were representing this in Java, we might use an interface like this:
net.metanotion.util.Message. Now, the key innovation here for type safety is that it has a method called send(O o) which calls the function of objects of type O that represents the message, and, internally, it makes sure the arguments are passed in.
So, here's the BS artist at work: Is the difference between a message like this, and a "struct" the notion that the message has a hole in a context? Is this related to differentiation(in the calculus sense of differential) of types?
Furthermore, let's say I wanted to make a language expressing interfaces, structs, and messages, it seems that there is some harmonious union between these concepts that I want, but I can't, for the life of me, figure out how to name it and express it. The idea that a struct and a message are, in some sense, "duals" of each other(i.e. the same yet, different)? Also, the idea that my message objects represent a form of laziness in an otherwise strict setting(by convention, my message objects take arguments in the constructor, and store the parameters to the call in private final instance variables, and it is only by calling send/call that you "force" the evaluation, potentially multiple times with different contexts(the parameter)?
I would very much like to have a conversation with someone about this(
sstrickl, or
shae come to mind... hi guys! :) )...