1) а может есть у кого под рукой материалы про direct dispatch\table dispatch? Можно с dynamic dispatch
Разницу я примерно понимаю
Однако не понимаю почему при всей своей строгой типизации свифту необходима виртуальная таблица методов для классов
2) правильно ли я понимаю, что в частном случае при продовой компиляции, компилятор увидев отсутствие наследование у тех или иных классов автоматом подставит им "final" заставив таким образом юзать static dispatch и заставлять программистов писать везде final при разработке НЕ либы в принципе бессмысленно?
если ГРУБО, то:
при статической в коде у нас будет
вызвать метод по адресу <определенный адрес>
т.е. здесь уже будет зафиксирован адрес метода, другой метод мы вызвать уже не можем
при табличной
получить адрес метода из таблице по индексу, а потом вызвать метод по адресу
а здесь будет только лишь зафиксирован индекс в таблице, а адрес метода мы будем получать по индексу
таблицы одного семейства объектов одинаковые (то что отнаследовано от родителя понятно), а вот в зависимости от объекта, адреса методов будут меняться, что позволит вызывать метод только того объекта который в данный момент нам предоставлен => полиформизм в действии
2) да, по умолчанию для релиза в настройках стоит режим Whole module, при таком режиме компилятор везде где можно сделает классы финальными что приведет к тому что для методов этого класса будет юзаться static dispatch