#421: Improve recording of source information for most kinds of definitions
--------------------------+----------------------------
Reporter: mevenson | Owner:
Type: enhancement | Status: new
Priority: major | Milestone: 1.5.0
Component: interpreter | Version: 1.5.0-dev
Keywords: github-issue | Parent Tickets:
--------------------------+----------------------------
Alan proposes in <https://github.com/armedbear/abcl/pull/5>:
Improve recording of source information for most kinds of definitions
e.g.
(describe 'split-at-char)
SPLIT-AT-CHAR is an internal symbol in the COMMON-LISP-USER package.
Its function binding is #<SPLIT-AT-CHAR {4D969FD4}>.
The function's lambda list is:
(STRING CHAR)
The symbol's property list contains these indicator/value pairs:
SYSTEM::%SOURCE-BY-TYPE ((:COMPILER-MACRO
"/Users/alanr/repos/lsw2/util/string.lisp" 1039)
((:FUNCTION SPLIT-AT-CHAR)
"/Users/alanr/repos/lsw2/util/string.lisp" 687))
SYSTEM::%SOURCE (#P"/Users/lori/repos/lsw2/util/string.lisp" . 687)
I followed the source types in slime's swank/sbcl.lisp
This is preliminary to adding support for using this information in slime.
What should be recorded:
packages
classes
functions
macros
compiler-macros
setf-expanders
methods
conditions
structures
types
source-transforms
variables
constants
Implementation
fdefinition.lisp has the function record-source-information-for-type For
interactive evaluation it does the work. For file compiling there are
additions to compile-file.lisp that add forms after the prologue that add
the information when fasl loading, during which recording by record-
source-information-for-type is disabled, so it doesn't record the source
positions in the fasl header.
As you see, I haven't got rid of the now redundant sys:%source property.
Once slime has been adjusted it might be worth doing so.
Right now the absolute pathnames are recorded, but it might make sense to
use logical pathnames if there were ones set up, though I expect the slime
support with do some dwimming in any case.
--
Ticket URL: <http://abcl.org/trac/ticket/421>
armedbear <http://abcl.org>
armedbear
#425: autoload-gen doesn't record methods, resulting in some common-lisp
functions not working unless a function in defining file is first
autoloaded
-------------------------+----------------------
Reporter: aruttenberg | Owner:
Type: defect | Status: new
Priority: major | Milestone:
Component: (A)MOP | Version:
Keywords: | Parent Tickets:
-------------------------+----------------------
To reproduce:
{{{
(describe-object 'foo t)
-> #<THREAD "interpreter" {56BF7C}>: Debugger invoked on condition of type
SIMPLE-ERROR
There is no applicable method for the generic function #<STANDARD-
GENERIC-FUNCTION DESCRIBE-OBJECT {1FDDDE5A}> when called with arguments
(FOO T).
;; autoload of describe also loads describe-object
->(describe 'foo)
<elided>
->(describe-object 'foo t)
FOO is an internal symbol in the COMMON-LISP-USER package.
}}}
--
Ticket URL: <http://abcl.org/trac/ticket/425>
armedbear <http://abcl.org>
armedbear
#415: Fixes to compiler to record source information
-------------------------+------------------------
Reporter: mevenson | Owner:
Type: enhancement | Status: new
Priority: major | Milestone: 1.5.0
Component: compiler | Version:
Keywords: | Parent Tickets:
-------------------------+------------------------
This issue tracks Alan Ruttenberg's work to record missing source
information from the compiler output.
{{{
<> rdfs:seeAlso <https://github.com/armedbear/abcl/issues/4> ;
rdfs:seeAlso <https://github.com/armedbear/abcl/pull/5> ;
}}}
--
Ticket URL: <http://abcl.org/trac/ticket/415>
armedbear <http://abcl.org>
armedbear
#402: Start publishing abcl binary maven artifacts
----------------------+----------------------------
Reporter: mevenson | Owner:
Type: defect | Status: new
Priority: major | Milestone: 1.3.4
Component: other | Version: 1.4.0-dev
Keywords: | Parent Tickets:
----------------------+----------------------------
We should figure out how to get the abcl binary artifacts back into the
public Maven repository system
--
Ticket URL: <http://abcl.org/trac/ticket/402>
armedbear <http://abcl.org>
armedbear
#420: Add ability to optimize function calls with lambda in function position.
Use it to optimize jss
--------------------------+----------------------------
Reporter: mevenson | Owner:
Type: enhancement | Status: new
Priority: major | Milestone: 1.5.0
Component: compiler | Version: 1.5.0-dev
Keywords: github-issue | Parent Tickets:
--------------------------+----------------------------
Precompiler: When compiling a form with a lambda in the function
position, possibly optimize it
Case 1: If the lambda has a single form in it, let someone define a
transform using:
define-function-position-lambda-transform (body-function-name (arglist
form args) &body body)
body-function-name is the car of the single form in the lambda
arglist is the arglist of the lambda
form is the single form within the lambda
args are the arguments to which the lambda will be defined.
The function should check whether it can do a transform, and do it if
so, otherwise return nil signalling it couldn't
Case 2: If case 1 is not successful then if the arglist is a simple
one (no &key, &rest, &optional) then do a standard beta-reduction
binding the args to arglist using let
(https://wiki.haskell.org/Beta_reduction)
If not, return and do the usual thing.
An example is in contrib/jss/optimize-java-call.lisp
To see benefits, (compile-file contrib/jss/test-optimize-java-call.lisp)
and then load the compiled file. You should see something like the below
which reports the timings for the optimized and unoptimized version of
10000 calls of (#"compile" 'regex.pattern ".*")
--
With optimization: (INVOKE-RESTARGS-MACRO "compile" (QUOTE REGEX.PATTERN)
(LIST ".") NIL T)
Without optimization: ((LAMBDA (#:G85648 &REST #:G85649) (INVOKE-RESTARGS
"compile" #:G85648 #:G85649 NIL)) (QUOTE REGEX.PATTERN) ".")
JUST-LOOP
0.0 seconds real time
0 cons cells
OPTIMIZED-JSS
0.011 seconds real time
0 cons cells
UNOPTIMIZED-JSS
0.325 seconds real time
800156 cons cells
See:
https://mailman.common-lisp.net/pipermail/armedbear-
devel/2016-October/003726.html
https://mailman.common-lisp.net/pipermail/armedbear-
devel/2016-November/003733.html
--
Ticket URL: <http://abcl.org/trac/ticket/420>
armedbear <http://abcl.org>
armedbear
#390: ABCL-ASDF:RESOLVE not working
--------------------------+----------------------------
Reporter: mevenson | Owner:
Type: defect | Status: new
Priority: critical | Milestone: 1.4.0
Component: abcl-contrib | Version: 1.4.0-dev
Keywords: abcl-asdf | Parent Tickets:
--------------------------+----------------------------
Without the presence of a <file:~/.m2/> directory, populated by command
line mvn usage, the ABCL-ASDF mechanism is not working:
{{{
CL-USER> (ABCL-ASDF:RESOLVE-DEPENDENCIES "net.java.dev.jna" "jna" :VERSION
"4.1.0")
}}}
{{{
Java exception
'org.eclipse.aether.collection.DependencyCollectionException: Failed to
read artifact descriptor for net.java.dev.jna:jna:jar:4.1.0'.
[Condition of type JAVA-EXCEPTION]
Restarts:
0: [RETRY] Retry compiling #<ASDF/INTERFACE:MVN "jna"
"net.java.dev.jna/jna/4.1.0">.
1: [ACCEPT] Continue, treating compiling #<ASDF/INTERFACE:MVN "jna"
"net.java.dev.jna/jna/4.1.0"> as having been successful.
2: [RETRY] Retry ASDF operation.
3: [CLEAR-CONFIGURATION-AND-RETRY] Retry ASDF operation after resetting
the configuration.
4: [RETRY] Retry SLIME REPL evaluation request.
5: [*ABORT] Return to SLIME's top level.
}}}
Switching between Maven versions 3.2.5 and 3.3.3 seems to give the same
problems.
--
Ticket URL: <http://abcl.org/trac/ticket/390>
armedbear <http://abcl.org>
armedbear