[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: macros vs. blocks




> I would refine my macros-are-useless claim a bit: languages that already
> have syntax for things such as assignment, variable declaration, and
> quoted data (Python, Perl, Smalltalk, ...) don't benefit much from
> macros.

Well, the Curl language has syntax for those things, and yet we still find
the ability to extend the syntax using macros quite useful.  I personally
use them most frequently in automated tests to construct concise test cases
that would otherwise require a lot of cutting and pasting or tedious code
generation.

> >  (define-syntax assert
> >    (syntax-rules ()
> >      ((assert test)
> >       (if (not test) (assert-error (quote test))))))
>
> The assert family is certainly a classic macro application, although
> having it print something like
>
>    ASSERTION FAILURE: (> x 0).
>
> is pretty darn useless, since there might be lots of occurrences of
> (assert (> x 0)) in the code, and also that assertion failures often
> indicate an error in the caller rather than where the assert statement
> is. I'd much rather rely on the stack traceback with line numbers and
> function arguments that any good interpreted language gives you. So I
> claim this sort of pun is pretty useless.

That is a quality of implementation issue.  There is no reason that a macro
system cannot allow you to write macros that refer to the source file and
line where the macro is expanded.

- Christopher