Вот немного интересной информации по теме диспатчей) developer.apple.com/swift/blog/?id=27 betterprogramming.pub/a-deep-dive-into-method-dispatches-in-swift-65a8e408a7d0 developer.apple.com/videos/play/wwdc2016/416/
Вопрос по Virtual таблице. В указанных таблицах на 6:04 указаны одинаковые адреса для Parent & Child (0xA00). Было сказано, что таблица копируется от родительского для дочернего класса. Но не должны ли поменяться адреса для самих таблиц? Условно в таблице Parent адрес для someMethod это 0x121, что будет происходить когда в рантайме будет триггер этой функции и она пойдёт по адресу таблицы? Ранлуп будет обрабатывать 0xA00, он дёрнет метод по 0х121, хотя вызов был из дочернего класса. Опечатка или фича? Подскажите, пожалуйста, интересно
Спасибо за разбор темы. Там так же приведён важный параметр - относительное время на диспетчеризацию, чтобы понимать примерные масштабы и не терять голову с оптимизациями там, где это не требуется. И остался вопрос - не изучили ли вы методы определения диспетчеризации? Вижу только один способ - просмотреть сгенерированный assembler'ный код. Но может есть у XCode встроенный инструмент, юзающий Swift Intermediate Language?
а что, если структура/массив превышает размер 6 байт? из стека в хип перемещаемся. ненужная инфа, понадобится только на собесе) про свизлинг молчу, он применяется обычно для исправления багов иос) свизлинг в свифте? не видел
Так как методы из extension нельзя переопределить, они будут иметь всегда одну реализацию. Компилятор знает, что реализация метода в extension будет одинаковой для всех экземпляров этого типа данных. Поэтому, компилятор может принять решение о вызове этого метода на этапе компиляции, что является признаком статической диспетечеризации.
Вот немного интересной информации по теме диспатчей)
developer.apple.com/swift/blog/?id=27
betterprogramming.pub/a-deep-dive-into-method-dispatches-in-swift-65a8e408a7d0
developer.apple.com/videos/play/wwdc2016/416/
Лучшее видео о Dispatch
пересматриваю иногда когда начинаю забывать и путаться, все встает на свои места)
Очень круто! Без воды, все кратко и по существу!
Спасибо, передадим спикеру)
Спасибо! Перед собеседованием освежить память, самое то!
Спасибо большое! Кратко и понятно, с примерами, наконец в голове уложилось)
Заходите к нам еще)
разьеб , топ объяснение ! спасибо
Спасибо за понятное объяснение)
Лайк перед просмотром!!!
Классная идея с примерами для самопроверки
Коротко и просто. Спасибо!
Спасибо, заходите к нам еще)
Очень круто, самое лучшее объяснение
Спасибо, мы старались)
Офигенное видео, спасибо большое
Спасибо, заходите к нам еще)
Не знаю почему, но она мне нравится)
Вопрос по Virtual таблице. В указанных таблицах на 6:04 указаны одинаковые адреса для Parent & Child (0xA00). Было сказано, что таблица копируется от родительского для дочернего класса. Но не должны ли поменяться адреса для самих таблиц?
Условно в таблице Parent адрес для someMethod это 0x121, что будет происходить когда в рантайме будет триггер этой функции и она пойдёт по адресу таблицы? Ранлуп будет обрабатывать 0xA00, он дёрнет метод по 0х121, хотя вызов был из дочернего класса.
Опечатка или фича? Подскажите, пожалуйста, интересно
Спасибо!) очень понятно
Спасибо, заходите к нам еще)
Спасибо! 🙂
Спасибо за разбор темы. Там так же приведён важный параметр - относительное время на диспетчеризацию, чтобы понимать примерные масштабы и не терять голову с оптимизациями там, где это не требуется.
И остался вопрос - не изучили ли вы методы определения диспетчеризации? Вижу только один способ - просмотреть сгенерированный assembler'ный код. Но может есть у XCode встроенный инструмент, юзающий Swift Intermediate Language?
Возможно тупой вопрос, но почему witness только у эпла, ведь у других языков есть "интерфейсы" (это же аналоги протоколов?)?
👍
о каких статьях она говорила?
Можно еще прикрепить свой гитхаб
Интересно
А где обещанные ссылки на литературу?
Доброго дня. Поместили ссылки в заклепленном комментарии.
а что, если структура/массив превышает размер 6 байт? из стека в хип перемещаемся. ненужная инфа, понадобится только на собесе) про свизлинг молчу, он применяется обычно для исправления багов иос) свизлинг в свифте? не видел
не хватает немного как диспатчатся дженерики
Мерси!
Почему если мы используем метод из экстеншна класса это будет статическая диспетчеризация ??
Так как методы из extension нельзя переопределить, они будут иметь всегда одну реализацию. Компилятор знает, что реализация метода в extension будет одинаковой для всех экземпляров этого типа данных. Поэтому, компилятор может принять решение о вызове этого метода на этапе компиляции, что является признаком статической диспетечеризации.
Понял, спасибо 🔥
О как мы за 30 лет далеко ушли
!!
что за пришельцы на фоне