Your point is understood, but suffices only to take us round and round in circles.tiger wrote:chrisw wrote:Ahem. Copied? I would prefer "used the idea". And if it's one line of code, there's not much else he can do, is there?bob wrote:So, you copied TSCP, which uses setjmp(). And then discovered it is a bad programming solution and removed it. Good. But notice where you got it from. That is the point of this minor side-issue. It is just another indication that perhaps something was copied, because good programmers do not use it for _many_ reasons. Perhaps Fruit started life as TSCP as well, who knows? But if programs that are suspected of being connected by common source, share a particular feature that is known to be bad programming, it is just another hint that things might have been copied...Uri Blass wrote:I do not know but movei used setjmp() at the beginning like tscpGuetti wrote:Leaving the setjmp() relevant or not argument aside for a moment, come on, you state that you believe that an engine used setjmp()? Isn't that a bit vague? You demand always hard facts and source and pretty aligned code from Zach and Christoph, so were are the facts of Ren Wu chess?chrisw wrote:Bob argued that the existence in the Rybka code of setjmp() was "interesting" because this also existed in Fruit and nowhere else.
Uri pointed out that Tom Kerrigan's public program TSCP also used setjmp() and that some other programs were likely/possibly developed, legally, off TSCP as basis.
I'm an engine programmer and always had user interface programmers working in support, so I got very lazy and understand very little about DOS, windows, C support functions and so on. setjmp() knowledge is no way a speciality of mine.
However, casting my mind back many years, I'm fairly sure that the Ren Wu Chess program which was also worked on by Ren at Oxford Softworks used setjmp() to unwind the search on a timeout. CSTal, by contrast, did a proper search unwind.
There are two ways to exit Search() on a timeout or user intervention. The 'correct' way, I suppose, is to unwind the Search back to the start using unmove simultaneously unstacking the variables.
The brutal and simple way is simply to jump straight out, reseting the stack pointer. I guess this is setjmp().
I'l be very surprised if numbers of programs, especially those designed years ago without SMP in mind, didn't use the brutal setjmp() technique to break the search.
Bottom line: setjmp() is not unique and its use doesn't imply anything, certainly it cannot imply copied code.
Would you believe Zach if he would write he believes that the eval of Rybka is identical to Fruit without further comment?
You always want to see facts, so please before you do a conclusion, gives us some facts.
When I look at the (far from complete) list of chess engines released in recent years at http://wbec-ridderkerk.nl/html/enginesindex.htm, I wonder how many of these engines use setjmp()? 10 of 200? More?
I think it is still a good indication, not a prove.
and I simply learned from the code of tscp.
I got rid of setjmp later because I read people said it is not good
so it is not clear how many engines use setjmp.
old movei use it
new movei does not use it and you can download both old movei and new movei from wbec site.
Uri
I never claimed it to be the ultimate proof. I simply said it was another suspicious detail because it is such a lousy way of writing a program.
What if someone reads Crafty use of null move? The call is one line
value = -Search(ply-2); basically
how are we going to get a suitable value back from Search() without telling it to take 2 of the search depth?
Some things just are as they are.
Of course by dissecting the source code into individual lines you can use the argument "one line of code cannot possibly breach the GPL".
Considering that a 4000 lines program is composed of individual lines, and that no single line alone can breach any copyright license, then it follows that none of these lines can breach the GPL and so the program is clean.
We are talking of blocks of code that are identical or equivalent semantically. The probability of them happening in two programs writen independantly is so tiny that it makes them appear suspicious.
// Christophe
You say "blocks of code that are identical or equivalent semantically".
We say "show us".
And Zach says "stop pressurising me, it takes time"
So we say "ok, we'll wait for the code"
And you say "blocks of code that are identical or equivalent semantically"
etc. etc. etc.
Shall we wait for your best shot at identical code chunks and take it from there?
Or at this point, you tell us you already have done?
We say where?
So you say, I'm not holding your hand, go look.
So we find one thing, but actually you were referring to something else.
This has the advantage, you can flame us for being stupid.
... to be continued, thread page 94