История изменений
Исправление den73, (текущая версия) :
Похоже, что для реализации плохо то, что если у нас переменная типа «Предок», то это означает «Предок или его любой Потомок» и мы не можем убрать VMT для вызова Предок::ВиртуальныйМетод.
Но это скорее проблема языка, в котором нет разницы между «В точности Предок» и «Предок или его любой Потомок».
Достаточно добавить в язык возможность определить переменную типа «В точности Предок» - и можно избавиться от VMT во многих случаях.
Исходная версия den73, :
Похоже, что для реализации плохо то, что если у нас переменная типа «Предок», то это означает «предок или потомок» и мы не можем убрать VMT для вызова Предок::ВиртуальныйМетод.
Но это скорее проблема языка, в котором нет разницы между «Ровно Предок» и «Предок или Потомок».
Достаточно добавить в язык возможность определить переменную типа «Ровно Предок» - и можно избавиться от VMT в тех случаях, где у нас «Ровно Предок».