Smalltalk má z dnešního pohledu jednu velkou nevýhodu - nemá statické typování.
Alan Kay by tě asi za takové tvrzení sežral za živa. Statické typování se s objektovým modelem vůbec nesnese, to je zkrátka fakt, který vychází ze samotné podstaty objektového modelu. Statickým typováním se objektový jazyk neuvěřitelně zkomplikuje - stačí se kouknout na C++ nebo na Javu (a na jejich historický vývoj) a uvědomit si, které všechny konstrukce v těch jazycích jsou jen kvůli typům. Středobodem OOP není dědění ani zapouzdření, jak se s oblibou omílá jako mantra, ale polymorfismus, k němuž je nezbytná pozdní vazba. Na to je třeba mít proměnné spíše jen jako místa pro různé instance, ale není třeba je předem označovat visačkou typu, protože typová kontrola není v OOP zapotřebí - všechny ty objekty jsou dostatečně inteligentní entity k tomu, aby chybu vyřešily samy ad hoc podle momentálních okolností. Nebo vůbec nemusí jít o chybu - pokud několik různých nesouvisejících objektů rozumí stejné zprávě, tak neexistuje rozumný důvod, proč by měl objektový jazyk zakazovat umístit je do stejné proměnné. Typová kontrola mi tuto pozdní vazbu strašně ztěžuje. Prakticky jakýkoliv kus kódu ve Smalltalku je mnohem kratší a přehlednější než ten samý u Javy, o C++ ani nemluvě.
Jako největší výhoda statického typování se uvádí odhalení chyb při kompilaci. Ale to se dá řešit unit testy - a např. Smalltalk k jejich psaní nabízí mocné prostředky.
Stručně - statické typování vychází z myšlenky, že dopředu vím co s čím budu dělat, už v době kompilace. Objektový model ale vychází z přesně opačné myšlenky - že takovéto věci se rozhodnou až za běhu uvnitř objektů. Proto bude statický typový systém v objektovém jazyku vždycky představovat obrovskou kouli na noze.