Несколько возможных причин для этого. Одна из них заключается в том, что мы не удосужились использовать квалификатор «IoC», который по существу избыточен - поскольку вызов чего-либо в среде подразумевает инверсию потока управления.
Другое - то, что язык Smalltalk обеспечивает прямую поддержку потоков «IoC» - в форме замыканий. Один из результатов программирования с замыканиями заключается в том, что поток управления, который обнаруживается в каркасах, не кажется настолько разным, чтобы вызвать ощущение «инверсии» от «нормального» чувства потока; скорее, с замыканиями, поток контроля перемещается взад и вперед между этими двумя перспективами все время и везде. Даже в пределах одного высказывания.
Третья причина, возможно, заключается в том, что даже без замыканий описываемая "инверсия управления" не связана однозначно с фреймворками - одни и те же потоки встречаются в большинстве форм кода, которые включают ввод / вывод.
В-четвертых, Smalltalkers, вероятно, используют такие потоки даже больше, чем другие, поскольку мы в большей степени опираемся на представления об объектах и сообщениях, передаваемых между ними, чем на понятия структур и вызова функций-членов. В отсутствие замыканий эти два представления эквивалентны и взаимозаменяемы, но добавление замыканий меняет результат - чувство потока управления при использовании является одним из эффектов.
Наконец, можно даже подумать об описании стиля управления потоком REPL как о «более простом», но «перевернутом» смысле «нормального» потока, нормального в том смысле, что он используется почти везде.
Таким образом, для Smalltalk существуют такие же фреймворки.
Мы описываем их немного по-другому, это все.
Разница, по крайней мере частично, связана с наличием и использованием
замыканий в Smalltalk, которые многие другие среды пока не предоставляют -
- особенно C ++, C # и Java.