LISTSERV at the University of Georgia
Menubar Imagemap
Home Browse Manage Request Manuals Register
Previous messageNext messagePrevious in topicNext in topicPrevious by same authorNext by same authorPrevious page (May 2004, week 1)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
Date:         Fri, 7 May 2004 14:15:06 -0700
Reply-To:     cassell.david@EPAMAIL.EPA.GOV
Sender:       "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From:         "David L. Cassell" <cassell.david@EPAMAIL.EPA.GOV>
Subject:      Re: macro
Content-type: text/plain; charset=US-ASCII

Richard Ristow <wrristow@MINDSPRING.COM> brought up some interesting points: > That last is fair enough -- I've written JCL for money! (It sure wasn't > for love...)

Well, you have my sympathies. :-)

> Is the macro language a "programming language"? How many logic > statements can dance on the head of a pin? I'd say it easily meets the > hypotheses of Turing's Universality Theorem, or similar results, > meaning it has in principle all the power of any programming language. > (This is not a high test to pass. In fact, one of Turing's key insights > was, how little complexity a computing system needs, in order to have > the power to perform any computation.) I don't suppose one would > normally write, say, a chess-playing program, or a regression routine, > in the macro language, but that's mainly because you'd be hamstringing > the macro language: using none of its specific strengths. > > But 'robust'? Flexible and feature-full are fine, but I'd say a > 'robust' language helps, or at least does not hinder, writing clear > programs. The SAS macro language, wonderful as it is in many ways, is > terrible about this.

As I said, defining 'robust' is an exercise left to the reader. :-)

If a key criterion is not hindering the writing of clear programs, then I think that a *lot* of standard programming languages fail. Plenty of people think that Perl by itself hinders the writing of clear programs. (I don't agree, but that's me.) I would list a few major languages like Lisp, APL, and Forth as languages which have features which many people feel actively hinder the utility of the language. Then there are languages like Eiffel or Befunge which have additional 'features' which hinder working in the language. So I'm still listing SAS macro as a programming language. But I'm not denying your point.

> One thing isn't the language's fault. Macro languages, if they are > similar to the underlying language for which they emit code, are often > hard to read, because the data items (the strings which are building > blocks for the emitted code) look very much like the macro code. (You > can't win this one. If the macro syntax and the underlying language's > syntax are quite different, macros are easier to read, IF you are > thoroughly familiar with both syntaxes, and have them both clear in > your mind simultaneously.)

Agreed. Macro languages either look like your upper-level language and have heinous features so that your parsers and lexers can distinguish them, or else are so different from the upper-level language that few can learn both languages and integrate them well.

> But SAS made it harder yet. The SAS macro language is one of what were > once called "interpreted" languages. That isn't the essence of such > languages; the essence is, programs in the language can generate or > modify text which then becomes part of the same program. That's now > deeply imbedded in the SAS macro language; for example, it would be > hard to do without &&name&sfx to simulate arrays of macro variables.

I'll add that the 'interpreted' nature isn't really the problem here. It is the substitution mechanism needed for the parser to grok what we throw at it.

> As a result, though, macro programs are riddled with 'quoting' > problems: with, that is, problems distinguishing what's program text, > and what's data being processed. (It doesn't help that emitted text can > be program code, or comments, or character literals at the SAS level.) > The problem is so severe that being expert at 'quoting' -- that is, at > telling code from data -- is the main mark of a macro maven. And even > the best get tangled up: look at the recent thread on the meaning of > %nrbquote. Medieval theology, move over!

Every language has its own 'deep' theological issues. Just look at the ANSI C UseNet group to see C-ists argue vehemently over such topics. And there are dozens (if not hundreds) of deep intricacies in Perl. But Perl-ites *like* it that way.

I think that Ian's presentation on macro quoting at SUGI 28 explained much of the mystery for the audience, and it was done in PowerPoint in less than an hour.

> This tangle is a pity, because, as I've said, there are some wonderful > things about the macro language. One is how it's integrated with SAS > as, in part, a 'scripting' language, i.e. one in which macros can have > cognizance of SAS run-time quantities. (Go over to the SPSSX-L list, if > you like, and look at the hoops that have to be jumped through to use > the value of a variable, or the current date, in the name of an output > file. Or to do arithmetic, but that's a 'shallow' rather than a 'deep' > deficiency in SPSS macros.) Another is extremely simple: the single > global name space for macro parameters, so they can be set up anywhere > and used throughout a SAS program.

I totally agree on the 'global namespace' issue. Fortunately, we are not actually restricted to only-global or only-local with SAS macro variables.

> Yes, the SAS macro facility is very useful, and very powerful. But > 'robust', in the sense I've used, it just ain't.

Don't you want 'tangled' and 'intricate'? Where's your sense of job security? :-)

David -- David Cassell, CSC Cassell.David@epa.gov Senior computing specialist mathematical statistician


Back to: Top of message | Previous page | Main SAS-L page