I have just discovered the educational power of porting software. Everyone says you should read other people’s source code, but I have found that to be hard to do in practice. For one thing, it’s boring. For another, it’s easy to fool yourself into understanding it. A port can teach you several things at once:
You will truly understand how the program works.
If you’re learning the language you’re porting to, you’ll learn that as well.
You might even learn the language you’re porting from
This was the case for nasmjf in which I learned Forth, how a Forth interpreter works, NASM assembly, and a fair bit of GAS assembly.
The next thing I want to port is sed.