Quorum Changelog

What's new in Quorum 2.0

Jun 15, 2013
  • Type System Changes:
  • A number of changes have been made to the type system, finishing off a set of long planned alterations. We hope now that Quorum conforms to the best available empirical evidence.
  • Actions that return a primitive text value can now return undefined.
  • Text primitives can now be assigned as undefined.
  • Added the ability to call actions on primitive values. For example, we can now add a colon after an integer and call any action provided by the Object version of the primitive. Generally, this makes it far less necessary to instantiate an object for a primitive type. The solution for this is relatively efficient, as behind the scenes, Quorum calls a static action, with only very slightly more overhead than calling the action on the object.
  • Added all of the new type system features into the code completion APIs, meaning that integrated development environments using Quorum, like Sodbeans, should get them for automatically and without alteration.
  • Language Additions/Changes:
  • The "print" keyword has been changed to "output." This change conforms to data from our surveys with novices, in addition to conforming to common sense. For example, getting input from Quorum required using the word input, but getting output previously required using the word print. This made little sense, as print could have meant printing to a printer, not necessarily printing to a console. This way, input implies input and output implies output, making the language more consistent. All standard library materials, book materials, and curricular materials have been altered for the change.
  • Changed the phrase "of type" in the Error architecture to "is."
  • Changed the phrase "is a" in the inheritance system to "is."
  • Finished a very basic initial version of accessibility APIs for Quorum. This version is largely a proof of concept, but provides some infrastructure calls down to various operating systems and unifies accessibility calls (NSAccessible, IAccessible). This first version is available only for the Windows operating system and only works when using compiled mode.
  • Fixed a bug in the compiler causing extra items to sometimes be wrapped into an output .jar file.
  • Added the -server command line flag. This flag turns Quorum into an HTTP server, where code can be sent to it and the output is returned. Additionally, the -server insecure can be called turn off security settings while in this mode. This last mode is not recommended unless the user is running the server locally.
  • Added a new flag, -java. This flag allows the user to pass an existing Java jar file to Quorum. When passed, Quorum will automatically wrap any code into the built jar's manifest on compile. This should make it easier for external groups to combine their existing Java code with Quorum projects.
  • Finished a significant optimization pass of the compiler. There is always more work that can be done in this area, but a number of the bottlenecks in the Quorum 1.7 branch and earlier have been hammered out.
  • Significantly improved the -verify flag, which now gives a much better idea as to which methods have non-compiling, missing, or otherwise broken examples in the documentation.
  • Removed the "quote" token from the language. Now, the text primitive or object can return special character codes by calling actions, including arbitrary unicode values. Helper methods are available for common special characters (e.g., newline, quotes, tabs).
  • Lots of bug fixes.
  • New Quorum Website:
  • We have substantially revamped the Quorum website, including adding the ability to run some Quorum programs online and the ability to rate the words/symbols used in the standard library, in an effort to improve them further.
  • The website now has a much improved look and feel.
  • The page for finding files in the standard library is now grouped by category, hopefully making it easier to find classes.
  • The Quorum website is now easily searchable.
  • Users can now login to the website through google or a custom account.
  • Pages with documentation generated by the compiler now allow the user to rate various attributes of a class (e.g., the class name, variable names, action names). The user must be logged into to rate.

New in Quorum 1.7 (Jun 15, 2013)

  • Quorum now has a type inference system that can be used on the inside of actions (but not in declarations). In effect, this means that users can write phrases like "a = 5" and the compiler will still statically check, but will allow the type declaration to be excluded under many circumstances. This new system partially completes changes to the Quorum 2.0 type system, which conforms to user studies with humans done by our team and Stefan Hanenberg.
  • Substantially altered the static analysis tools internally to Quorum. This greatly increases the quality of the types of tools that can be built on top of the compiler. For example, Sodbeans now has much better code completion support due to this upgrade.
  • Added new web libraries for Quorum. This initial version is in beta and will be completed in Quorum 2.0. The current version, located in Libraries.Web supports the HTML 5 specification (or by calling print "my page here"). There are a number of limitations in this first release, but a basic web server can be created by passing the -web tag to the compiler (or in Sodbeans).
  • Added a hash table to the standard library under Libraries.Containers.HashTable.
  • Added a class for handling bitwise operations to the standard library under Libraries.Compute.BitwiseOperations.
  • Made more changes to the compiler errors output by Quorum as part of our continuing mission to make Quorum easier to use.
  • Updated and expanded the curriculum and documentation for Quorum.
  • Added a way to pass and use command line arguments.
  • Fixed a bug with the "me" keyword.
  • Fixed a rare, but critical, bug in the inheritance system.
  • Fixed an odd bug in the scoping system.
  • Fixed a number of small edge-case bugs.

