{"push_id":1151770759,"size":2,"distinct_size":2,"ref":"refs/heads/master","head":"b7a759f3b38375f1568a743e93d6f20508cd0f84","before":"22c5008ccf87a8de6a5d593a959f3139083b23f6","commits":[{"sha":"615f57019355241d90c220968814d5c1344977a9","author":{"name":"Robby Findler","email":"81855ef260643c1c437d22de4648c589b0de3525@racket-lang.org"},"message":"Fix bind-withs so that it lifts out the calls to compile-language\n\nThis has the benefit of making judgment-form extensions work properly\nwhen the language changes and it has a relatively narrow performance\nimprovement (as below).\n\nIt also has a backwards incompatibility. This program's behavior changed:\n\n  #lang racket\n  (require redex/reduction-semantics)\n  (define-language grammar)\n  (apply-reduction-relation\n   (reduction-relation\n    grammar\n    (--> any\n         1\n         (where number_1 2)\n         (where (side-condition any (number? (term number_1))) dontcare)))\n    'dontcare)\n\nBefore this commit, `number_1` was bound, but after it, the expressions in\n`side-condition` patterns now get only the variables in the surrounding context,\nthey don't see the earlier `where` clauses. (The right-hand sides of the `where`\nclauses still see the earlier `where` clauses; this is only for expressions\ninside `side-condition` that are inside patterns)\n\nThis change applies to patterns that are in `where` clauses in\nreduction relations, metafunctions, and judgment forms, as well as\njudgment-holds clauses in those definitions as well as premises in\njudgment forms.\n\nThe performance improvement is probably mostly not noticeable because\nof the agressive caching that Redex does, but the program below\ndefeats the caching and I'm seeing about a 1.8 performance improvement\nfor it.  The win comes from the fact that the `where` clause patterns\nare no longer being compiled in the loop; they are compiled only once,\nwhen the metafunction definition itself is evaluated\n\n  #lang racket\n  (require redex/reduction-semantics)\n  (define-language L)\n  (define-metafunction L\n    [(m any)\n     0\n     (where (any_11 any_22 any_23 any_24 any_25 any_26 any_27) any)\n     (where (any_11 any_22 any_23 any_24 any_25 any_26 any_27) any)\n     (where (any_11 any_22 any_23 any_24 any_25 any_26 any_27) any)\n     (where (any_11 any_22 any_23 any_24 any_25 any_26 any_27) any)\n     (where (any_11 any_22 any_23 any_24 any_25 any_26 any_27) any)])\n  (collect-garbage) (collect-garbage) (collect-garbage)\n  (time\n   (let ([l '(1 2 3 4 5 6)])\n     (for ([x (in-range 10000)])\n       (term (m ,(cons x l))))))","distinct":true,"url":"https://api.github.com/repos/racket/redex/commits/615f57019355241d90c220968814d5c1344977a9"},{"sha":"b7a759f3b38375f1568a743e93d6f20508cd0f84","author":{"name":"Robby Findler","email":"81855ef260643c1c437d22de4648c589b0de3525@racket-lang.org"},"message":"add missing syntactic check","distinct":true,"url":"https://api.github.com/repos/racket/redex/commits/b7a759f3b38375f1568a743e93d6f20508cd0f84"}]}
{"actor":{"display_login":"rfindler"}}