<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Feb 11, 2016, at 12:53 PM, Chris Lattner &lt;<a href="mailto:clattner@apple.com" class="">clattner@apple.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">I’m very curious where you stand on the syntax of the behavior decl, because this decl (as one concrete example) seems like it would be *much* nicer as:</div><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br class=""></div><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">public var behavior changeObserved&lt;Value : Equatable&gt; {</div></div></blockquote></div><br class=""><div class="">I'd prefer not to take it as a keyword. I think we can parse it contextually between 'var' and another identifier, even though we don't do that anywhere else yet.</div><div class=""><br class=""></div><div class="">If we really want to keep the initial proposal modest, we could subset out the declaration syntax bikeshedding and start with the lazy implementer's approach, exposing the unpainted protocol underlying the behavior:</div><div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class="">@property_behavior</div><div class="">protocol behavior {</div><div class="">&nbsp; // Type of the property instantiating the behavior.</div><div class=""><div class="">&nbsp; associatedtype Value</div></div><div class="">&nbsp; // Backing storage for the behavior.</div><div class=""><div class="">&nbsp; var storage: Value? { get set }</div></div><div class=""><div class="">}</div></div><div class=""><div class="">extension behavior {</div></div><div class=""><div class="">&nbsp; // Initializer for the instantiated storage.</div><div class=""></div><div class="">&nbsp; static func initStorage() -&gt; Value? {</div></div><div class=""><div class="">&nbsp; &nbsp; return nil</div></div><div class=""><div class="">&nbsp; }</div></div><div class=""><div class="">&nbsp; // Property implementation.</div></div><div class=""><div class="">&nbsp; var value: Value {</div></div><div class="">&nbsp; &nbsp; get { ... }</div><div class="">&nbsp; &nbsp; set { ... }</div><div class="">&nbsp; }</div><div class=""><div class="">}</div></div></blockquote><div class=""><div class=""><br class=""></div></div><div class="">-Joe</div></body></html>