PLN CDR draft: Issue 1

1. Issue 1 (ADD-/REMOVE-PACKAGE-LOCAL-NICKNAME return values)

1.1. Description

Functions add-package-local-nickname and remove-package-local-nickname have inconsistent return values.

The first one always returns the designated package, while the second one returns true (a generalized boolean) that indicates whether a nickname was removed.

Furthermore, there is no consensus among existing implementations as to what this generalized boolean represents.

In comparison,the functions use-package and unuse-package always return T, and the functions export and unexport have the same behavior. There are also functions unintern and delete-package which return a generalized boolean indicating if the operation changed something, but their counterparts intern and make-package, unlike with local nicknames, create and return an object (a symbol or a package).

1.2. Examples

(defpackage #:foo (:use))
(defpackage #:bar (:use))

(add-package-local-nickname '#:nick '#:bar '#:foo)
; => #<PACKAGE "FOO">  (sbcl, ccl, ecl, acl, abcl, clasp, lispworks)
(add-package-local-nickname '#:nick '#:bar '#:foo)
; => #<PACKAGE "FOO">  (sbcl, ccl, ecl, acl, abcl, clasp, lispworks)
(remove-package-local-nickname '#:nick '#:foo)
; => T  (sbcl, ccl, ecl, acl, clasp)
; => #<PACKAGE "BAR">  (abcl)
; => NIL  (lispworks)
(remove-package-local-nickname '#:nick '#:foo)
; => NIL  (sbcl, ccl, ecl, acl, abcl, clasp, lispworks)

1.3. Current behavior

sbcl, ccl, ecl, acl, abcl, clasp, lispworks: add-package-local-nickname always returns designated package.

sbcl, ccl, ecl, acl, clasp: remove-package-local-nickname returns T if a nickname was removed, and NIL otherwise.

abcl: remove-package-local-nickname returns true if a nickname was removed, (more specifically, it returns the package nicknamed by the removed local nickname), and NIL otherwise.

lispworks: remove-package-local-nickname always returns NIL.

1.4. Proposal ALWAYS-T

add-package-local-nickname should always return T.

remove-package-local-nickname should always return T.

1.5. Proposal ELIMINATE-GENERALIZED-BOOLEAN

add-package-local-nickname should return the designated package.

remove-package-local-nickname should return T if a nickname was removed and NIL otherwise.

1.6. Proposal DESIGNATED-PACKAGE-IF-SUCCESSFUL

add-package-local-nickname should return the designated package if a new nickname was added, and NIL otherwise.

remove-package-local-nickname should return the designated package if a nickname was removed, and NIL otherwise.

1.7. Proposal NICKNAMED-PACKAGE-IF-SUCCESSFUL

add-package-local-nickname should return the nicknamed package if a new nickname was added, and NIL otherwise.

remove-package-local-nickname should return the previously nicknamed package if a nickname was removed, and NIL otherwise.

Author: Gleefre

Created: 2024-07-06 Sat 17:24