cc

module
v0.0.0-...-cfd4396 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 19, 2015 License: MIT

README

{ "Minimalist", "C", "Compiler"}; /* WIP */

Artwork by Egon Elbre based on the Go gopher by Renee French

Goals

  • Aggressive removal of cruft.
  • Fast.
  • Simple.

Status

NOT UNDER DEVELOPMENT

This compiler has been ported to C here https://github.com/andrewchambers/c where development continues. This was done to allow self hosting far earlier, increase speed, increase portability, and decrease binary size. Interestingly, the C version is less lines of code too.

Building

go get github.com/andrewchambers/cc/cmd/x64cc

Contact

Hacking

The code is heavily inspired by https://github.com/rui314/8cc as well as http://bellard.org/tcc/. I recommend studying the source code of 8cc before contributing here, as 8cc is currently far more mature.

  • The compiler is implemented in Go.
  • The compiler currenty does no optimization, this is intentional.
  • Contributions to this project are welcome, I will respond on gitter or via email.

Bugs

Yes.

When the compiler is more mature, we can do automatic bug hunting using the following resources:

The bugs can then be automatically reduced to minimal form using http://embed.cs.utah.edu/creduce/ (https://github.com/csmith-project/creduce).

Ideas

  • Concurrency using goroutines - C can be compiled a function at a time, so there is a lot of room for this.
  • Compile toolchain to javascript using Gopherjs, make a demo site.
  • Implement a companion Go -> C compiler, then compile ourselves with it.
  • Allow preprocessor include paths from archives to allow sdk's to be packaged as a single binary + archive.
  • Implement a backend that is similar to llvm, expose this as a library for other language frontends.
  • A companion assembler/linker to remove the dependence on binutils.
  • An SSA optimizing backend.
  • Compilation of Go1.4 so we can bootstrap ourselves.

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL