fixnum macros vs procedures
Per Bothner
(15 May 2017 05:22 UTC)
|
Re: fixnum macros vs procedures
John Cowan
(15 May 2017 15:29 UTC)
|
Re: fixnum macros vs procedures Per Bothner (15 May 2017 16:28 UTC)
|
Re: fixnum macros vs procedures
John Cowan
(15 May 2017 16:40 UTC)
|
Re: fixnum macros vs procedures
Shiro Kawai
(15 May 2017 22:27 UTC)
|
Re: fixnum macros vs procedures
Alex Shinn
(17 May 2017 10:34 UTC)
|
Re: fixnum macros vs procedures
John Cowan
(17 May 2017 12:00 UTC)
|
Re: fixnum macros vs procedures Per Bothner 15 May 2017 16:27 UTC
On 05/15/2017 08:29 AM, John Cowan wrote: > > On Mon, May 15, 2017 at 1:22 AM, Per Bothner <xxxxxx@bothner.com <mailto:xxxxxx@bothner.com>> wrote: > > Why would anyone ever want to use fx+ *except* in a procedure call? > > > I think an obvious candidate would be: > > (s16-vector-map fx+ a-long-vector-of-shorts another-long-vector-of-shorts> > where you want to eliminate the dispatch overhead of + on a system without type inference. That would be useful - but it would be even harder to optimize. Though if s16-vector-map is inlined to a loop, then the fx+ call could be optimized. > I've been thinking more and more and I think (contrary to my general preference for conservative, particularizing solutions) that what we need for operations like fx+ is Common Lisp's define-compiler-macro. This allows the user to declare a syntax keyword for an identifier that already has an ordinary definition. In keyword position, the macro is used; in any other position, the variable is used. This basically allows users to write their own compiler optimizations. That wouldn't help optimize the s16-vector-map call above. Kawa does have a mechanism for optimizing calls to known functions at a later stage, when type information is available, using a 'validate-apply' procedure property. It's more work to write custom "validate" function, but not too bad. (See some examples in kawa/lib/compile_misc.scm and compile_map.scm.) If there were Kawa validate-apply functions for fx+ *and* for s16-vector-map then Kawa would be able to inline the above s16-vector-map. (Some of the existing map procedures are already inlined to loops, so an optimizer for s16-vector-map would be easy.) > After brainstorming with a cow orker, we like the name "define-overloaded-syntax". I don't think it's necessary to have local versions of this, but I don't object to having them. The idea is useful - not sure about the name. I'd want to be able to use the macro to define the function: (define-overloaded-syntax fx+ ...) (define (fx+ x y) (fx+ x y)) -- --Per Bothner xxxxxx@bothner.com http://per.bothner.com/