Interested in D, spec confuses me.

Chris Wright via Digitalmars-d digitalmars-d at puremagic.com
Wed Feb 3 09:29:03 PST 2016


On Wed, 03 Feb 2016 09:29:30 -0500, Steven Schveighoffer wrote:

> On 2/2/16 8:42 PM, Chris Wright wrote:
>> On Tue, 02 Feb 2016 15:41:07 -0800, H. S. Teoh via Digitalmars-d wrote:
>>
>>> Furthermore, since const provides actual guarantees that the called
>>> function isn't going to touch the data, this opens up optimization
>>> opportunities for the compiler.
>>
>> const opens up optimizations at the call site, so it's useful.
>> immutable is useful on top of const because it allows optimizations
>> within the function.
>>
>> Want to memoize a function? If it takes const(char[]), you have to copy
>> your input and later check the entire array to see if the parameters
>> match a previous call. If it takes an immutable(char[]), you can
>> compare pointers.
> 
> This isn't exactly right. If I call a function with "hello", I'd want it
> to memoize if the function is called with "hello" that resides
> elsewhere.

In the general case, yes.

It's much faster to look up a pointer/length pair in a hashtable than to 
look up a very long string, so if you expect long strings and many calls 
with the same addresses, you might have a fast cache by pointer.

You might also have values that are automatically generated, and you're 
relatively certain that it will be rare to have duplicate values.

Or you might have a complex data structure that's immutable and has an id 
and a revision. If you know for certain that id+revision is unique, you 
can memoize based on that, and immutable gives you some extra protection.


More information about the Digitalmars-d mailing list