
u/Cool-Statistician880

I’ve been working on a systems language experiment called Falcon, built around one core idea:
The execution environment is enforced at compile time, not decided externally.
Falcon introduces profiles:
- userland → heap, runtime, I/O allowed
- kernel → no heap, no runtime calls, restricted operations
- baremetal → only hardware-level access (MMIO), no runtime at all
These are not runtime modes or build flags in the usual sense they are enforced as part of the compilation pipeline.
If code violates the selected profile, it fails to compile.
Design overview:
- Implemented in Rust
- Pipeline: AST → IR → LLVM backend
- IR is intended to be the single source of truth
- Profile filtering + validation happens before codegen
- No runtime branching based on profile
Current features:
- Compile-time profile enforcement (userland / kernel / baremetal)
- LLVM-based code generation
- Basic type system (currently being hardened — removing fallback behavior)
- Partial ownership checks (use-after-move detection)
- Cross-compilation support (x86, ARM, AVR targets)
Current limitations:
- Not memory safe (no borrow/lifetime system yet)
- Generics are incomplete
- Closures currently non-capturing
- Type checking still being tightened
Repo:
https://github.com/jhonpork1233-beep/FALCON
I’m looking for feedback and review on the design, implementation, and overall direction.