Aristarch originally was a BASIC program, developed on an old home computer (version 1). Version 2 was ported to C, but still was not able to beat even GNUChess, though it won against most IMs on ICC.
Version 3 was a complete rewrite in C++, using a strictly object oriented design, based on bitboards and the commonly known search extensions - but of course a lot of knowledge from version 2, especially about the evaluation function, was used.
Version 4 was a big jump in playing strength and included several optimizations regarding move generation, ordering and the evaluation function.
Version 4.21 has mainly one single change (besides small optimizations), that is a very nice method for pruning the search tree, which is active in the whole tree and is based on 8 simple conditions. It speeds up the search by 25 % and has an additional positive effect on the playing strength. I think it is a wrong assumption that pruning algorithms are only good for blitz games - null move pruning is the best proof. In addition, a bug was corrected in the hash table access, which seems to be part of the common publications and causes the so-called search instabilities.
In Version 4.37 lots of small things were optimized - one of the bigger changes is the pruning, which was made simpler and more efficient. In addition, this is the first version which makes use of the the so-called null-threat-extensions - curiously, it was extremely difficult to find a way of null-threat-extensions that works in Aristarch.
Version 4.40 is a minor update which corrects a bug that caused problems in Zugzwang positions in rare cases. (4.38 and 4.39 are unsuccessful trials to solve that problem and are buggy.)
Version 4.41 corrects a bug in tablebase access that was caused while moving the tablebase code into the DLL TBs.dll.
Version 4.50 is the first version optimized on Intel processors, that means it runs about 18 percent faster on Intel processors than previous versions. The enhancements also have an effect on AMD processors (8 percent). Besides that, an additional speed improvement regarding move ordering was made. Zugzwang fix of version 4.40 deleted because of curious effects.
The engine still lacks a lot of chess knowledge, especially regarding the end game (the evaluation function currently has about 2500 lines). Its approach to king safety is rather speculative, which significantly determins the playing style of Aristarch. The current search algorithms are designed to work with search depths of at least 9 or 10, so Aristarch will play weaker when not reaching these depths. That is normally no problem, but on slow hardware or with time controls of less than 3 minutes per game it may be relevant.
x is the major version number which changes whenever large parts of the engine are rewritten. y is the minor version number which changes whenever I publish or e-mail an internal version to someone. z is the revision number which changes whenever I make a backup of the source code. This normally happens when changes to the code caused an improvement. The revision number can only be seen by double-clicking the executable. It is not set to 0 if x or y changes.