Mool is a mini object-oriented language in a Java-like style with support for concurrency, that allows programmers to specify class usage protocols as types.
The specification formalizes (1) the available methods, (2) the tests clients must perform on the values returned by methods, and (3) the existence of aliasing and concurrency restrictions, all of which depend on the object’s state.
Linear and shared objects are handled as a single category, allowing linear objects to evolve into shared ones. The Mool type system verifies that methods are called only when available, and by a single client if so specified in the usage type. Mool builds upon previous works on (Modular) Session Types and Linear Type Systems.
Team
Project
Some Examples
The language main programming features and concepts are best described by some examples. You can download the compiler and the complete set of examples, or run the examples online.
The Petition
An online petition service starts with the submission of the title of the petition (“Save the Iberian wolf” in the example), and the deadline for signature collection. Then, time comes for promoting the petition: signing and disseminating. The petition writer signs the petition, and must get others to sign it. Hopefully the writer’s acquaintances will further sign and disseminate the petition, thus contributing to the success of the campaign.
Class PetitionServer
has one single purpose: to create Petition references. Class Petition
implements the (linear) protocol for submitting and the (unrestricted) one for promoting the petition. Class Signatory
is on the client side, as well as class SaveTheWolf
, which conducts the petition setup.
The FileReader
Reading from a file should follow the rules of a well-known usage protocol: first a file must be opened, then it can be read multiple times (without reading beyond the end-of-file), and finally it must be closed. Class FileReader
does exactly that by implementing the File
protocol formally described in the class usage type. The FileReader
, in turn, exposes its own file reading protocol, additionally offering a choice of obtaining the file contents read up to a given point, and eventually providing unrestricted multi-threaded access to the file contents.
The Auction
Sellers want to sell items for a minimum price. Bidders place bids in order to buy some item for the best possible price. The auctioneer controls these interactions. The distinguishing feature in this example is the specification of the (linear) protocols in the form of two classes – the Selling
and the Bidding
– which the Seller
and Bidder
classes implement. Class Auctioneer
creates the Auction
instances, which are saved in the AuctionMap
, and returns Selling
and Bidding
references to the several Seller
and Bidder
clients.
Downloads
Download the Mool prototype compiler, including usage instructions and examples: mool-v0.3.zip.
Because the Mool compiler targets the CLR, you will also need to download and install Mono.
Try Mool
Head over to the online tutorial to learn and practice Mool with no installation on your machine.
Publications
-
-
- Behavioral types in programming languages, Foundations and Trends® in Programming Languages, 3(2-3):95–230 , 2016 (PDF) ,
- Sessions, from types to programming languages, Bulletin of the European Association for Theoretical Computer Science (BEATCS 2011), 53-73 , 2011 (PDF) ,
- Channels as Objects in Concurrent Object-Oriented Programming , 3rd International Workshop on Programming Language Approaches to Concurrency and Communication-cEntric Software (PLACES 2010), 12-28, 2010 (PDF) ,
- Linear and shared objects in concurrent programming, MSc Thesis, Universidade de Lisboa, 2010 (PDF) ,
-