emadsen wrote: ↑Sun Feb 07, 2021 12:28 am
Marcel, this seems out of character for you. Why the hostility? Excuse me for being direct, but don't you feel your harsh criticism here is a bit misaligned with the strength of the engine you've written? Sorry, I said it. I don't know, maybe you're just having a bad day.
Maybe it came across a bit too harsh. Sorry. That wasn't the intention. I *REALLY HOPE* that hojic writes a really didactic engine that can teach people how to write a chess engine, in Racket, if they want to do so. The reason why I'm skeptical about "I'm going to write a didactic engine" often turns out to be "I wrote a pile of code that somehow plays chess, and I flung it onto GitHub. Good luck." You can't image how many "didactic" engines I tried to compile and use in my early tests as comparisons and either failed to either compile, or run them properly because of missing documentation or bugs. Engines with uncommented, and nearly unreadable code.
Rustic is going to be what people would call a "didactic engine", with commented code (35%+ of Rustic's source code is actually comments, explaining what and why the code is doing), and documentation to go with it. (I'm writing that now, actually.) Not because I want to write a didactic engine, but because that is how I write software.
The strength of the engine is of no consequence at this point. "The engine you've written" sounds as if it's done and over with. It isn't. It has no features, and it sits there in the rating list at +/- 300 ELO stronger than similar featureless engines. You have a particular rating in mind (stronger than Madchess 2, probably) before you release the engine as Madchess 3. I have no previous engine to use as a benchmark, so I can just release the first, most basic version and build on that.
What are you talking about? Combusken (3111) is written in Go. Chess22k (3077) is written in Java. TomitankChess (2818) is written in JavaScript. My modest engine (2530) is written in C#. All of these languages have a managed-memory runtime with a garbage collector.
I am convinced that if Combusken was written in Rust, which is about 4-5x faster than Go for the same application, the engine would have been in the 3200 range already. I'm not going to discuss why I dislike Go, Java, JavaScript, Python, PHP and quite some other programming languages, because then I'll probably seriously offend some people, which I don't want to do.
Of the managed languages I've used up until now, I think that C# is the only one moving in the right direction, if Microsoft can manage to get it to compile to a single 1 MB executable with .NET 5; maybe they can now. They couldn't with Core 2.x and 3.x.)
Algorithms matter more than programming language. Your advice reminds me of a guy who gets really into poker and shows up at a home game wearing a hoodie and sunglasses...
The difference between the hoody/sunglass guy is that I can indeed play chess, and write software. Rustic's basis is solid (with the exception of using int instead of enum for pieces and squares, which I'll have to look into someday). I'm convinced that the only limitation of my engine's strength is how much effort, time, and computing power I'm willing or able to put into it.
Nomis wrote: ↑Sun Feb 07, 2021 1:18 am
I don't think that was his point. I read his message as:
It would eat me alive to think that my engine could be (even marginally) faster and have 20+ elo had I chosen C++
Basically, yes. I work(ed) in industrial engineering, where software is required to do things like package 50 units per minute. If the software is only 10% slower than expected and handles 45 objects/min, that means it'll fall short by 5 units * 60 minutes * 8 hours = 2.400 objects in a working day, or about 50.000 units a month.
So yes... when I added incremental evaluation to my engine, the evaluation function (and search) got MUCH faster, but it took me some time to accept the 10% speed drop of the Perft function, even though I _knew_ beforehand that this function was going to slow down.
Seeing the search speed become slower and slower as I add more evaluation to my engine fills me with dread even only thinking about it... even though I know the engine will become stronger because of the extra evaluation terms.