The list of rules may change. The goal is to make programming in Rust fun.
Currently used in the B Compiler Project.
Use #![no_std] attribute to enforce this rule. core is allowed because there is currently no stable way to disable it. Using libc is allowed since rustc links with it anyway. But since no cargo is allowed you have to declare the necessary libc functions yourself in your crate.
You may also consider enabling #![no_main] and provide your custom C-style entry point to be able to get an access to command line arguments.
Every single user-made function must be marked as unsafe.
Raw pointers instead of references must be used for:
- Parameters and results of all the user-made functions;
- Members of user-made structs and enums;
- User-made global variables;
In the bodies of the functions references are allowed to be used for local variables and intermediate value.
Build with rustc directly pure C-style. Linking with external C libraries is encouraged.
Newer additions are too hostile towards Crust.
All user-made structs and enums must be #[derive(Clone, Copy)]
Everything is pub by default.
