Earlier i’ve written that the compiled program should never crash, but now i want to correct myself - we can crash for problems during initialization. But if we’ve initialized successfully, we must continue working in any case.
This is because on initialization of e.g. core, we allocate crucial stuff, and if we’ve failed to do that, there’s no point to continue. So user running the program will understand that something went wrong right away.
Another question - plugins. Good plugin architecture involves partial loading - if plugin is failed to initialize, it might be skipped (as well as probably it’s dependencies), and tried to be manually reinitialized at runtime. But for core module - it’s crucial to setup everything correctly, or never continue.