Jump to
Are you sure you want the 0.8.16h version?Download by Platforms & VersionsEarlier versions of E have been tested and run on MSWindows (95, 98 FE, NT, 2K), Linux, and now Mac OS X (which I think is really a FreeBSD platform). It should run on other UNIX platforms as well, given an adequate version of Java and bash (see below). It should also run without problems on MSWindows 98 SE and on ME, but as far as we are aware, no one has tried this. If you experience any problems, or have any other informative experiences, please let me know, or report a bug. The Installing links below describe how to install, and run various forms of the binary distribution. The Building links describe how to build E from the source release. The Download links will download each corresponding form of the release to your machine.
Highlights of this VersionDoc-Comment SyntaxE accepts "#" and "//" syntax for comments, but has never accepted the familiar "/* .. */" syntax. This has turned out well, as E now accepts the Javadoc "/** .. */" syntax for doc-comments, and accepts these only as doc-comments. Since we weren't stuck with "/* .. */" as a comment syntax, we aren't required to treat doc-comments as a special kind of comment, and don't. Rather, an optional doc-comment is now a first class part of the E syntax, and can only appear prior to the definition it is documenting. Non-doc-comments, even in this position, cannot be mistaken for a doc-comment. The content of a doc-comment is preserved in the expansion to Kernel-E, and is available at runtime for online help. Now that object definitions are implicitly given Java-like fully qualified names, we expect to shortly be able to generate edoc documentation from both tamed Java and E code. All the comments in E code in this release that were intended to be doc-comments have now been converted to the doc-comment syntax. Experimental "interface" and "implements"This is best explained by example # E sample # The experimental interface syntax must first be turned on # by pragma enable("typedef") or by otherwise # setting the e.enable.typedef property to true (see eprops.txt). pragma.enable("typedef") # interface expressions are like object expressions, but without the method bodies. # They also accept doc-comments in the expected places. /** * Would Euclid approve? */ interface Point guards PointStamp { # When declared in this way, the interface expression creates and # binds a type-guard object to the variable named Point, and a # rubber stamping type-auditor object to the variable named PointGuard. # The interface expression's value is the type-guard. /** abscissa */ to getX() :near /** ordinate */ to getY() :near } # The experimental implements syntax must first be turned on # by pragma enable("auditors") or by otherwise # setting the e.enable.auditors propery to true (see eprops.txt). pragma enable("auditors") def makePoint(x :integer, y :integer) :Point { def point implements PointStamp { to getX() :integer {x} to getY() :integer {y} } } def pt :Point := makePoint(3, 4) This interface syntax is used to declare types that describe the API that various objects may implement, to produce a rubber-stamping auditor (or just a "stamp") for certifying that instances of an object expression implements that type, and a guard for ensuring that a specimen is an instance of a stamped object expression. This implements syntax is used to declare the set of auditors that should audit an object expression. When this is a type-auditor produced by an interface declaration, the instances of this object expression will pass the corresponding type-guard. These features are incompletely specified or implemented at the present time. What is there may go through radical changes before settling down. Like all features that require an e.enable.* property to be set to true, these features are not yet official parts of the E language, and there is not yet any commitment to supporting them. They are being provided in their current state so we may all explore and discuss them, and figure out what we should actually do. Thanks to E-Dean Tribble and Marc Stiegler for much help in figuring this out. Zooko's EPainterWith the addition of this class, an E object can now virtually subclass a swing JPanel in order to override its paint method. It should now be possible to define new swing widgets in E. This is discussed in the thread rooted here. This work is primarily by Zooko, thanks! Anti-Highlight: Hydro No Longer BundledI've been bundling Tyler Close's ADT library in with the E distributions for awhile (under its original name, "Hydro"), in hopes of making progress towards integrating ADT into E as E's collection class library. Well, time has gone by, I haven't made progress on this front, and major non-upwards compatible changes to E are much more expensive than they used to be. I've discussed the matter with Tyler, and we agree that E should stop bundling ADT. Thanks to Tyler for clarity on this matter. I'd like to take this opportunity to endorse his products. As the discussion on e-lang about integrating E and ADT should make clear, Tyler engages in very solid and principle-driven design. The problems were in reconciling two separately evolved systems. Variants and Subsets of EA complete E system is persistent, distributed, and capability-secure both within and between processes. Incomplete variants of E are tagged by which of these features are left out.
A non-persistent E is called time-local since an object only exist as long as its hosting process does. A non-distributed E is called space-local if an object and all references to it only exist within its hosting process. E by definition provides distributed capability-security -- the ability for objects in mutually suspicious processes to safely cooperate. If it looks like E and it quacks like E, it might be a duck; but if it doesn't provide distributed capability security, it's not E. A system that's otherwise equivalent to E, but doesn't provide distributed capability security, is called daffE. A distributed E can only be implemented by means of strong crypto, of course, for which we are using code derived from the Cryptix library (in accord with the terms of their open-source license). In a space-local system, no distributed insecurity can arise, so such a system would be an sl-E rather than an sl-daffE. E is designed to provide local capabillity-security -- the ability for mutually suspicious objects hosted by the same process to safely cooperate, and the use of capability discipline to determine which of its hosting process's authorities it may exercise. Such objects could be executing untrusted code -- code that the hosting process (or its owner) doesn't need to fully trust. This is a "complete" release of E. "complete" is in quotes, because both the persistence and the distribution leave much to be desired, as explained here. However, these are close enough that this release that doesn't need qualifiers in its name. DependenciesVersions & Types of JavaIn refering to various versions of Java, we follow Sun's terminology and numbering. A Java Runtime, or jre, is adequate to run standard Java binary programs (class files & resources). A Java Development Kit, or jdk, is adequate both to build a program from sources and to run it. A jdk is a superset of the corresponding jre, and their version numbers are always in synch. Each successive version of the jdk/jre from Sun effectively defines a new version of the Java & JVM standards, except that Sun has introduced a numbering inconsistency: The Java/JVM 2.x standard corresponds to Sun's jdk/jre 1.2.x. We ignore this inconsistency and refer to both as 1.2.x. This version of E requires a jre >= 1.3.1. E no longer supports Java < 1.3.1. To build E from sources, a corresponding jdk is required. Note: E does not install correctly when using JDK1.4beta on Windows2000
-- it fails to exec with "winfo.exe" executable, used during
install time to gather info about your Windows system. It seems to be
a more general problem in execing executables. If you experience this
problem, we suggest you install using a JDK1.3.*. Once installed, E should
work fine with either JDK1.3.* or JDK1.4beta. Some places to get a jre or jdk:
BashTo build E requires a bash available as "/bin/bash". If bash is unavailable for your platform, it seems to work better than it should to make a symbolic link from "/bin/bash" to "/bin/sh". If you try this and run into problems, please report these problems. To run the E driver script "e" requires a bash >= 2.01 available as "/bin/bash". The E driver script is required in order to be able to run E scripts (*.e files) directly as executables. To check your bash version, type
$ echo $BASH_VERSION to your bash shell. A bash (2.05 as of this writing) for Mac OS X is available for download from Savage Transcendental Studios. Build-Only DependenciesIf you are only installing E from a binary distribution, or only rebuilding the Java portion for your own use, you can ignore this section. However, if you wish to build an E distribution from sources, then you will need the equivalent of the following tools as well. The Cygwin DistributionThe E building process relies on a number of UNIX tools. These are available for Windows from Cygnus Support as the Cygwin package. If you wish to build E on Windows, you should download and install a version >= 1.0. BYacc/Java (Berkeley Yacc for Java)The E source distribution contains the executable binary program byaccj.exe for Windows, and byaccj for Linux/386/glibc. These are actually BYacc/Java from Bob Jamison and others. BYacc/Java is the Berkeley Yacc program extended with a "-j" flag and others for producing Java output. BYacc/Java is covered by the Berkeley License. The sources to byaccj are bundled with the E sources, and byaccj is optionally made as part of making E. BYacc/Java is only needed if you wish to remake the parsers as part of making E. Usually, this is only necessary of you wish to edit the *.y files in the source tree (term.y and e.y). Since BYacc/Java is a C program, it was causing porting headaches, and most people interested in rebuilding E won't need to rebuild the parsers anyway. So as of this release we added a switch: If you set the environment variable "MAKE_PARSERS" to "true" before running "make", then make will try to build BYacc/Java on your system, and then use it to rebuild the parsers. Otherwise, it will just use the parsers included in the source tree. Zip FilesOur build process packs up the *.zip files in the distribution by using Info-Zip's highy portable, and highly ported, zip program. Info-Zip's zipping tools are open-sourced with a license that seems to resemble the X11 license, but before redistributing it, you should read it for yourself. The E distributions do not bundle in these tools. Environment VariablesThe following are the main environment variables controlling building, and normally the only ones you will need to be aware of if something goes wrong. Others variables are documented in the various makefiles, especially makerules.mk.
|
|||||||||||||||||||||||||||||||||||||||||||||||||
Unless stated otherwise, all text on this page which is either unattributed or by Mark S. Miller is hereby placed in the public domain.
|