Log of the #nice channel on irc.freenode.net

* arjanb leaves02:47
* arjanb joins13:39
* bonniot joins13:51
<arjanb>hello13:53
I haven't found the reason for the slowdown :-(13:54
reversing some patches or even disabling value dispatch tests didn't have any effect13:55
and the mailinglists are having some hiccups last days13:57
<bonniot>:-(13:59
nice-commit only, or the other ones too?
<arjanb>at least nice-commit the other i don't know
<bonniot>it seems the messages went through now14:00
they were just delayed
<arjanb>but the cause of the slowdown is getting weird i have no idea where to look anymore14:02
<bonniot>do you have two copies of the source, one fast and the other slow, with minimal differences?14:07
<arjanb>no have reversed the thing against the current version of the source14:08
<bonniot>i think it would be a better idea
<arjanb>i'm trying to get these sources compiled now14:36
i have a compiled version of before and after15:06
disabling value dispatch tests no effect15:14
<bonniot>you the two versions do have different speeds?15:21
<arjanb>yes15:22
<bonniot>good point15:25
<arjanb>i don't understand it anymore16:19
<bonniot>can you find the part that is creating the difference?16:26
<arjanb>afaik all diffs are reversed now but there is still a difference between both versions16:27
i have copied all files that have changed according to the diffs from the older/faster version the newer/slower but the speed difference remains16:36
<bonniot>did you compare the sources directly (not using my email?)16:40
<arjanb>no16:41
i have the diffs from the cvs server16:42
<bonniot>you could compare the sources on your disk, to check if you have really reversed all the changes16:45
if you only changed the newer version, you can also compare it to the old version using cvs16:47
<arjanb>how can i do that?16:53
i found a program that does that17:10
<bonniot>diff17:11
but as I said you can use cvs diff too
using a -D argument to specify with which version you want to compare
<arjanb>i think i have found the difference first a doublecheck17:12
a new file that explains why i couldn't find it in the diffs17:15
nice\lang\enum.nice is guilty17:16
<bonniot>good that you found out17:17
could it be the equals method?
<arjanb>i think so trying now
it's equals toString and hashCode17:24
but it's not good that a single method implementation can slowdown the dispatch tests that much17:26
<bonniot>true17:30
the reason is that equals is a binary method, so it tests couples of classes
and in Swing there are a lot more classes than usually17:31
it should be possible to optimize it, though17:32
<arjanb>yes now are the typeconstructors generated for every method17:33
<bonniot>except in some cases that are optimized17:34
adding the equals method in Enum precisely made the optimization not applicable anymore17:35
<arjanb>anyway the cause of the slowdown is found and isn't a bug that's most important for now17:38
<bonniot>yes17:39
<arjanb>i hope finding future problems will cost less time17:41
<bonniot>one lesson to learn is to check for new files in diffs :-)17:45
funny that equals was not even needed after all...18:21
<arjanb>equals caused only a third of the time increase18:23
<bonniot>what cause the rest? toString and hashCode?18:30
<arjanb>yes18:32
<bonniot>that's strange, because equals should be longer (if there are N classes, there are N*N couples)18:42
<arjanb>i don't how the dispatch test generation works and the influence of the garbage collection is quite large in these cases19:48
i think i have found a bug23:53
this compiles:
<T> void foo((T,T)->T f, T x, T y)
{
x = f(x,y);
}
but this not:
<T> void bar((T,T)->T f, T x, T y);23:54
<T> bar(f, x, y)
{
x = f(x,y);
}
simplified:23:57
<T> void bar(T->T f, T x);
<T> bar(f, x)
{
x = f(x);
}
<bonniot>i'm still working on this aspect00:10
i'll check your example with my new code
oh, sorry, I thought it was about default values like the bug I am working on00:12
been working too much :-)
<arjanb>you have working on bugs the whole evening?00:13
do you think this is a new bug?00:14
<bonniot>yes, it's been quite a hard one for me too...00:22
but it's working now, and i'm more happy with the solution than the previous one (which was only partial, as it turned out)
about your code: no, it is not a bug
<arjanb>?00:23
<bonniot>in a method, the type of each parameter is not the declared type, but some unknow type below it
otherwise, something like the following would be unsound00:24
class A {} class B extends A {}
<A T> T foo(T);
foo(x) { x = new A(); return x; }
let B b = foo(new B());
the x = new A() must fail00:25
and to do that, the type of x is not A, but some X, for X <: A00:26
<arjanb>i see i simplified it to much what i wanted to do was something like:
<T> void bar(T->T f, T x);
<T> bar(f, x)
{
var y = f(x);
}
<bonniot>that works00:27
<arjanb>a moment i trying to find the original back00:28
simplified it this:00:32
<T> void bar((T)->T f, T x);
<T> bar(f, x)
{
var y = x;
y = f(x);
}
or is this a unimplemented feature?00:33
<bonniot>no, it's the same as the previous one00:37
since you declare var y = x, y has the same type as x
if you declare var T y = x, it works
<arjanb>so why isn't var y == var T y ?00:38
wait this is the same as my feature request for type change by assignment00:41
but the type printed in the error message may need improvement00:46
Incorrect type in assignment to y
Found : <type(x)<T <: t45> t46
Expected: type(x)<T
type(x)<T is created in methodbodydefition00:58
i could change it to T(x)00:59
there are over 800 testcase now01:05
<bonniot>i agree the type notation is not very clear...01:06
but i don't see the logic in T(x)
what is it?
<arjanb>it's type T and the name of the argument is only additional information01:08
<bonniot>why not01:16
<arjanb>in reply to what?01:18
<bonniot>the name T(x)01:22
how is visibility doing?01:31
<arjanb>no change the last 2 days01:33
<bonniot>what is the status?01:35
<arjanb>i'm looking at it and wait until i know exactly how to implement it01:37
just my usual way of doing such things01:52
<bonniot>ok01:55
i'll go to bed...
<arjanb>and i'm going to help Bryn with the additions to the stdlib(because he is short in time) so i'm experimenting with hof's now
<bonniot>are you in contact with him about that?01:56
<arjanb>yes
<bonniot>good
<arjanb>goodnight01:59
* arjanb leaves02:00
* bonniot leaves02:16

Generated by Sualtam