The DylanLanguage and the SelfLanguage are two of the purest ObjectOrientedProgrammingLanguages. Here's the feature set:
Both
And blocks are great, but it might be even better with true anonymous functions.
[Blocks are anonymous functions, so what do you mean by that statement? Can you elaborate?]
Dylan's type system is only optionally static. Just as in CommonLisp, you may choose to put type annotations in your code, or you may choose not to. MessagePassing is a subset of MultipleDispatch; calls that dispatch only on the invoked object can be viewed as message passings. Thus, Dylan has MessagePassing.
It's only MessagePassing in the ProgrammingLanguage sense we're used to from SmalltalkLanguage etc. MessagePassing also refers to a concurrency model based on sending asynchronous messages, which Dylan does not support (it could in theory, but last I read, Gwydion had problems just supporting threads, let alone asynchronous message passing). See ActorsModel and MessagePassingConcurrency, also AlanKayOnMessaging.
See also IoLanguage.