www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - [2.0] Remove deprecation of delete hash[key] (and change its semantics)

reply Leandro Lucarella <llucax gmail.com> writes:
When doing: delete hash[key] in D 1.0, there is a deprecation error about
being an old syntax for hash.remove(key). So now, if you have an hash of
objects, and you want to do explicit memory deallocation, you have to do
something like this:

auto tmp = hash[key];
hash.remove(key);
delete tmp;

Which is ugly and nonsense. Maybe remove it from 1.0 could be
contraversial, but I think there is no point in conserving this ugly
behaviour in 2.0.

-- 
Leandro Lucarella (luca) | Blog colectivo: http://www.mazziblog.com.ar/blog/
----------------------------------------------------------------------------
GPG Key: 5F5A8D05 (F8CD F9A7 BF00 5431 4145  104C 949E BFB6 5F5A 8D05)
----------------------------------------------------------------------------
Vaporeso sostenía a rajacincha la teoría del No-Water, la cual le
pertenecía y versaba lo siguiente: "Para darle la otra mejilla al fuego,
éste debe ser apagado con alpargatas apenas húmedas".
Feb 11 2008
parent reply Jesse Phillips <jessekphillips gmail.com> writes:
On Mon, 11 Feb 2008 12:18:10 -0200, Leandro Lucarella wrote:

 When doing: delete hash[key] in D 1.0, there is a deprecation error
 about being an old syntax for hash.remove(key). So now, if you have an
 hash of objects, and you want to do explicit memory deallocation, you
 have to do something like this:
 
 auto tmp = hash[key];
 hash.remove(key);
 delete tmp;
 
 Which is ugly and nonsense. Maybe remove it from 1.0 could be
 contraversial, but I think there is no point in conserving this ugly
 behaviour in 2.0.

I can't test it now, but I would think that hash.remove(key) would return the removed value. Couldn't find mention in the docs but if it is true delete hash.remove(key); should work.
Feb 11 2008
next sibling parent bearophile <bearophileHUGS lycos.com> writes:
Jesse Phillips:
 I can't test it now, but I would think that hash.remove(key) would return 
 the removed value. Couldn't find mention in the docs but if it is true
 delete hash.remove(key);

In DMD 1.025 hash.remove(key) is a void. Bye, bearophile
Feb 11 2008
prev sibling parent reply Leonard Dahlmann <leo.dahlmann gmail.com> writes:
Jesse Phillips Wrote:

 On Mon, 11 Feb 2008 12:18:10 -0200, Leandro Lucarella wrote:
 
 When doing: delete hash[key] in D 1.0, there is a deprecation error
 about being an old syntax for hash.remove(key). So now, if you have an
 hash of objects, and you want to do explicit memory deallocation, you
 have to do something like this:
 
 auto tmp = hash[key];
 hash.remove(key);
 delete tmp;
 
 Which is ugly and nonsense. Maybe remove it from 1.0 could be
 contraversial, but I think there is no point in conserving this ugly
 behaviour in 2.0.

I can't test it now, but I would think that hash.remove(key) would return the removed value. Couldn't find mention in the docs but if it is true delete hash.remove(key); should work.

Even if remove does return the removed value, it won't work, since delete needs a lvalue.
Feb 11 2008
parent Bruno Medeiros <brunodomedeiros+spam com.gmail> writes:
Leonard Dahlmann wrote:
 Jesse Phillips Wrote:
 
 On Mon, 11 Feb 2008 12:18:10 -0200, Leandro Lucarella wrote:

 When doing: delete hash[key] in D 1.0, there is a deprecation error
 about being an old syntax for hash.remove(key). So now, if you have an
 hash of objects, and you want to do explicit memory deallocation, you
 have to do something like this:

 auto tmp = hash[key];
 hash.remove(key);
 delete tmp;

 Which is ugly and nonsense. Maybe remove it from 1.0 could be
 contraversial, but I think there is no point in conserving this ugly
 behaviour in 2.0.

the removed value. Couldn't find mention in the docs but if it is true delete hash.remove(key); should work.

Even if remove does return the removed value, it won't work, since delete needs a lvalue.

I added a bug/enhancement report for that: http://d.puremagic.com/issues/show_bug.cgi?id=1893 -- Bruno Medeiros - MSc in CS/E student http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D
Mar 05 2008