on Mon Feb 27 2017, Matthew Johnson <matthew-AT-anandabits.com> wrote:
>> On Feb 27, 2017, at 4:20 PM, Dave Abrahams <dabrah...@apple.com> wrote: >> >> >> I'm sorry, I don't see any substantive difference, based on what you've >> written here, between this feature and const. > > Let me give it one more shot and then I’ll drop it. :) > > Const is viral because if an API does not declare its arguments const > it cannot be used by a caller who has a const argument. Unless the caller casts away const, thus erasing information that was previously encoded in the type system. > It is required in order to make an API as generally useful as > possible. > > Typed errors are not viral in this way because no callers are > prevented from calling an API regardless of whether it declares error > types or just throws Error like we have today. Unless the caller can recover (which is *very* rare) or it catches and rethrows one of the errors *it* declares, thus erasing information that was previously encoded in the type system. > Pressure to declare error types in your signature in order to make > your function as generally useful as possible does not exist. Each > function is free to declare error types or not according to the > contract it wishes to expose. > > An argument can be made that community expectations might develop that > good APIs should declare error types and they could be considered > viral in this sense because any API that is simply declared `throws` > is dropping type information. But I think this overstates the case. > The community appears to be very sensitive to the problems that can > arise when error types are too concrete, especially across module > boundaries. I think we can learn to use the tool where it works well > and to avoid it where it causes problems. > >> >> -- >> -Dave > -- -Dave _______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution