…или почему
DynamicMemberLookup плавится под взглядом objc_msgSendМожет показаться, что Swift стремится быть «тоже динамичным».
Добавили
@dynamicMemberLookup, добавил @dynamicCallable — ну, почти Python! Почти ObjC! Почти магия!Но потом на сцену выходит Objective-C, закатывает рукава и тихо шепчет:
«Малыш, это не динамика. Это лишь синтаксический сахар.»
Потому что где Swift подменяет свойства через субскрипты,
Objective-C через
objc_msgSend прогуливается прямо по таблицам методов, меняет реализации на лету, отлавливает несуществующие селекторы, форвардит вызовы куда захочет и в целом живёт по принципу:«Если я хочу сделать это — я сделаю.»
В Swift ты получаешь аккуратную коробочку с инструкциями.
В Objective-C — набор динамита и спички.
И да, об этом всём я хочу написать в длинном посте на будущей неделе:
- про рантайм
- про isa
- про swizzling
- про Mirror
- про Swift runtime metadata
и почему у одного языка динамика настоящая, а у другого — сладкая.
Кстати, вопрос: какого формата посты больше нравятся? короткие-новостные? или детальные разборы?
Как в целом используете тг-каналы? Следить за новостями не погружаясь? Или каждо-дневное чтиво?
Буду рад, если дадите ОС.
Всем хороших выходных и отличного вечера пятницы. 😁
#L #objc #runtime #swift #dynamicMemberLookup #dynamicCallable
👏