Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
MD5 in LISP and abstraction inversions
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  Messages 51 - 75 of 206 - Collapse all  -  Translate all to Translated (View all originals) < Older  Newer >
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Tim Bradshaw  
View profile  
 More options Nov 8 2001, 2:30 pm
Newsgroups: comp.lang.lisp
From: tfb+goo...@tfeb.org (Tim Bradshaw)
Date: 8 Nov 2001 11:30:50 -0800
Local: Thurs, Nov 8 2001 2:30 pm
Subject: Re: MD5 in LISP and abstraction inversions

Juliusz Chroboczek <j...@pps.jussieu.fr> wrote in message <news:87hes6ur38.fsf@pps.jussieu.fr>...
> It is most definitely possible to write portable Common Lisp code that
> is efficient in one implementation.  It is very difficult, and possibly
> impossible, to write Common Lisp code that is portably efficient.

I think this is really misleading.

For certain kinds of code, in particular code that does a lot of
low-level bit-twiddling (such as MD5) or code that does a lot of heavy
numerical computation (such as atomic bomb simulations) it is probably
true.  It may also be true for code that is very heavily I/O
dominated.

However for a large amount of code which spends its time doing more
typical pointer-chasing and structure manipulation, I think it is
quite possible to write code which is portably efficient in CL.  Code
I write which is of this kind has typically fairly small variations
between implementations - perhaps a factor of two or so, not including
CLISP which can often lose badly to native-compiled implementations
(although it can do surpsigingly well). Profiling (on more than one
implementation) doesn't show any awful bottlenecks, and in human terms
performance is pretty good.

Now of course this could be because I write uniformly dreadful code
but machines are so quick it runs OK, but I think that it's not that
bad.

So I think that with some exceptions (and these exceptions are largely
present in any language: ask someone who writes atomic bomb
simulations for a living aout portability and it's quite informative)
it is very possible to write portable, efficient, CL.

--tim


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Marc Spitzer  
View profile  
 More options Nov 8 2001, 4:21 pm
Newsgroups: comp.lang.lisp
From: m...@oscar.eng.cv.net (Marc Spitzer)
Date: Thu, 08 Nov 2001 21:20:55 GMT
Local: Thurs, Nov 8 2001 4:20 pm
Subject: Re: MD5 in LISP and abstraction inversions

In article <MPG.16547634c318e56e989...@news.dnai.com>, John Foderaro wrote:
>  Common Lisp also supports macros and it shows a
> *profound* lack of understanding of Common Lisp if someone
> were to suggest that making use of this very important
> and powerful feature of Common Lisp was rejection of the
> Common Lisp community.

one point, you are making no distinction between proper use of the
power available and the abuse of that power.  There is a serious moral
issue here, should I use the power I have with restraint where it is
proper to do so and with due consideration for its impact on the
community as a whole or not.  Should macros be used to expand the
language or fragment it.

marc


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Kaz Kylheku  
View profile  
 More options Nov 8 2001, 4:33 pm
Newsgroups: comp.lang.lisp
From: k...@ashi.footprints.net (Kaz Kylheku)
Date: Thu, 08 Nov 2001 21:33:06 GMT
Local: Thurs, Nov 8 2001 4:33 pm
Subject: Re: MD5 in LISP and abstraction inversions

In article <slrn9ultpf.17i3.m...@oscar.eng.cv.net>, Marc Spitzer wrote:
>community as a whole or not.  Should macros be used to expand the
>language or fragment it.

I think they should be used to transform destructuring lambda lists into
objects to be treated as forms that are substituted in place of the
macros.

 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Kent M Pitman  
View profile  
 More options Nov 8 2001, 4:57 pm
Newsgroups: comp.lang.lisp
From: Kent M Pitman <pit...@world.std.com>
Date: Thu, 8 Nov 2001 21:56:14 GMT
Local: Thurs, Nov 8 2001 4:56 pm
Subject: Re: MD5 in LISP and abstraction inversions

m...@oscar.eng.cv.net (Marc Spitzer) writes:
> In article <MPG.16547634c318e56e989...@news.dnai.com>, John Foderaro wrote:
> >  Common Lisp also supports macros and it shows a
> > *profound* lack of understanding of Common Lisp if someone
> > were to suggest that making use of this very important
> > and powerful feature of Common Lisp was rejection of the
> > Common Lisp community.

> one point, you are making no distinction between proper use of the
> power available and the abuse of that power.  There is a serious moral
> issue here, should I use the power I have with restraint where it is
> proper to do so and with due consideration for its impact on the
> community as a whole or not.  Should macros be used to expand the
> language or fragment it.

In what way would this be any different a question if asked about functions
and not macros?

 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
John Foderaro  
View profile  
 More options Nov 8 2001, 5:01 pm
Newsgroups: comp.lang.lisp
From: John Foderaro <j...@xspammerx.franz.com>
Date: Thu, 8 Nov 2001 14:03:13 -0800
Local: Thurs, Nov 8 2001 5:03 pm
Subject: Re: MD5 in LISP and abstraction inversions
In article <slrn9ultpf.17i3.m...@oscar.eng.cv.net>, m...@oscar.eng.cv.net
says...

> Should macros be used to expand the
> language or fragment it.

Every macro expands the language *and* fragments it.
There will be people who understand the macro and those
that don't. That's your fragmentation.

Adding the extended loop macro has fragmented the
Common Lisp community more than any other macro.
The people who use it write code that the people who
dislike it can't even read.  
Was it morally wrong to add the extended loop macro
to Common Lisp?  

I don't think so.  Lisp is a language you can evolve
to suit your needs.  When you write a macro or even
a function you separate people into those who
know and understand it and those that don't.  

The Common Lisp community is not one giant brain
that learns things simultaneously.   People must develop
things independently and put them out there for
Lisp to grow.


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Jochen Schmidt  
View profile  
 More options Nov 8 2001, 5:55 pm
Newsgroups: comp.lang.lisp
From: Jochen Schmidt <j...@dataheaven.de>
Date: Fri, 09 Nov 2001 00:56:12 +0100
Local: Thurs, Nov 8 2001 6:56 pm
Subject: Re: MD5 in LISP and abstraction inversions

John Foderaro wrote:
> In article <slrn9ultpf.17i3.m...@oscar.eng.cv.net>, m...@oscar.eng.cv.net
> says...
>> Should macros be used to expand the
>> language or fragment it.

> Every macro expands the language *and* fragments it.
> There will be people who understand the macro and those
> that don't. That's your fragmentation.

I think it simply fragments people into those who _use_ it
and those who don't _use_ it. It has nothing to do with "understanding"
since that would imply that there is one right thing (tm) where often
both ways are perfectly rational.

> Adding the extended loop macro has fragmented the
> Common Lisp community more than any other macro.
> The people who use it write code that the people who
> dislike it can't even read.
> Was it morally wrong to add the extended loop macro
> to Common Lisp?

> I don't think so.  Lisp is a language you can evolve
> to suit your needs.  When you write a macro or even
> a function you separate people into those who
> know and understand it and those that don't.

Yes I agree (besides of the repeated "understand" here).

I think the problem is not that macros (or whatever facility else)
fragment the community but more what follows from there. If both camps
can tolerate each others preferences all goes well - if one camp tries to
shut up the other camp by postulating them evil, dumb or simply "not
understanding ones" *then* the things stop being manageable.

I particularily like Common Lisp because it is a language that often chooses
to include multiple ways of thinking about something if no final consensus
has been reached. You are perfectly welcome to invent new things if you do
not try forcing others that _their_ approach is not permitted to use.

I _always_ hated people that are trying to _forbid_ me doing things the way
I liked it and I prefer not working with them anymore instead of being a
slave drone.

The irony is that in reality "intolerance" is intolerable. ;-)

