"DEBUG" builds vs "CHECKED" builds

Since this is a language project, the term "Debug" winds up having a bit of an overloaded meaning.

In an ideal world--and this ideal world will hopefully come to pass--the system will have a debugger in the interpreter for helping people diagnose their code.

But then, there is instrumentation added to the system itself--for its own debugging. Today we call that "a debug build" of the interpreter.

This is pretty standard--when you ask for a debug build of something, that means it has symbols and asserts in it. It's a known term in the development culture. Julia or Python or whoever calls their instrumented version "The Debug Build"

10.2. Building and Using a Debug Version of Python — Python Extension Patterns 0.1.0 documentation

But there is another term used in the kernel and OS world called a "checked build".

Would Calling It A "Checked Build" Be Clarifying or Confusing?

I feel like reserving the term "debug" to use for features related to what the user would call debugging of their code may make more sense--even though this may be a bit odd for a language project vs. an OS one.

Plus the flag names make more sense. Take a flag with a name like DEBUG_UTF8_EVERYWHERE... if it were CHECK_UTF8_EVERYWHERE that sort of gives a better impression of what's going on. You're asking for instrumentation that runs independent of whether you actually are debugging anything. In fact, you can add these checks while not having any "debug symbols" in your build.

I happen to be doing some tweaks that make this a good time for such changes if they are to be made.

This sounds like a reasonable approach.