Feedback Thread: DIP 1042--ProtoObject--Community Review Round 1

RazvanN razvan.nitu1305 at gmail.com
Fri Jan 14 09:32:56 UTC 2022


On Thursday, 13 January 2022 at 17:57:24 UTC, David Gileadi wrote:
> Based on RazvanN's reply to Elronnd (quoted for context):
>
>> I think that the fundamental idea here is that when the 
>> library owner
>> switches from Object to ProtoObject that is a breaking change 
>> that should
>> be advertised, because he is changing the API. The library 
>> owner should
>> either release a new major version or provide the same utilies 
>> as Object.
>> The idea here is that you do not know what your users are 
>> doing; even without
>> library X, the user can simply call toHash because Object used 
>> to have it.
> If this change leads each of my dependencies to make breaking 
> changes then its backwards compatibility certainly isn't the 
> "no breaking changes" claimed by the DIP. This effect on users 
> of third-party libraries should be called out in the DIP's 
> Breaking Changes and Deprecations section.
>
> (I'm replying to the original post here because my original 
> reply violated Feedback rules; sorry about that).

I think that this case is being exaggerated here. I find it hard 
to believe
that people write libraries where they simply type a parameter as 
being
Object. Most library code is templated which means that the 
received types
can be either class, struct or basic types. As such, I would 
expect that
folks would at least test for the existence of the likes of 
toHash, opCmp etc.
before using them.

My expectation is that, in most cases, updating to ProtoObject 
will not incur any breaking changes, however, there might be a 
few situations where users (arguably, wrongfully) were using the 
builtin object methods of class instances from library X. In this 
scenario, you will end up with a compile error in user code after 
upgrading. I would argue that this is for the best if the library 
owner did not intend to expose those facilities.



More information about the Digitalmars-d mailing list