ciao,
Jochen

--
http://www.dataheaven.de


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Erik Naggum  
View profile  
 More options Nov 8 2001, 5:57 pm
Newsgroups: comp.lang.lisp
From: Erik Naggum <e...@naggum.net>
Date: Thu, 08 Nov 2001 22:57:20 GMT
Local: Thurs, Nov 8 2001 5:57 pm
Subject: Re: MD5 in LISP and abstraction inversions
* Juliusz Chroboczek
| The difference, however, is that most modern implementations of, say, C,
| are pretty much identical from the programmer's point of view.  In most
| cases, C code that is efficient under both gcc/x86 and SunPro/Sparc will
| be efficient on all (modern) platforms.

  But it is fairly unlikely that C code compiled for both IA32 and SPARC
  will be "efficient" in the same way.  If you optimize too much for one of
  them, it is no longer "efficient" in the other.

  I also wonder what "efficient" means to you, and how you determine when
  you have achieved it.  It is not an absolute term.

  As for the use of byte-compiled implementations or code, I completely
  fail to see what their impact on this discussion is.  If you want your
  code to be "efficient", whatever it means, you choose a natively-compiled
  implementation, not a byte-code interpreter, so whatever efficiency
  issues may be perturbed by the existence of a such an implementation
  appear to me completely irrelevant to those who actually seek efficiency.

///
--
  Norway is now run by a priest from the fundamentalist Christian People's
  Party, the fifth largest party representing one eighth of the electorate.
--
  Carrying a Swiss Army pocket knife in Oslo, Norway, is a criminal offense.


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
John Foderaro  
View profile  
 More options Nov 8 2001, 6:40 pm
Newsgroups: comp.lang.lisp
From: John Foderaro <j...@franz.com>
Date: Thu, 08 Nov 2001 15:39:44 -0800
Local: Thurs, Nov 8 2001 6:39 pm
Subject: Re: MD5 in LISP and abstraction inversions

Jochen Schmidt wrote:

> I think it simply fragments people into those who _use_ it
> and those who don't _use_ it. It has nothing to do with "understanding"
> since that would imply that there is one right thing (tm) where often
> both ways are perfectly rational.

I meant 'understanding' in the most basic sense.

when you see
    (with-slot-frobbers (x 'slota 'slotb)
               ...)

  you will either know what with-slot-frobbers does
or you won't.

  So this macro has divided the world into those who
understand with-slot-frobbers and those who don't (yet).


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Kent M Pitman  
View profile  
 More options Nov 8 2001, 6:52 pm
Newsgroups: comp.lang.lisp
From: Kent M Pitman <pit...@world.std.com>
Date: Thu, 8 Nov 2001 23:51:08 GMT
Local: Thurs, Nov 8 2001 6:51 pm
Subject: Re: MD5 in LISP and abstraction inversions

John Foderaro <j...@franz.com> writes:
> I meant 'understanding' in the most basic sense.

Why are you quoting the word "in"?

(Ignore me.  It was out-of-place and probably failed humor that belonged
 in a different thread. ;-)


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Raffael Cavallaro  
View profile  
 More options Nov 8 2001, 11:38 pm
Newsgroups: comp.lang.lisp
From: Raffael Cavallaro <raff...@mediaone.net>
Date: Fri, 09 Nov 2001 04:37:14 GMT
Local: Thurs, Nov 8 2001 11:37 pm
Subject: Re: MD5 in LISP and abstraction inversions
In article <slrn9u72ik.q89.m...@oscar.eng.cv.net>,
 m...@oscar.eng.cv.net (Marc Spitzer) wrote:

>then why did you attempt to set your self up as a tin pot censor with
>your moralistic garbage post?

You don't understand what the word "censor" means. A censor has the
power to edit, or prevent the publication of something he doesn't
approve of. John Foderaro has no such power, that's why he's telling you
that talk of "censorship" makes no sense. He's only expressing his
views. He thinks people should be less abusive. That's his opinion, but
it has no binding force, so it can't possibly be considered "censorship."

In article <slrn9u6rci.q89.m...@oscar.eng.cv.net>,
 m...@oscar.eng.cv.net (Marc Spitzer) wrote:

>In the worse case when you have a choice between assholes and censors
>you should always choose assholes, they make better neighbors.  I am
>not saying Erik is an asshole, just to be clear.

Well this is damning with faint praise if I ever saw it.

Raf

--

Raffael Cavallaro, Ph.D.
raff...@mediaone.net


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Marc Spitzer  
View profile  
 More options Nov 9 2001, 12:54 am
Newsgroups: comp.lang.lisp
From: m...@oscar.eng.cv.net (Marc Spitzer)
Date: Fri, 09 Nov 2001 05:54:10 GMT
Local: Fri, Nov 9 2001 12:54 am
Subject: Re: MD5 in LISP and abstraction inversions

I see your point the if* function would be an equaly bad idea, but
I don't think it would be possable for this to work as a function.

marc


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Kent M Pitman  
View profile  
 More options Nov 9 2001, 2:13 am
Newsgroups: comp.lang.lisp
From: Kent M Pitman <pit...@world.std.com>
Date: Fri, 9 Nov 2001 07:12:46 GMT
Local: Fri, Nov 9 2001 2:12 am
Subject: Re: MD5 in LISP and abstraction inversions

m...@oscar.eng.cv.net (Marc Spitzer) writes:
> In article <sfwk7x19bb5....@shell01.TheWorld.com>, Kent M Pitman wrote:
> ...
> > In what way would this be any different a question if asked about functions
> > and not macros?

> I see your point the if* function would be an equaly bad idea, but
> I don't think it would be possable for this to work as a function.

