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
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
610
Spice up your notifications/try!Swift25
noppefoxwolf
3
840
iOSの隠されたAPIを解明し、開発効率を向上させる方法/iOSDC24
noppefoxwolf
2
1.3k
今から理解するApp Intentエコシステム/WWDC24Recap
noppefoxwolf
0
74
既存アプリをvisionOS対応してリリースした話/visionOS LT vol5
noppefoxwolf
0
230
UIのブラックボックスを探る/iOSDC23
noppefoxwolf
3
5.1k
CoreGraphicsでドット絵を描こう/iOSDC22
noppefoxwolf
0
3.2k
ランタイムデバッグのススメ/iOSDC21
noppefoxwolf
1
5.7k
google/mediapipe で始めるARアプリ開発/iOSDC2020
noppefoxwolf
1
1.7k
Other Decks in Technology
See All in Technology
人とエージェントが高め合う協業設計
kintotechdev
0
1k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
論語・武士道・産業革命から見る かわるもの、かわらないもの
ichimichi
8
1.5k
AIとハーネスで育てるトランスコンパイラ / 20260722 Yasushi Katayama
shift_evolve
PRO
4
1.1k
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
53k
AI Native なプロダクト組織の立ち上げ方 : 生産性 100 倍への挑戦
mikesorae
0
1.7k
Claude Code並行開発環境の ムダ‧ムラ‧ムリを見直した話
muranakaaa
0
130
信頼できるテスティングAIをどう育てるか?
odan611
0
150
AI時代におけるエンジニアの新たな役割──FDEとクオリアの探求/登壇資料(戸井田 裕貴)
hacobu
PRO
0
610
コンポーネント名には何を含めるべきなのか? / what-should-be-included-in-component-names
airrnot1106
0
150
SRENEXT_2026_Chairs__Talks_in_Tamachi.sre.pdf
srenext
1
160
ここは地獄!つらい朝会を体験することで、チームとしてのより良い振る舞いに気づくワークショップ / The stand-up meeting from hell in the game industry
scrummasudar
0
400
Featured
See All Featured
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
190
Context Engineering - Making Every Token Count
addyosmani
9
1k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
The Pragmatic Product Professional
lauravandoore
37
7.4k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
980
How to build a perfect <img>
jonoalderson
1
5.8k
Optimizing for Happiness
mojombo
378
71k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
For a Future-Friendly Web
brad_frost
183
10k
So, you think you're a good person
axbom
PRO
2
2.1k
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