New entry
05-Jun-2015 23:52
Orc on GitHub#

With the shutdown of Google Code Project Hosting, we have migrated to GitHub. This, of course, means that we have changed our version control system to git.

All of the Orc source repository, release files, and issues (including history of each) is now available at

Be sure to "star" the orc-lang/orc repo on GitHub.

21-Sep-2013 23:56
Version 2.1.0 Released#

Orc 2.1 is a new revision of the Orc implementation. This release is backward compatible with all Orc 2.0 programs, however it does have a few language improvements and extensions. In addition, significant work has gone into improving the underlying implementation.

See our Downloads page for detailed instructions on how to download and use Orc within Eclipse, locally within your Web browser, or from the command line.


  • Support for virtual clocks.
  • Optional declaration-expression separator "#" added that disambiguates the end of a declaration.
  • InvokeExecutable class in the standard library allows Orc to spawn OS processes.
  • Sites added to the standard library: zipWith, listToJavaList, listToArray.
  • Support for Unicode escapes in Orc strings.


  • Updated Scala dependency to 2.10.
  • Fix blocking on strict site call arguments; if any argument halts the entire call will halt regardless of the state of other arguments.
  • Improved runtime error messages.
  • Documentation of the Orc standard library has been expanded and improved.
21-Apr-2011 12:00
Version 2.0.0 Released#

Orc 2.0 is a new major revision of the Orc implementation. The core codebase has been rewritten in Scala, and the internal structure of the compiler and runtime have been altered and improved substantially.

The user-level surface language has also changed. Orc 2.0 is not backwards-compatible with previous versions of Orc. Here are the detailed release notes on the user-visible changes to the language. Guidance on how to modify programs written in the previous version of Orc to make them run under Orc 2.0 is on the UpgradingYourProgramToOrc2.0 page.

See our Downloads page for detailed instructions on how to download and use Orc within Eclipse, locally within your web browser, or from the command line.


  • Support for records: record expressions, record types, record patterns, and record extension using +
  • Function clauses may have arbitrary guard conditions.
  • New web library section, with sites Browse, HTTP, ReadJSON, and WriteJSON
  • New xml library section, with XML manipulation sites.
  • Enhanced parse error messages.
  • Enhanced compiler and runtime error messages, with links into the Orc Wiki.
  • The .oil compiled representation of Orc programs now has a standard public format, given by
  • Orc compiler and runtime support JSR 223.
  • Orc 2.0 has a full Reference Manual.
  • Added site IterableToStream to convert Java objects implementing Iterable to a more Orc-appropriate idiom.
  • Any value with an apply member can be called; the call is forwarded to the apply member.
  • Any value with an unapply member can be used in a call pattern; the match target is forwarded to the unapply member.


  • def capsule is now def class.
  • site is now import site.
  • class is now import class.
  • type is now import type for external types. Type aliases and datatypes remain unchanged.
  • The three import declarations require the Java class name to be a quoted string.
  • The comparison operators < and > are now <: and :>.
  • if site is now Ift. Ift has a counterpart, Iff.
  • IArray is now Table.
  • Rtimer is now Rwait.
  • Buffer is now Channel. BoundedBuffer is now BoundedChannel.
  • "Nonblocking" sites, with the suffix 'nb', are now "definite" sites, with the suffix 'D'.
  • Site names are now capitalized by convention. This has changed many sites in the standard library: Let, Print, Println, Error, Read, Write, Floor, Ceil, Random, URandom.
  • Keywords are reserved. (Previously one could, for example, define a function named "stop".)
  • Orc identifiers may now use Unicode letters.
  • Fixed bugs in Floor and Ceil.
  • Arrays no longer have any methods. They have one field, length. For slice, use the new function sliceArray.
  • Arrays no longer pattern match as lists. Use arrayToList.
  • Descendants of Iterable no longer pattern match as lists. Use iterableToList.
  • All Orc programs and includes are interpreted using the UTF-8 character encoding.


  • Tracing facilities have been removed.
  • Experimental support for Orc exception handling syntax has been removed.
  • Special treatment of interaction between if then else and >> in parser has been removed.
  • if then without else is no longer supported. Always use if then else.
  • Equality (=x) pattern is gone. Use a guard on the clause instead.
  • Special treatment of newlines has been removed. Ambiguous syntax can be eliminated with the insertion of signal >>.
  • Curried definition of functions, lambdas, and function types are no longer allowed. Expand these explicitly as chained lambdas instead.
  • Record has been removed; use primitive records instead.
  • Set and Map have been removed; use Scala or Java counterparts instead.
  • cat has been removed, use + on strings instead.
  • Clock has been removed, use Rclock instead.
  • Ltimer and withLtimer have been removed.
  • Apply has been removed.
  • Thread has been removed.
  • () as a synonym for signal has been removed.
  • All uses of and dependencies on Kilim have been removed.
