> This is also a challenge, as Forth usually requires machine language, call stack access, and is naturally written in assembler.
Not really. Many implementations indeed do that, but only in pursuit of performance - the weakness of interpreted languages is speed. Otherwise one can just implement it as a bytecode interpreter, like e.g. Lua.