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
static lazy varの挙動を追ってみた
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
noppefoxwolf
May 31, 2018
Technology
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
static lazy varの挙動を追ってみた
noppefoxwolf
May 31, 2018
More Decks by noppefoxwolf
See All by noppefoxwolf
High performance GIF playback/iOSDC25
noppefoxwolf
1
640
Spice up your notifications/try!Swift25
noppefoxwolf
3
850
iOSの隠されたAPIを解明し、開発効率を向上させる方法/iOSDC24
noppefoxwolf
2
1.4k
今から理解するApp Intentエコシステム/WWDC24Recap
noppefoxwolf
0
76
既存アプリをvisionOS対応してリリースした話/visionOS LT vol5
noppefoxwolf
0
230
UIのブラックボックスを探る/iOSDC23
noppefoxwolf
3
5.2k
CoreGraphicsでドット絵を描こう/iOSDC22
noppefoxwolf
0
3.3k
ランタイムデバッグのススメ/iOSDC21
noppefoxwolf
1
5.7k
google/mediapipe で始めるARアプリ開発/iOSDC2020
noppefoxwolf
1
1.7k
Other Decks in Technology
See All in Technology
『自分で判断できるか』を基準に、プロダクトのハンズオン研修でAI利用の線を引いてみた / Where We Drew the Line on AI in Hands-on Training
honyanya
0
290
NANDでも描画したい!
nichica906
3
780
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.3k
RapidCopy2 Matrix I/Oエンジンによるファイルコピーソフトウェアの設計と実装
kengosawa2
1
450
AWSとAzureのマルチクラウド活用における強い味方___AWS_Kiroを使った二刀流スキル作成.pdf
duelist2020jp
0
120
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
サーバー常駐型の 簡易障害調査AI エージェントを作ってみた話
masayoshi
0
220
AI時代のアウトプット――変わったこと、変わらないこと / Devsumi 2026 Kansai #devsumi
jnchito
0
590
電話に出る Python のログの話
shinnosuke_kishida
0
270
わたしが知り合いゼロの勉強会に 行けるようになるまで
r5ni4
2
810
The Django UUID Story - DjangoCon US 2026
pauloxnet
0
280
IHV like なユースケースへのOpenID Connect 関連仕様の適用事例
optim
0
320
Featured
See All Featured
The Mindset for Success: Future Career Progression
greggifford
PRO
0
480
Side Projects
sachag
455
43k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
950
Navigating Team Friction
lara
192
16k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
210
Odyssey Design
rkendrick25
PRO
2
780
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
220
Marketing to machines
jonoalderson
1
5.7k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
280
Transcript
TUBUJDMB[ZWBSƑ㌀ọƵሔƆƉ ƢƂ ့ழ္ ! !OPQQFGPYXPMG
MB[ZƑŭŸƬŧ lazy var value: Int = 0 WBMVFƒƸDžǑǏŸƯƮơƊളӮŸƯƍŧ ! !OPQQFGPYXPMG
USZ4XJGUƊƑǜDžǡǙDž lazy var value: Int = { preconditionFailure() }() Ԛ௹߄с⇜ƍǭȃǧǜƹƵMB[ZWBSƊ࿆żƮŶƋ
ƊaսೆభƎƸDžǑǏżƮƋઋƋżŶƋůƊŰƮb ơƂ/FWFSƊْżŶƋƊƵƲŽƎ࿆ƊŰƮb ! !OPQQFGPYXPMG
TUBUJDඔƑMB[ZWBS UVUPSJBMTXJGU class Class { static lazy var value: Int
= { preconditionFailure() }() } Class.value = 1 ! !OPQQFGPYXPMG
$ swiftc tutorial001.swift tutorial001.swift:2:10: error: 'lazy' must not be used
on an already-lazy global static lazy var value: Int = { preconditionFailure() }() ^~~~~ MB[ZNVTUOPUCFVTFEPOBOBMSFBEZMB[Z HMPCBM wHMPCBMඔƒ࠻ƎMB[ZƃŮƬaMB[ZŧƬƍŧƫ ! x ! !OPQQFGPYXPMG
UVUPSJBMTXJGU class Class { static var value: Int = {
preconditionFailure() }() } Class.value = 1 MB[ZƵຓźƉljȉǧƺȁƥӮۿĆ ! !OPQQFGPYXPMG
$./tutorial002 Fatal error: file tutorial002.swift, line 2 ༵ƎQSFDPOEJUJPO'BJMVSFůޫƓƯƉŧƮl ! !OPQQFGPYXPMG
Ệ㗈 YYYYYTXJGU class Class { static var xxxxx: Int =
{ preconditionFailure() }() } ඔƵƲŮƭƧżŲYYYYƎźƉ4*-Ƶԛ৯źƉƢƮ 4XJGU*OUFSNFEJBUF-BOHVBHF4XJGUƑᇏᾇ∽ ! !OPQQFGPYXPMG
! !OPQQFGPYXPMG
TXJGUDFNJUTJMHFOYYYYYTXJGUYYYYYTJM ! !OPQQFGPYXPMG
// static Class.xxxxx.setter sil hidden [transparent] @_T05xxxxx5ClassCAASivsZ : $@convention(method) (Int,
@thick Class.Type) -> () { // %0 // users: %8, %2 // %1 // user: %3 bb0(%0 : $Int, %1 : $@thick Class.Type): debug_value %0 : $Int, let, name "value", argno 1 // id: %2 debug_value %1 : $@thick Class.Type, let, name "self", argno 2 // id: %3 // function_ref Class.xxxxx.unsafeMutableAddressor %4 = function_ref @_T05xxxxx5ClassCAASivau : $@convention(thin) () -> Builtin.RawPointer // user: %5 %5 = apply %4() : $@convention(thin) () -> Builtin.RawPointer // user: %6 %6 = pointer_to_address %5 : $Builtin.RawPointer to [strict] $*Int // user: %7 %7 = begin_access [modify] [dynamic] %6 : $*Int // users: %9, %8 assign %0 to %7 : $*Int // id: %8 end_access %7 : $*Int // id: %9 %10 = tuple () // user: %11 return %10 : $() // id: %11 } // end sil function '_T05xxxxx5ClassCAASivsZ' %4 ~ %5 ॳظԽ %6 ~ %7 ೖ ! !OPQQFGPYXPMG
%4 = function_ref @_T05xxxxx5ClassCAASivau : $@convention(thin) () -> Builtin.RawPointer //
user: %5 %5 = apply %4() : $@convention(thin) () -> Builtin.RawPointer // user: %6 GVODUJPO@SFGTJMGVODUJPOOBNFTJMUZQF4*-倔ඔ ƛƑҕᅶƵቔӮ @5YYYYY$MBTT$""4JWBVč䴙ƆƉŧŲƋ QSFDPOEJUJPO'BJMVSFĎƑҕᅶቔӮ BQQMZƊ⻎ྛ ! !OPQQFGPYXPMG
սೆభƎQSFDPOEJUJPO'BJMVSFůޫƓƯƉŧƮƑƒ ⻎ ! !OPQQFGPYXPMG
IUUQTCVHTTXJGUPSHCSPXTF43 ! !OPQQFGPYXPMG
'lazy' must not be used on an already- lazy global
MB[Z䵐۬ₑǭȃǧǜƹƑMB[ZƋƒũၩ ! !OPQQFGPYXPMG