Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
cdr
cdr.common-lisp.dev
Commits
8c08cb2e
Commit
8c08cb2e
authored
Jan 22, 2022
by
Marco Antoniotti
💬
Browse files
Cleaned source up and fixed links.
parent
ef25dda8
Pipeline
#5849
passed with stage
in 2 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
document/14/CDR-features.htm
View file @
8c08cb2e
...
...
@@ -72,191 +72,201 @@
-->
<html>
<head>
<title>
Detecting Implementation of CDR's in Common Lisp
Runtimes
</title>
</head>
<body>
<h1>
Detecting Implementation of CDR's in Common Lisp Runtimes
</h1>
<p>
Marco Antoniotti
<br
/>
Universit
à
degli Studi di Milano Bicocca,
Milan, Italy
<br
/><code>
<
marco.antoniotti [a]
unimib.it
>
</code></p>
<p><b>
Keywords:
</b>
Common Lisp, CDR, Implementation Features.
</p>
<h1>
Introduction
</h1>
<head>
<title>
Detecting Implementation of CDR's in Common Lisp
Runtimes
</title>
</head>
<body>
<h1>
Detecting Implementation of CDR's in Common Lisp Runtimes
</h1>
<p>
Marco Antoniotti
<br
/>
Universit
à
degli Studi di Milano Bicocca,
Milan, Italy
<br
/><code>
<
marco.antoniotti [a]
unimib.it
>
</code></p>
<p><b>
Keywords:
</b>
Common Lisp, CDR, Implementation Features.
</p>
<h1>
Introduction
</h1>
<p>
The
<em>
Common Lisp Document Repository
</em>
(CDR)
[
<a
href=
'#CDRsite'
>
2
</a>
] was created as a very light-weight
infrastructure for the Common Lisp community, where a number of
"
documents
"
and
"
specifications
"
are collected
and
<em>
fixed
</em>
for the benefit of programmers and implementors.
Each document is give an unique
<em>
CDR identifier
</em>
(essentially
a number), which is retained over the years; each of these documents
can then be referred simply as
<i>
CDR number N
</i>
(or, more simply,
<i>
a CDR
</i>
, when not referring to a particular document in the
repository).
</p>
<p>
At the time of this writing, there is yet no agreed upon way to
check whether a
<strong>
Common Lisp
</strong>
implementation provides
a particular CDR or not (i.e., whether a particular CDR is present
"
out of the box
"
, or whether a library implementing a
specific CDR is loaded in the
<strong>
Common Lisp
</strong>
environment). The goal of this document is to provide a
specification for this behavior.
</p>
<h2>
Rationale
</h2>
<p>
Each CDR is assigned a unique number/identifier. It therefore
appears natural to resort to the
<strong>
Common Lisp
</strong>
<code>
*features*
</code>
machinery to provide a minimal
infrastructure to check for the presence of a given CDR in a
<strong>
Common Lisp
</strong>
environment. To do so, a few
definitions are necessary and will be listed in the next
section.
</p>
<h1>
Specification
</h1>
<p>
The specification contained in this document consists of the
following items:
<ol>
<li>
As per CDR n.
0 and CDR n.
4, each document
submitted to the CDR editors is assigned a unique number; form
now on it will also be assigned a
<em><a
href=
'http://www.lispworks.com/documentation/HyperSpec/Body/26_glo_k.htm'
>
keyword
</a></em>
of the form
<code>
:cdr-
</code><em>
n
</em>
(where
<em>
n
</em>
is
the unique CDR number assigned by the editors).
The numer
<em>
n
</em>
is a
<code>
(integer 0)
</code>
, if
<strong>
Common Lisp
</strong>
types are to be
used, and its typographical representation is as if it were
<i><code>
print
</code>
ed
</i>
with
<code>
*PRINT-BASE*
</code>
set
to 10.
</li>
<li>
An
<em>
implementation
</em>
of a given CDR (say, CDR 42) should
provide the appropriate keyword (say,
<code>
:cdr-42
</code>
) in the
<code>
*features*
</code>
list.
</li>
<li>
If a given
<code>
:cdr-
</code><em>
n
</em>
is present in
the
<code>
*features*
</code>
list of a given
<strong>
Common
Lisp
</strong>
environment, that means only that
<blockquote>
specific instance of a
<strong>
Common Lisp
</strong>
environment
<em>
purports to implement
</em>
CDR
<em>
i
</em>
at a
"
satisfactory
"
level of
compliance.
</blockquote></li>
</ol>
</p>
<p>
Users and programmers can thus check whether a give CDR is
"
present
"
in a
<strong>
Common Lisp
</strong>
environment,
using the usual
<code>
*features*
</code>
checking machinery.
</p>
<h2>
Guarantees, Non-guarantees etc.
etc.
</h2>
<p>
It must be noted that there are possible pitfalls that the
"
CDR process and infrastructure
"
cannot avoid. In the
following they are listed in no particular order.
</p>
<h3>
"
Purports to implement
"
</h3>
<p>
The
"
CDR process and infrastructure
"
cannot guarantee
that the presence of a
<em>
CDR keyword
</em>
in a
<strong>
Common
Lisp
</strong>
environment
<code>
*features*
</code>
list corresponds
to a
"
correct
"
and
"
complete
"
implementation of
a given CDR.
"
Correctness
"
,
"
completeness
"
and
"
testing
"
are left to the
"
provider
"
of a given
CDR.
</p>
<p>
It is understood that a provider of a given CDR (a provider who
<em>
purports to implement...
</em>
) will make a best effort to fully
implement a specification.
</p>
<h3>
Multiple Implementations of a Given CDR
</h3>
<p>
It may be possible for
<em>
multiple
</em>
implementations of a given
CDR to co-exist in a given
<strong>
Common Lisp
</strong>
environment.
All of them will rely on a single
<code>
:cdr-
</code><em>
n
</em>
in
the
<code>
*feature*
</code>
list. Which particular implementation is
then actually used and where, is left to the programmer and her/his
use of the package system.
</p>
<h3>
Example
</h3>
<p>
As an example, testing for the presence of CDR
10 will be done
as follows:
<pre>
<b>
#+cdr-10
</b>
(abi-version)
</pre>
</p>
<h3>
CDR's Current State
</h3>
<p>
The current set of CDR's is listed at the site
<a
href=
'http://cdr.common-lisp.net'
target=
_blank
>
http://cdr.common-lisp.dev
</a>
. The
following keywords are thus assigned to each of the finalized
CDR's:
<p>
<p>
<code>
:cdr-0
</code>
,
<code>
:cdr-1
</code>
,
<code>
:cdr-2
</code>
,
<code>
:cdr-3
</code>
,
<code>
:cdr-4
</code>
,
<code>
:cdr-5
</code>
,
<code>
:cdr-6
</code>
,
<code>
:cdr-7
</code>
,
<code>
:cdr-8
</code>
,
<code>
:cdr-9
</code>
,
<code>
:cdr-10
</code>
,
<code>
:cdr-11
</code>
,
<code>
:cdr-12
</code>
,
<code>
:cdr-13
</code>
.
</p>
<h1>
Acknowledgements
</h1>
<p>
The CDR editors, and the participants to the CDR
"
side
"
-meeting at the European Lisp Symposium in Madrid,
June 4, 2013 (ELS
2013).
</p>
<h1>
References
</h1>
<ul>
<li><a
name=
'ANSIHyperSpec'
>
[1]
</a>
<i>
The
<strong>
Common Lisp
</strong>
Hyperspec
</i>
,
published online at
<a
href=
'http://www.lispworks.com/documentation/HyperSpec/Front/'
target=
_blank
>
http://www.lispworks.com/documentation/HyperSpec/Front/
</a>
,
1994.
</li>
<li><a
name=
'CDRsite'
>
[2]
</a>
<i>
The CDR site
</i>
, at
<a
href=
'http://cdr.common-lisp.dev'
target=
_blank
>
http://cdr.common-lisp.dev
</a>
.
</li>
</ul>
<p>
The
<em>
Common Lisp Document Repository
</em>
(CDR)
[
<a
href=
'#CDRsite'
>
2
</a>
] was created as a very light-weight
infrastructure for the Common Lisp community, where a number of
"
documents
"
and
"
specifications
"
are collected
and
<em>
fixed
</em>
for the benefit of programmers and implementors.
Each document is give an unique
<em>
CDR identifier
</em>
(essentially
a number), which is retained over the years; each of these documents
can then be referred simply as
<i>
CDR number N
</i>
(or, more simply,
<i>
a CDR
</i>
, when not referring to a particular document in the
repository).
</p>
<p>
At the time of this writing, there is yet no agreed upon way to
check whether a
<strong>
Common Lisp
</strong>
implementation provides
a particular CDR or not (i.e., whether a particular CDR is present
"
out of the box
"
, or whether a library implementing a
specific CDR is loaded in the
<strong>
Common Lisp
</strong>
environment). The goal of this document is to provide a
specification for this behavior.
</p>
<h2>
Rationale
</h2>
<p>
Each CDR is assigned a unique number/identifier. It therefore
appears natural to resort to the
<strong>
Common Lisp
</strong>
<code>
*features*
</code>
machinery to provide a minimal
infrastructure to check for the presence of a given CDR in a
<strong>
Common Lisp
</strong>
environment. To do so, a few
definitions are necessary and will be listed in the next
section.
</p>
<h1>
Specification
</h1>
<p>
The specification contained in this document consists of the
following items:
<ol>
<li>
As per CDR n.
0 and CDR n.
4, each document submitted to the CDR
editors is assigned a unique number; form now on it will also be
assigned
a
<em><a
href=
'http://www.lispworks.com/documentation/HyperSpec/Body/26_glo_k.htm'
>
keyword
</a></em>
of the form
<code>
:cdr-
</code><em>
n
</em>
(where
<em>
n
</em>
is
the unique CDR number assigned by the editors).
The numer
<em>
n
</em>
is a
<code>
(integer 0)
</code>
, if
<strong>
Common Lisp
</strong>
types are to be
used, and its typographical representation is as if it were
<i><code>
print
</code>
ed
</i>
with
<code>
*PRINT-BASE*
</code>
set
to 10.
</li>
<li>
An
<em>
implementation
</em>
of a given CDR (say, CDR 42) should
provide the appropriate keyword (say,
<code>
:cdr-42
</code>
) in the
<code>
*features*
</code>
list.
</li>
<li>
If a given
<code>
:cdr-
</code><em>
n
</em>
is present in the
<code>
*features*
</code>
list of a given
<strong>
Common Lisp
</strong>
environment, that means only that
<blockquote>
specific instance of a
<strong>
Common Lisp
</strong>
environment
<em>
purports to
implement
</em>
CDR
<em>
i
</em>
at a
"
satisfactory
"
level of compliance.
</blockquote></li>
</ol>
</p>
<p>
Users and programmers can thus check whether a give CDR is
"
present
"
in a
<strong>
Common Lisp
</strong>
environment,
using the usual
<code>
*features*
</code>
checking machinery.
</p>
<h2>
Guarantees, Non-guarantees etc.
etc.
</h2>
<p>
It must be noted that there are possible pitfalls that the
"
CDR process and infrastructure
"
cannot avoid. In the
following they are listed in no particular order.
</p>
<h3>
"
Purports to implement
"
</h3>
<p>
The
"
CDR process and infrastructure
"
cannot guarantee
that the presence of a
<em>
CDR keyword
</em>
in a
<strong>
Common
Lisp
</strong>
environment
<code>
*features*
</code>
list corresponds
to a
"
correct
"
and
"
complete
"
implementation of
a given CDR.
"
Correctness
"
,
"
completeness
"
and
"
testing
"
are left to the
"
provider
"
of a given
CDR.
</p>
<p>
It is understood that a provider of a given CDR (a provider who
<em>
purports to implement...
</em>
) will make a best effort to fully
implement a specification.
</p>
<h3>
Multiple Implementations of a Given CDR
</h3>
<p>
It may be possible for
<em>
multiple
</em>
implementations of a given
CDR to co-exist in a given
<strong>
Common Lisp
</strong>
environment.
All of them will rely on a single
<code>
:cdr-
</code><em>
n
</em>
in
the
<code>
*feature*
</code>
list. Which particular implementation is
then actually used and where, is left to the programmer and her/his
use of the package system.
</p>
<h3>
Example
</h3>
<p>
As an example, testing for the presence of CDR
10 will be done
as follows:
<pre>
<b>
#+cdr-10
</b>
(abi-version)
</pre>
</p>
<h3>
CDR's Current State
</h3>
<p>
The current set of CDR's is listed at the site
<a
href=
'http://cdr.eurolisp.org'
>
http://cdr.eurolisp.org
</a>
. The
following keywords are thus assigned to each of the finalized
CDR's:
<p>
<p>
<code>
:cdr-0
</code>
,
<code>
:cdr-1
</code>
,
<code>
:cdr-2
</code>
,
<code>
:cdr-3
</code>
,
<code>
:cdr-4
</code>
,
<code>
:cdr-5
</code>
,
<code>
:cdr-6
</code>
,
<code>
:cdr-7
</code>
,
<code>
:cdr-8
</code>
,
<code>
:cdr-9
</code>
,
<code>
:cdr-10
</code>
,
<code>
:cdr-11
</code>
,
<code>
:cdr-12
</code>
,
<code>
:cdr-13
</code>
.
</p>
<h1>
Acknowledgements
</h1>
<p>
The CDR editors, and the participants to the CDR
"
side
"
-meeting at the European Lisp Symposium in Madrid,
June 4, 2013 (ELS
2013).
</p>
<h1>
References
</h1>
<ul>
<li><a
name=
'ANSIHyperSpec'
>
[1]
</a>
<i>
The
<strong>
Common Lisp
</strong>
Hyperspec
</i>
,
published online at
<a
href=
'http://www.lispworks.com/documentation/HyperSpec/Front/'
>
http://www.lispworks.com/documentation/HyperSpec/Front/
</a>
, 1994.
<li><a
name=
'CDRsite'
>
[2]
</a>
<i>
The CDR site
</i>
, at
<a
href=
'http://cdr.eurolisp.org'
>
http://cdr.eurolisp.org
</a>
.
</ul>
<h1>
Copying and License
</h1>
<p>
This work may be distributed and/or modified under the conditions
of the
<em>
Creative Commons Attribution 3..0 Unported License
</em>
,
or (at your option) any later version. The latest version of this
license can be found at
<a
href=
'http://creativecommons.org/licenses/by/3.0/'
>
http://creativecommons.org/licenses/by/3.0/
</a>
.
</p>
<p>
The current maintainer of this work is Marco
Antoniotti,
<code>
<
marco.antoniotti [a] unimib.it
>
</code>
.
</p>
</body>
<h1>
Copying and License
</h1>
<p>
This work may be distributed and/or modified under the conditions
of the
<em>
Creative Commons Attribution 3..0 Unported License
</em>
,
or (at your option) any later version. The latest version of this
license can be found at
<a
href=
'http://creativecommons.org/licenses/by/3.0/'
target=
_blank
>
http://creativecommons.org/licenses/by/3.0/
</a>
.
</p>
<p>
The current maintainer of this work is Marco
Antoniotti,
<code>
<
marco.antoniotti [a] unimib.it
>
</code>
.
</p>
</body>
</html>
<!-- end of file : CDR-features.tex -->
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment