> On Dec 21, 2015, at 10:04 AM, Dave Abrahams via swift-evolution 
> <[email protected]> wrote:
> 
>> 
>> On Dec 20, 2015, at 3:51 PM, Michael Buckley via swift-evolution 
>> <[email protected] <mailto:[email protected]>> wrote:
>> 
>> +0. This seems reasonable, and a lot of the arguments are compelling. The 
>> argument put forth about library design especially so. But coming from C++, 
>> where I have to prefix nearly every method in my classes with virtual, I'm 
>> worried that we could end up  with the same problem in Swift.
>> 
>> We don't know what the dominant paradigm in swift will be ten years from 
>> now. Inheritance has a raft of problems, but there's no guarantee that the 
>> alternatives will be better in the long run. I suspect they will be, but I 
>> also suspect we will find new and exciting problems in large codebases using 
>> more functional patterns.
>> 
>> While there's a lot of excitement in the Swift community right now about 
>> final, value types, and other language features, but I fear that when the 
>> rest of the world jumps on the Swift bandwagon, most are just going to use 
>> classes exclusively over structs and continue their OOP practices, simply 
>> because it's what they're used to.
>> 
>> Making final the default may be a great way to discourage them. But it may 
>> also get us right back to where we are in C++ today, where programmers want 
>> virtual functions 99% of the time, but have to specify each function as 
>> virtual.
> 
> In my considerable experience with C++, that is not at all where we are 
> today.  Increasingly, C++ is becoming seen as a language for high-performance 
> computing, and people working in that area learn that they don't want to pay 
> for virtual dispatch when they don't have to.  It is true that for some of 
> them, reflexive use of OOP is hard to shake, but they do learn eventually.  
> Note also that Swift is really the second major language to take value 
> semantics seriously.  The first was C++.

In C++, you also often see polymorphic type erasure containers built on top of 
types that themselves don't require dynamic dispatch, like `boost::any`, 
`std::function`, and the like. This is something Swift makes first-class with 
protocols and protocol types. You don't need virtual dispatch of 
implementations as much if you can introduce ad-hoc virtual dispatch of 
interfaces at any point.

-Joe
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to