05-Mar-2010 17:12
Version 1.1.0 Released#

See our Downloads page for detailed instructions on how to download and use Orc within Eclipse, locally within your web browser, or from the command line.

This release is backwards compatible with Orc 1.0. Any Orc program that runs under Orc 1.0 with no command line switches will also run under Orc 1.1, with the same behavior.

Major updates:

  • The Orc implementation has been updated to Java 6, since Java 5 is now deprecated.
  • The execution model for Orc programs has changed substantially. The compiler no longer generates a directed acyclic graph from the OIL abstract syntax tree; instead it executes directly on that syntax tree.
  • A new definition, capsule, is now available. Orc capsules provides this facility for programmer to define active objects in Orc. The creation and execution of capsule is protected from the execution and termination of the rest of the program. capsule is documented in the user guide.
  • A new site, Site, is now available. It takes a single argument, which must be a closure, and returns a site which, when called, executes that closure as if it were a site.

Minor updates:

  • URLs may be used in include declarations. This is especially helpful when using a web-based interface, as it allows access to include files hosted on another server.
  • Unused function definitions are now trimmed from the program AST during compilation; this substantially decreases compile time and sometimes improves performance as well.
  • There is a new -noexecute switch which suppresses execution of a program, performing only compilation. Typically this is used in concert with -typecheck or -oilOut.
  • The Top type is now interchangeable with java.lang.Object; this is a minor weakening of the type theory, but in practice it is useful and causes no problems.
  • The signal value now has a unique type, Signal. This is analogous to the unit type in typed functional languages such as ML.
  • Calls to the Record site which use string literals for field names are now statically typable.
  • Type parameters may now be written inline in defs and lambdas.
  • The experimental isolated keyword has been removed entirely. Its functionality is mostly subsumed by the Site site.
  • The stub code for the atomic combinator has been removed entirely. A full implementation of atomic will be added to a future release of Orc.
  • The OAuth protocol used in OrcSites and Orchard has been updated to protocol version 1.0a.
  • In the Orc Eclipse plug-in:
    • The outline view distinguishes between function definition clauses and function signatures.
    • The New Orc file wizard is improved.
    • Orc program run configurations now have an Alternative Orc Runtime Engine tab, to allow programs to run with an Orc Runtime Engine other than the built-in one. This permits experimenting with, and debugging of, the Orc language runtime.
    • If not specified, the working directory of a program is now the directory containing the program.
    • JavaSE 6 (or newer) is now required.
  • The Orchard WAR/JAR bundling has been completely re-worked: now orchard.war bundles only Orc-specific JARS in its lib; "common" JARs, such as JAX-WS are external.
  • The Orchard "try Orc" demo has much friendlier error handling.
09-Sep-2009 14:40
Version 1.0.0 Released#

This is our first major release.

Major updates:

  • There is now an Eclipse plugin for Orc, compatible with Eclipse versions 3.3 and later. It is available from the Downloads page. Thanks go to John Thywissen for his hard work in creating this plugin.
  • We have introduced experimental support for exception handling. Exceptions are documented in the user guide. Thanks go to Andrew Matsuoka for his hard work in designing and implementing this feature.
  • The static typechecker is now a permanent language feature. It is no longer experimental, though it is still optional to use. It is documented in the user guide.

Minor updates:

  • The isolated keyword, which creates isolated actors, is now disabled by default; use -allowIsolated to enable it.
  • Parser error reporting has only slightly improved; in particular, the parser will clearly report when an Orc program has no goal expression.
  • Relative paths in include are now relative to the file that contains the declaration, rather than an Eclipse workspace or some system default. The -I switch still works as before.
  • There is now an equality pattern, =x, which matches against the value bound to x, rather than binding a value to x.
  • The AST classes within the compiler have been significantly refactored to improve readability.
