faIan36 wrote
By the way, I think it would be a good feature to allow all orders of destination letters. However, I'm not at that chapter yet so I don't know how hard it would be to implement.
It's not hard to implement, but it is harder to implement than a strict implementation of the given mnemonics. Keep in mind that the complexity has been kept intentionally as low as possible and that many students taking this course have very limited programming experience (and that it is taught at the high school level in many places). Also, the course covers such a breadth of material, that the amount of time and effort spent on any one aspect is kept to a minimum so that they can do what is required and move on. You might have noticed that there was no requirement to build a 2-input Nor gate in Chapter 1, even though that is a very fundamental building block gate (in fact, the course could have been called Nor2Tetris). The reason is simply because the project doesn't actually need a 2-input Nor gate, so since it's not needed, it's not there.
The supplied tools are a bit schizophrenic when it comes to the mnemonics, and hence buy the worst of both worlds to some degree. By accepting multiple orderings of some mnemonics, it blurs the distinction of what a mnemonic is. For instance, the assembler accepts both A+D and D+A. This creates the impression that these are not mnemonics, but rather expressions that are being evaluated. But they aren't. In other instances, like D+1, the alternative 1+D is NOT accepted by the supplied tools.
Personally, I would argue that the supplied tools should be strictly-conforming to the language specification, that way if a student writes a strictly-conforming assembler, they will be able to correctly assemble any program that the supplied tools assembles. If the supplied assembler accepts programs with alternate orderings, then that student is faced with a situation in which there are programs that the supplied tools will assemble but that their assembler won't, and will likely jump to the conclusion that there is something wrong with their assembler.