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 - - - - - - · 567 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 - - - - - - · 552 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 - - - - - - · 586 views
Go obtain the goodness.

Epoch Plans for the Future

Posted by ApochPiQ, 17 April 2013 - - - - - - · 1,146 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 - - - - - - · 539 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 - - - - - - · 596 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,121 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 - - - - - - · 718 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 - - - - - - · 509 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,141 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 »