Jump to content

  • Log In with Google      Sign In   
  • Create Account

The Bag of Holding

More self-hosting goodness

Posted by ApochPiQ, 22 April 2013 - - - - - - · 571 views
Bytecode generation is done... more or less. I have a feeling there's a few instructions that are still missing but the compiler test suite passes so obviously there's plenty of stuff that does  work...Instead of spamming my journal here with noise about this every couple of days, I'm going to keep a running thought log over on the Epoch wiki .Code genera...

Self-Hosting Progress

Posted by ApochPiQ, 20 April 2013 - - - - - - · 555 views
As I've discussed previously, my goal for Epoch Release 15 is to get the compiler self-hosting. In a nutshell, that means that an Epoch program will be used to compile all other Epoch programs, including itself.To do this, I'm working backwards from the compiler back-end first to the lexer/parser last. This allows me to retain all of the language's featur...

Epoch Release 14 Shipped

Posted by ApochPiQ, 18 April 2013 - - - - - - · 587 views
Go obtain the goodness.

Epoch Plans for the Future

Posted by ApochPiQ, 17 April 2013 - - - - - - · 1,153 views
Release 14 of the Epoch programming language  is now live!That brings us to the pertinent and slightly bothersome question: what will be worked on for Release 15?There are a number of features I'm interested in improving and/or implementing, ranging from object lifetime semantics to parallelism functionality. Strictly speaking, any and all of these featur...

Release 14 imminent...

Posted by ApochPiQ, 14 April 2013 - - - - - - · 542 views
So I've been looking over my past notes and decided that I'm pretty happy with the state of affairs over in Epoch land. The garbage collector is running, tuned for reasonable performance, and successfully keeps the native-code realtime raytracer clamped at a decently small degree of RAM usage.The only thing that really bugs me is that the GC has imposed a...

Victory is mine!

Posted by ApochPiQ, 14 April 2013 - - - - - - · 598 views
It was an epic fight, but I finally managed to subdue the last few LLVM garbage collection bugs and get a full test suite pass.I'm kind of tired (it's 5:30AM and I've been running all night) so I'll try to reword that a little more clearly:Epoch is, as of right now, passing all compilation and runtime tests (all 62 of them) with full, aggressive, and accu...

Real-world garbage collection with LLVM

Posted by ApochPiQ, 10 April 2013 - - - - - - · 2,134 views
The last major task for release 14 of the Epoch programming language  is integrating garbage collection with the LLVM-supported JIT native code generation layer.Ostensibly, LLVM supports hooks for making garbage collection possible. It doesn't take much digging to find out that this is a complete lie, and LLVM is actually pretty terrible at interoperating...

Epoch Release 14 Finalization Plan

Posted by ApochPiQ, 08 April 2013 - - - - - - · 719 views
Last night at some unholy hour I finished a first pass at marshaling Epoch data back and forth across C-ABI boundaries. In less annoying terminology, this means that Epoch programs can do things like call Windows API functions, C-compatible APIs in other DLLs, and so on. More interestingly, those APIs can be given Epoch functions as callbacks, so there is...

Almost there...

Posted by ApochPiQ, 07 April 2013 - - - - - - · 510 views
Today I wrapped up the last Epoch compiler test suite failure besides C-API marshaling. That means 53 of 54 compiler tests are passing as pure native code - no VM to get in the way and slow things down.Once C marshaling is in place, I'll need to rework the garbage collection implementation a bit, and then I'll have a complete Epoch implementation in JITte...

Implementing Higher Order Functions on Top of LLVM

Posted by ApochPiQ, 07 April 2013 - - - - - - · 1,144 views
One of my favorite features of the Epoch programming language  is the inclusion of first-class higher order functions:apply : (thefunction : ){    thefunction()}apply : string param, (thefunction : string -> string) -> string ret = thefunction(param)mutate : string param -> string ret = param ; " foo"entrypoint :{    string s = apply("test", m...

April 2013 »