Alessio Stalla | 4 Feb 09:30 2016
Picon

Debugging ANSI tests

Hi list,

in my local copy of ABCL I broke some ANSI tests related to packages and that's not good. I'm lazy so I'm asking here: does someone have a ready recipe to debug the ANSI tests, in particular to place breakpoints inside ABCL's Java code while it is executing the tests? In the minute or so I spent thinking about it before getting lazy, I couldn't figure out how to pass the jdwp incantation to the JVM launched by Ant when testing.

Thanks is advance!
Alessio
Hernan Ezequiel Di Giorgi | 30 Jan 00:35 2016
Picon
Gravatar

Load abcl

The result of cl:compile, how can be loaded via java using .getResourceAsStream()?

I'm compiling all the dependencies of a proyect and generating a super abcl.jar with my project inside, in the root directory of the abcl.jar i have a "system.abcl", that can be loaded with cl:load only with it outside the jar. If i try to load if from the jar with the full path "jar:file:/path/abcl.jar!/system.abcl" the repl simply freezes, and do nothing (via java or repl).

The org.armedbear.lisp.load.load() throws an exception because don't load the .abcl.

The abcl is generated with (asdf:operate 'asdf:monolithic-compile-boundle-op system-name). I just can't use the .abcl when is inside the jar.

Any ideas??
Didier Verna | 21 Jan 10:39 2016
Face
Picon
Picon
Picon
Picon
Gravatar

[CfP] 9th European Lisp Symposium, May 9-10, Krakow, Poland


		 ELS'16 - 9th European Lisp Symposium

		    Department of Computer Science
	       AGH University of Science and Technology
			    Kraków, Poland

			    May 9-10, 2016

		   In cooperation with: ACM SIGPLAN

 Sponsored by EPITA, Franz Inc., LispWorks Ltd. and Dept. of Computer
			   Science AGH UST

	       http://www.european-lisp-symposium.org/

Recent news:

- Submission deadline in less than a month!
- 3nd invited speaker announced: Stephan Karpinski on Julia: to Lisp
  or Not to Lisp?

The purpose of the European Lisp Symposium is to provide a forum for
the discussion and dissemination of all aspects of design,
implementation and application of any of the Lisp and Lisp-inspired
dialects, including Common Lisp, Scheme, Emacs Lisp, AutoLisp, ISLISP,
Dylan, Clojure, ACL2, ECMAScript, Racket, SKILL, Hop and so on. We
encourage everyone interested in Lisp to participate.

The 9th European Lisp Symposium invites high quality papers about
novel research results, insights and lessons learned from practical
applications and educational perspectives. We also encourage
submissions about known ideas as long as they are presented in a new
setting and/or in a highly elegant way.

Topics include but are not limited to:

- Context-, aspect-, domain-oriented and generative programming
- Macro-, reflective-, meta- and/or rule-based development approaches
- Language design and implementation
- Language integration, inter-operation and deployment
- Development methodologies, support and environments
- Educational approaches and perspectives
- Experience reports and case studies

We invite submissions in the following forms:

  Papers: Technical papers of up to 8 pages that describe original
    results or explain known ideas in new and elegant ways.

  Demonstrations: Abstracts of up to 2 pages for demonstrations of
    tools, libraries, and applications.

  Tutorials: Abstracts of up to 4 pages for in-depth presentations
    about topics of special interest for at least 90 minutes and up to
    180 minutes.

  The symposium will also provide slots for lightning talks, to be
  registered on-site every day.

All submissions should be formatted following the ACM SIGS guidelines
and include ACM classification categories and terms. For more
information on the submission guidelines and the ACM keywords, see:
http://www.acm.org/sigs/publications/proceedings-templates and
http://www.acm.org/about/class/1998. The conference proceedings will be
published in the ACM Digital Library.

Important dates:

 -   19 Feb 2016 Submission deadline
 -   25 Mar 2016 Notification of acceptance
 -   15 Apr 2016 Early registration deadline
 -   22 Apr 2016 Final papers due
 - 9-10 May 2016 Symposium

Programme chair:
  Irène Durand, LaBRI, University of Bordeaux, France

Local chair:
  Michał Psota, Emergent Network Defense, Kraków, Poland

Programme committee:
  Antonio Leitao — INESC-ID / Instituto Superior Técnico, Universidade
    de Lisboa, Portugal
  Charlotte Heerzel — IMEC, Leuven, Belgium
  Christian Queinnec — University Pierre et Marie Curie, Paris 6, France
  Christophe Rhodes — Goldsmiths, University of London, United Kingdom
  Didier Verna  — EPITA Research and Development Laboratory, France
  Erick Gallesio — University of Nice-Sophia Antipolis, France
  François-René Rideau, Google, USA
  Giuseppe Attardi — University of Pisa, Italy
  Henry Lieberman — MIT, USA
  Kent Pitman, HyperMeta Inc., USA
  Leonie Dreschler-Fischer — University of Hamburg, Germany
  Pascal Costanza — Intel Corporation, Belgium
  Robert Strandh — University of Bordeaux, France

Search Keywords:

#els2016, ELS 2016, ELS '16, European Lisp Symposium 2016,
European Lisp Symposium '16, 9th ELS, 9th European Lisp Symposium,
European Lisp Conference 2016, European Lisp Conference '16

--

-- 
 <at> -quartet live: Sunset/Sunside, Paris, Jan 26 2016 !
Book now: http://www.sunset-sunside.com/2016/1/artiste/2101/3453/

Lisp, Jazz, Aïkido: http://www.didierverna.info

Scott L. Burson | 30 Dec 21:19 2015

Loops and interruptibility

Hi all,

The other day I had an inadvertent infinite loop in my code, running in ABCL, and found I was unable to interrupt it with double C-c in SLIME.  In fact, even when I killed the process, restarted it, and started the code with the infinite loop in a new thread, I couldn't kill the thread!

Is this a known problem, or is something wrong with my setup?

-- Scott

Frederico Muñoz | 28 Dec 16:15 2015
Picon
Gravatar

Problems with static methods (and interface implementation?), java.lang.NoClassDefFoundError.

Hello,

I have been struggling with this for some hours now and would welcome
some pointers. I'm writing a small how-to on how to deploy Common Lisp
web applications (i.e. "something that replies to an HTTP request") in
IBM's Bluemix using ABCL. That part is taken care of and I have it up
and running (more on that in a separate post). I was going for a more
advanced version and I am having a problem with interface
implementation.

To showcase java interop I am not using CL web frameworks, but decided
to give Spark a try (http://sparkjava.com/documentation.html) just to
get a minimal example up and running (I already have Jetty working and
serving up an "(Hello World)" page):

#+BEGIN_SRC java
import static spark.Spark.*;

public class HelloWorld {
    public static void main(String[] args) {
        get("/hello", (req, res) -> "Hello World");
    }
}
#+END_SRC

I'm going to start with the Clojure example since that one I got
working; the API reference
(http://spark.screenisland.com/spark/Spark.html) helped me  and this
works

#+BEGIN_SRC clojure
=> (Spark/get "/hello" (reify spark.Route (handle [this req res] ("Hello World"))))
[Thread-34] INFO spark.webserver.JettySparkServer - == Spark has ignited ...
[Thread-34] INFO spark.webserver.JettySparkServer - >> Listening on 0.0.0.0:4567
nil[Thread-34] INFO org.eclipse.jetty.server.Server - jetty-9.3.2.v20150730
#+END_SRC

I have learned (thanks to bpalmer in #emacs, cheers!) that the Single
Abstract Method can be constructed using Java 8 lambda expressions,
which is why I couldn't find a reference to the "handle" method, which I
got from the API.

Now, back to ABCL; I'm unable to reproduce the above and I'm unsure if
it is because I'm not getting something right (likely) or because some
of the plumbing in ABCL isn't quite there yet.

I tried this using jss::jinterface-implementation (which I had used
previously with my MQTT code and worked perfectly):

#+BEGIN_SRC lisp
(#"get" 'spark.Spark "/hello"
	(jss::jinterface-implementation "spark.Route"
					"handle"
					(lambda (request response)
					  ("Hello World"))))
#+END_SRC

The (jinterface-implementation ...) returns #<com.sun.proxy.$Proxy5
com.sun.proxy.$Proxy5 <at> 4f0bbf2a {41CC48BB}>, but the (#"get"...) fails:

Java exception 'java.lang.NoClassDefFoundError: Could not initialize class spark.Spark$SingletonHolder'.

I have also tried with jmake-proxy to see if there was something
different going on.

#+BEGIN_SRC lisp
(java::jstatic "get" "spark.Spark" "/hello" (java::jmake-proxy "spark.Route" #'(lambda (lisp-this
method request response) ("Hello World"))))
#+END_SRC

The result is the same, both in what jmake-proxy returns and the final
error. Note that I have added the jar to the classpath, otherwise I
would get "ClassNotFound".

Even more simply this also doesn't work:

#+BEGIN_SRC clojure
=> (Spark/stop)
[nREPL-worker-11] INFO spark.webserver.JettySparkServer - >>> Spark shutting down ...
#+END_SRC

... (#"stop" 'spark.Spark) returns the same "NoClassDefFoundError",
which makes me thing the issue is not with the jproxy bit but something
more fundamental...

With this in mind:

1) Is there anything obviously wrong about the way I'm going about it -
not limited to implementation errors on my part but including trying to
use parts of ABCL's Java interop which aren't done?

2) The java::jmake-proxy call... I wasn't able to find a single example
of it used (the only code I find when searching is the implementation
itself) so I'm not sure I'm understanding the documentation correctly:
are the arguments I'm using above correct? I'm using the method that
uses a function and if I understood it correctly the first argument is
"lisp-this" (which defaults to nil), the second the method name (which
would be "handle" in this example, and the rest are the method arguments
(request and response here).

I am of course available for any further clarification, and if this is
something that isn't obvious I can upload a minimal example using
quickproject and quicklisp.

Best regards,

--

-- 
Frederico Muñoz
fsmunoz <at> gmail.com

2l8qyo+d734u52o8x7j0 | 22 Dec 16:33 2015

destructuring-bind not signaling error with &rest

(destructuring-bind (a b &rest c) '(1) b)

=> nil

with no error.

sbcl, clisp, and ecl signal an error.

http://clhs.lisp.se/Body/m_destru.htm
seems to suggest it should be an error.

version is abcl 1.3.3 on jdk 1.8.0_66

----
Sent using GuerrillaMail.com
Block or report abuse: https://www.guerrillamail.com/abuse/?a=QFN5AAkCRrUHxQqx5nsTUhfIQMef3JpczrdSMtHzHw%3D%3D

John Pallister | 14 Dec 23:39 2015
Gravatar

ASDF configuration for "JAR-only" system

Hello list,

I'm trying to configure ASDF to load my application while running within the Google App Engine development server (Jetty 6.1). My Ant build script uses ASDF-JAR:PACKAGE to produce a single JAR file containing my application and all dependencies, and copies this to the war/WEB-INF/lib/ directory so that it's in the classpath.

At runtime (in a separate bootstrap.lisp file), following the example of ASDF-JAR:ADD-TO-ASDF[1], I search the application JAR file (obtained by grovelling JAVA:DUMP-CLASSPATH) for the .ASD files and push them all onto ASDF:*CENTRAL-REGISTRY*. So far so good. (Having read the ASDF manual I now know I should either build a .cl-source-registry.cache file into the JAR or compute an ASDF source registry configuration and include that.)

When ASDF starts up it tries to read various configuration files from the filesystem, for both the source registry and for its output translations. This isn't allowed by App Engine. On #lisp, Attila Lendvai suggested that giving ASDF a source registry configuration of '(:SOURCE-REGISTRY :IGNORE-INHERITED-CONFIGURATION) should suppress this behaviour, and it does seem to work.

Now I'm struggling to get the output translations to work. Based on ADD-TO-ASDF again I'm using an output translations configuration of:

`(:output-translations
    (,(merge-pathnames "/**/*.*" *application-jar-path*)) ; => #P"/**/*.*"
    :ignore-inherited-configuration
    :disable-cache)

My *APPLICATION-JAR-PATH* is #P"jar:file:/Volumes/SoftRAID/Users/john/src/synchromesh/forumfeedme/war/WEB-INF/lib/forumfeedme-lisp-0.1.0.jar!/", i.e. a pathname with the JAR path as the PATHNAME-DEVICE.

With this I get the error "access denied ("java.io.FilePermission" "/___jar___file___root___" "read")". This matches the default translations seen in asdf.lisp:WRAPPING-OUTPUT-TRANSLATIONS:

  (defun wrapping-output-translations ()
    `(:output-translations
    ;; Some implementations have precompiled ASDF systems,
    ;; so we must disable translations for implementation paths.
      #+(or #|clozure|# ecl mkcl sbcl)
      , <at> (let ((h (resolve-symlinks* (lisp-implementation-directory))))
          (when h `(((,h ,*wild-path*) ()))))
      #+mkcl (,(translate-logical-pathname "CONTRIB:") ())
      ;; All-import, here is where we want user stuff to be:
      :inherit-configuration
      ;; These are for convenience, and can be overridden by the user:
      #+abcl (#p"/___jar___file___root___/**/*.*" (:user-cache #p"**/*.*"))
      #+abcl (#p"jar:file:/**/*.jar!/**/*.*" (:function translate-jar-pathname))
      ;; We enable the user cache by default, and here is the place we do:
      :enable-user-cache))

Although I don't understand exactly how the "JAR file as device" (JFAD) translations are supposed to work, one thing that struck me as odd while investigating things was this:

CL-USER> (make-pathname :device (list #P"/foo.jar"))
#P"jar:file:/foo.jar!/"
CL-USER> (merge-pathnames "**/*.*" *)
#P"jar:file:/foo.jar!/**/*.*"
CL-USER> (merge-pathnames "/**/*.*" **)
#P"/**/*.*"
CL-USER> (pathname-directory **)
(:RELATIVE :WILD-INFERIORS)
CL-USER> (pathname-directory **)
(:ABSOLUTE :WILD-INFERIORS)

That is, merging a relative path with the (absolute) JFAD path retained the default JAR file "device" (and remains a relative path, which ASDF won't accept), but merging an absolute path reset the device component. I've read through the documentation for MERGE-PATHNAMES in the HyperSpec[2] and AFAICT the device component should be copied across. I'm reasonably confident that if it were, things would work better. But I could be (doubly) wrong.

I am trying to figure this out for myself, but I'm stuck for now, so I'm hoping someone (i.e. Mark) can, on reading this, offer some guidance as to where I should go from here. I haven't (yet) tried posting to the ASDF mailing list as this seems like a fairly ABCL-specific issue.

I guess the fallback is to unpack the application JAR and just load the FASLs directly, but (based again on ADD-TO-ASDF) I'm pretty sure that this should work, and it does seem to be the Right Thing.

Any or all comments and/or advice appreciated,

Cheers,

John :^P

Alessio Stalla | 27 Nov 14:34 2015
Picon

Package-local nicknames

Hello list,

long time no see :)

I'm once again experimenting on ABCL with a sort of a pet peeve of mine: hierarchical symbols (aka symbols as packages aka symbol/package conflation). If I get good results I'll submit an article to the next ELS. Btw, is anyone going?

I've seen that, since the time when I was actively contributing to it, ABCL has gained package-local nicknames (or, they were already there and I never noticed or I forgot about them). Since my experiment is, I suppose, a superset of what said nicknames have to offer, I'm curious: is anybody using them? How? Are they a novel idea of ABCL's, or were they inspired by other implementations? Do they implement some specification (e.g., a CDR)?

Thanks for any input!

Cheers
Alessio

John Pallister | 24 Nov 12:25 2015
Gravatar

ABCL-JAR issues & patch

Hello list,

I've been trying to use ABCL-JAR to package up my app for deployment to Google App Engine. I've come across a few issues; any comments would be appreciated. I've attached a patch to the ABCL-JAR:PACKAGE function that Works For Me(TM).


First, there was an issue where if the ROOT parameter is NIL the function would fail at line 90.

Second, The SYSTEM:ZIP function didn't want to nest JARs within the new JAR, so systems that depended on e.g. JSS via abcl-contrib.jar would fail. I filter out files in JARs on the assumption that one will just distribute those JARs along with the new one.

Third, my ASDF file includes a system that looks like:

(asdf:defsystem #:gabacle-clack-java
  :defsystem-depends-on (#:abcl-asdf)
  :version "0.1"
  :description "Java interface classes for Gabacle/Clack."
  :depends-on ()
  :components ((:module java-src
:pathname "src/"
:components ((:class-file-directory "java")))))

This may or may not be good style, but it seems to be legal. When traversing the ASDF files, the class file directory component comes back with a PATHNAME-TYPE of :UNSPECIFIC, so I filter such entries out so that SYSTEM:ZIP doesn't object.

On a minor note, at http://abcl.org/trac/browser/trunk/abcl/src/org/armedbear/lisp/zip.java?rev=14695#L227 "incorporation" is spelled "incoporation".

I hope this is useful. If people could point out where I've just got the wrong end of the stick, that would be great...

Cheers,

--- asdf-jar.lisp <at> 14695	2015-11-24 10:29:22.000000000 +0000
+++ asdf-jar.lisp-jdp	2015-11-24 11:03:57.000000000 +0000
 <at>  <at>  -56,23 +56,26  <at>  <at> 
       (format verbose "~&Packaging contents in ~A" package-jar))
     (when (and verbose recursive dependencies) 
       (format verbose "~&  with recursive dependencies~{ ~A~^, ~}." dependencies))
+    (flet ((set-mapping (from to)
+	     (unless (string-equal (subseq (namestring from) 0 4) "jar:")
+	       (setf (gethash from mapping) to))))
+
     (dolist (system (append (list system) 
                             (when recursive 
                               (mapcar #'asdf:find-system dependencies))))
       (let ((base (slot-value system 'asdf::absolute-pathname))
             (name (slot-value system 'asdf::name))
             (asdf (slot-value system 'asdf::source-file)))
-        (setf (gethash asdf mapping) (let ((relative-path (archive-relative-path 
-                                                           base name asdf)))
+	  (set-mapping asdf (let ((relative-path (archive-relative-path base name asdf)))
                                        (if root
-                                         (merge-pathnames
-                                          relative-path
+				  (merge-pathnames relative-path
                                           (make-pathname :directory root))
                                          relative-path)))
         (loop :for component :in (all-files system) 
            :for source = (slot-value component 'asdf::absolute-pathname)
            :for source-entry = (archive-relative-path base name source)
-           :do (setf (gethash source mapping)
+	     :when (stringp (pathname-type source))
+	     :do (set-mapping source
                      (if root 
                          (merge-pathnames source-entry (make-pathname :directory root))
                          source-entry))
 <at>  <at>  -80,19 +83,19  <at>  <at> 
                  (format verbose "~&~A~& => ~A" source source-entry))
            :when (and (typep component 'asdf::source-file)
                       (not (typep component 'asdf::static-file)))
-           :do (let ((output 
-                      (make-pathname
-                       :defaults (asdf:apply-output-translations source)
+	     :do (let* ((output 
+			 (make-pathname :defaults (asdf:apply-output-translations source)
                        :type "abcl"))
+			(directory (pathname-directory source-entry))
                      (output-entry 
                       (make-pathname :defaults source-entry 
                                      :type "abcl"
-                                     :directory (append root
-                                                        (rest (pathname-directory source-entry))))))
+					:directory (if root
+						       (append root (rest directory))
+						       directory))))
                  (when *debug*
                    (format verbose "~&~A~& => ~A" output output-entry))
-                 (setf (gethash output mapping)
-                       output-entry)))))
+		   (set-mapping output output-entry))))))
     (system:zip package-jar mapping)))

 (defun all-files (component)
Mark Evenson | 21 Nov 14:56 2015
Picon

Reports of problems in binding/connecting to localhost for testing http servers (clack, hunchentoot)

[Something in the USOCKET code seems to have problems interpreting ip6
addresses with ABCL…][40].

[40]: http://abcl.org/trac/ticket/40

--

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

Mark Evenson | 21 Nov 11:19 2015
Picon

Re: Creating a Lisp stream from a java.io.Reader


On 2015/11/20 23:24, Anton Vodonosov wrote:
> John, don't forget to publish your results when you have clack working with ABCL

Note that Clack *does* currently seem to work with ABCL, at least [the
simple test on the clack home page][1].  It wasn't immediately obvious
how to run a clack test suite  as

    (asdf:test-system :clack)

doesn't seem to do anything.

John is trying to get clack to run in the Google App Engine, which is a
decidedly non-standard JVM.  Go John!

[1]: http://clacklisp.org/

--

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


Gmane