03-Apr-2009 14:25
Version 0.9.7 Released#

This is a maintenance release, with no significant new non-experimental features.


  • Allow Orc to load include files from the filesystem: use the -I option to specify the include path.
  • Experimental support for "isolated" actors which are garbage collected when blocked permanently.
  • Adding Record site for creating record-like objects.
  • Demo of a compiler backend which translates OIL into Orc-like source text.
  • Adding -oil option to Orc compiler to output Oil.
  • Report parse errors in include files more clearly. Report a few kinds of parse errors (where backtracking is unwarranted) more clearly.
  • Type assertions are now available; write :!: T to assert T as the type of an expression or the return type of a definition.


  • Detect when a program is blocked permanently (sometimes) and halt execution.
  • New semantics for nested logical timers: a parent timer can advance when its children are quiescent (as opposed to halted).
  • Moving to lib.state.
  • All non-Kilim Java methods and constructors should evaluate in the "sites" thread.
  • Publish pattern (!p) has been removed from the language completely.
  • Before/After events no longer appear in traces. A future version will restore this functionality.


  • Fix parsing of floating point. Bug found by Sydney.
  • Fix Eclipse 3.1 compilation issues.
  • Fixing OIL->XML serialization error with Orc field values.
  • Fixing parse error for "type x = lambda () :: ..."
07-Mar-2009 11:29
Version 0.9.6 Released#

The goal of this release is to get important bugfixes and enhancements released before we embark on a significant refactoring of the engine to make it more extensible.

Highlights of this release:


  • Improved prototype type checker and type annotation syntax: now actually usable for most real programs.
  • withLock, rangeBy, altMap, joinMap, seqMap functions added to stdlib.
  • types which can be tested for structural equality are registered in a set which can be augmented by user libraries.
  • Prototype runtime (dag, token, etc) support for transactions.
  • Prototype implementation of nestable and independent logical timers.
  • Set, Map, and Array support site call notation for reading and
writing elements, e.g. "a(3) := 4"


  • Compiler service works correctly.
  • Web service examples work correctly.
  • Compiles and runs under JRE 1.6 (Java SE 6).
  • The "unguarded recursion checker" handles semicolon correctly.
  • Fix bugs with foldr1 and range in stdlib.
  • Fix bug with using immutable values as keys in Map and Set.


  • Publish patterns (">!x>") no longer supported; use " >x> ( x | ... )" instead.
  • Stdlib "por" and "pand" take lists instead of two arguments.
  • "sequence" stdlib function renamed to "seq".
  • Left and Right datatypes no longer included in stdlib.
  • Tokens are no longer pooled; speed benefit is not significant enough to justify memory wastage.
  • Failed pattern matching in definitions causes an error message.
07-Mar-2009 11:24
Version 0.9.4 Released#

I'm pleased to announce the release of a new version, timed to coincide with the initial version of the new userguide. Some of the highlights of this release:


  • New syntactic sugar for if/then/else: if X then Y else Z <=> if(b) >> Y | if(~b) >> Z <b< X
  • New syntax "signal" as a (prefered) synonym for "()" and "let()"
  • "." may now be used to the right of any basic expression (not just a variable or call) so for example "3.toString()" should work.


  • Revised semantics for logical timers: logical time is not allowed to proceed as long as there are pending calls to any other sites. This semantics, while easier to reason about, makes correct programs harder to write, so we are still investigating alternatives.
  • Fixed semicolon operator so that the left expression is recognized as dead when all tokens have left it (even if they are not dead yet).
  • Support for constructing and using Java arrays, including primitive arrays.
  • Allow list deconstructors to be used on strings (like Haskell).
  • Java implicit unboxing and conversions work in many more cases.
  • Unguarded direct recursion is detected as a compile-time error.


  • Support for recording traces of programs, to be used for debugging and profiling tools current under development
  • Regression tests based on JUnit added. We can now test all of the example programs for correct behavior (ignoring non-determinism) as well as parsability.
  • Huge increase in efficiency of Java integration

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-4) was last changed on 09-Jun-2016 15:41 by John Thywissen