1 unstable release
0.1.0 | Apr 16, 2022 |
---|
#2431 in Rust patterns
715KB
19K
SLoC
Teaching C Interpreter
The goals of this compiler are:
- Provide better error messages for new programmers
- Make debugging C programs easier
Rationale
Learning C is hard. Students have to navigate pointers, segmentation faults, and bit manipulation, all while working without garbage collection, usually for the first time. This interpreter aims to address this problem by giving better error messages and more runtime diagnostic tools.
Features
- Better debug information
- Stack traces on segmentation fault
- Harder errors: the following all cause a segmentation fault
- use-after-free
- buffer overflow
- double free
- out of memory
- stack overflow
- calling string functions with a string that isn't null-terminated
Todo
Lots of stuff left to do still.
Compiler
- Const
- Enums
- Designated initializers
- full support for
#if
- Better macro debug messages
- Better parsing error messages
- Hardening against invalid input
- Unified error system
Runtime Environment
- Leak detection: manual memory management is hard sometimes
- Processes and threads: students often learn multithreading paradigms in C
- Program arguments && Standard input - good functionality to have
unistd.h
: because sometimes professors be like thattime.h
: because sometimes you gotta do that- Variable/type information at runtime: allows student to use TCI as a debugger
- Full kernel replayability: go backwards in time when using TCI as debugger
User Interface
- Working file system explorer
- Runtime file explorer
- Terminal emulator (without shell)
- Service worker for caching stuff locally
- Github Issue/Bug-fix-request button
- User interface for runtime/compiler options
Restrictions and Incompatibilities
- Implicit types on functions will never be supported
- Implicit function declarations will never be supported
Credit
- TCI uses an error renderer plagiarised from
codespan-reporting
to make error messages. - TCI uses a parser plagiarized from
lang-c
to handle parsing the C language
Dependencies
~3.5–6.5MB
~111K SLoC