When you try compiling a large MPS project (such as mbeddr or KernelF, or maybe your huge MPS project at work) immediately after checking it out from version control, MPS runs its model checker and you may get a large number of errors:

Model checker found 3358 errors and 270 warnings

This takes newcomers to MPS aback and makes them wonder if they did anything wrong or whether the project is hopelessly broken. But usually the errors are caused by the nature of MPS projects. A large MPS project contains not only languages but also code written in those languages (or, in MPS terminology, using those languages) such as test cases, quotations, or generators.

Before MPS loads the information about the structure of a language, its concepts and their features, the language has to be compiled. If a language hasn’t been compiled yet, from the point of view of the model checker its concepts do not exist.

The model checker is however not smart enough to recognize that a particular language used by the model has not been compiled yet. It will blindly check all the models in the project and happily report all the unknown concepts, links, and properties as errors. Fortunately, it is easy to ignore those errors and that is exactly what you should do before the first build.

Many projects have Maven or Gradle build scripts that fetch their dependencies before they build the project itself. Compiling such a project by running its build script first, before opening it in MPS, will save you time and make for a smoother experience.

Besides ticking the checkbox in the dialog above, model check before generation can also be disabled in the Build menu:

While as a language developer I personally disable this setting, I recommend that language users leave it enabled. Since they will work in an RCP that has all the languages pre-compiled, the model checker will only report genuine errors in their case.