Parrot is a virtual machine designed to efficiently compile and execute bytecode for dynamic languages. Parrot currently hosts a variety of language implementations in various stages of completion, including Tcl, Javascript, Ruby, Lua, Scheme, PHP, Python, Perl 6, APL, and a .NET bytecode translator. Parrot is not about parrots, though we are rather fond of them for obvious reasons.

PAST Optimization: GSoC is over

The Google Summer of Code pencils-down date was last Monday. GSoC is now over, but I don't plan to stop working on my project.

The initial goals listed in my project proposal were:

  • A library for PAST traversal.
  • A framework for PAST optimization and analysis tools.
  • A regular-expression-like pattern matching library for PASTs.
  • An optimization to turn tail-calls in PAST into PIR ".tailcall".

Hybrid Threads: GSoC Project Results

I proposed a pretty ambitious Google Summer of Code project this year. Although I didn't manage to do everything I hoped, I did manage to get a useful subset of threading functionality working in the gsoc_threads branch. In this blog post I will describe what I have working and what more needs to be done.

Moving to multiple OS threads

Now that I have the basic green threads (Task) API basically working, it's time to start mixing in OS threads. I plan to do that in two steps: First I'm going to use OS threads to solve the key issue with the green threads implementation - blocking IO. The result of this will be basically equivilent to CPython threads-with-GIL. The second step - real parallel thread execution - will have to wait for after GSoC pencils down.

PAST Optimization: plans for the final weeks of GSoC

I spent this last week working on Tree::Optimizer (and getting distracted by Rakudo *).

I've got the functionality described in my blog post last week mostly finished. The only thing remaining is making sure that recursive passes correctly handle nulls, which I'm about to work on.

The Google Summer of Code is almost over. Next Monday is the "suggested 'pencils down'" date. The following Monday is the "firm 'pencils down'" date. After that are final evaluations.

Here's my plan for the remainder of GSoC:

  1. Merge the pass-manager branch of my project's repo into master.

The extra pointer has to go.

I reached the midterms mostly as scheduled, and NFG is pretty much feature complete now. There's still some stuff to do here and there, but the 'big ticket' items are done. So, I have been looking at what needs to be done before the gsoc_nfg branch can be merged back into trunk. And that means giving a hard look at all of the places where I've cut corners and see if they can be made better. It's mostly minor stuff, like leaving out a cast, or not paying attention to const mismatches in a few places. Most of it is just a matter of code cleanup. Until you see the extra pointer I added to string headers.

Cleaning up and speeding up optimizations with Tree::Optimizer

After a false start earlier this week, I've begun implementing something like LLVM's PassManager. It can be found in the pass-manager branch of my project's git repository.

Today, I'm going to talk about adding optimizations to compilers using my GSoC project without Tree::Optimizer and with it. Note that most of the features of Tree::Optimizer that I describe here are not yet implemented.

Green Threads: A Classic Example

Now that I have green threads basically working with the API functionality I discussed in my last blog post, I've been working on coming up with tests/examples that clearly demonstrate both how green threads in Parrot work and that they work as advertised. With that goal in mind, this blog post is about a classic concurrent programming example: The Sieve of Eratosthenes.

The uneventful mid-term week and the future of PAST/Tree Optimization

This has been an uneventful week in my GSoC work.

Parrot's 2.6 release is Tuesday, and I've taken on the task of updating Squaak to modern NQP-rx prior to it. Because of that and my GSoC midterm evaluations, I haven't spent much time hacking on Tree::Pattern or on optimizations using it this week. I plan to finish working on Squaak tonight or tomorrow, commit my fixes to trunk, and finally get back to work on my GSoC project. I'm a little behind schedule now because of that, but I plan to work hard on optimization for the rest of GSoC.

Green Threads: The Task API

Now that I have pre-emptive task switching between green threads basically working, I need to figure out what the API to interact with them wants to look like. Additionally, I need to clean up this scheduler thing that I've mauled in order to make the API and terminology consistent.

Syndicate content