Steel Bank Common Lisp
Go to file
Nikodemus Siivola e840f48179 1.0.28.51: better MAKE-ARRAY transforms
* Add a source transform for MAKE-ARRAY that declaims LIST and VECTOR
   as NOTINLINE, so the the MAKE-ARRAY deftransforms are able to pick
   them apart (for DIMENSIONS and :INITIAL-CONTENTS.)

 * INITIALIZE-VECTOR is a new magic function with a IR2-CONVERT
   transform. It's purpose is to allow open coding :INITIAL-CONTENTS
   initialization without inhibiting stack allocation.

 * Turns out that making stack allocation decisions during locall
   analysis is not enough since optimization iterates: if a transform
   occurs and introduces new LVARs that would be good for DX after
   the locall analysis has run for the combination, the new LVARs
   will not get their share of stacky goodness. Therefore, after
   a transform propagate DX information to the new functional
   explicitly (see MAYBE-PROPAGATE-DYNAMIC-EXTENT.)

 * The new logic is in TRANSFORM-MAKE-ARRAY-VECTOR, which handles
   all the cases of vector allocation with a known element type:

   ** :INITIAL-CONTENTS (LIST ...), (VECTOR ...) and (BACKQ-LIST ...)
      are picked apart when the length matches the vector length,
      and their arguments are spliced into the call.

      Constant :INITIAL-CONTENTS is picked apart as well.

      Initialization is done using INITIALIZE-VECTOR.

   ** Otherwise :INITIAL-CONTENTS is splatted in place using
      REPLACE after we have checked that the length matches.

   ** :INITIAL-ELEMENT not EQL to the default element uses
      FILL.

   ** Otherwise the default initialization is fine.

   Some additional hair here, since MAYBE-PROPAGATE-DYNAMIC-EXTENT
   cannot deal with OPTIONAL-DISPATCH functionals. So to ensure we get
   full benefit of it, make sure the lambdas we transform to have only
   required arguments -- courtesy of new ELIMINATE-KEYWORD-ARGUMENT
   utility. (Note: it might be worth it to do something like this for
   many cases automatically, to reduce the number of lambdas the
   compiler generates. For inline lambdas we could do the whole &key
   handling _before_ the lambda is converted...)

 * Identify the case of (LIST N) as dimensions as being a vector,
   and delegate to TRANSFORM-MAKE-ARRAY-VECTOR.

 * More efficient allocation of simple multidimensional arrays in
   the presence of :INITIAL-CONTENTS (still slow, though) and
   :INITIAL-ELEMENT (not bad.)

 * Fix the source transform for VECTOR so that it too can stack
   allocate.

 * Updates tests and docs.