It's not about that.

Forget how they're applied.  In code, you see a lot of
 (this (that (the-other)))
where this, that, and the-other are variously functions or macros.
The question of whether macros should expand the language [community]
or fragment it is no different sociologically than the question of
whether functions or even variables should.  Every name you introduce
that is nonstandard risks dividing the community, but on balance adds
potential power to someone at the same time.

If you'd had a CAR*, we'd be fighting over that.  It's not a macro issue.

The problem comes when some people (I think somewhat rightly) feel
that IF doesn't really add power, and so it divides the community for
nothing.  We made CL in the believe that being standard was more
powerful than being uniquely right.  The choices in CL aren't all
defensible as "uniquely right", but they were intended to appease the
CL community enough that we didn't waste time (as we used to in the
past) arguing whose LET to use (does it have tagbody or not, must I
init my variables, etc), whose backquote (does it do a full copy or
only an if-needed copy), etc.  It was getting boring.  So we nailed it
down.  We're supposed to have moved beyond those things to new areas
to bicker about.


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Erik Naggum  
View profile  
 More options Nov 9 2001, 5:39 am
Newsgroups: comp.lang.lisp
From: Erik Naggum <e...@naggum.net>
Date: Fri, 09 Nov 2001 10:38:59 GMT
Local: Fri, Nov 9 2001 5:38 am
Subject: Re: MD5 in LISP and abstraction inversions
* Kent M Pitman -> Marc Spitzer
| In what way would this be any different a question if asked about
| functions and not macros?

  If a Common Lisp programmer insists on using C's standard library names
  for his string functions instead of the standard Common Lisp ones _and_
  argues that those who use the standard functions are nuts, I think there
  would probably be the same kind of uniform rejection of this stupidity as
  what appears to be building towards the limited IF* crowd, not primarily
  because of the specific idiotic new "feature" that nobody needs or wants,
  but because of the sheer irrationality of the whole endeavor and because
  of the incredible _arrogance_ exuded by those who thus reject the whole
  community they _pretend_ or may even helplessly _want_ to be members of,
  but are in fact rejecting completely.  It is that initial rejection of
  the community, the pretentious arrogance of one who thinks he knows so
  much better than everybody else, and the holier-than-thou attitude when
  criticized that comes from both of the former attitude problems, that
  _really_ ticks people off.  It is no longer about some stupid invention
  of a macro or a function or a new sub-language, it is about the lack of
  willingness to yield in traffic as opposed to a willingness to run into
  people on purpose because one thinks one is a superior to others -- it is
  the _exact_ same process that makes people become criminals.

  It is actually a good thing to have lots of people argue vociferiously
  for and defend a community standard because it shows that the community
  comes before the person, but it is a really _bad_ thing to have someone
  argue vociferiously _against_ community standards, especially when the
  only reason for doing so is that those very few who argue against it
  subjugate community interests to their own ego, even more so when it has
  become badly bruised in a battle over its anti-community tactics.

  At issue is not the specific new "features", whether they be macros,
  functions, or anything else, it is simply a rejection of someone who has
  decided to be an outlaw and force his own way regardless of consequences
  instead of trying to work within the law to make people agree with him
  how to make a better world -- probably because he realizes that it would
  in fact not _be_ a better world if he did not rule everything in it.

  I have long had an interest in law and the philosophy of law, but with it
  comes an interest in why people choose to abide by or violate a law, or
  even ethics.  Everybody has their own ethical standards which come into
  conflict with the law or at least other people's ethics at various points
  in their lives.  The really _big_ question is whether you are the kind of
  person who realizes that the only thing the law and ethics _really_ say
  is what is _wrong_ or you are the the kind of person who (mistakenly)
  believes that law and ethics tell people what is _right_.  The latter go
  on to be quite the intolerable moralists who want people to follow a
  specific path (i.e., whatever path they have chosen, and the two usually
  become conflated) or else they are doomed sinners upon which all evil can
  be hurled in a "defensive" action.  The former find it interesting how
  people choose among a very large number of ways to go about their lives,
  but may also be intolerant of those who, by breaking law and ethics and
  taking both in their own hands, make it harder or impossible for others
  also to choose their own ways.  It is threfore quite illuminating how our
  perpetrator continues to argue that he is within the law and community
  ethics when he does something he can have no doubts at all the community
  has resoundingly _rejected_.  The lack of willingness to stop doing,
  indeed, the insistence on _continuing_ what the community has disapproved
  of is precisely what defines the criminal mind.

  Law and ethics are wisely set up by lots of smart people working very
  slowly to ensure that proper procedure is followed, resulting in both
  being _vastly_ smarter than the average joe, in order to ensure that
  _very_ different people can live together under the same rules without
  needing special privileges for particular groups, which was the general
  situation before these intricate procedures were followed.  "Equality
  before the law" is definitely not in the _personal_ interest of most
  people, who would rather get a break than be held responsible for their
  actions.  (Punishment also does not work on those who do not understand
  what happened to them, only the threat of punishment does, although it
  can take an initial actual punishment for some people to "get it", but
  without real punishment, there is no threat, so this is a very hard
  problem to resolve.)

  What defines a community is in part its process of agreeing on its laws
  and ethics and other standards.  We have a language standard that should
  have united us.  Because of some lunatics who value being rebels higher
  than a working community, this is not quite so, and we still have to
  fight battles over what the community standards-setting procedures are.
  In essence, it will be fought over whether some nutcase can publish a
  "Coding Standard" document where he ridicules and undermines the standard
  that the community has in fact agreed upon and which thus rejects the
  community _and_ get away with it through stubbornness and sheer tenacity,
  or whether the community rejects this nutcase and moves on, despite the
  everpresent lack of _total_ agreement with any community standard.

  Some people will always disagree with some part of what has been agreed
  upon for a large population, and there are many reasons for this, but the
  real question is not what people disagree with, not with what they do
  when they disagree, not with how they plan to "convert" people to their
  ways, but with whether they wish to maintain a respect for that community
  standard or seek to destroy that respect and thus obliterate what holds
  the community together.

  This is not about some language feature or another, which, typically and
  predictably, the perpetrator will continue to whine that it is.  This is
  about how we wish to hold a community together.  There is no doubt that
  this insipid if* macro stunt is fragmenting the community like nothing
  else, despite the perpetrator's propagandistic lies about loop, which is
  the object of another of his destructive machinations.  The _only_ issue
  is whether the perpetrator can manage to stop fragmenting the community
  when he realizes that that is precisely what it does.  So far, all we
  have seen is an _increasing_ arrogance and even more stubbornness in his
  fight against the community.   Clearly, this nutcase/perpetrator values
  his protest _much_ higher than that which he knows that he is destroying
  in the process.  That kind of destructive attitude cannot be tolerated.

  If the nutcase/perpetrator had been willing to back down early, this
  would never have gotten to be such an issue.  It has become an issue only
  because he does _not_ back down.  Now he cannot back down because he
  would lose his personal prestige doing so, wrecking his "standing" among
  whoever still supports him.  This is pretty pathetic, but that is how
  things evolve when you are _wrong_ and are prevented from realizing it in
  time for personal and highly irrational reasons.  We must expect the
  perpetrator to protest his innocence too much and continue to pester the
  Common Lisp community with his bogus claims about the standard and how
  the language and the community should welcome his stupid stunt.

  Finally, if* has already become a symbol for the clueless rebels, but the
  likelihood that whoever initially thinks that stupid macro is a good idea
  will stick to it as they see what they are buying into by using this
  symbol of anti-standard, anti-community, childish rebellion against
  authority, will also decrease, hopefully further isolating the rebels.

  I have used an Emacs Lisp function to transform if* into an if, cond,
  when, or unless form as deemed appropriate through some simple measures,
  but it needs tweaking to make it work better.  It reverts the form to the
  bogus if* form when saving the file, unless it has been modified so as
  not to affect patches and other updates to the code from people who have
  yet to rid the code of the bogosity.  It should probably also realize
  when the if* nonsense is really trying to macroexpand a case, typecase or
  any of the other numerous much better ways of expressing things than an
  overly verbose and poorly formatted list of elseifs.

///
--
  Norway is now run by a priest from the fundamentalist Christian People's
  Party, the fifth largest party representing one eighth of the electorate.
--
  Carrying a Swiss Army pocket knife in Oslo, Norway, is a criminal offense.


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Tim Bradshaw  
View profile  
 More options Nov 9 2001, 5:56 am
Newsgroups: comp.lang.lisp
From: tfb+goo...@tfeb.org (Tim Bradshaw)
Date: 9 Nov 2001 02:56:58 -0800
Local: Fri, Nov 9 2001 5:56 am
Subject: Re: MD5 in LISP and abstraction inversions

Juliusz Chroboczek <j...@pps.jussieu.fr> wrote in message <news:87bsidb2iz.fsf@pps.jussieu.fr>...

> The difference, however, is that most modern implementations of, say,
> C, are pretty much identical from the programmer's point of view.  In
> most cases, C code that is efficient under both gcc/x86 and
> SunPro/Sparc will be efficient on all (modern) platforms.

Again, I have to disagree with this, or at least qualify it.  It is
probably
true for the kinds of trivial integer/float benchmarks that are all
people tend to look at (and it probably *isn't* true for the Lisp
equivalents of these same benchmarks, which is why people get so hung
up on this).  Sure, C is portably efficient for a program which sums
the integers from 1 to 10^6, or one that does some simple-minded
floating-point computation.  But is it portably efficient for, say,
large array-bashing code which represents the kind of things people do
in the real world that can be mapped efficiently onto machine
resources?  I suspect it really isn't - you need to know a whole load
of stuff about really low-level details like what floating-point
registers there are and how big cache lines are and all sorts of
really obscure things.  In fact I suspect that *no* language is
portably efficient at that level.

And again for the more common kinds of programs (in C as well as Lisp)
that do complex data structure bashing and lots of pointer chasing,
and other operations which don't map trivially onto machine
operations, the performance tends to be dominated by algorithms rather
than by some low level question of implementation.

Of course there are counterexamples - md5 might be one (though I
question its portability in C since it depends very much on integer
sizes and so on).  But I've written a fair amount of CL and by *far*
the overwelming problems with my programs are algorithmic deficiencies
and just plain bad design, with the sole exception of I/O.  I/O is a
sore point, because it's traditionally been rotten in Lisp, although I
think the situation is much better now.  However I would be *really*
surprised if I/O is portably good in any language: this is the kind of
thing that serious people spend a *lot* of time tuning per platform.
For small machines, of course, the problem has mostly gone away (even
in Lisp) since the machine is almost always I/O (and memory-bandwidth)
starved to the extent that it's hard for a program to not beat the
disk.  For large machines where I/O is closer to keeping up you have
to tune *extensively* anyway.

--tim


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
John Foderaro  
View profile  
 More options Nov 9 2001, 9:39 am
Newsgroups: comp.lang.lisp
From: John Foderaro <j...@xspammerx.franz.com>
Date: Fri, 9 Nov 2001 06:41:21 -0800
Local: Fri, Nov 9 2001 9:41 am
Subject: Re: MD5 in LISP and abstraction inversions
 The if* macro is much older than Common Lisp.  I've used it a long
time and since I have to read code that uses it and code that doesn't
use it I'm continually made aware that it solves the problem it was
intended to solve.  Thus I'd like to continue to use it.

 However suppose you were given the power today to tell me that I can no
longer use if*.  Would you tell me that?

 .. and unrelated to that here's an editorial opinion (not directed
specifically at any one person):

 You talk about "community standards" and that's a very politically
correct term that doesn't raise anyone's shackles.   However I think
that Marc Spitzer hit the nail on the head when he talked about the "morality"
of writing a macro.  We can make the definition that if it was
immoral of me to write the if* macro then if* is an immoral macro.
Now I hope that people are starting to get bothered by such
a declaration.  Is it the case that the ANSI spec laid down the laws
as to what's a legal and non-legal Common Lisp program but now
some people are saying that legal Common Lisp programs are divided
between moral and immoral programs?  The decision as to what's moral
is made by self appointed people who read the scriptures (ANSI spec)
and come to their own interpretation and feel they can speak for the members
of the congregation (er.. I mean common lisp community).
Shall we anoint a Pope?  I know of one militant Common Lisp fundamentalist
who's been terrorizing non believers here for years who would love to
be able to force his will on others in the name of the community.
 The beauty of morality arguments over proofs is that contradictions
are just fine.  You can say "Thou shalt not write control flow macros
that duplicate what's in Common Lisp" and claim that if* is immoral
and at the same time say that when and unless are perfectly find macros
and in fact divinely inspired.  

 Or just maybe we should once again step back from the brink of registering
Common Lisp as a religion.   It's a programming language folks!!
It's a tool to get a job done.  Use it any way you want and don't
let anyone tell you differently.  If you do something interesting
share it with the group.  They may not pick up on it but at least
you tried.  Chance are a few people will find it interesting.
A lot has occurred in the software world since Common Lisp was designed.
Lisp can and must absorb new ideas from other languages to maintain
its leadership position (even if these new ideas end up being
control flow macros that duplicate existing common lisp ones).
 Also no person on this newsgroup speaks for the community.  Don't
be bullied into believing otherwise.


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Jochen Schmidt  
View profile  
 More options Nov 9 2001, 10:10 am
Newsgroups: comp.lang.lisp
From: Jochen Schmidt <j...@dataheaven.de>
Date: Fri, 09 Nov 2001 17:10:37 +0100
Local: Fri, Nov 9 2001 11:10 am
Subject: Re: MD5 in LISP and abstraction inversions

John Foderaro wrote:
>  The if* macro is much older than Common Lisp.  I've used it a long
> time and since I have to read code that uses it and code that doesn't
> use it I'm continually made aware that it solves the problem it was
> intended to solve.  Thus I'd like to continue to use it.

>  However suppose you were given the power today to tell me that I can no
> longer use if*.  Would you tell me that?

At least _I_ would never tell you that *you* are not allowed to use IF*.
But we _still_ have to disjunct arguments here:

- Should you be forced not to use IF*?
  No - definitely not! But at the _same_ emphasis _you_ cannot force
  others to use it or even to use it explicitely!
- If IF* a good idea for inclusion into a standard
  To answer this question we would have to discuss (again...) what the
  merits of IF* are. For building a community standard I think it is
  ok to include it if a significant amount of people use it and as long
  as a reference implementation is made public. (At least the latter is
  already done)

Note that my opinion of the latter point is because I think it is better to
include a facility used by a significant subset of the community over
disciminizing them by explicitely not including it. Note too that this does
_not_ imply including the attitude to forbid use of IF, WHEN , UNLESS
instead of IF*.

We have to realize that the topic IF* is not only yet another control-macro
but also the try to enforce the not-usage of some other facilities!

Now you can claim that it was the whole point of IF* was to replace the
other constructs and without that it would not much sense - if that is true
then the answer if IF* (seen at a whole) is _not_ morally tolerable because
it would include discriminating others style of programming.

ciao,
Jochen

--
http://www.dataheaven.de


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Jochen Schmidt  
View profile  
 More options Nov 9 2001, 10:15 am
Newsgroups: comp.lang.lisp
From: Jochen Schmidt <j...@dataheaven.de>
Date: Fri, 09 Nov 2001 17:16:21 +0100
Local: Fri, Nov 9 2001 11:16 am
Subject: Re: MD5 in LISP and abstraction inversions

Jochen Schmidt wrote:
> Now you can claim that it was the whole point of IF* was to replace the
> other constructs and without that it would not much sense - if that is
> true then the answer if IF* (seen at a whole) is _not_ morally tolerable
> because it would include discriminating others style of programming.

Sorry this paragraph got terribly wrong - I want to rephrase it.

