This blog will follow the trials and tribulations of designing a new programming language designed to allow productive development of parallel, high-integrity (safety-critical, high-security) software systems. The language is tentatively named "ParaSail" for Parallel, Specification and Implementation Language.
Thanks to my colleague Olivier Henley, the full sources of ParaSail (and more) are now on GitHub: https://github.com/parasail-lang/parasail There is a discussion forum there for asking questions about the implementation: https://github.com/parasail-lang/parasail/discussions Below is the "readme" file from this GitHub repository: The ParaSail Programming Language This is the main source code…
I am happy to announce a new blog about the Design and Engineering of Programming Languages. Only two entries so far. Here is the first: http://designandengineerpl.blogspot.com/2020/07/the-role-of-programming-languages.html The intent is ultimately to create a book-length series of writings on the topic. Of course, we know where good intentions can lead! In any case, we hope these blog entries…
We are happy to announce a new release of ParaSail. This new release incorporates an enhanced interactive debugger that is automatically invoked when the interpreter encounters an assertion, precondition, or postcondition that fails at run-time. In addition, the sources for run-time library code that is potentially linked into compiled ParaSail programs now carries a license which allows such…
We very recently had a long paper on ParaSail published in the relatively new Journal of the Art, Science, and Engineering of Programming ( http://programming-journal.org ). This is an interesting journal, which is trying to rejuvenate the writing of Computer Science journal articles, rather than having essentially all interesting research showing up as Computer Science conference papers.…
ParaSail supports generic functions where the type of the parameter is determined at the point of call. The most common use of this capability is with the string concatenation operator "|": interface PSL::Core::Univ_String<> is ... op "|"(Left, Right : optional Univ_String) -> Univ_String is import(#concat_string) op "|"(Left : optional Univ_String; Right : optional Right_Type is Imageable<>) ->…
Finally, at long last a new release of ParaSail. This new release incorporates an interactive debugger that is automatically invoked when the interpreter encounters an assertion, precondition, or postcondition that fails at run-time. This is also the first release where pre- and postconditions are fully analyzed, and checked at run-time. Finally, this has one modest enhancement to the ParaSail…
We have just made a release of the ParaSail interpreter, VM, llvm-based compiler, and ParaScope static analysis tool (aka "static catcher of programming errors"). This is version 7.0. It includes a nearly complete re-write of the llvm-based compiler. After attempting other approaches, we finally went back to the ParaSail front end and had it annotate every PSVM instruction with a set of virtual…
We have just made a release of the ParaSail interpreter, VM, and compiler. This is version 6.5, and is mostly a bug-fix release relative to 6.3. We are working on a static analyzer and optimizer for ParaSail, and this release contains prototypes for both of those (ParaScope, and a combination of ParaScope and the compiler). The static analyzer can be invoked using "bin/scope.csh file1.psl…
We now have an LLVM-based compiler for ParaSail , thanks to great work this past summer by Justin Hendrick, a summer intern from Cornell. To download the latest source release for both the ParaSail interpreter and the LLVM-based compiler, visit http://parasail-lang.org There are a number of interesting design issues associated with creating a compiler for a pointer-free, pervasively parallel…
Here is a PDF for a recent paper describing in more depth ParaSail 's pointer-free approach to parallelism: http://bit.ly/ps15pfp Here is the abstract from the paper: ParaSail is a language specifically designed to simplify the construction of programs that make full, safe use of parallel hardware. ParaSail achieves this largely through simplification of the language, rather than by adding…
Bootstrapping The compiler is now able to compile many ParaSail programs and most of the ParaSail Standard Library. It's probably easier to just list the things we know it can't do yet: functions as parameters functions with locked or queued parameters Pretty small list, right! Well, to be honest, it's the list of known bugs. There are probably bugs we don't know about. The most exciting thing…
Hello, It's Justin again. See the previous blog post for a bit of context. (Hint: we're building the compiler) Linking to the Built-ins The interpreter has a library of functions it uses to evaluate ParaSail code. We don't want to and can't write every ParaSail operation directly in llvm. So, it was necessary to link the generated llvm code with the interpreter's built-in functions. At first we…
My name is Justin Hendrick and I'm an intern working on ParaSail for the summer. My first task is code generation. Up until now, ParaSail has been interpreted. We’re proud to announce that we’ve begun building the code generation phase, written in ParaSail, that generates LLVM Intermediate Representation code. For information about LLVM see llvm.org and the reference manual . So far, we can…
ParaSail has three basic iterator formats, with some sub-formats (unbolded "[ ... ]" indicate optional parts, unbolded "|" indicate alternatives, bold indicates reserved words or symbols that are part of the syntax itself): 1. Set iterator: for I in Set [ forward | reverse | concurrent ] loop ... 2. Element iterator: for each E of Container [ forward | reverse | concurrent ] loop ... or for each […
We are now releasing revision 5.2 of the ParaSail compiler and interpreter, which incorporates a new implementation of work stealing . Links to both binaries and sources can be found at: http://parasail-lang.org in the Documentation and Download section of the web page. Here is the new entry in the release notes for revision 5.2: * [rev 5.2] Re-implementation of work stealing to reduce contention…
ParaSail has some very general parallel iterator constructs. One of the more unusual involves the use of a continue statement to initiate a new iteration of an outer loop statement, as illustrated in this breadth-first search of a graph: var Seen : Array<Atomic<Boolean>, Indexed_By => Node_Id> := [for I in 1 .. |DGraph.G| => Create(#false)]; *Outer* for Next_Set => Root_Set loop // Start with the…
Over the past few years there seems to have been an increasing number of discussions of the difference between concurrency and parallelism. These discussions didn't seem very convincing at first, but over time a useful distinction did begin to emerge. So here is another attempt at trying to distinguish these two: Concurrent programming constructs allow a programmer to simplify their program by…
The ParaSail family of languages is growing, with two more additions now available for experimentation. We have made a new release 5.1 which includes all four members of the family -- ParaSail itself, Sparkel based on the SPARK subset of Ada, Javallel based on Java, and Parython based on Python. Binaries plus examples for these are all available in a single (large) download: http://bit.ly/ps51bin…
The ACM HILT 2013 conference just completed in Pittsburgh, and we had some great tutorials, keynotes, and sessions on model-based engineering, as well as on formal methods applied to both modeling and programming languages. One of the biggest challenges identified was integrating complex systems with components defined in various modeling or domain-specific languages, along with an overall…
I gave an 80-minute "tech talk" and a 3-hour tutorial on parallel programming last week at SPLASH 2013 in Indianapolis. The audiences were modest but enthusiastic. The tech talk was entitled: Living without Pointers: Bringing Value Semantics to Object-Oriented Parallel Programming Here is the summary: The heavy use of pointers in modern object-oriented programming languages interferes with the…
Designing and implementing ParaSail has been a fascinating process. Achieving parallelism and safety at the same time by eliminating rather than adding features has worked out better than we originally expected. One of the lessons of the process has been that just a small number of key ideas are sufficient to achieve safe and easy parallelism. Probably the biggest is the elimination of pointers ,…
We are pleased to release alpha revision 4.7 of the ParaSail compiler and virtual machine, available at the same URL: http://bit.ly/Mx9DRb This release includes a large number of bug fixes , plus the following enhancements : More support for operations on polymorphic types, including binary operations, where it is an error if the two operands have different underlying types, unless the operator is…
We now have a (non-blog) web site for ParaSail : http://www.parasail-lang.org We will use this in the future as the official starting point for reaching resources for ParaSail, and in particular, getting to the latest documentation and downloads. We will also be creating some examples, and ideally an online Read-Eval-Print-Loop (REPL) for trying your own examples. If you have questions or comments…
Here is a paper that goes with the talk I am giving this coming Tuesday, April 23 at the DESIGN West, aka Embedded Systems Conference, in San Jose, on a comparison between Go , Rust , and ParaSail . If you are in the Bay Area, come on down. The talk is ESC-218, on Tuesday April 23 from 2:00-3:00PM in Salon 3: http://www.ubmdesign.com/sanjose/schedule-builder/session-id/98 NOTE: Some browsers are…
Here is a video of a presentation on ParaSail given at Mozilla Research in Mountain View, CA a couple of weeks ago, to the folks who are developing the Rust language: https://air. mozilla .org/ region-based-storage- management-parasailing- without-a-garbage-chute/ A particular area of interest was the use of pointer-free region-based storage management which eliminates the need for a garbage…