The quick answer is: strip the executable and it will be a lot smaller. It's 23 MB because it contains over 20 MB of debugging info.
For a longer answer, refer to the Wiki page. However, I think that page should contain the short explanation right in the beginning. In general people are lazy readers and they can very easily get an idea, that the Wiki page is trying to defend 23 MB executables.
Another small note, which is a bit offtopic. The Wiki page writes, that people should not use UPX (compressed) binaries. UPX is actually really valuable with executables, that are run from a network share. Try this:
- Copy an exe of a big project to a network share.
- Execute it from there.
- Disconnect the network share.
- Try to open a new function or a new form or whatever and you get ugly access violations.
This happens as the executables are not fully loaded to the memory and the OS can't download more of the executable. And this does happen with Delphi executables just as well.
However, if you compress your executable with UPX, they are not vulnerable to this problem.