Now you can claim that it was the whole point of IF* to replace the other
constructs and without that it would not make much sense to use it. If that
is true, then the answer if IF* (seen at a whole is _not_ morally tolerable
is simply answered, because it would include discriminating others style of
programming.

ciao,
Jochen

--
http://www.dataheaven.de


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
John Foderaro  
View profile  
 More options Nov 9 2001, 10:23 am
Newsgroups: comp.lang.lisp
From: John Foderaro <j...@xspammerx.franz.com>
Date: Fri, 9 Nov 2001 07:25:18 -0800
Local: Fri, Nov 9 2001 10:25 am
Subject: Re: MD5 in LISP and abstraction inversions

 What you may mistake for arrogance is my policy (which I've stated before)
of not responding to messages flaming me.  Someone who flames is just
trying to boost their own ego and isn't really interested in a serious
discussion.  The fact it that most of your messages directed at me
(such as this last one) contain numerous personal insults (and don't start
with the line about "I only insult people's behavior not the people
themselves".  No one has ever bought that argument).
 I will break my rule and answer your last letter.  You'll then respond with
posts full of insults for the next few months which I'll happily ignore.

 ok.. let's see if we can find the key points of your letter:

>>   because of the specific idiotic new "feature" that nobody needs or wants,
>>   but because of the sheer irrationality of the whole endeavor and because
>>   of the incredible _arrogance_ exuded by those who thus reject the whole
>>   community they _pretend_ or may even helplessly _want_ to be members of,
>>   but are in fact rejecting completely.

 You shouldn't use absolutes like this.  People know that you're wrong and
when you start out being wrong so early they aren't going to trust
the rest of what you say.    "nobody needs or wants" is clearly wrong.
I need and want it.  There are others here that need and want it.
And I've heard from people via email that need and want it.
"..but are in fact rejecting completely."  -- I can't see that I'm
rejecting *anything* let alone rejecting *everything.*   If I rejected
everything then I would be off programming in some other language.

>>   _really_ ticks people off.  It is no longer about some stupid invention
>>   of a macro or a function or a new sub-language, it is about the lack of
>>   willingness to yield in traffic as opposed to a willingness to run into
>>   people on purpose because one thinks one is a superior to others -- it is
>>   the _exact_ same process that makes people become criminals.

I really love this one.  Writing a perfectly legal Common Lisp macro
and continuing to using it despite your vocal dislike of it is like
running into people on the streets.

>>   Some people will always disagree with some part of what has been agreed
>>   upon for a large population,

 Macros are part of Common Lisp.  The large population agreed that they
should be part of the language.   Using macros is not wrong. Using
macros that a few people on comp.lang.lisp dislike is not wrong.

>>   in their lives.  The really _big_ question is whether you are the kind of
>>   person who realizes that the only thing the law and ethics _really_ say
>>   is what is _wrong_ or you are the the kind of person who (mistakenly)
>>   believes that law and ethics tell people what is _right_.  The latter go
>>   on to be quite the intolerable moralists who want people to follow a
>>   specific path (I.e., whatever path they have chosen, and the two usually
>>   become conflated) or else they are doomed sinners upon which all evil can
>>   be hurled in a "defensive" action.  

What I enjoy about when I read your messages is that you always put up
some strawman to attack and more often than not the behavior of the
strawman is precisely your own.   In this case you're the one who
believes that the Common Lisp spec says tell us precisely what
is right  (if, when, unless) and that anything else you write that's
similar to if, when and unless must therefore be wrong.  You're the one who
is the intolerable moralist about this whole thing.

>>   about how we wish to hold a community together.  There is no doubt that
>>   this insipid if* macro stunt is fragmenting the community like nothing
>>   else, despite the perpetrator's propagandistic lies about loop, which is
>>   the object of another of his destructive machinations.  

I don't think that if* has fragmented the community one bit.  
Does anyone out there feel that there is any fragmentation due
to if*???

>>   If the nutcase/perpetrator had been willing to back down early, this
>>   would never have gotten to be such an issue.  

 I did a google groups search and the last message I can find from me
on the if* topic was Sept 5th, over two months ago.  In that time
you've posted nearly every day some reference either direct or
indirect to if*.   Who is the nutcase here?   Why are you
so obsessed with this macro?  I've written plenty of other macros
which, if you read my code, you'll have to deal with.  Why not get
obsessed about one of them and give if* a break?

 I don't know what your problem is.  It certainly isn't about
some insignificant macro that most people couldn't care less about.

 I suggest you look in the mirror.  You are one person.  You are
*not* the Common Lisp community.   Everyone's opinion is important
but no one can speak for us all.   Keep that in mind.


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
John Foderaro  
View profile  
 More options Nov 9 2001, 10:44 am
Newsgroups: comp.lang.lisp
From: John Foderaro <j...@xspammerx.franz.com>
Date: Fri, 9 Nov 2001 07:45:41 -0800
Local: Fri, Nov 9 2001 10:45 am
Subject: Re: MD5 in LISP and abstraction inversions

 I can't force anyone to program in any style unless I hire them to
work for me and we agree that a certain programming style is part
of the contract.

 I'm not telling anyone here how to program.  I simply codified my own
personal programming style.  I could have written "I don't use
if, when and unless for secret reasons that I'll never reveal"
and maybe that would have reduced the contraversy.   Frankly
I thought that people could handle reading opinions different
than their own.

 As for whether if* should be part of a future standard, I probably
wouldn't push for it given the current state.  It's not like there are
every likely to be competing incompatible if* macros out there.
Even if if* were to be part of the standard I would fight any
effort to remove if, when and unless.   Lisp has always been
about the inclusion of different personal styles, not the exclusion.


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Janis Dzerins  
View profile  
 More options Nov 9 2001, 10:47 am
Newsgroups: comp.lang.lisp
From: Janis Dzerins <jo...@latnet.lv>
Date: 09 Nov 2001 17:36:04 +0200
Local: Fri, Nov 9 2001 10:36 am
Subject: Re: MD5 in LISP and abstraction inversions

John Foderaro <j...@xspammerx.franz.com> writes:
> The if* macro is much older than Common Lisp.  I've used it a long
> time and since I have to read code that uses it and code that
> doesn't use it I'm continually made aware that it solves the problem
> it was intended to solve.  Thus I'd like to continue to use it.

Common Lisp is not the language you are programming in, then.

> However suppose you were given the power today to tell me that I can no
> longer use if*.  Would you tell me that?

I read a wonderful piece of text yesterday. This reminds me of it.
http://www.mit.edu/people/dpolicar/writing/prose/text/godTaoist.html

You can't force anything on other peopre here, on USENET. And why
would you want that?

>  .. and unrelated to that here's an editorial opinion (not directed
> specifically at any one person):
> ...
> Is it the case that the ANSI spec laid down the laws as to what's a
> legal and non-legal Common Lisp program but now some people are
> saying that legal Common Lisp programs are divided between moral and
> immoral programs?

Yes. See section 1.5.2 of The Standard. Unless your programs include
the definition of if* macro they are non-conforming.

I won't comment on morality.

> The decision as to what's moral is made by self appointed people who
> read the scriptures (ANSI spec) and come to their own interpretation
> and feel they can speak for the members of the congregation (er.. I
> mean common lisp community).

You are not talking about anyone specifically, do you?

> Or just maybe we should once again step back from the brink of
> registering Common Lisp as a religion.

You keep dragging this in. Why?

> It's a programming language folks!!  It's a tool to get a job done.
> Use it any way you want and don't let anyone tell you differently.

What kind of political propoganda is this? Do you think we're a bunch
of brainless folks here waiting for someone to tell us what to do?

As long as argumentation goes -- Erik out-argumnts you hands down. I
don't take any sides here. I like seeing the brain-at-work in his
posts. Will we see a _real_ reply with quotes of the poster you reply
to any time soon? Or will they be this "nothing personal in here, just
my opinion; I have the rights to express my opinion, right?" stuff you
picked up recently?

I actually liked your posts before this "I'll help you get rid of
Erik" duty you have taken on yourself. I have learned a lot of things
from your open-source software as well. Thank you for that.

> If you do something interesting share it with the group.  They may
> not pick up on it but at least you tried.  Chance are a few people
> will find it interesting.

Ok, you tried. You failed with some people, prevailed with other. Will
it stop now?

> A lot has occurred in the software world since Common Lisp was
> designed.  Lisp can and must absorb new ideas from other languages
> to maintain its leadership position (even if these new ideas end up
> being control flow macros that duplicate existing common lisp ones).

I think Common Lisp does not have to "absorb" something. It has to
pick the best out of it and incorporate it in a way consistent with
the language.

--
Janis Dzerins

  Eat shit -- billions of flies can't be wrong.


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
John Foderaro  
View profile  
 More options Nov 9 2001, 11:09 am
Newsgroups: comp.lang.lisp
From: John Foderaro <j...@xspammerx.franz.com>
Date: Fri, 9 Nov 2001 08:11:21 -0800
Local: Fri, Nov 9 2001 11:11 am
Subject: Re: MD5 in LISP and abstraction inversions
In article <87itckgdnf....@asaka.latnet.lv>, jo...@latnet.lv says...

> Common Lisp is not the language you are programming in, then.

Partially correct.  As has been mentioned here a few times if* is just
the If macro from Franz Lisp which preceded Common Lisp.
However it's *not* correct to say that that I'm programming
in Common Lisp now (and for the last many years).

> You can't force anything on other peopre here, on USENET. And why
> would you want that?

You miss the point of the question.  I was trying to see whether
Kent believed more in personal freedom or what he personally believes
to be the will of the people.

> Yes. See section 1.5.2 of The Standard. Unless your programs include
> the definition of if* macro they are non-conforming.

What are you talking about???

> > Or just maybe we should once again step back from the brink of
> > registering Common Lisp as a religion.

> You keep dragging this in. Why?

Because it's appropriate.

> What kind of political propoganda is this? Do you think we're a bunch
> of brainless folks here waiting for someone to tell us what to do?

I'm expousing a different view that that "some macros are immoral view"
That's the point of this newsgroup, to post views.

> > If you do something interesting share it with the group.  They may
> > not pick up on it but at least you tried.  Chance are a few people
> > will find it interesting.
> Ok, you tried. You failed with some people, prevailed with other. Will
> it stop now?

I'm not the one whose been continually bringing up this if* thing
for the last two months.   So I can't make it stop.  

 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Kent M Pitman  
View profile  
 More options Nov 9 2001, 11:52 am
Newsgroups: comp.lang.lisp
From: Kent M Pitman <pit...@world.std.com>
Date: Fri, 9 Nov 2001 16:51:44 GMT
Local: Fri, Nov 9 2001 11:51 am
Subject: Re: MD5 in LISP and abstraction inversions

Personal freedom is accompanied by personal responsibility.  You have
the right to use macros and functions of your own devising.  You have,
I think, the responsibility to include their definitions in a
distribution that uses them and that purports to be runnable in
conforming CL.  Of course, you can write conforming code that isn't
runnable.  For example (foo x) is conforming, but without a definition
of FOO it's not worth much.  If you make a claim that a module
implements a certain functionality, but it leaves out definitions of
operations necessary to make the module go, it seems to me that either
the claim that the module implements the functionality is false or
else you need to explicitly document what other modules are
prerequisites to running your system.  And in that sense, you are not
running just on CL but on some layered system defined by
CL+the-other-modules. e.g., you can write MACSYMA or CLIM
in CL and a program that uses that system, and that's fine. But saying
that (clim:accept 'integer :prompt "Type a number:") is the CL way
to do program input or (MACSYMA:$INTEGRATE '((MACSYMA:$SIN) $X) '$X) is the
"CL way" to integrate sin(x) is a bit of a stretch.

> > Yes. See section 1.5.2 of The Standard. Unless your programs include
> > the definition of if* macro they are non-conforming.

> What are you talking about???

I believe the point is that people shouldn't have to separately
download if*.  If it's just a personal macro, its definition will
appear in any distribution that uses it, just like any other
user-defined function that makes said distribution work.  The entire
fuss over "where do we get that definition" was artificial because one
doesn't ask that about any other user-defined variable, function, or
macro--the answer is: loading the user module defines it.  If the user
module doesn't define it, then the language/environment is expected
to.  The CL language doesn't, so if you're depending on it, it's not
CL you're depending on.

> > Ok, you tried. You failed with some people, prevailed with other. Will
> > it stop now?

> I'm not the one whose been continually bringing up this if* thing
> for the last two months.   So I can't make it stop.  

I'd be willing to take your side and lobby for the rhetoric to stop if
I were assured that if* were just a normal definition as part of any
facility (such as AllegroServe) you export that purports to run
outside of Franz life support, or if, failing such an added
definition, you tell me that you put #+Allegro in front of each its
uses to make it clear that it's system-dependent just as you would (or
should) with any other non-portable aspect of such a system.
You might have already done this; I'm not asserting you haven't.
I'm just assuming that the rhetoric can be triggered by actions, and some
rhetoric is legit and some is not.  Tell me that the rhetoric is not
legit by asserting you've met these or some other definable criteria
that establish an equivalent sense of "predictable platform" and I'll
help you lobby for more calm.

The normal way to do what you did, btw, is to make a new package.

In my software at HyperMeta, Inc., I don't like a few operators
(DEFPACKAGE and ASSOC) so I changed them (mostly upward-compatibly, but
in the case of DEFPACKAGE, technically there is a possibility of
obscure clashes).  I just made another package called COM.HYPERMETA.CL
that has my versions of these.  No one will use it by accident; anyone
using my software can feel free to import either CL's versions or
mine.  I don't expect to get heat from this approach because I'm not
fighting other people's uses.  I just made my own space to play in
non-invasively.  People who don't want the extra DEFPACKAGE options I
offer, or who don't want to use SETF of ASSOC, can just ignore my
extensions.

Also, I *do* regard my changed package as a new language.  I don't know why
you don't think of CL+IF* as a new language.  Maybe you're worried it will
lose you the support of CL users, and as an empirical thing, it may.  But
if so that isn't because of your being a new language, it's because you
made a bad choice that people don't want to flock toward.  Like you,
I expect people to flock toward my changes, but if they don't, I'm not
going to hide behind "it's just CL".  I'll say it's because they didn't
like the trivially different language I made.

Incidentally, I have another language, COM.HYPERMETA.LISP which is
much less trivially different -- that is, contains a lot of other junk
/ goodies (depending on yourpoint of view). I just went in two stages,
first changing CL non-invasively, then adding other stuff as
extensions to that, in case people cared to only go one of the two
steps.  Or there are ways they can pick and choose from only the parts
of COM.HYPERMETA.LISP they like... but it's easier with my DEFPACKAGE. ;-)

I also didn't try to pick bad names.  I personally don't like IF* because
it looks bad.  But if you called it EXT:IF, I'd be fine with it because
I could either import it or not.  If I did, I'd be programming in your
language.  If I didn't, I'd be programming in mine.  That feels cleaner
to me.  If I'd wanted co-resident operators, CL:IF and your:if-surrogate,
I'd have named the operator something prettier.  UPON or WHENEVER or
BECAUSE or DO-IF, or something whose name didn't confusingly seem like
it was a friend of LIST* or LET*, two name conventions that already clash
and don't need yet a third source of competition.  Or else I'd have done
what COM.HYPERMETA.CL:DEFPACKAGE does, and I'd just be "mostly compatible"
and say that I distinguish based on whether a
macro-whose-name-was-formerly-IF* keyword was present, doing its actions
only if they were, and doing CL:IF's actions otherwise.  Yes, not totally
compatible, and no, not "CL", but still "defensible" as long as you're
willing to admit you've carved out your own langauge (which isn't a sin
but one of many the purposes of CL to enable)...


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Discussion subject changed to "(SETF ASSOC) was Re: MD5 in LISP and abstraction inversions" by Sam Steingold
Sam Steingold  
View profile  
 More options Nov 9 2001, 12:42 pm
Newsgroups: comp.lang.lisp
From: Sam Steingold <s...@gnu.org>
Date: 09 Nov 2001 12:41:04 -0500
Local: Fri, Nov 9 2001 12:41 pm
Subject: (SETF ASSOC) was Re: MD5 in LISP and abstraction inversions

> * In message <sfweln7evkv....@shell01.TheWorld.com>
> * On the subject of "Re: MD5 in LISP and abstraction inversions"
> * Sent on Fri, 9 Nov 2001 16:51:44 GMT
> * Honorable Kent M Pitman <pit...@world.std.com> writes:

> SETF of ASSOC

could you please elaborate?

--
Sam Steingold (http://www.podval.org/~sds)
Keep Jerusalem united! <http://www.onejerusalem.org/Petition.asp>
Read, think and remember! <http://www.iris.org.il> <http://www.memri.org/>
Someone has changed your life.  Save? (y/n)


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Discussion subject changed to "MD5 in LISP and abstraction inversions" by John Foderaro
John Foderaro  
View profile  
 More options Nov 9 2001, 1:30 pm
Newsgroups: comp.lang.lisp
From: John Foderaro <j...@xspammerx.franz.com>
Date: Fri, 9 Nov 2001 10:32:10 -0800
Local: Fri, Nov 9 2001 1:32 pm
Subject: Re: MD5 in LISP and abstraction inversions

>> the right to use macros and functions of your own devising.  You have,
>> I think, the responsibility to include their definitions in a
>> distribution that uses them and that purports to be runnable in
>> conforming CL.  

 Have I ever made a claim that any of the code that I've distributed
can be run in any conforming CL?   If I did then it was a mistake.
The code that I find interesting enough to distribute generally
has dependencies on multithreading, sockets and acl-dependent streams.
In fact I can only promise that it runs on certain recent versions of
ACL.

Why should I even distribute it? Well, the people using ACL can use it
off the shelf and those that use other Lisp may be able to port it or at least
may be curious how something was done.  

The cost to me to ensure that it works in all the various conforming CL's
out there would probably mean that I'd just not distribute anything.

>> I believe the point is that people shouldn't have to separately
>> download if*.  If it's just a personal macro, its definition will
>> appear in any distribution that uses it, just like any other
>> user-defined function that makes said distribution work.  

The best solution here is a Compatibility Library.  If users of
CL A want to load code written for CL B with minimal changes,
then the CL A users have to write and maintain a library B->A.  
That's something the community here can help get going.  This library
would be a lot bigger than just the if* macro.

If I merely added the definition of if* to all my source files it would
add nearly nothing to making the code easier to run on other Common Lisps.

>> I'd be willing to take your side and lobby for the rhetoric to stop if
>> I were assured that if* were just a normal definition as part of any
>> facility (such as AllegroServe) you export that purports to run
>> outside of Franz life support, or if, failing such an added
>> definition, you tell me that you put #+Allegro in front of each its
>> uses to make it clear that it's system-dependent just as you would (or
>> should) with any other non-portable aspect of such a system.

Now that I've made it clear that the code I offer does not purport
to run on any Common Lisp other than recent versions of ACL, can
I eliminate that need to mark the acl-specific parts of it?

I know that this sounds like I'm lazy or selfish but remember back
to what Erik said about not distributing code any more because he finds
the people receiving it are ungrateful and just complain.

I've got three choices (and yes technically it's Franz's choice but
in the case of code I've written I think they would go along with
what I wanted).
1. I could not opensource the code
2. I could opensource what I've written which is ACL only
3. I could make it work on all lisps and open source that.

