Persistent list

Steven Schveighoffer via Digitalmars-d digitalmars-d at puremagic.com
Mon Nov 16 09:12:06 PST 2015


On 11/15/15 9:54 AM, Andrei Alexandrescu wrote:
> On 11/15/2015 09:34 AM, Dicebot wrote:
>> On Sunday, 15 November 2015 at 14:23:05 UTC, Jonathan M Davis wrote:
>>>> As I mentioned, he's okay with changing the language to make the
>>>> casts well defined. -- Andrei
>>>
>>> Well, that's a big change, since it pretty much means that D's const
>>> isn't physical const anymore, and Walter has been _very_ insistent
>>> about that in the past - to the point that he's argued that C++'s
>>> const is outright useless because it isn't physical const. If casting
>>> away const and mutating is well-defined behavior, then we basically
>>> have C++'s const except that it's transitive ...
>>
>> Casting away _const_ is already legal if programmer can himself
>> guarantee underlying object has mutable origin (i.e. not available via
>> immutable reference), by the very definition of const. It is casting
>> away immutable and mutating that is strictly UB.
>
> Correct. I'm not sure whether that's clarified in the language
> documentation yet. -- Andrei

I argued this way, and eventually lost. I don't think it's feasible to 
have a const that can be cast away, and have optimizations based on 
const or pure.

See this discussion:

forum.dlang.org/post/riiehqozpkyluhhifwha at forum.dlang.org

One thing, however, is that if you can mark an island of space within an 
object as ALWAYS mutable, the compiler can know this and avoid 
optimizing away access to those pieces. It would have to be clearly 
marked as such, so the optimizations on non-marked data could still happen.

I think it could be done, because logical const is possible via a global 
lookup table. Any time you go through a cast, however, this could easily 
break down. I hate to say it, but you would likely need another modifier 
like "tainted const" or something in order for that to work.

-Steve


More information about the Digitalmars-d mailing list