# Coding Guidelines For Bochs

- Don't make use of any external C++ classes. They are not offered on all platforms and this would make bochs non-portable. There is use of such classes in the optional debugger. I plan on removing this use.
- Don't use fancy C++ features. Bochs is incredibly performance sensitive, and will be increasingly so as more speed enhancements are added. There's a time and place for most everything and this is not it. Some advanced features create overhead in the generated code that you don't see. They also convolute the code, and sometimes occlude what is really going on.
  - Don't use templates.
  - Don't use virtual functions.
  - Don't use C++ exceptions.
  - Don't use overloading of any kind.
- Use soft tabs. At least when you submit code, convert all hard tabs to spaces. There is no uniform way to handle tabs properly.
- Prefix screen spew with a pound sign ('#'). If you want to spew something out to the screen rather than the bochs.out file, send it to stderr (not stdout), and prefix the string with a pound sign. This is so that a text interface which drives bochs (the debugger) can discern between messages and command responses.
- Please do compile with all warnings turned on. It's really difficult to spot interesting warnings when a compile is littered with non-interesting ones.
- Don't use signed ints where unsigned will do.