Table of Contents:
- Introduction (1/11)
- Goals and Architecture (2/11)
- The inotify API (3/11)
- File Watcher, C++ (4/11)
- File Watcher, Bash (5/11)
- Execution Engine (6/11)
- Containerization (7/11)
- Kubernetes (8/11)
- Demo (9/11)
- Conclusion (10/11)
- System Setup (11/11)
- Source code
This concludes the series on creating a multi-language compiler system. Just from the length and number of posts, it is clear that a lot goes into creating something like this. Through this series of posts, a full, feature-rich, end-to-end pipeline was developed that can do the following:
- Take in an arbitrary input file for a supported language
- Compile (if needed) and execute the source code
- Provide console arguments to the executable
- Provide interactive input to the executable at runtime
- Run in multi-threaded mode and support multiple compilations and executions at the same time
- Provide a degree of security through isolation of compilation and low-privilege execution in a containerized environment
- Provide time limits on how long a compilation and execution process can take
- Allow for scaling the number of system pods by language
- Isolate language-specific environment setup so that new languages can be added easily
Overall, not too bad for a project that took a couple of weekends. But as always, there are things that are missing or that could be improved. I hope that anyone who took the time to go through these posts has learned something from them and gets a better understanding of how these multi-language compiler systems work.