2009-05-16 12:23:13 +00:00
contrib 1.0.28.30: DEFGLOBAL, ALWAYS-BOUND, GLOBAL, SYMBOL-GLOBAL-VALUE 2009-05-08 19:08:07 +00:00
doc 1.0.28.51: better MAKE-ARRAY transforms 2009-05-16 12:23:13 +00:00
src 1.0.28.51: better MAKE-ARRAY transforms 2009-05-16 12:23:13 +00:00
tests 1.0.28.51: better MAKE-ARRAY transforms 2009-05-16 12:23:13 +00:00
tools-for-build 1.0.28.44: better MACHINE-VERSION answers on BSD'ish platforms 2009-05-13 13:58:31 +00:00
.cvsignore 1.0.11.6: canonicalize whitespaces only on updated files 2007-11-04 15:54:19 +00:00
.gitignore 1.0.21.30: more files in .gitignore 2008-10-18 14:40:31 +00:00
base-target-features.lisp-expr 1.0.24.12: adding and fixing the HPUX/HPPA build target 2009-01-03 15:50:46 +00:00
binary-distribution.sh 1.0.15.4: Fix a non-POSIX usage of find(1) in binary-distribution.sh 2008-02-27 19:03:02 +00:00
BUGS 1.0.28.2: fix bug 201, Incautious type inference from compound types 2009-05-01 10:35:43 +00:00
build-order.lisp-expr 1.0.28.15: Build desymlinkification 2009-05-05 17:11:18 +00:00
clean.sh 1.0.10.55: Remove non-portable arguments to find, xargs 2007-10-22 04:16:12 +00:00
common-lisp-exports.lisp-expr Initial revision 2000-09-18 01:26:16 +00:00
COPYING 0.9.13.16: preliminary Windows installer builder 2006-06-01 09:14:25 +00:00
CREDITS 1.0.27.49: update platform table, credit me 2009-04-30 07:34:53 +00:00
distclean.sh 1.0.10.55: Remove non-portable arguments to find, xargs 2007-10-22 04:16:12 +00:00
find-gnumake.sh 0.9.18.36: 2006-11-07 01:06:02 +00:00
html-distribution.sh 1.0.0.4: tweak windows installer builder and html-distribution.sh 2006-11-30 17:20:54 +00:00
INSTALL 1.0.28: release, will be tagged as sbcl_1_0_28 2009-04-30 16:48:26 +00:00
install.sh 1.0.11.8: also fix install-info on Debian 2007-11-05 04:30:37 +00:00
make-config.sh 1.0.28.15: Build desymlinkification 2009-05-05 17:11:18 +00:00
make-genesis-2.lisp 1.0.28.14: Build system refactoring 2009-05-05 17:10:29 +00:00
make-genesis-2.sh 0.9.8.27: 2006-01-09 13:00:17 +00:00
make-host-1.lisp 1.0.28.14: Build system refactoring 2009-05-05 17:10:29 +00:00
make-host-1.sh 0.9.8.4: 2005-12-29 16:08:31 +00:00
make-host-2.lisp 1.0.20.2: Fewer XC/reader-conditional confusions 2008-09-04 13:04:45 +00:00
make-host-2.sh 0.9.8.4: 2005-12-29 16:08:31 +00:00
make-target-1.sh 0.9.8.27: 2006-01-09 13:00:17 +00:00
make-target-2-load.lisp 1.0.28.38: undefined warning and compilation unit summary tweaking 2009-05-11 15:44:11 +00:00
make-target-2.lisp 1.0.3.4: make-target-2.lisp split into compile and dump phases. 2007-02-28 13:01:58 +00:00
make-target-2.sh 1.0.25.21: handling of potential corruptions 2009-02-16 21:36:13 +00:00
make-target-contrib.sh 1.0.25.21: handling of potential corruptions 2009-02-16 21:36:13 +00:00
make-windows-installer.sh 0.9.13.52: Windows installer tweaks 2006-06-20 08:29:09 +00:00
make.sh 1.0.27.7: Win32 build fix 2009-04-12 14:03:08 +00:00
NEWS 1.0.28.51: better MAKE-ARRAY transforms 2009-05-16 12:23:13 +00:00
OPTIMIZATIONS 1.0.28.51: better MAKE-ARRAY transforms 2009-05-16 12:23:13 +00:00
package-data-list.lisp-expr 1.0.28.44: better MACHINE-VERSION answers on BSD'ish platforms 2009-05-13 13:58:31 +00:00
PRINCIPLES Initial revision 2000-09-18 01:26:16 +00:00
pubring.pgp Initial revision 2000-09-18 01:26:16 +00:00
README 1.0.18.29: documentation tweaks 2008-07-30 08:38:16 +00:00
run-sbcl.sh 1.0.22.1: run-sbcl.sh improvements 2008-10-31 09:56:15 +00:00
sbcl-pwd.sh 1.0.27.23: fix bashism in sbcl-pwd.sh 2009-04-22 20:14:09 +00:00
slam.sh 0.9.8.27: 2006-01-09 13:00:17 +00:00
source-distribution.sh 0.9.8.27: 2006-01-09 13:00:17 +00:00
STYLE Initial revision 2000-09-18 01:26:16 +00:00
SUPPORT 0.9.18.41: add Nikodemus Siivola / Steel Bank Studio Ltd to SUPPORT 2006-11-08 06:18:57 +00:00
tagify.sh 0.9.4.72: 2005-09-16 13:26:39 +00:00
TLA 0.8.9.10: 2004-03-30 16:58:25 +00:00
TODO 1.0.23.49: Eliminate FCN as function moniker. 2008-12-17 20:36:18 +00:00
version.lisp-expr 1.0.28.51: better MAKE-ARRAY transforms 2009-05-16 12:23:13 +00:00
wc.sh 0.9.4.72: 2005-09-16 13:26:39 +00:00

GENERAL INFORMATION

Welcome to SBCL.

If you'd like to install or build the system, see the "INSTALL" file.

To find out more about who created the system, see the "CREDITS" file.

If you'd like information about the legalities of copying the system,
see the "COPYING" file.

If you'd like more information about using the system, see the man
page, "sbcl.1", or the user manual in the "doc/manual" subdirectory of
the distribution. (The user manual is maintained as Texinfo in the
source distribution; HTML version is available for download, and
"INSTALL" describes how to build the Texinfo version in HTML and PDF.)

The system is a work in progress. See the "TODO" file in the source
distribution for some highlights.

The "BUGS" file lists current known bugs.

If you'd like to make suggestions, report a bug, or help to improve the
system, please send mail to one of the mailing lists:
  sbcl-help@lists.sourceforge.net
  sbcl-devel@lists.sourceforge.net
Note that as a spam reduction measure you must subscribe to the lists
before you can post.


SYSTEM-SPECIFIC HINTS

for NetBSD:
  NetBSD 2.0 and above are required because of the lack of needed
  signal APIs in NetBSD 1.6 and earlier.

for OpenBSD:
  OpenBSD 3.0 has stricter ulimit values, and/or enforces them more
  strictly, than its predecessors. Therefore SBCL's initial mmap()
  won't work unless you increase the limit on the data segment from
  the OpenBSD defaults, e.g. with
    ulimit -S -d 1000000
  before you run SBCL. Otherwise SBCL fails with a message like
  "ensure_space: failed to validate xxxxxxx bytes at yyyyy". (SBCL
  is just allocating this huge address space, not actually using this
  huge memory at this point. OpenBSD <3.0 had no problem with this,
  but OpenBSD 3.0 is less hospitable.)