I was reading the chapter in Programming In Scala that introduces
actors. It noted that it is a good idea to use named types for messages as
opposed to basic types like tuples, arrays and lists. This makes it easier
to locate an actor who could possibly process the message. Sound advice.
However, I was struck by the fact that if you expose Actors as part of an API,
that part becomes effectively untyped (or "duck typed" in popular parlance).
I was struck further by the fact that almost all of the Erlang code to which
I have been exposed uses tuples with wild abandon. Of course, Erlang is
mostly untyped so that should be no surprise. Scala, at least, offers
machinery to prevent dynamically typed signatures from escaping a module
boundary (for example, by making sure an implementation has-a actor
instead of is-a actor).
As a final bit of irony, I observe that Smalltalk's message selector syntax
offers a pretty decent solution for identifying objects that can handle
(synchronous) messages -- provided you choose a name more distinctive than
at: or at:put:. The irony lies in the fact that Smalltalk is
frequently held up as the prototype for duck-typing. I wonder if
Smalltalk's message selector syntax arose to solve the very problem of searching
for methods?