Raymond Toy pushed to branch issue-259-use-right-software-version at cmucl / cmucl
Commits:
-
917c4240
by Raymond Toy at 2023-08-30T17:38:23+00:00
-
77dee627
by Raymond Toy at 2023-08-30T17:38:40+00:00
-
db531fef
by Raymond Toy at 2023-08-30T17:59:50+00:00
-
766c6aa5
by Raymond Toy at 2023-08-30T18:00:08+00:00
-
961c96ad
by Raymond Toy at 2023-08-30T11:12:42-07:00
-
f473d365
by Raymond Toy at 2023-09-04T14:52:33-07:00
-
8d5757b8
by Raymond Toy at 2023-09-04T15:23:06-07:00
10 changed files:
- src/bootfiles/21e/boot-2023-08.lisp
- src/code/exports.lisp
- src/code/linux-os.lisp
- src/code/list.lisp
- src/code/misc.lisp
- src/general-info/release-21f.md
- src/i18n/locale/cmucl-linux-os.pot
- src/i18n/locale/cmucl.pot
- + tests/environ.lisp
- tests/sets.lisp
Changes:
... | ... | @@ -2,4 +2,5 @@ |
2 | 2 | ;;
|
3 | 3 | ;; Build with -B boot-2023-08 from the 21e release.
|
4 | 4 | (ext:without-package-locks
|
5 | - (unintern 'lisp::*software-version* "LISP")) |
|
5 | + (unintern 'lisp::*software-version* "LISP")
|
|
6 | + (unexport 'system::*software-type* "SYSTEM")) |
... | ... | @@ -2057,8 +2057,6 @@ |
2057 | 2057 | "%SP-REVERSE-FIND-CHARACTER-WITH-ATTRIBUTE" "%STANDARD-CHAR-P"
|
2058 | 2058 | "*BEEP-FUNCTION*"
|
2059 | 2059 | "*LONG-SITE-NAME*" "*SHORT-SITE-NAME*"
|
2060 | - "*SOFTWARE-TYPE*"
|
|
2061 | - "*SOFTWARE-VERSION*"
|
|
2062 | 2060 | "*STDERR*" "*STDIN*" "*STDOUT*" "*TASK-DATA*"
|
2063 | 2061 | "*TASK-NOTIFY*" "*TASK-SELF*" "*TTY*" "*TYPESCRIPTPORT*"
|
2064 | 2062 | "*XWINDOW-TABLE*"
|
... | ... | @@ -32,16 +32,3 @@ |
32 | 32 | ;;;
|
33 | 33 | (defun os-init ()
|
34 | 34 | (setf *software-version* nil)) |
35 | - |
|
36 | - |
|
37 | -;;; GET-PAGE-SIZE -- Interface
|
|
38 | -;;;
|
|
39 | -;;; Return the system page size.
|
|
40 | -;;;
|
|
41 | -(defun get-page-size ()
|
|
42 | - (multiple-value-bind (val err)
|
|
43 | - (unix:unix-getpagesize)
|
|
44 | - (unless val
|
|
45 | - (error (intl:gettext "Getpagesize failed: ~A") (unix:get-unix-error-msg err)))
|
|
46 | - val))
|
|
47 | - |
... | ... | @@ -928,7 +928,7 @@ |
928 | 928 | |
929 | 929 | (defun set-exclusive-or (list1 list2 &key key
|
930 | 930 | (test #'eql testp) (test-not nil notp))
|
931 | - "Return new list of elements appearing exactly once in LIST1 and LIST2."
|
|
931 | + "Return new list of elements appearing exactly one of LIST1 and LIST2."
|
|
932 | 932 | (declare (inline member))
|
933 | 933 | (let ((result nil)
|
934 | 934 | (key (when key (coerce key 'function)))
|
... | ... | @@ -936,19 +936,38 @@ |
936 | 936 | (test-not (if test-not (coerce test-not 'function) #'eql)))
|
937 | 937 | (declare (type (or function null) key)
|
938 | 938 | (type function test test-not))
|
939 | - (dolist (elt list1)
|
|
940 | - (unless (with-set-keys (member (apply-key key elt) list2))
|
|
941 | - (setq result (cons elt result))))
|
|
942 | - (let ((test (if testp
|
|
943 | - (lambda (x y) (funcall test y x))
|
|
944 | - test))
|
|
945 | - (test-not (if notp
|
|
946 | - (lambda (x y) (funcall test-not y x))
|
|
947 | - test-not)))
|
|
948 | - (dolist (elt list2)
|
|
949 | - (unless (with-set-keys (member (apply-key key elt) list1))
|
|
950 | - (setq result (cons elt result)))))
|
|
951 | - result))
|
|
939 | + ;; Find the elements in list1 that do not appear in list2 and add
|
|
940 | + ;; them to the result.
|
|
941 | + (macrolet
|
|
942 | + ((compute-membership (item-list test-form)
|
|
943 | + `(dolist (elt ,item-list)
|
|
944 | + (unless ,test-form
|
|
945 | + (setq result (cons elt result))))))
|
|
946 | + (let ((hashtable (list-to-hashtable list2 key test test-not)))
|
|
947 | + (cond
|
|
948 | + (hashtable
|
|
949 | + (compute-membership list1
|
|
950 | + (nth-value 1 (gethash (apply-key key elt) hashtable))))
|
|
951 | + (t
|
|
952 | + (compute-membership list1
|
|
953 | + (with-set-keys (member (apply-key key elt) list2))))))
|
|
954 | + ;; Now find the elements in list2 that do not appear in list1 and
|
|
955 | + ;; them to the result.
|
|
956 | + (let ((hashtable (list-to-hashtable list1 key test test-not)))
|
|
957 | + (cond
|
|
958 | + (hashtable
|
|
959 | + (compute-membership list2
|
|
960 | + (nth-value 1 (gethash (apply-key key elt) hashtable))))
|
|
961 | + (t
|
|
962 | + (let ((test (if testp
|
|
963 | + (lambda (x y) (funcall test y x))
|
|
964 | + test))
|
|
965 | + (test-not (if notp
|
|
966 | + (lambda (x y) (funcall test-not y x))
|
|
967 | + test-not)))
|
|
968 | + (compute-membership list2
|
|
969 | + (with-set-keys (member (apply-key key elt) list1)))))))
|
|
970 | + result)))
|
|
952 | 971 | |
953 | 972 | |
954 | 973 | ;;; The outer loop examines list1 while the inner loop examines list2. If an
|
... | ... | @@ -23,7 +23,12 @@ |
23 | 23 | short-site-name long-site-name dribble compiler-macro))
|
24 | 24 | |
25 | 25 | (in-package "SYSTEM")
|
26 | -(export '(*software-type* *short-site-name* *long-site-name*))
|
|
26 | +(export '(*short-site-name* *long-site-name*))
|
|
27 | +(defvar *software-type* "Unix"
|
|
28 | + _N"The value of SOFTWARE-TYPE. Set in FOO-os.lisp.")
|
|
29 | + |
|
30 | +(defvar *software-version* nil
|
|
31 | + _N"Version string for supporting software")
|
|
27 | 32 | |
28 | 33 | (in-package "EXT")
|
29 | 34 | (export 'featurep)
|
... | ... | @@ -80,20 +85,14 @@ |
80 | 85 | "Returns a string giving the name of the local machine."
|
81 | 86 | (unix:unix-gethostname))
|
82 | 87 | |
83 | -(defvar *software-type* "Unix"
|
|
84 | - _N"The value of SOFTWARE-TYPE. Set in FOO-os.lisp.")
|
|
85 | - |
|
86 | 88 | (defun software-type ()
|
87 | 89 | "Returns a string describing the supporting software."
|
88 | - *software-type*)
|
|
89 | - |
|
90 | -(defvar *software-version* nil
|
|
91 | - _N"Version string for supporting software")
|
|
90 | + system::*software-type*)
|
|
92 | 91 | |
93 | 92 | (defun software-version ()
|
94 | 93 | _N"Returns a string describing version of the supporting software."
|
95 | - (unless *software-version*
|
|
96 | - (setf *software-version*
|
|
94 | + (unless system::*software-version*
|
|
95 | + (setf system::*software-version*
|
|
97 | 96 | (let (version result)
|
98 | 97 | (unwind-protect
|
99 | 98 | (progn
|
... | ... | @@ -105,7 +104,7 @@ |
105 | 104 | (if (zerop (length result))
|
106 | 105 | "Unknown"
|
107 | 106 | result)))
|
108 | - *software-version*))
|
|
107 | + system::*software-version*))
|
|
109 | 108 | |
110 | 109 | (defvar *short-site-name* nil
|
111 | 110 | "The value of SHORT-SITE-NAME. Set in library:site-init.lisp.")
|
1 | +# CMUCL 21f
|
|
2 | + |
|
1 | 3 | # Work in progress
|
2 | 4 | |
3 | 5 | The CMUCL project is pleased to announce the release of CMUCL 21f.
|
... | ... | @@ -24,9 +26,16 @@ public domain. |
24 | 26 | * Gitlab tickets:
|
25 | 27 | * ~~#154~~ piglatin translation does not work anymore
|
26 | 28 | * ~~#171~~ Readably print `(make-pathname :name :unspecfic)`
|
27 | - * ~~#242~~ Fix bug in `alien-funcall` with `c-call:char` as result type
|
|
29 | + * ~~#196~~ Fix issues with mapping and nconc accumulation (mapcan)
|
|
30 | + * ~~#216~~ `enough-namestring` with relative pathname fails
|
|
31 | + * ~~#234~~ Make :ASCII external format builtin
|
|
32 | + * ~~#240~~ Speed up set operations
|
|
33 | + * ~~#242~~ Fix bug in `alien-funcall` with `c-call:char` as result type
|
|
28 | 34 | * ~~#244~~ Add `c-call:signed-char`
|
29 | 35 | * ~~#248~~ Print MOVS instruction with correct case
|
36 | + * ~~#249~~ Replace LEA instruction with simpler shorter instructions in arithmetic vops for x86
|
|
37 | + * ~~#253~~ Block-compile list-to-hashtable and callers
|
|
38 | + * ~~#258~~ Remove `get-page-size` from linux-os.lisp
|
|
30 | 39 | * Other changes:
|
31 | 40 | * Improvements to the PCL implementation of CLOS:
|
32 | 41 | * Changes to building procedure:
|
... | ... | @@ -15,10 +15,6 @@ msgstr "" |
15 | 15 | "Content-Type: text/plain; charset=UTF-8\n"
|
16 | 16 | "Content-Transfer-Encoding: 8bit\n"
|
17 | 17 | |
18 | -#: src/code/linux-os.lisp
|
|
19 | -msgid "Getpagesize failed: ~A"
|
|
20 | -msgstr ""
|
|
21 | - |
|
22 | 18 | #: src/code/signal.lisp
|
23 | 19 | msgid "Stack fault on coprocessor"
|
24 | 20 | msgstr ""
|
... | ... | @@ -3236,7 +3236,7 @@ msgid "Destructively returns the elements of list1 which are not in list2." |
3236 | 3236 | msgstr ""
|
3237 | 3237 | |
3238 | 3238 | #: src/code/list.lisp
|
3239 | -msgid "Return new list of elements appearing exactly once in LIST1 and LIST2."
|
|
3239 | +msgid "Return new list of elements appearing exactly one of LIST1 and LIST2."
|
|
3240 | 3240 | msgstr ""
|
3241 | 3241 | |
3242 | 3242 | #: src/code/list.lisp
|
... | ... | @@ -5619,6 +5619,14 @@ msgid "" |
5619 | 5619 | " NIL if no such character exists."
|
5620 | 5620 | msgstr ""
|
5621 | 5621 | |
5622 | +#: src/code/misc.lisp
|
|
5623 | +msgid "The value of SOFTWARE-TYPE. Set in FOO-os.lisp."
|
|
5624 | +msgstr ""
|
|
5625 | + |
|
5626 | +#: src/code/misc.lisp
|
|
5627 | +msgid "Version string for supporting software"
|
|
5628 | +msgstr ""
|
|
5629 | + |
|
5622 | 5630 | #: src/code/misc.lisp
|
5623 | 5631 | msgid ""
|
5624 | 5632 | "If X is an atom, see if it is present in *FEATURES*. Also\n"
|
... | ... | @@ -5645,18 +5653,10 @@ msgstr "" |
5645 | 5653 | msgid "Returns a string giving the name of the local machine."
|
5646 | 5654 | msgstr ""
|
5647 | 5655 | |
5648 | -#: src/code/misc.lisp
|
|
5649 | -msgid "The value of SOFTWARE-TYPE. Set in FOO-os.lisp."
|
|
5650 | -msgstr ""
|
|
5651 | - |
|
5652 | 5656 | #: src/code/misc.lisp
|
5653 | 5657 | msgid "Returns a string describing the supporting software."
|
5654 | 5658 | msgstr ""
|
5655 | 5659 | |
5656 | -#: src/code/misc.lisp
|
|
5657 | -msgid "Version string for supporting software"
|
|
5658 | -msgstr ""
|
|
5659 | - |
|
5660 | 5660 | #: src/code/misc.lisp
|
5661 | 5661 | msgid "Returns a string describing version of the supporting software."
|
5662 | 5662 | msgstr ""
|
1 | +;; Tests for environment dictionary
|
|
2 | + |
|
3 | +(defpackage :environ-tests
|
|
4 | + (:use :cl :lisp-unit))
|
|
5 | + |
|
6 | +(in-package "ENVIRON-TESTS")
|
|
7 | + |
|
8 | +(define-test software-type
|
|
9 | + (:tag :issues)
|
|
10 | + (let ((type (software-type)))
|
|
11 | + ;; Can't really test anything, so just verify we get a non-empty
|
|
12 | + ;; string.
|
|
13 | + (assert-true (typep type 'string))
|
|
14 | + (assert-true (plusp (length type)))))
|
|
15 | + |
|
16 | +(define-test software-version
|
|
17 | + (:tag :issues)
|
|
18 | + (let ((version (software-version)))
|
|
19 | + ;; Can't really test anything, so just verify we get a non-empty
|
|
20 | + ;; string.
|
|
21 | + (assert-true (typep version 'string))
|
|
22 | + (assert-true (plusp (length version)))))
|
|
23 | + |
... | ... | @@ -279,3 +279,26 @@ |
279 | 279 | '(3 4)
|
280 | 280 | :test 'eql
|
281 | 281 | :test-not 'equal)))
|
282 | + |
|
283 | +(define-test set-exclusive-or.1
|
|
284 | + (:tag :issues)
|
|
285 | + (flet
|
|
286 | + ((test (min-length)
|
|
287 | + ;; From CLHS
|
|
288 | + (let ((lisp::*min-list-length-for-hashtable* min-length))
|
|
289 | + (assert-equal '("b" "A" "b" "a")
|
|
290 | + (set-exclusive-or '(1 "a" "b")
|
|
291 | + '(1 "A" "b")))
|
|
292 | + (assert-equal '("A" "a")
|
|
293 | + (set-exclusive-or '(1 "a" "b")
|
|
294 | + '(1 "A" "b")
|
|
295 | + :test #'equal))
|
|
296 | + (assert-equal nil
|
|
297 | + (set-exclusive-or '(1 "a" "b")
|
|
298 | + '(1 "A" "b")
|
|
299 | + :test #'equalp)))))
|
|
300 | + ;; Test the list impl by making the min length large. Then test
|
|
301 | + ;; the hashtable impl with a very short min length
|
|
302 | + (test 100)
|
|
303 | + (test 2)))
|
|
304 | + |