C// version history

  1. #2014-06-11: original version submitted to the class (not published online)
  2. #2022-09-30: first version on my website:
    • Removed my last name from the files in the project
    • Changed the directory structure for the test output; also there are now some "expected output" files to compare to (previous version just compared unoptimized vs. optimized)
    • Changed the makefile and do-test scripts:
      • Use the new directory structure
      • All testing stuff is now in ./do-test, rather than some of it being in the makefile; also you can now run all tests just by typing ./do-test with no arguments
      • Things no longer depend on Makefile, so my changes to the makefile won't cause the project to be considered dirty (running make on a newly-extracted archive should say that all targets are up-to-date, if modification dates are preserved).
    • There is now a README with information on compiling and dependencies
    • Added return 0; to a few programs' main functions, to avoid warnings and undefined behavior.
    • Made HTML versions of everything, and added a home page. Also the HTML versions fix a misspelling (modifyable → modifiable).
  3. #2023-09-16:
    • Wrote a transpiler to Rust, and wrote some stuff about it.
    • Some bugfixes for the transpiler to C:
      • Fixed a bug where assigning to a member of a nested struct would cause the compiler to go into an infinite loop.
      • The transpiler now prints out the name of the step it's on (added to debug the previously-mentioned bug, and I left it in).
      • Now checks that structs are defined before they're used in other structs. This was required by the specification, but not checked; violating this requirement caused the transpiler to generate C code that doesn't compile.
      • Now checks that main has the right arguments and return type. In the earlier version, this wasn't caught as an error but caused the transpiler to generate C code that doesn't compile. Missing main still doesn't result in an error, because in theory you could use the generated code as a library (not that I'd recommend it).
      • Added a lot of tests that I wrote for the Rust version.
    • Also a few minor formatting changes.
    • Also fixed the size next to the download link. I don't know why that was wrong.