<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></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=""><div class=""><blockquote type="cite" class="">I guess my point is this: codifying a convention seems pre-mature as<br class="">that convention doesn't bring the safety goals of the language into a<br class="">place that's verifiable. All of the other guidelines are simply about<br class="">clarity of use, this convention has a far reaching impact.<br class=""></blockquote><br class="">Sorry, could you clarify what you mean by "bring the safety goals of the<br class="">language into a place that's verifiable" and clarify why having a "far<br class="">reaching impact" would somehow conflict with being "about clarity of use?"<br class=""><br class="">It seems to me that this convention is about how to express whether a<br class="">method is going to mutate so it's clear at the use-site. What am I<br class="">missing?<br class=""></div></div></blockquote></div><div class=""><br class=""></div><div class="">The problem is it's unclear to me whether you mean mutate in the true sense of the word or only applied to a struct with a function annotated with the mutating keyword.</div><div class=""><br class=""></div><div class="">The naming convention provides no safety when dealing with non-struct types as we cannot enforce that a method on a class does not mutate it's internal members.</div><div class=""><br class=""></div><div class="">That's the clarity I'm looking for.</div><div class=""><br class=""></div><div class="">Given this API set:</div><div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><font face="Menlo" class="">protocol InPlaceable {<br class=""> mutating func doInPlace()<br class="">}<br class=""><br class="">public struct Foo: InPlaceable {<br class=""> mutating func doInPlace() {}<br class="">}<br class=""><br class="">public class Bar: InPlaceable {<br class=""> func doInPlace() {}<br class="">}<br class=""><br class="">var lie: InPlaceable = Bar()<br class="">lie.doInPlace()<br class=""><br class="">let lie2 = Bar()<br class="">lie2.doInPlace()</font></blockquote><div class=""><br class=""></div><div class="">The convention will tell us a lie unless we are extremely careful. It's this lie that concerns me. We cannot guarantee that the "doInPlace" truly matches the definition we are seeking.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">-David</div></body></html>