Ответ 1
Что это значит?
Компилятор Swift отмечает аргументы функции по ряду причин, в основном связанных с внутренней оптимизацией. По вашему вопросу, мы сосредоточимся на mangler, как на том, что способствует вашей красивой трассировке стека, и на Node Printer. На момент написания этой статьи у менеджера по специализации функций было 6 отметок, которые можно применить к аргументу:
-
мертв
Аргумент не используется в теле функции и может быть удален в ходе удаления мертвого аргумента.
-
закрытие
Аргумент является закрытием и может потребовать дальнейшего искажения/разборки.
-
постоянная
Аргумент является константой.
-
Принадлежит к Гарантированному
Аргумент вызывающей стороны передает право собственности вызываемой стороне. Аргумент, таким образом, имеет сильную ссылку, связанную с ним [вызывающим абонентом], и он гарантированно переживет вызов, поэтому компилятор позволяет вызывающему абоненту исключить передачу и вместо этого агрегат сохраняет себя.
-
SROA
Скалярная замена прохода агрегатов должна оптимизировать этот аргумент.
-
В Out To Value
Параметр был отмечен как inout, но вызываемый объект на самом деле не изменяет его.
AST Node Printer добавляет еще одну марку
-
взорванный
Значение поставляется со схемой взрыва, которая была реализована, когда был сделан вызов.
Для всех целей и задач мы заботимся только о Dead
, Owned to Guaranteed
и Exploded
.
Единственное, что все еще может казаться загадочным, - это " Exploded
. Explosion - это оптимизационная конструкция, используемая компилятором Swift для определения стратегии распаковки значений из небольших структур и перечислений в регистры. Таким образом, когда Node Printer сообщает, что значение является Exploded
, это означает, что оно уже распаковало значение в регистры перед вызовом.
это имеет значение для целей отладки?
Нету.