Fix some of the massive speed drop from destructuring lambda by checking to see if it actually needs to destrucure first. Still slower than it was, but not 10x anymore. Maybe 1.5-2x?
This commit is contained in:
14
prelude.kp
14
prelude.kp
@@ -121,11 +121,15 @@
|
|||||||
))) (vau de (vs b) (vapply let (array (destructure_helper vs 0 (array)) b) de)))
|
))) (vau de (vs b) (vapply let (array (destructure_helper vs 0 (array)) b) de)))
|
||||||
|
|
||||||
; and a destructuring-capable lambda!
|
; and a destructuring-capable lambda!
|
||||||
lambda (vau se (p b) (let (
|
only_symbols (rec-lambda recurse (a i) (cond (= i (len a)) true
|
||||||
sym_params (map (lambda (param) (if (symbol? param) param
|
(symbol? (idx a i)) (recurse a (+ i 1))
|
||||||
(str-to-symbol (str param)))) p)
|
true false))
|
||||||
body (array let (flat_map_i (lambda (i x) (array (idx p i) x)) sym_params) b)
|
lambda (vau se (p b) (if (only_symbols p 0) (vapply lambda (array p b) se)
|
||||||
) (wrap (eval (array vau (quote _) sym_params body) se))))
|
(let (
|
||||||
|
sym_params (map (lambda (param) (if (symbol? param) param
|
||||||
|
(str-to-symbol (str param)))) p)
|
||||||
|
body (array let (flat_map_i (lambda (i x) (array (idx p i) x)) sym_params) b)
|
||||||
|
) (wrap (eval (array vau (quote _) sym_params body) se)))))
|
||||||
|
|
||||||
; and rec-lambda - yes it's the same definition again
|
; and rec-lambda - yes it's the same definition again
|
||||||
rec-lambda (vau se (n p b) (eval (array Y (array lambda (array n) (array lambda p b))) se))
|
rec-lambda (vau se (n p b) (eval (array Y (array lambda (array n) (array lambda p b))) se))
|
||||||
|
|||||||
Reference in New Issue
Block a user