X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=OPTIMIZATIONS;h=a702c7d2ba18edf5f3899d312027286d0664fcdd;hb=7c7e6276719b8d40fddec2070cad81064a25c8ed;hp=50d3417bead8b8b8e1d755af8e66ed6b27ace877;hpb=9afd3958cf7b5ad829c61a4a85956cf783e500f5;p=sbcl.git diff --git a/OPTIMIZATIONS b/OPTIMIZATIONS index 50d3417..a702c7d 100644 --- a/OPTIMIZATIONS +++ b/OPTIMIZATIONS @@ -187,9 +187,9 @@ stack-allocation of structures is impossible. -------------------------------------------------------------------------------- #21 (defun-with-dx foo () - (let ((dx (list (list 1 2) (list 3 4) + (let ((dx (list (list 1 2) (list 3 4)))) (declare (dynamic-extent dx)) - ...))))) + ...)) External list in DX is allocated on stack, but internal are not. -------------------------------------------------------------------------------- @@ -204,16 +204,31 @@ a. Iterations on &REST lists, returning them as VALUES could be rewritten with &MORE vectors. b. Implement local unknown-values mv-call (useful for fast type checking). -------------------------------------------------------------------------------- -#25 -EQL is implemented generically in situations where this isn't necessary. - -(defun f (x y) - (declare (type (or symbol fixnum) x) - (optimize speed (safety 0) (debug 0))) - (eql x y)) - -SUBTYPEP is smart enough to determine that this type is a subtype -of (and (or (not number) fixnum) (not character)) - -This sitation where the type is (OR NULL FIXNUM) comes up -in cl-bench, for example in the value returned by POSITION. +#26 +SBCL cannot derive upper bound for I and uses generic arithmetic here: + +(defun foo (l) + (declare (vector l)) + (dotimes (i (length l)) + (if (block nil + (map-foo (lambda (x) (if x (return t))) + l)) + t + nil))) + +(So the constraint propagator or a possible future SSA-convertor +should know the connection between an NLE and its CLEANUP.) +-------------------------------------------------------------------------------- +#27 +Initialization of stack-allocated arrays is inefficient: we always +fill the vector with zeroes, even when it is not needed (as for +platforms with conservative GC or for arrays of unboxed objectes) and +is performed later explicitely. +-------------------------------------------------------------------------------- +#28 +a. Accessing raw slots in structure instances is more inefficient than +it could be; if we placed raw slots before the header word, we would +not need to do arithmetic at runtime to access them. (But beware: +this would complicate handling of the interior pointer). + +b. (Also note that raw slots are currently disabled on HPPA) \ No newline at end of file