New in Quorum 1.6 (Jun 15, 2013)

  • Fixed a number of bugs with the error system (called exceptions in other languages). These changes include a near rewrite of the bytecode generation algorithms for this system.
  • In order to help identify problems in the future, we have added a considerable number of test cases for the errors system. We think these tests offer a much more complete automated suite for this part of the compiler.
  • Fixed some bugs in the control flow analysis algorithms. These fixes will not impact the runtime behavior of any Quorum programs, but will make alternative control flow sequences that are illegal or impossible a little bit more obvious.
  • Improved the clarity slightly of a few compiler errors. As always, making compiler errors easier to understand is a work in progress.
  • Fixed a number of small edge-case bugs.

New in Quorum 1.5 (Jun 15, 2013)

  • Significantly altered the syntax for conditional statements (if). The reason for this change is because we ran an empirical study, which showed evidence that novices using this construct made consistent errors, especially in the use of the token "then" and "end" on the inside of else if constructs. There is still one more set of tests we would like to run on this construct, to reveal whether the keywords "else if" lead to higher accuracy than our current choice, "elseif." We have not yet discovered clear empirical evidence in the academic literature, so will probably end up running the tests on our own.
  • Made minor changes to check-detect syntax. Like if statements, we removed the inner "end" statements. We did not run a formal empirical study on this change, but we thought it was a likely conclusion, given the if statement results. Further, this change keeps our language consistent across language constructs.
  • We now have a new Quorum Interpreter
  • In internal tests, this includes a speed increase from between 1,100% and 21,000% speed improvement for simple examples. This timing data includes just the speed the interpreter runs, not compilation speed.
  • This interpreter is now used by default if the -interpret flag is used. For example, "quorum -interpret Main.quorum" would use the new version.
  • Added quite a few new compiler tests. These tests have helped us to identify and fix a host of bugs (mostly minor) in the compiler, including a host of edge cases.
  • Quorum now has a significantly improved documentation generation system
  • Changed the -document flag so that it now auto-generates HTML5 documentation for Quorum libraries.
  • Added a new flag called -verify, which automatically checks that any "examples" used in the documentation compile.
  • Updated the online wiki Quorum documentation to the 1.5 syntax.
  • Significantly improved the quality of code examples in Quorum documentation.
  • Fixed a major compiler bug that didn't allow the user to access parent variables.
  • Library Changes
  • Completed a total redesign of the File class. We're looking for feedback on this class, but hope that it will be easier to use.
  • Minor bug fixes in the music and sound classes.
  • Fixed a number of bugs in classes like Random and the Containers.
  • Added a new class called Libraries.Sound.Audio, which can playback media files. In this first release, it is designed to make it easy to playback .wav files easily. Future releases will probably expand the functionality further, depending on whether we get any user requests.
  • Added a new set of Robot Control Libraries for interacting with iCreate's CBC robot controller.
  • Adjusted the design of Compiler error messages. Our changes here are pretty minor, but our goal was to generally make the messages more consistent and obvious to users. users that find error messages that still are not clear should please feel free to file a bug report.
  • Lots of bug fixes.

New in Quorum 1.0 (Jun 15, 2013)

  • Fully compiled down to Java bytecode
  • Static, but flexible, type checking
  • Unique control structures, heavily tested to be easy to understand by novices and professionals
  • Object-oriented language
  • Standard Library (e.g., data structures, music generation, text-to-speech)
  • Plugin system for extending Quorum
  • Integration with the NetBeans IDE
  • Talking Omniscient debugger (The debugger literally talks to you and tells you what is going on).