Tuesday, December 29, 2009

Status update

Lots of filling in of details lately:
  • Reflection of default constructors now works, allowing objects to be created via reflection.
  • Started implementing the standard hash functions (using MurmurHash). This is needed so I can write a HashTable collection.
  • Sketched out a few more i/o classes and interfaces.
  • Added a new linker pass that attempts to calculate the overhead of reflection. The largest chunk is the strings representing class and method names.
  • Started work on Tart implementation of String.format.
  • Tracking down bugs.
Unfortunately, there are a number of issues that are vexing me and won't go away. This includes:
  • CMake making me crazy.
    • I have two libraries, almost identical - yet when I declare both libs to be a dependency of a custom target, only one gets rebuilt. I can force CMake to build the second one by explicitly giving the name on the command line, but it fails as a dependency.
    • Another CMake problem is that I can't seem to make a rule that causes dsymutil to run on OS X but not on Linux.
    • And yet another issue is that CMake's lack of extensibility means that there's no way to scan a Tart module for dependencies. I'm constantly running into problems where a module is out of sync with one that it is based on. (Eventually I am going to make my own Tart-based built tool, "mint", but that's a long ways off.) I do have the dependency info embedded in the generated module (using metadata nodes), but there's nothing that can read it.
    • However, being able to generate an eclipse / MSVC / makefile project is just too useful to give up. So I don't want to migrate away from CMake.
  • Several of the unit tests fail when LLVM optimization is turned on, and I can't figure out why.
  • Still haven't been able to generate correct DWARF info for parameters and local vars. Also, I sort of figured out how to get my exception personality function to "see" the stack trace (using dlsym), but unfortunately none of the LLVM-generated functions appear on it - only the ones written in C.
  • LLVM IR is so hard to read, what the world really needs is a graphical browser for global variables and functions.
--
-- Talin

No comments:

Post a Comment