XPS 0.2 Release Notes
- Introduction
- What's New?
- New Features
- Bugs Fixed
- Supported Platforms
- Known Problems
- Experimental Features
- Forward Looking Statements
- Additional Information
This document contains the release notes for the eXtensible Programming
System (XPS), version 0.2. Here we describe the status of XPS, including new
features and any known problems. The most recent version of this document can
be found on the XPS 0.2 web site.
If you are reading this significantly after the 0.2 release, you should go there
because this document may be updated after the release.
For more information about LLVM, including information about the latest
release, please visit the main XPS web site.
If you have questions or comments, please use
either the Feedback page or one
of the e-mail lists.
Note that if you are reading this page from sources checked out with
subversion, the websvn pages, or
the main XPS web page, this document
applies to the next release, not the current one. To see the release
notes for the current or previous releases, please visit the
releases page.
This is the second public release of XPS.
XPS 0.2 is a pre-release of the eXtensible Programming System. It is a
development milestone and provides no significant functionality at this time.
XPS 0.2 is known to parse and validate XPL-core programs correctly. It has been
mostly re-architected and reduced from the 0.1.9 release two years prior.
A lot has happened in the last two years since XPS 0.1.9 was released.
Needless to say, that's too long between releases, but it was somewhat
necessary. About 1.5 years was consumed with assisting the LLVM (Low Level
Virtual Machine) project in providing features necessary for XPS. The other
portion was struggling with difficulties in selecting the right framework for
XML validation. Both of these major hurdles are now completed and significant
and faster progress will be made on XPS.
Here are the main highlights of what has changed:
- XPS is now hosted on its own internet server,
http://x-p-s.net/. The
SourceForge project is now being used
simply as a referal to the XPS site and for assistance with downloading
release tarballs. No development activity occurs with SourceForge any more.
- The source code repository has been switched from CVS hosted by
SourceForge to a Subversion server hosted by eXtensible Systems, Inc. You
can get the latest source code using http://x-p-s.org/xps as the
Subversion URL.
- Several source code modules that were in 0.1.9 have disappeared in 0.2.0.
The code is not lost, there just hasn't been a reason to add them to the new
Subversion repository yet. In particular, the "mem", "space", "meta", and
possibly "adt" modules are to be revived fairly soon. The tool modules
("xplec", "xpsd", and "xpsh") will not be revived until they're needed per
the release plan milestones. When they are revived, they'll be placed in the
"tools" directory, not "xps".
- XPS is now based on the LLVM compiler
infrastructure. While the integration with LLVM in this release is minimal,
there will be much more to come. We believe the decision to use LLVM rather
than GCC or some other back end framework is a huge win for XPS. Although
LLVM, at 5 years old, is young by compiler standards, it is by far the best
designed compiler infrastructure available. Using LLVM does several things
for the XPS project:
- Defines the low level semantics of xpl-core (base XPL language)
- Provides high-end code optimizations that we don't have to write
- Provides a framework for bytecode and JIT compilation
- Speeds our development by providing the mid-level IR using an excellent
C++ library interface
- Allows us to extend the optimizations to do XPL-specific things
- Provides the framework for building life-long optimization into XPS
- Serves as the framework for building the XPS compiler server
- Since XPS has its own makefile system, we adopted it in XPS too. This is
one of the significant integrations betwen XPS and LLVM that occurred in this
release. The decision to move away from automake was not difficult as automake
tended to complicate things. The LLVM makefile system is pretty clean and
reasonably well documented.
- A major shift in XML validation from XML Schema to Relax NG has occurred.
Relax NG was chosen because it is, in Reid's opinion, vastly superior to the
XML Schema even though the latter is the "official" standard for XML. This is,
unfortunately, a pity. Relax NG provides a simpler and more convenient
syntax for schema specification and it also allows you to specify
things that XML Schema can't (like schema rules that say you can have an
attribute or an element but not both). Unfortunately, the decision to go with
Relax NG led to a significant delay in the XPS 0.2 release due to the lack of
reliable implementations of Relax NG in C++. For more details on Relax NG,
you should visit Thai Open Source
- The major accomplishment in this release is the inclusion of JING into
the XPL source base. JING is an XML validator using Relax NG written by
James Clark, the author of the original Relax NG specification and a well
known XML guru. Although written in Java, JING is a competent implementation
of the Relax NG specification and compilation to native code via GCJ has
given us a way to integrate it with C++ and not be penalized for execution
speed or require the use of a JVM. The original JING source code was
imported into XPS in the xps/jing directory. Several modifications
were necessary to get it to compile and work correctly with GCJ (Gnu Java
Compiler).
- The XML and XPL parsing interfaces were completed in this release.
These two interfaces, xps/xml/Handler.h and
xps/xpl/Handler.h, define the set of events that are generated as a
result of parsing XML documents and XPL programs, respectively. The XPL
interface make it much easier to deal with XPL programs since the low level
XML parsing events are hidden and the events generated on the interface are
more aligned with the semantic constructs of the XPL language.
- A new backend for LLVM that generates valid XPL programs has been added in
the xps/xplbe directory. This "back end" can be used with the LLVM
llc tool to generate XPL from any LLVM input. This means it is
entirely possible to convert a C, C++, or Stacker program into XPL via LLVM's
intermediate representation. Using the backend should be done like this:
llc -load /path/to/lib/libXPSxplbe.so -march=xpl input.ll -o output.xpl
This instructs the llc program to generate XPL output into the
file named output.xpl from the input named input.ll which
must be valid LLVM assembly code. See the
LLVM documentation for more details on this.
- A significant test suite was imported from LLVM 1.5. Importation was done
via the XPL Back End for LLVM (see previous item). This test suite has over
1000 test cases that test every semantic aspect of XPL. A simple target
in the test/Makefile (update-from-llvm) allows the test suite to be
updated whenever the XPLBE or the LLVM test suite changes. The test suite
simply uses XPS 0.2's ability to generate XPL source from XPL source to ensure
the input and the output match. This verifies the parsing, validation, and
generation of XPL code.
No official bugs were fixed in this release. However, this is the first
release that actually does something, which has been a long-standing bug
on its own. :)
XPS is known to work on the following platforms:
- Fedora Core 3
- SUSE Linux 8
- FreeBSD
Additional platforms will be tested in future releases
This section contains all known problems with XPS, listed by component. As
new problems are discovered, they will be added to these sections. If you run
into a problem, please let us know so we can add it here.
None. However, this is a very early release of XPS so the whole release could
be considered to be experimental.
xplc is the XPL compiler.
- Most of the options don't work right now. These are features that were
either disabled to get the release out or placeholders for future
functionality.
xvm is the eXtensible Virtual Machine (runtime)
- This program simply prints out a line saying that "xvm still needs to be
written". This program probably won't get much attention until the 0.4 or 0.5
release.
xplbe is the XPL Back End. It generates XPL from LLVM
Take this with a grain of salt, but here's what we plan to do next with
XPS.
- Complete the xps/xpl/LLVMGenerator.cpp implementation. This will
give us an XPL compiler that can generate executable code.
- Beef up the test harness so we can start testing real
- Make sufficient modifications to LLVM's llvmc and
llvm-ld tools so that XPS can use them as the basis for compiling
XPL programs.
- Extend the XPL compilation framework to handle language extensions. This
will be done by permitting new handlers to be installed during the parsing
process to handle "foreign" elements (those not defined by xpl-core language).
Much additional information about XPS is available on the web:
If you have any questions or comments about LLVM, please feel free to leave
a note on the Feedback Page or
drop us an e-mail message on one of the
E-Mail Lists.
|