On Thursday, 19 May 2016 at 13:45:18 UTC, Andrei Alexandrescu wrote:
On 05/19/2016 08:38 AM, Steven Schveighoffer wrote:
Yep. chain uses voldemort type, map does not.

We definitely need to fix Voldemort types. Walter and I bounced a few ideas during DConf.

1. Do the cleartext/compress/hash troika everywhere (currently we do it on Windows). That should help in several places.

2. For Voldemort types, simply generate a GUID-style random string of e.g. 64 bytes. Currently the name of the type is composed out of its full scope, with some exponentially-increasing repetition of substrings. That would compress well, but it's just a lot of work to produce and then compress the name. A random string is cheap to produce and adequate for Voldemort types (you don't care for their name anyway... Voldemort... get it?).

I very much advocate slapping a 64-long random string for all Voldermort returns and calling it a day. I bet Liran's code will get a lot quicker to build and smaller to boot.


Andrei

I have an Idea of reproducible, less-than-exponential time mangling, although I don't know how actionable.

Leave mangling as is, but pretend that you are mangling something different, for example when the input is
foo!(boo!(bar!(baz!(int))), bar!(baz!(int)), baz!(int))
pretend that you are mangling
foo!(boo!(bar!(baz!(int))), #1, #2)
Where #1 and #2 are special symbols that refer to stuff that was **already in the name**, particularly:
#1: bar!(baz!(int))
#2: baz!(int)

Now, this is an reduction of the exponential computation time only if you can detect repetitions before you go inside them, for example, in case of #1, detect the existence of bar!(baz!(int)) without looking inside it and seeing baz!(int). Do you think it could be done?

You would also need a deterministic way to assign those symbols #1, #2, #3... to the stuff in the name.

Compression can also be done at the end if necessary to reduce the polynomial growth.

Reply via email to