Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SwiftのDemanglerを書く @ わいわいswiftc番外編
Search
ukitaka
December 15, 2018
Programming
500
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SwiftのDemanglerを書く @ わいわいswiftc番外編
ukitaka
December 15, 2018
More Decks by ukitaka
See All by ukitaka
あなたの知らない「動画広告」の世界 - iOSDC Japan 2025
ukitaka
0
1.8k
CSの生産性改善を支える分析環境 Mercari CS/CRE Tech Talk #1
ukitaka
1
3.1k
switchのexhaustiveness/redundancy チェック 理論と実装 わいわいswiftc #8 @ukitaka
ukitaka
0
260
Swiftの型システムに入門する - iOSDC Japan 2018
ukitaka
10
7.4k
Responder Chainを使って コードをスッキリさせたい - 第1回 HAKATA.swift
ukitaka
6
1.5k
理論から入門するswift/lib/Sema - わいわいswiftc #1
ukitaka
5
1.8k
Realmの処理を再利用可能かつ合成可能にする
ukitaka
0
990
マルチスレッドRxSwift @ 社内RxSwift勉強会
ukitaka
5
1.3k
今日こそ理解するHot / Cold @社内RxSwift勉強会
ukitaka
14
3k
Other Decks in Programming
See All in Programming
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
220
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
200
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
200
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
1
1.2k
霧の中の代数的エフェクト
funnyycat
1
450
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
150
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
300
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
290
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
1
3.3k
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
3.4k
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
380
Google Apps Script で Ruby を動かす
kawahara
0
130
Featured
See All Featured
Google's AI Overviews - The New Search
badams
0
1.1k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
790
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
670
Paper Plane (Part 1)
katiecoart
PRO
1
10k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
520
Speed Design
sergeychernyshev
33
2k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
820
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
270
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
エンジニアに許された特別な時間の終わり
watany
108
250k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Transcript
Θ͍Θ͍swiftc൪֎ฤ @ukitaka SwiftͷDemanglerΛॻ͘
ࠓͷඪ
$S13ExampleNumber6isEven6numberSbSi_tF isEven(number: Int) -> Bool Ψν
Mangle / Demangleͱ Mangleͱ $S13ExampleNumber6isEven6numberSbSi_tF ExampleNumber.swift ͷ isEven(number: Int) ->
Bool
Mangle / Demangleͱ Demangleͱ $S13ExampleNumber6isEven6numberSbSi_tF ExampleNumber.isEven(number: Swift.Int) -> Swift.Bool
Mangle / Demangleͱ Mangle͞ΕͨγϯϘϧ໊Λ֬ೝ͢Δ $ swiftc -emit-sil Examples/ExampleNumber.swift
Mangle / Demangleͱ Mangle͞ΕͨγϯϘϧ໊Λ֬ೝ͢Δ $ swiftc -emit-sil Examples/ExampleNumber.swift
Mangle / Demangleͱ SwiftͷDemangleίϚϯυ $ swift demangle '$S13ExampleNumber6isEven6numberSbSi_tF' $S13ExampleNumber6isEven6numberSbSi_tF —>
ExampleNumber.isEven(number: Swift.Int) -> Swift.Bool
Mangle / Demangleͱ SwiftͷDemangleίϚϯυ $ swift demangle '$S13ExampleNumber6isEven6numberSbSi_tF' $S13ExampleNumber6isEven6numberSbSi_tF —>
ExampleNumber.isEven(number: Swift.Int) -> Swift.Bool ࠓ͜ΕΛ࡞Γ·͢
Demangler Demangler ▸ Demanglerͷ࡞Λ௨ͯ͠ҎԼΛֶ΅͏ ▸ SwiftͷManglingͷΈΛֶͿ ▸ ؆୯ͳParserΛ࡞͢ΔͷͰɺParserͷςΫχοΫΛମݧͰ͖Δ
Swift Demangler workshop ՝ʹ͍ͭͯ ▸ جຊ֤ࣗREADMEΛΈͳ͕ΒਐΊͯΒ͍·͢ ▸ ՝1ʙ5·Ͱ͋Γɺ՝1Λશһ͕ୡ͢Δ͜ͱΛඪʹ͠·͢ ▸ ՝1ʹαϙʔτ͕͍ͭͯΔͷͰɺͦΕΛΈͳ͕ΒͬͯΈ·͠ΐ͏
▸ Ͱ͖ΔਓͲΜͲΜਐΊͯΒͬͯେৎͰ͢ ▸ ಛʹ5ͷsubstitutionॏཁͳͱ͜ΖͳͷͰ
՝1
Swift Demangler workshop ՝1 $S13ExampleNumber6isEven6numberSbSi_tF ExampleNumber.isEven(number: Swift.Int) -> Swift.Bool
Swift Demangler workshop ՝1 $S13ExampleNumber6isEven6numberSbSi_tF SwiftͷMangle nameʹڞ௨Ͱͭ͘Prefix
Swift Demangler workshop ՝1 $S13ExampleNumber6isEven6numberSbSi_tF ؔΛMangleͨ͠ͷͰ͋Δͱ͍͏ҹ F
Swift Demangler workshop ՝1 $S13ExampleNumber6isEven6numberSbSi_tF “ExampleNumber” ͱ͍͏Ϟδϡʔϧ໊ (ϑΝΠϧ໊) 13͔͜͜Β13จࣈ͕ࣝผࢠͰ͋Δ͜ͱΛද͢
Swift Demangler workshop ՝1 $S13ExampleNumber6isEven6numberSbSi_tF “isEven” ͱ͍͏ؔͷ໊લ 6จࣈ͕ࣝผࢠͰ͋Δ͜ͱΛࣔ͢
Swift Demangler workshop ՝1 $S13ExampleNumber6isEven6numberSbSi_tF “number” ͱ͍͏ϥϕϧ 6จࣈ͕ࣝผࢠͰ͋Δ͜ͱΛࣔ͢
Swift Demangler workshop ՝1 $S13ExampleNumber6isEven6numberSbSi_tF ؔͷγάωνϟ (≒ ܕ) SbฦΓͷܕ Bool
Si_tҾͷܕ (Int)
Swift Demangler workshop ՝1 global ::= entity entity ::= context
entity-spec context ::= module module ::= identifier $S13ExampleNumber6isEven6numberSbSi_tF global
Swift Demangler workshop ՝1 global ::= entity entity ::= context
entity-spec context ::= module module ::= identifier $S13ExampleNumber6isEven6numberSbSi_tF global entity
Swift Demangler workshop ՝1 global ::= entity entity ::= context
entity-spec context ::= module module ::= identifier $S13ExampleNumber6isEven6numberSbSi_tF context entity-spec module
Swift Demangler workshop ՝1 entity-spec ::= decl-name label-list function-signature 'F'
function-signature ::= params-type params-type throws? label-list ::= empty-list label-list ::= ('_' | identifier)* throws ::= 'K' params-type ::= type decl-name ::= identifier identifier ::= NATURAL IDENTIFIER-STRING $S13ExampleNumber6isEven6numberSbSi_tF decl-name label-list function-signature
Swift Demangler workshop ՝1 (࠶ܝ) $S13ExampleNumber6isEven6numberSbSi_tF ExampleNumber.isEven(number: Swift.Int) -> Swift.Bool