slower? OK sure.
We have GIGAHertz machines these days and smalltalk was originally working with decent performance on 8MHz boxes.
Now to be fair, ST has some tricks. One is that the very most common message sends to the most common objects are actually treated specially and implemented as byte code ops - its sort of the 80/20 rule. So for instance the #ifTrue: message
finished ifTrue: [ dosomething ]
is pedagogically implemented as a polymorphic message to Boolean with specializations in subclasses True and False - but this isn't how it *really* works. Instead the compiler generates special instructions for a small number of key messages (which you can change BTW). Loops are also treated specially.
Otherwise - yeah - there's a lookup. Its a pretty cheap lookup though.
Plus, having the methods in a method dictionary lets you do crazy things like create new kinds of scope, wacky fallback strategies, etc....
Smalltalk is an environment that will let you create pretty much any kind of programming model you like.