1.0.28.30: DEFGLOBAL, ALWAYS-BOUND, GLOBAL, SYMBOL-GLOBAL-VALUE
authorNikodemus Siivola <nikodemus@random-state.net>
Fri, 8 May 2009 19:08:07 +0000 (19:08 +0000)
committerNikodemus Siivola <nikodemus@random-state.net>
Fri, 8 May 2009 19:08:07 +0000 (19:08 +0000)
commit79a8e51bf4b06a5bd57bc90233605f98fee3b041
treec7c77725d6c7fa56f27c5a238efed3a239e64c0f
parent8852534331f5505348d1217a3080ee25e09ec47e
1.0.28.30: DEFGLOBAL, ALWAYS-BOUND, GLOBAL, SYMBOL-GLOBAL-VALUE

 * ALWAYS-BOUND allows the compiler to elide boundness checks
   for symbol value access, and prohibits MAKUNBOUND. This is
   handled via a new globaldb entry.

   GLOBAL makes the compiler elide TLS checking for symbol
   values access, and prohibits rebinding. This is handled via
   new globaldb :variable :type, namely :global.

   DEFGLOBAL is build on top of these. Global variables are mainly an
   efficiency measure on threaded builds, but can also express
   intention as they prohibit rebinding.

 * Add %SET-SYMBOL-GLOBAL-VALUE, FAST-SYMBOL-GLOBAL-VALUE, and
   SYMBOL-GLOBAL-VALUE VOPs to all backends. On unithreaded
   builds these are trivial copies of the non-global versions.

 * Tell SB-CLTL2 about both GLOBAL and ALWAYS-BOUND declarations too.

 * Document in the Efficiency chapter of the manual.

 * Prohibit declaring constants special.

 * Tests.

  Later: use these new features inside SBCL itself. For now there is
  only a single DEFGLOBAL used, but more could well be.
39 files changed:
NEWS
contrib/sb-cltl2/env.lisp
contrib/sb-cltl2/tests.lisp
doc/manual/efficiency.texinfo
package-data-list.lisp-expr
src/code/array.lisp
src/code/defboot.lisp
src/code/defsetfs.lisp
src/code/describe.lisp
src/code/early-extensions.lisp
src/code/eval.lisp
src/code/full-eval.lisp
src/code/gc.lisp
src/code/late-extensions.lisp
src/code/macros.lisp
src/code/room.lisp
src/code/symbol.lisp
src/compiler/alpha/cell.lisp
src/compiler/debug.lisp
src/compiler/defconstant.lisp
src/compiler/fndb.lisp
src/compiler/fopcompile.lisp
src/compiler/generic/objdef.lisp
src/compiler/globaldb.lisp
src/compiler/hppa/cell.lisp
src/compiler/ir1-translators.lisp
src/compiler/ir1tran-lambda.lisp
src/compiler/ir1tran.lisp
src/compiler/ir2tran.lisp
src/compiler/mips/cell.lisp
src/compiler/node.lisp
src/compiler/ppc/cell.lisp
src/compiler/proclaim.lisp
src/compiler/sparc/cell.lisp
src/compiler/x86-64/cell.lisp
src/compiler/x86/cell.lisp
tests/defglobal.impure.lisp [new file with mode: 0644]
tests/macroexpand.impure.lisp
version.lisp-expr