#65: UTF-32 strings support
------------------------+---------------------------------------------------
Reporter: ehuelsmann | Owner: somebody
Type: defect | Status: new
Priority: major | Milestone:
Component: other | Version:
Keywords: |
------------------------+---------------------------------------------------
ABCL uses Java char[]s to represent its strings. However, the char type
can only represent values in the BMP (Basic Multilingual Plane), because
only the BMP can be represented using 16 bits.
For supplementary characters (all Unicode chars outside the BMP), it uses
a pair of surrogate characters (UTF-16).
Common Lisp programs don't expect this and need strings to be represented
using complete characters.
--
Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/65>
armedbear <http://common-lisp.net/project/armedbear>
armedbear
#133: Mixed case inconsistency in TRANSLATE-LOGICAL-PATHNAMES
-------------------------+--------------------------------------------------
Reporter: mevenson | Owner: ehuelsmann
Type: defect | Status: new
Priority: major | Milestone: 0.25
Component: interpreter | Version: 0.24
Keywords: |
-------------------------+--------------------------------------------------
Jonathan Boca reports
{{{
As the following code and transcript demonstrate,
translate-logical-pathname appears to be downcasing paths
inconsistently:
;;; test.cl
(setf (logical-pathname-translations "foo")
'(("foo:bar;*.lisp" "/FooRoot/bar/*.lisp")
("foo:*.lisp" "/FooRoot/*.lisp")))
;;; In the following pathname translation, the entire path is downcased
(pprint (translate-logical-pathname "foo:bar;foobar.lisp"))
;;; In each of the next two, the entire path EXCEPT for the host is
downcased --
;;; the host is unchanged
(pprint (translate-logical-pathname "foo:foobar.lisp"))
(pprint (translate-logical-pathname "foo:Foobar.lisp"))
---
Armed Bear Common Lisp 0.24.0
Java 1.6.0_22 Apple Inc.
Java HotSpot(TM) Client VM
Low-level initialization completed in 0.478 seconds.
Startup completed in 1.386 seconds.
Type ":help" for a list of available commands.
CL-USER(1): (load "test.cl")
#P"/fooroot/bar/foobar.lisp"
#P"/FooRoot/foobar.lisp"
#P"/FooRoot/foobar.lisp"
T
CL-USER(2):
---
SBCL and CLISP both produce the following output for the above code:
#P"/FooRoot/bar/foobar.lisp"
#P"/FooRoot/foobar.lisp"
#P"/FooRoot/foobar.lisp"
Allegro's ALISP and MLISP both produce the following:
#P"/FooRoot/bar/foobar.lisp"
#P"/FooRoot/foobar.lisp"
#P"/FooRoot/Foobar.lisp"
}}}
--
Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/133>
armedbear <http://common-lisp.net/project/armedbear>
armedbear
#132: Inconsistent use of :case :common for pathnames
-------------------------+--------------------------------------------------
Reporter: mevenson | Owner: ehuelsmann
Type: defect | Status: new
Priority: major | Milestone: 0.25
Component: interpreter | Version: 0.24
Keywords: |
-------------------------+--------------------------------------------------
Pascal Bourguignon notes:
{{{
CLHS says:
19.2.2.1.2.2 Common Case in Pathname Components
For the functions in Figure 19-2, a value of :common for the :case
argument that these functions should receive and yield strings in
component values according to the following conventions:
* All uppercase means to use a file system's customary case.
* All lowercase means to use the opposite of the customary case.
* Mixed case represents itself.
Note that these conventions have been chosen in such a way that
translation from :local to :common and back to :local is
information-preserving.
[pjb@kuiper :0.0 lisp]$ abcl
Armed Bear Common Lisp 0.20.0
Java 1.6.0_22 Sun Microsystems Inc.
Java HotSpot(TM) Server VM
Low-level initialization completed in 0.265 seconds.
Startup completed in 0.718 seconds.
Type ":help" for a list of available commands.
CL-USER(1): (make-pathname :name "TEST" :type "LISP" :case :common)
#P"TEST.LISP"
CL-USER(2): (namestring (make-pathname :name "TEST" :type "LISP" :case
:common))
"TEST.LISP"
I'm on a linux system on a ext3 file system. The customary case is
lower case (case significant on this particular file system, but
99.999% of the files on unix are lower case).
Therefore I would expect to get #P"test.lisp"
Notice that:
(make-pathname :name "test" :type "lisp" :case :common)
should produce #P"TEST.LISP"
and that:
(make-pathname :name "Test" :type "Lisp" :case :common)
should produce #P"Test.Lisp"
}}}
{{{
Mark Evenson writes:
> > On 11/7/10 5:02 AM, Pascal J. Bourguignon wrote:
>> >>
>> >> CLHS says:
>> >>
>> >> 19.2.2.1.2.2 Common Case in Pathname Components
>> >>
>> >> For the functions in Figure 19-2, a value of :common for the
:case
>> >> argument that these functions should receive and yield strings
in
>> >> component values according to the following conventions:
>> >>
>> >> * All uppercase means to use a file system's customary case.
>> >> * All lowercase means to use the opposite of the customary
case.
>> >> * Mixed case represents itself.
>> >>
>> >> Note that these conventions have been chosen in such a way that
>> >> translation from :local to :common and back to :local is
>> >> information-preserving.
> >
> > What an odd corner of the CLHS, littered with the bones of extinct
> > filesystems! This behavior that seems like it would produce
> > unpleasantries much more than it would help anyone, violating the
> > principle of least surprise. But we claim that ABCL will be ANSI
first
> > and foremost, so I guess we have to pay attention here…
I should mention that I use routinely logical pathnames, and they work
very well, on all implementations that conformantly implement them.
That means that all my logical pathnames are always upcase letters, and
no special symbols (apart from an occasional dash).
I understand that using implementation dependant syntax (special
characters, lower-case, mixed-case) in logical pathnames can lead to
surprises, but I avoid them.
Now, it's not a question of extinct file systems. You still have to
deal with at least two different major syntaxes: POSIX and
MS-Windows/MS-DOS.
I just cannot use in programs that will have to run on both Linux or
MacOSX and MS-Windows physical pathname literals, because they don't use
the same syntax.
On the other hand, #P"HOME:SRC;LISP;EXAMPLE.LISP"
can be translated to either
#P"C:\\Users Files\\Pascal\\src\\lisp\\example.lisp" or
#P"/home/pjb/src/lisp/example.lisp"
portably on these targets.
The point for an implementation is to know what it's targets are, and to
implement proper behavior when translating and merging logical
pathnames. You must be careful when merging logical pathnames with
physical pathnames, notably when it's done in make-pathname: the :case
parameter must have effect only on the new strings, not on the :defaults
parameter.
> > I suppose there is no definition of "customary case", huh?
Indeed.
> > Pascal suggests a notion of filesystem statistics ("99.999% of files
> > are lowercase") but for a developer dealing with lots of Java files
> > this isn't very releavant.
Does Java provide its own file system, or does it map to the host file
system?
Notice that logical pathnames don't have to be able to represent all the
physical pathnames, without an explicit translation.
If you have a file system that is case sensitive, then you may write:
(setf (logical-pathname-translations "APP")
(list
(list #P"APP:EXAMPLE;FILE.LISP"
#P"/MyApp/Example/File.lisp")
(list #P"APP:EXAMPLE;ANOTHER-FILE.LISP"
#P"/MyApp/Example/AnotherFile.lisp")
(list #P"APP:EXAMPLE;*.DATA"
#P"/MyApp/Example/*.appdata")
(list #P"APP:EXAMPLE;SOME-MODULE.*"
#P"/MyApp/Example/SomeBigModule.*")
(list #P"APP:APP.CONFIGURATION" #P"/MyApp/.config")
(list #P"APP:CUSTOMARY;**;*" #P"/MyApp;**;*")
(list #P"APP:CUSTOMARY;**;*.*" #P"/MyApp;**;*.*")))
to be able to access to files with strange physical names.
The question indeed is to decide what is the customary case. You can
choose uppercase or you can choose lowercase. This matters only for
file systems that are case sensitive, but even file systems that are not
case sensitive, such as MS-DOS, have a prefered way to display the
names.
> > Lacking a more precise definition, I would then advocate that we
declare
> > lowercase to be the customary case across UNIX, OSX, and Windows for
> > ABCL, patching our behavior accordingly.
That would be good.
> > I thought briefly about advocating Windows to have "uppercase" as its
> > customary case, but that is only really true in a DOS world which
> > "modern" Windows systems really aren't any more.
Yes.
> > And although we theoretically run on JVMs on say VMS, if we run into
> > such needs, we might devote a user-accessible special variable to
> > control the implementation.
This is also a good option.
}}}
--
Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/132>
armedbear <http://common-lisp.net/project/armedbear>
armedbear
#118: Lisp.getUpgradedElementType returns more types than supported by
'make_array.java'
------------------------+---------------------------------------------------
Reporter: ehuelsmann | Owner: nobody
Type: defect | Status: new
Priority: major | Milestone:
Component: libraries | Version:
Keywords: |
------------------------+---------------------------------------------------
The above leads to possible failure: each upgraded element type has its
own associated defaultInitialValue. If the code does not specify the right
initial value, NIL is taken, which probably is not a good fit.
--
Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/118>
armedbear <http://common-lisp.net/project/armedbear>
armedbear
#113: DEFSTRUCT redefinition can crash ABCL on MAKE-FOO
---------------------+------------------------------------------------------
Reporter: mseddon | Owner: nobody
Type: defect | Status: new
Priority: minor | Milestone:
Component: java | Version:
Keywords: |
---------------------+------------------------------------------------------
CL-USER(1): (defstruct foo x y)
FOO
CL-USER(2): (defstruct foo x y z)
FOO
CL-USER(3): (make-foo :x 1 :y 2 :z 3)
ABCL Debug.assertTrue() assertion failed!
java.lang.Error: ABCL Debug.assertTrue() assertion failed!
at org.armedbear.lisp.Debug.assertTrue(Debug.java:46)
at
org.armedbear.lisp.StructureObject.writeToString(StructureObject.java
:483)
Multiple DEFSTRUCTs do not change the underlying structure class, but seem
to cause StructureObject to assert if the new (almost ignored) definition
had a different number of slots than the old.
For example, while the above example crashes out ABCL, the following
example does not:
CL-USER(1): (defstruct foo a b c)
FOO
CL-USER(2): (defstruct foo x y z)
FOO
CL-USER(3): (make-foo :x 1 :y 2 :z 3)
#S(FOO :A 1 :B 2 :C 3)
--
Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/113>
armedbear <http://common-lisp.net/project/armedbear>
armedbear
#73: "normalize-type" buffering
-------------------------+--------------------------------------------------
Reporter: ehuelsmann | Owner: somebody
Type: task | Status: new
Priority: major | Milestone:
Component: CLOS | Version:
Keywords: performance |
-------------------------+--------------------------------------------------
Peter Graves points out that with his "canonicalize-type" buffering, he
achieved measurable performance gain in XCL. We want to do the same in
ABCL.
--
Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/73>
armedbear <http://common-lisp.net/project/armedbear>
armedbear
#60: Implement USE-FAST-CALLS properly
-------------------------+--------------------------------------------------
Reporter: trittweiler | Owner: ehuelsmann
Type: defect | Status: new
Priority: minor | Milestone:
Component: compiler | Version:
Keywords: |
-------------------------+--------------------------------------------------
USE-FAST-CALLS is implemented at the moment by flipping
an essentially global variable.
The proper implementation would be to make turn it into
a ABCL-specific declaration, and making sure it affects
its lexically enclosing code only.
--
Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/60>
armedbear <http://common-lisp.net/project/armedbear>
armedbear
#32: Modify the currently disabled runtime-class.lisp code to not require ASM
--------------------------------------------------------------------+-------
Reporter: vvoutilainen | Owner: somebody
Type: enhancement | Status: new
Priority: major | Milestone:
Component: component1 | Version:
Keywords: jvm bytecode compiler runtime dynamic class generation |
--------------------------------------------------------------------+-------
It's possible to define classes at runtime, by generating bytecode and
loading it from the generated binary data, without ever writing it to a
temporary file. runtime-class.lisp does that, but it requires an external
bytecode library (ASM). ABCL has all the functionality for this to be done
without ASM, so the task is to modify the runtime-class.lisp code so that
ASM is no longer required and the code can be taken to be part of the
build.
--
Ticket URL: <http://127.0.0.1:8000/armedbear/ticket/32>
armedbear <http://common-lisp.net/project/armedbear>
armedbear
#55: Clearing LispThread.currentThread()._values more efficiently
-------------------------+--------------------------------------------------
Reporter: ehuelsmann | Owner: ehuelsmann
Type: enhancement | Status: new
Priority: major | Milestone:
Component: compiler | Version:
Keywords: |
-------------------------+--------------------------------------------------
We currently clear _values all over the place; we could be more efficient
some times.
--
Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/55>
armedbear <http://common-lisp.net/project/armedbear>
armedbear
#34: adjust generated '*.cls' filenames
------------------------+---------------------------------------------------
Reporter: mevenson | Owner: somebody
Type: defect | Status: new
Priority: major | Milestone:
Component: component1 | Version:
Keywords: |
------------------------+---------------------------------------------------
dmiles:
it be nice to eventually name the coerce-666.cls coerce_666.cls as the
same name of the way classpaths think about them (they'd continue to
work).. one argument agaist is our autoloader at least gets a better whack
at finding them in the right context apart from classloader
--
Ticket URL: <http://127.0.0.1:8000/armedbear/ticket/34>
armedbear <http://common-lisp.net/project/armedbear>
armedbear
#30: Lisp debugger, for both compiled and interpreted code
----------------------------+-----------------------------------------------
Reporter: vvoutilainen | Owner: somebody
Type: enhancement | Status: new
Priority: major | Milestone: unscheduled
Component: component1 | Version:
Keywords: debug debugger |
----------------------------+-----------------------------------------------
ABCL code can be debugged with normal java debuggers, but it
is somewhat painful for the portions implemented in lisp(1). So we need a
lisp debugger.
(1) It's possible, although a bit tedious, to step through
eval calls in a java debugger by examining the cars and
cdrs of eval parameters when stepping the code.
--
Ticket URL: <http://127.0.0.1:8000/armedbear/ticket/30>
armedbear <http://common-lisp.net/project/armedbear>
armedbear
#127: SLIME fails to EXTENSION:QUIT
-------------------------+--------------------------------------------------
Reporter: mevenson | Owner: ehuelsmann
Type: defect | Status: new
Priority: major | Milestone: unscheduled
Component: interpreter | Version: 0.24
Keywords: slime |
-------------------------+--------------------------------------------------
Alan Ruttenberg reports that "(QUIT) in SLIME doesn't"
{{{
CL-USER> (quit)
; Evaluation aborted on NIL.
}}}
The REPL used by SLIME is failing to catch and properly interpret the new
ProcessingTerminated exception thrown by QUIT.
--
Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/127>
armedbear <http://common-lisp.net/project/armedbear>
armedbear
#84: jcall and t/nil boolean arguments
------------------------+---------------------------------------------------
Reporter: ehuelsmann | Owner: nobody
Type: defect | Status: new
Priority: major | Milestone:
Component: java | Version:
Keywords: |
------------------------+---------------------------------------------------
Can it be made so that within jcall, t or nil is understood as a java
boolean argument?
--
Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/84>
armedbear <http://common-lisp.net/project/armedbear>
armedbear
#115: Generate specific classes for compiled Go/Return
-------------------------+--------------------------------------------------
Reporter: ehuelsmann | Owner: ehuelsmann
Type: enhancement | Status: new
Priority: major | Milestone:
Component: compiler | Version:
Keywords: |
-------------------------+--------------------------------------------------
By using specific classes for Go/Return, we could make our exception
handling more targetted; there would be no sifting through all the
unwinding levels for the right level (unpacking the 'return-tag' or 'go-
tag').
Instead, the jump would hit all the finally clauses without further
checking; straight through to the right handler.
--
Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/115>
armedbear <http://common-lisp.net/project/armedbear>
armedbear
#121: p2-test-* infrastructure should use COMPILE-TEST-FORM
------------------------+---------------------------------------------------
Reporter: ehuelsmann | Owner: ehuelsmann
Type: defect | Status: new
Priority: major | Milestone:
Component: compiler | Version:
Keywords: |
------------------------+---------------------------------------------------
Where it sometimes uses COMPILE-FORM and tests for NIL.
Another idea is to use FAIL/SUCCESS labels as argument to the compile-
test-function, which may result in more more efficient code. For example,
in that case, a NOT compilation only requires reversing the labels.
--
Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/121>
armedbear <http://common-lisp.net/project/armedbear>
armedbear
#134: Better support for packaging systems in jar files
--------------------------------+-------------------------------------------
Reporter: mevenson | Owner: nobody
Type: enhancement | Status: new
Priority: major | Milestone: 0.26
Component: java | Version:
Keywords: asdf jar packaging |
--------------------------------+-------------------------------------------
Meta ticket for collecting requirements for packaging systems in jar
files. Currently support exists for loading ASDF2 systems as source
packaged in a jar (see ABCL's contrib via the Ant target 'abcl.contrib'),
but additional support is often requested.
--
Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/134>
armedbear <http://common-lisp.net/project/armedbear>
armedbear
#124: Failure to be an SBCL build host
------------------------+---------------------------------------------------
Reporter: ehuelsmann | Owner: nobody
Type: defect | Status: new
Priority: major | Milestone:
Component: libraries | Version:
Keywords: |
------------------------+---------------------------------------------------
When building SBCL with ABCL, I'm getting the error
#<XP:XP-STRUCTURE ...> isn't of type STREAM
Failing to continue the SBCL build.
The issue here is that our pretty printer structure - which wraps a stream
- isn't itself a stream. Somehow, the pretty printer stream wrapper is
passed into ABCL internals expecting a STREAM, though.
--
Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/124>
armedbear <http://common-lisp.net/project/armedbear>
armedbear
#96: Lambda list &rest compilation error
-----------------------------+----------------------------------------------
Reporter: mevenson | Owner: ehuelsmann
Type: defect | Status: new
Priority: minor | Milestone: unscheduled
Component: compiler | Version:
Keywords: compiler lambda |
-----------------------------+----------------------------------------------
The following lambda list
{{{
(defun hashmap-to-hashtable (&key (k #'identity) &rest rest)
(let ((foo)))
}}}
fails to compile with the error
{{{
&REST/&BODY must be followed by a variable.
}}}
Reported by Alan Ruttenberg
--
Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/96>
armedbear <http://common-lisp.net/project/armedbear>
armedbear
#122: writeToString infrastructure doesn't support *PRINT-CIRCLE*
------------------------+---------------------------------------------------
Reporter: ehuelsmann | Owner: nobody
Type: defect | Status: new
Priority: major | Milestone:
Component: java | Version:
Keywords: |
------------------------+---------------------------------------------------
From a reaction of mine to a mail by Kevin Reid:
> I don't think it's a good idea to explicitly bind *print-circle* to
> nil in anything debugging-related, including error printing, because
> then it's a source of nontermination (silent until out of memory, if
> the output is going to a string) if user code is working with circular
> structure.
That's a good point. Rather, it may even be better to explicitly bind it
to T.
This remark made me realize that our Java side writeToString actually
doesn't support *PRINT-CIRCLE* which can be an issue when trying to debug
ABCL before it has loaded the ERROR and PRINT-OBJECT infrastructures.
--
Ticket URL: <http://trac.common-lisp.net/armedbear/ticket/122>
armedbear <http://common-lisp.net/project/armedbear>
armedbear