-
Notifications
You must be signed in to change notification settings - Fork 12.9k
Description
TypeScript Version: Tested on 2.5.2 and 2.6.0-dev.20170904
Code
The code is there:
https://github.com/emmanueltouzery/prelude.ts/tree/5c33c1eeeea7234506e54331d06590e2feb9b00d
To build it you can just run npm install && tsc
. It's about 1800 LOCs of typescript.
On my (old) machine, if I build it as-is with 2.5 or 2.6-dev I get a ~5s build time. If I uncomment in src/IMap.ts
lines 29 and 30, however, the build time explodes. On 2.5 I didn't bother waiting but it would be a long, long, long time. On 2.6-dev the speed is much better but the build time still explodes from 5 seconds to 35 seconds.
The two lines are:
mapValuesStruct<V2>(fn:(v:V)=>V2): IMap<K,V2>;
mapValues<V2>(fn:(v:V)=>V2&WithEquality): IMap<K,V2>;
And they are implemented in src/HashMap.ts
with:
map<K2,V2>(fn:(k:K&WithEquality, v:V)=>[K2&WithEquality,V2&WithEquality]): HashMap<K2,V2> {
return this.mapStruct(fn);
}
mapValuesStruct<V2>(fn:(v:V)=>V2): HashMap<K,V2> {
return this.hamt.fold(
(acc: HashMap<K,V2>, value: V, key: K&WithEquality) =>
acc.putStruct(key,fn(value)), HashMap.empty());
}
When I implement the interface, I change the return type to a more specific one, which is as far as I'm aware, legal.
Expected behavior:
Uncommenting these two lines of code shouldn't cause the build time to increase sevenfold. Maybe the code is wrong, but then I should get a compilation error or a warning, not an increased build time.
If I put in the tsconfig.json
:
"noStrictGenericChecks": true
then the performance issue goes away completely even with the lines uncommented.