ERights Home download / 0-8-26 
No Previous Sibling x On to: SWT Support

Highlights of 0.8.26h


New Unixoid Installer Script

Non-Upwards Compatible Changes

Term Syntactic Shorthand Expansion

Retiring Previously Deprecated Features

Replaced get/2 with fetch/2

New Experimental Features

Newly Deprecated Features

Build Changes to help GCJ

First Draft Causeway Code Included

Bugs Closed

New Unixoid Installer Script

In the E installation directory, or at e/src/csrc/setup/ in the sources, you will find the bash script inst-e.bash for helping you install E on Linux and other Unix-like platforms.

Thanks to Zooko. MarkM had problems trying to test it, so until further notice this isn't yet ready for prime time.

Non-Upwards Compatible Changes

Term Syntactic Shorthand Expansion

term`a=b` used to be equivalent to term`a(b)`. It's now equivalent to term`a(.attr.(b))`.

Like the other term syntactic shorthands, with this change, the '=' shorthand is now practically reversible in a context independent manner.

Derived from a suggestion of Dean Tribble's. Thanks!

Retiring Previously Deprecated Features

  • e.enable.no-dot-call property has been retired. Rather than the old "bob foo(carol)", one must now write "bob.foo(carol)".
  • e.enable.explicit-result-guard default setting changed from "warn" to "true". To prepare for changing to the easy-return style, we are going to go through a transition in which the hard-return style is required by default. The hard return style demands that a result guard always be declared. To prepare for requiring the hard-return style by default, we currently require an explicit result guard by default. This can be turned off on a per-module basis by saying pragma.disable("explicit-result-guard").
  • e.safej.bind-var-to-varName default setting changed from "true" to "false". Enabled public static and instance fields (member variables) of Java classes and objects, by default, may now only be accessed using the Java standard property name mangling convention. For example, a mutable field named "foo" becomes a getter method named "getFoo()" and a setter method named "setFoo(newValue)"
  • The e.persist.useJOSS switch and feature is no longer supported. Persistence now supports only Data-E serialization.

Replaced get/2 with fetch/2

We are not going to be making the agreed operator renamings, because I don't know how to do it without breaking our code base in a reasonable time frame. Therefore, "m[argsList,...]" continues to expand to "m.get(argList,...)". This is problematic for all the reasons mentioned in these threads, but we can live with it.

Given this, what we can't live with is the old two argument get, where the second argument is an "instead" value to be returned if the lookup fails. The problem is that "m[3,7]" expands to "m.get(3,7)", which doesn't correspond to any sensible interpretation of the earlier syntax. One should define get/n methods only for objects that are conceptually like n-dimensional arrays or something. All the arguments should be taken as keys for the lookup. Rather than deprecating get/2, we are getting rid of it now.

As discussed here, the old get/2 wasn't general enough anyway. The new replacement fetch/2 takes an insteadThunk as an argument. On lookup failure, it does a "return insteadThunk()". This provides all the flexibility of Smalltalk's #at:ifFail:. In particular, the insteadThunk, rather than returning a replacement value, can instead do a non-local exit.

Since fetch/2 invokes the insteadThunk using an immediate call, remote use would normally need to pass a PassByCopy insteadThunk. However, as we don't have auditors yet, we instead provide ValueThunk as a convenience. It's a PassByCopy thunk constructed with one value, that returns that value when invoked.

New Experimental Features

See this description of e.enable.verb-string. Thanks to Constantine Plotnikov for prodding me into adding this.

Newly Deprecated Features

  • "^" as synonym for the "return" keyword is now deprecated. Use "return" instead.
  • "//", used to start a line comment, is no longer supported. Use "#" instead.
  • JPanelQParserMaker.emaker is now deprecated. Use JPanel__quasiParser.emaker instead. This is already present in the privileged scope (the scope *.e files, *.updoc files, and command line expressions are evaluated in), so you only need to import this explicitly in *.emaker and *.caplet files.

Build Changes to help GCJ

These are based on an earlier successful experiment by Kevin Smathers of HP Labs to build a local (non-distributed) headless (no ui) E under GCJ.

Reordered e/src/jsrc/Makefile to place at the end of the build sequence things one may want to leave out, to ensure one can:

  • The Antlr parser
  • The ORO regular expression matcher
  • Most of the things dependent on AWT, Swing, or SWT. In particular, AWTRunner and SWTRunner have been moved from org.erights.e.elib.vat.* to under org.erights.e.ui.*.

In particular, we are trying to facilitate the porting of a local headless subset of E onto GCJ.

VatTP was currently depends on a sun.* package to do its ASN1 parsing. With the exception of this one issue, VatTP depends only on the Java standard libraries. GCJ, of course, doesn't provide sun.* packages. We've changed VatTP to use ELib to access this sun.* library reflexively, so that if it isn't available, we'll get a runtime error rather than a build-time error. This allows us to maintain one set of sources while trying to build the rest of E under GCJ. Paragraph obsolete now that this bug is fixed.

Similarly, if you try to make a Vat or Runner with a runnerKind of "awt" or "swt", if the AWTRunner or SWTRunner isn't available, we'll now get a runtime error rather than a build-time error.

Finally, Kevin and I identified a bug in the libgcj of gcc 3.3.3. The statement

java.lang.reflect.Array.set(array, i, null)

throws an exception even when array is an array of reference types (ie, not an array of scalars). The internal isntanceof check being used forgot to allow a null in this context. This release of E should successfully workaround this bug so long as the flag GCJ_WORKAROUND in ArrayHelper.java is set to true.

First Draft Causeway Code Included

Not yet ready for prime time. Stay tuned. See Distributed Space-Time Debugging for the basic idea.

Bugs Closed

    Thanks to...
Stale syntax-props documentation Kevin Reid
makeCycleBreaker syntax error Kevin Reid
javax.swing.JOptionPane tamed wrong Kevin Reid
VatTP depends on sun.security.provider.DSAPublicKey Kevin Smathers for finding
Bill Frantz for fixing
e.safej.bind-var-to-varName=false breaks universal scope's ??? Kevin Reid
CapDesk fails on new simple__quasiParser bug  
stray no-dot-call in ScopeSetup Kevin Reid
 
Unless stated otherwise, all text on this page which is either unattributed or by Mark S. Miller is hereby placed in the public domain.
ERights Home download / 0-8-26 
No Previous Sibling x On to: SWT Support
Download    FAQ    API    Mail Archive    Donate

report bug (including invalid html)

Golden Key Campaign Blue Ribbon Campaign