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
As before, if you are interested in sources, visit:
http://sparkel.org
The biggest change in ParaSail was a rewrite of the region-based storage manager (actually, this same storage manager is used for all four languages), to dramatically reduce the contention between cores/processors related to storage management. The old implementation was slower, and nevertheless still had a number of race conditions. This one is faster and (knock on wood) free of (at least those ;-) race conditions.
As far as how Javallel relates to Java, here are some of the key differences:
http://bit.ly/ps51bin
As before, if you are interested in sources, visit:
http://sparkel.org
The biggest change in ParaSail was a rewrite of the region-based storage manager (actually, this same storage manager is used for all four languages), to dramatically reduce the contention between cores/processors related to storage management. The old implementation was slower, and nevertheless still had a number of race conditions. This one is faster and (knock on wood) free of (at least those ;-) race conditions.
As far as how Javallel relates to Java, here are some of the key differences:
- Classes require a "class interface" to declare their visible operations and fields
- There is no notion of a "this" parameter -- all parameters must be declared
- There is no notion of "static" -- a method is effectively static if it doesn't have any parameters whose type matches the enclosing class; no variables are static
- You only say "public" once, in the class, separating the private stuff (before the word "public") from the implementation of the visible methods.
- Semi-colons are optional at the end of a line
- Parentheses are optional around the condition of an "if"
- "for" statements use a different syntax; e.g:
- for I in 1..10 [forward | reverse | parallel] { ... }
- "{" and "}" are mandatory for all control structures
- You can give a name to the result of a method via:
- Vector
createVec(...) as Result { ... Result = blah; ... } - You have to say "T+" rather than simply "T" if you want to accept actual parameter that are of any subclass of T (aka polymorphic). "T" by itself only allows actuals of exactly class T.
- Object declarations must start with "var," "final," or "ref" corresponding to variable objects, final objects, or ref objects (short-lived renames).
- There are no special constructors; any method that returns a value of the enclosing is effectively a constructor; objects may be created inside a method using a tuple-like syntax "(a => 2, b => 3)" whose type is determined from context
- X.Foo(Y) is equivalent to Foo(X, Y)
- Top-level methods are permitted, to simplify creating a "main" method
- uses "and then" and "or else" instead of "&&" and "||"; uses "||" to introduce explicit parallelism.
- "synchronized" applies to classes, not to methods or blocks
- enumeration literals start with "#"
There are examples in javallel_examples/*.jl?, which should give a better idea of what
javallel is really like. Parython examples are in parython_examples/*.pr?
We received a comment complaining about the various Parython examples, as not being very Python like yet. That's true. This is an early release of Parython, and many of the examples were just mechanically converted. We plan to get there eventually...
ReplyDelete