brain icon indicating copy to clipboard operation
brain copied to clipboard

Compiling Libraries and Linking

Open sunjay opened this issue 7 years ago • 0 comments

In order to support libraries, we want to be able to compile brain code into a special library format akin to C/C++ object files and Rust rlib files. There should be a command line argument which compiles some code into a library and outputs a file in the library file format.

Library Format

The library file format should be well defined. It should at minimum contain:

  • [ ] A magic number or pair of numbers to differentiate it from any other binary file
  • [ ] Version number that updates if and only if there are breaking changes made to the structures that will get stored in the file
  • [ ] All public functions exposed by the library and ideally only those functions (this might lead to some bloat)
  • [ ] Type definitions for all functions in the file
  • [ ] Body definitions which are low-level enough to not take a toll on compilation but high level enough for optimization to still take place
    • In a compact binary format like msgpack
    • Parameters should be in a format that is position independent (see #16)
    • Format should be resiliant enough to not change too dramatically when things like structures and unions/enums are added
  • [ ] Debug information if at all possible

TODO:

  • [ ] Add linking stage to compiler which resolves external types for static analysis and external definitions for actual compilation and optimization
  • [ ] Precompiled prelude distributed with the compiler
  • [ ] Be able to distinguish between user code and library code for better error messages and compiler errors (don't complain about outside crate warnings)

sunjay avatar Feb 26 '17 15:02 sunjay