digitalmars.D - Semantic change from 2.078.3 to 2.079.0
- =?UTF-8?B?TcOhcmNpbw==?= Martins (19/19) May 23 2018 Hi, recently we tried to upgrade DMD from 2.078.3 to 2.080 and
- ag0aep6g (3/26) May 23 2018 In the changelog:
- =?UTF-8?B?TcOhcmNpbw==?= Martins (4/32) May 23 2018 Wow! I don't know I missed it!
- Jonathan M Davis (13/47) May 23 2018 It would have, but there is literally no way to put it through the
- =?UTF-8?B?TcOhcmNpbw==?= Martins (2/3) May 23 2018 Got it! Thanks!
- Steven Schveighoffer (4/8) May 23 2018 Note, you could create an isSomeStringOrEnum template that does the old
Hi, recently we tried to upgrade DMD from 2.078.3 to 2.080 and found an unexpected semantic change. Consider this program: import std.traits; enum X { Y = "z" }; alias T = typeof(X.Y); pragma(msg, is(T == enum)); pragma(msg, isSomeString!T); void main() {}` Output in DMD <= 2.078.3: true true Output in DMD >= 2.079.0: true false This silent change is really nasty, and causing all sorts of breakages. Was this a bug-fix, and if so, should we expect the new behavior to stick?
May 23 2018
On 05/23/2018 11:21 AM, Márcio Martins wrote:Hi, recently we tried to upgrade DMD from 2.078.3 to 2.080 and found an unexpected semantic change. Consider this program: import std.traits; enum X { Y = "z" }; alias T = typeof(X.Y); pragma(msg, is(T == enum)); pragma(msg, isSomeString!T); void main() {}` Output in DMD <= 2.078.3: true true Output in DMD >= 2.079.0: true false This silent change is really nasty, and causing all sorts of breakages. Was this a bug-fix, and if so, should we expect the new behavior to stick?In the changelog: https://dlang.org/changelog/2.079.0.html#std-traits-issomestring
May 23 2018
On Wednesday, 23 May 2018 at 09:26:48 UTC, ag0aep6g wrote:On 05/23/2018 11:21 AM, Márcio Martins wrote:Wow! I don't know I missed it! I would expect something like this to go through the deprecation process as it effectively silently breaks a ton of code.Hi, recently we tried to upgrade DMD from 2.078.3 to 2.080 and found an unexpected semantic change. Consider this program: import std.traits; enum X { Y = "z" }; alias T = typeof(X.Y); pragma(msg, is(T == enum)); pragma(msg, isSomeString!T); void main() {}` Output in DMD <= 2.078.3: true true Output in DMD >= 2.079.0: true false This silent change is really nasty, and causing all sorts of breakages. Was this a bug-fix, and if so, should we expect the new behavior to stick?In the changelog: https://dlang.org/changelog/2.079.0.html#std-traits-issomestring
May 23 2018
On Wednesday, May 23, 2018 09:31:35 Márcio Martins via Digitalmars-d wrote:On Wednesday, 23 May 2018 at 09:26:48 UTC, ag0aep6g wrote:It would have, but there is literally no way to put it through the deprecation process without deprecating isSomeString and replacing it with something else, which would have broken tons of code. There is no way to just deprecate the behavior. It was determined that it was unlikely that much code would break and that it would in turn fix quite a bit of code and prevent further bugs that the old behavior encouraged. And in general, the fixes should be easy, since in most cases, it results in a compilation error and then a quick fix to a template constraint or static if to get the old behavior back if it was indeed intentional and not a bug. We would like to have handled it better, but there really wasn't a better way given the options. - Jonathan M DavisOn 05/23/2018 11:21 AM, Márcio Martins wrote:Wow! I don't know I missed it! I would expect something like this to go through the deprecation process as it effectively silently breaks a ton of code.Hi, recently we tried to upgrade DMD from 2.078.3 to 2.080 and found an unexpected semantic change. Consider this program: import std.traits; enum X { Y = "z" }; alias T = typeof(X.Y); pragma(msg, is(T == enum)); pragma(msg, isSomeString!T); void main() {}` Output in DMD <= 2.078.3: true true Output in DMD >= 2.079.0: true false This silent change is really nasty, and causing all sorts of breakages. Was this a bug-fix, and if so, should we expect the new behavior to stick?In the changelog: https://dlang.org/changelog/2.079.0.html#std-traits-issomestring
May 23 2018
On Wednesday, 23 May 2018 at 09:43:28 UTC, Jonathan M Davis wrote:[...]Got it! Thanks!
May 23 2018
On 5/23/18 11:31 AM, Márcio Martins wrote:On Wednesday, 23 May 2018 at 09:43:28 UTC, Jonathan M Davis wrote:Note, you could create an isSomeStringOrEnum template that does the old behavior, and just do a sed 's/isSomeString!/isSomeStringOrEnum!/g' -Steve[...]Got it! Thanks!
May 23 2018