[armedbear-devel] progress with abcl in protege

Mark Evenson evenson at panix.com
Tue May 18 18:09:30 UTC 2010

For Alan's goal to create an ABCL plugin for Protege–which is an Eclipse 
RCP application so this work contributes to running ABCL on Eclipse 
Equinox and OSGi in general–I've gotten to a fairly stable state for 
which I've creating the attached patches from my local snapshots.

That's "patches" because I ended up creating an Eclipse OSGi project for 
ABCL itself separate from the org.sciencecommons.protege.lisp so I could 
run Protege under Eclipse to interactively debug things.

With [r12696][1], the ABCL trunk contains the necessary support in 
Pathnames to run as an Eclipse OSGi bundle.  I have backported these 
changes to the abcl-0.20 branch, so as long as nothing else crops up, 
this release should be a good starting point.

[1]: http://trac.common-lisp.net/armedbear/changeset/12696

Since I needed to debug ABCL's load procedure in Eclipse, instead of 
using Alan's procedure I [followed the instructions for building Protege 
from Eclipse][2], and then added the abcl and 
org.sciencecommons.protege.lisp plugins.  Therefore, the patches in this 
email "convert" abcl and org.sciencecommons.protege.lisp to Eclipse OSGi 
projects.  It should be possible to build purely from Ant as Alan 
described with the additional step of invoking Ant on the 
'abcl/protege-build.xml' with the PROTEGE_HOME set to the proper value.

[2]: http://protegewiki.stanford.edu/wiki/CompileProtege4InEclipseFromSvn

To build and run Protege with the Lisp plugin from Eclipse:

1.  Follow the instructions to [building Protege from Eclipe][2]

2.  Checkout the abcl SVN trunk (later than r12696) into the workspace.

3.  Apply 'abcl-osgi.patch' to the abcl directory

4.  Apply 'org.sciencecommons.protege.lisp.patch' to the corresponding 

5.  Create the external tool builder configurations to build abcl and 
org.sciencecommons.protege.lisp by following the instructions [to "add 
your own plugin"][3].  For abcl, you will be adding "protege-build.xml".

6.  Build abcl and then org.sciencecommons.protege.lisp form the 
external tool build configuration created in step 5

7.  Run Protege by using the "Protege.From.Build" run configuration.


Some improvements over the previous state:

1.  ABCL loads fully, including SWANK via ASDF

2.  The J editor no longer appears.

Some problems:

1.  The REPL thread is being started in the GUI constructor at the 
moment.  The general OSGi contract is that a bundle must only start 
threads with the Activator.start() method, and all threads must be 
stopped when Activator.stop() returns.

2.  I'd actually like to have the abcl container start()/stop() relevant 
OSGi threads so that the bundling is useful for other containers.  To 
this end, I am imagining a simple message server for ABCL that takes 
messages as they come in, and ships them off to REPL threads as 
necessary, returning the results.  There would be an optional argument 
to such messages that would specify a thread to execute on.  Under this 
proposal, other OSGi bundles would only be able to "communicate" with 
EVAL.  Is this too restrictive?  It probably is if only Strings are 
going back and forth, but maybe if we allowed LispObjects that were 
somehow "deep copied" back and forth, providing access to the useful 

3.  There are parts of ABCL that call System.exit() (at least one is 
present in Autoload.load()), which is not going to work well.  I plan to 
replace this somehow, perhaps by waiting for all tasks to finish, then 
signaling that the singleton Interpreter is no longer valid by disposing 
of the reference?

4.  I think it would be useful to move the JPanel code into base ABCL 
for a basic interactive REPL.  This would facilitate embedding ABCL in 
many tools where the core functionality is maintained in central 
location.  This would allow Netbeans, for example, to easily include a 
GUI to the ABCL REPL.  I would not favor this being a full IDE effort at 
all, but would provide the base GUI element that others could customize. 
  At the same time, maybe we should consider removing unused parts of 
the org.armedbear.lisp.java.{awt,swing}.* classes?  Is this something 
used by J that could profitably moved over?

5.  'build.xml' needs to be OSGi build-aware in a better manner.  The 
current patchset assumes that the user will always be doing an OSGi 
build when it is invoked.

Comments, feedback, et. al. solicited,

"A screaming comes across the sky.  It has happened before, but there
is nothing to compare to it now."

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: abcl-osgi.patch
URL: <https://mailman.common-lisp.net/pipermail/armedbear-devel/attachments/20100518/c69a25dd/attachment.ksh>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: org.sciencecommons.protege.lisp.patch
URL: <https://mailman.common-lisp.net/pipermail/armedbear-devel/attachments/20100518/c69a25dd/attachment-0001.ksh>

More information about the armedbear-devel mailing list