New entry
30-May-2017 23:35
Version 2.1.2 Released#

We have released version 2.1.2 of Orc, a minor update. This release makes no language changes. The release updates Orc's dependencies on Scala and Java to versions 2.12 and 8, respectively.

There are multiple ways to run Orc:

1. Use our Try Orc ( ) feature to experiment with Orc in your Web browser.

2. Use the Orc plug-in for Eclipse, available as "Orc" on the Eclipse Marketplace. (In Eclipse, use the menu item Help > Eclipse Marketplace) If you already have the Orc plug-in for Eclipse installed, use the Check for Updates menu item to get the update.

3. Orc is also available as a standalone JAR which you can use to run programs on the command line. You can download the release archive from GitHub at .

Happy Orcing,

--The Orc Language Research Team

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.
10-Sep-2012 09:41
Orc on Android#

An experimental port of Orc to the Android platform has been performed by by Ricardo Bernardino and João Barbosa of the University of Coimbra as part of a UT Austin|Portugal CoLab project. See the OrcAndroid page.

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.
12-Apr-2009 19:46
Google Code, Subversion, and v0.9.8#

This weekend the project made some major administrative changes.

  • Most importantly, we changed project hosting from SourceForge to Google Code. All SourceForge services are now deactivated, including CVS and hosting of old releases. Old releases are available in source code form via version control; if there is demand for pre-packaged binaries of old releases, I can put them on Google Code.
  • We changed version control systems from CVS to Subversion. Google Code has the SVN repository information. For more details on the switch, see MigratingToSvn.
  • We changed our source code license to the "New" BSD license. The new license has more liberal terms than our previous license (which forbade commercial use) so this should not affect anybody already using our code.
  • We cleaned up our library dependencies to ensure we are complying with licensing terms for all bundled third-party libraries.
  • We released version 0.9.8, primarily to make the binaries available under the new license.
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 () :: ..."
01-Apr-2009 12:02
New paper completed#

We recently completed a new paper to appear in Proceedings of FMOODS/FORTE 2009, where Prof. Misra is the invited speaker. While most of the material in the paper has already appeared in an expanded form in the user guide, this paper serves as a slightly more compact introduction to the Orc language and its use.

07-Mar-2009 11:49
News Blog Added#

This is the first official entry in the Orc news blog. The goal of this blog is to provide a record of activity on the project, such as releases and important bugfixes. Just so the blog doesn't look embarassingly empty, I have posted some old release notes, back-dated.

Some recent documentation activity:

  • There is now a community-maintained FAQ. Hopefully this will grow as we get more users asking questions.
  • The User Guide now includes a fairly comprehensive chapter on implementing sites to be used by Orc programs.

I'd also like to report a few enhancements to the development version of Orc (available via CVS):

  • The standalone compiler has a new option -oil which allows you to generate an XML representation of a desugared AST, called OIL (Orc Intermediate Language). This should be helpful for external analysis tools and alternate implementations of the engine, so they don't have to implement their own parser and compiler frontend. You can learn about the structure of OIL from the Javadoc. To generate a copy of the schema, run the class orc.ast.oil.Oil (bundled with the compiler JAR).
  • For people interested in developing their own compiler backends who don't want to parse OIL XML, there is a demonstration of how to invoke the compiler frontend and translate OIL to an arbitrary intermediate representation:
07-Mar-2009 11:27
Version 0.9.5 Released#

Highlights of this release:


  • New syntactic sugar "x?" and "x:=y" for reference reads and writes.
  • Operators can be written in prefix form (or unapplied) using parentheses: "(+)" is equivalent to "lambda (a,b) = a+b".
  • New "type" declaration for declaring algebraic data type constructors.
  • Any combinator is allowed unparenthesized within if/then/else.
  • Allow apostrophe in var names.
  • Allow nested comments.
  • Newline-sensitivity avoids ambiguity about where expressions end.


  • Equality operator "=" now obeys substitutability principle.
  • New semantics for semicolon operator: in "a ; b", "b" runs only if "a" fails without publishing any values.
  • Java fields can be accessed with the dot operator.


  • Standard library organized, documented, and expanded with many more useful sites and definitions.
  • Experimental support for "doc" tags ala javadoc, translated into docbook syntax by a special parser.


  • Enforceable limits on recursive stack depth and logical threads.
  • A closure only keeps variables used in the closure live, for garbage collection purposes.
  • Definitions are organized into mutually-recursive groups to keep environments small and avoid false depenendencies on futures introduced by the pruning combinator.

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