well 3 is out, since I don't have the time, knowledge or energy to
coordinate such an effort, and it may not be the best thing for
the code.

So I could either do 1 or 2.  If people are offended that I chose 2
I can always do 1.  That's very easy to do.  Would that benefit
the community more?

>> Also, I *do* regard my changed package as a new language.  I don't know why
>> you don't think of CL+IF* as a new language.  

It can or cannot be considered a new language based on what you intend
to infer from 'new language'.
If by 'new language' you mean that due to the addition of if* existing
Common Lisp books are invalid, this is not true at all.
if* is actually excl:if*.  If you work in a package that doesn't
use the excl package then it is as if the if* macro didn't exist.
So by my definition of 'new language' you can add a million functions
and macros to a Common Lisp system and not change the language
a single bit as long as the user still has the capability of
sees the ansi defined common-lisp package.

In the case where you're shadowing ANSI defined functions then you
are indeed defining a new language.

>> I also didn't try to pick bad names.  I personally don't like IF* because
>> it looks bad.  

I would have preferred to use If as in Franz Lisp but you know quite
well why that's not a practical choice.

if*'s a better name than shadowing 'if' since emacs doesn't have to
be very clever to distinguish 'if' from 'if*' and indent each correctly.  
Also you can give someone some code and the if* macro and they can run it.  
They don't have to go through shadowing 'if' in a package to use it.
If I were to publish code using a shadowed 'if' that had the 'if*'
keywords it would totally baffle the newbies and even old timers
would dislike it.

