1 个不稳定版本

0.1.0 2022年4月16日

#2769 in Rust 模式

MIT 许可证

715KB
19K SLoC

Rust 15K SLoC // 0.0% comments C 3K SLoC // 0.2% comments JavaScript 661 SLoC // 0.0% comments

教学 C 解释器

本编译器的目标是

  1. 为新手提供更好的错误信息
  2. 使调试 C 程序更容易

理由

C 语言学习难度大。学生在没有垃圾回收的情况下,通常第一次需要处理指针、段错误和位操作,这解释器旨在通过提供更好的错误信息和更多的运行时诊断工具来解决这一问题。

功能

  • 更好的调试信息
    • 段错误时的堆栈跟踪
  • 更难的错误:以下所有情况都会导致段错误
    • use-after-free
    • 缓冲区溢出
    • 双重释放
    • 内存不足
    • 堆栈溢出
    • 调用未以空字符终止的字符串函数

待办事项

还有很多事情要做。

编译器

  • 常量
  • 枚举
  • 指定初始化器
  • 完全支持 #if
  • 更好的宏调试信息
  • 更好的解析错误信息
  • 对无效输入的加固
  • 统一错误系统

运行时环境

  • 泄漏检测:有时候手动内存管理很困难
  • 进程和线程:学生在 C 语言中经常学习多线程范式
  • 程序参数和标准输入 - 好的功能
  • unistd.h:因为有时候教授会那样做
  • time.h:因为有时候你必须做那样的事情
  • 运行时变量/类型信息:允许学生将 TCI 作为调试器使用
  • 完全的内核可重放性:在将 TCI 作为调试器使用时,可以回溯时间

用户界面

  • 工作文件系统浏览器
  • 运行时文件浏览器
  • 终端模拟器(无外壳)
  • 本地缓存服务的工人
  • Github 问题/错误修复请求按钮
  • 运行时/编译器选项的用户界面

限制和不兼容性

  • 函数上的隐式类型将永远不会被支持
  • 隐式函数声明将永远不会被支持

致谢

  • TCI 使用从 codespan-reporting 窃取的错误渲染器来生成错误信息。
  • TCI 使用从 lang-c 窃取的解析器来处理 C 语言的解析

依赖关系

~3–5.5MB
~94K SLoC