Ubiquity of multicore processors has created a demand to support parallel processing in all programming languages. However, the dynamic nature of scripting languages makes supporting correct parallel programming in these languages especially difficult. Recent research has enabled safe parallel programming through speculative program parallelization. This project extends these techniques to support parallel programming in the Ruby language. The work focuses on three areas: the interpreter, the core language libraries, and the garbage collector. Through experimentation on Ruby, the research helps to understand the general synergy and limitations when a dynamic language meets dynamic parallelization.
The resulting parallel Ruby implementation is a general-purpose parallel language that can be used by non-programming experts. Because of its ease of use, it is expected to be very useful for rapid prototyping of parallel programming applications and teaching parallel programming across all scientific disciplines. Transfer of this technology is facilitated by open-source distribution of the code on the Web. Outreach activities associated with the project include work with pre-college students, recruitment of students from under-represented groups, and collaboration with industry. Education is integrated with the research through involvement of students in the language implementation, and by experimentation with the use of the parallel Ruby language in several courses.