In my programming style if* is the single most important conditional
expression, so I want it to have a terse name.   If people used
multiple-value-bind a lot it wouldn't be called multiple-value-bind,
just like car is car and not contents-of-address-register.


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Discussion subject changed to "(SETF ASSOC) was Re: MD5 in LISP and abstraction inversions" by Kent M Pitman
Kent M Pitman  
View profile  
 More options Nov 9 2001, 4:10 pm
Newsgroups: comp.lang.lisp
From: Kent M Pitman <pit...@world.std.com>
Date: Fri, 9 Nov 2001 21:08:52 GMT
Local: Fri, Nov 9 2001 4:08 pm
Subject: Re: (SETF ASSOC) was Re: MD5 in LISP and abstraction inversions

Sam Steingold <s...@gnu.org> writes:
> > * In message <sfweln7evkv....@shell01.TheWorld.com>
> > * On the subject of "Re: MD5 in LISP and abstraction inversions"
> > * Sent on Fri, 9 Nov 2001 16:51:44 GMT
> > * Honorable Kent M Pitman <pit...@world.std.com> writes:

> > SETF of ASSOC

> could you please elaborate?

I was just giving an example of a function one might want to redefine.
One is not allowed to extend definitions of CL symbols, so you have to
shadow them.  I did this for ASSOC.   It's not extraordinarily useful
in practice, but people often ask why it's not there since the PLIST
setters are present, so I figured why not add it.  It is, by the way,
an annoying pain to write correctly if you DO want it:

 (setq x '())                    => ()
 (setf (assoc 'a x) (cons 'a 4)) => (a . 4)
 x                               => ((a . 4))
 (setf (assoc 'a x) (cons 'a 5)) => (a . 5)
 x                               => ((a . 5))
 (setf (assoc 'a x) (cons 'b 1)) => (b . 1)
 x                               => ((b . 1) (a . 5))

I also add the more useful functions, like this one:

 (association 'a x)          => 5
 (setf (association 'a x) 6) => 6
 (association 'a x)          => 6
 x                           => ((b . 1) (a . 6))
 (setf (association 'c x) 0) => 0
 x                           => ((c . 0) (b . 1) (a . 6))
 (decf (association 'c x) 3) => -3
 x                           => ((c . -3) (b . 1) (a . 6))

Getting the value and not the cell makes things like INCF/DECF more useful.

I have functions for the other-style ALIST, too.  But then, the point
is that I spent a bit over six months full-time just writing all kinds
of support for things I was tired of not having...  (So you'll forgive
me if I don't just post the lot of it on some free software site, btw;
I've burned through that many months' salary worth of savings and credit
card buildup, and now have to figure out how to make some money back on
all that investment.  I promise it's not all as trivial as SETF of ASSOC,
though...)

Anyway, is that what you wanted to know?  


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Messages 51 - 75 of 206 < Older  Newer >
« Back to Discussions « Newer topic     Older topic »