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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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.3k
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
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
130
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
460
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
220
AI がコードを書く時代における新卒エンジニアの仕事風景 (2026) / New Graduate Engineers in the Era of AI Coding (2026)
sushichan044
0
200
ランチタイムLT会3周年!ランチタイムLT会を3年間続けられたお話
y0hgi
1
130
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
150
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
160
1B+ /day規模のログを管理する技術
broadleaf
0
130
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.6k
AI 輔助遺留系統現代化的經驗分享
jame2408
1
1.2k
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
440
えっ!!コードを読まずに開発を!?
hananouchi
0
140
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Done Done
chrislema
186
16k
Docker and Python
trallard
47
3.9k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Un-Boring Meetings
codingconduct
0
340
Thoughts on Productivity
jonyablonski
76
5.2k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
220
4 Signs Your Business is Dying
shpigford
187
22k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
340
Become a Pro
speakerdeck
PRO
31
6k
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