Subject: Re: MD5 in LISP and abstraction inversions From: Erik Naggum <erik@naggum.net> Date: Thu, 15 Nov 2001 01:17:09 GMT Newsgroups: comp.lang.lisp Message-ID: <3214775823510728@naggum.net> * John Foderaro | What good is it establishing a standard if you don't follow it? Funny you should ask... But it clearly applies only to your own. | You may note that one of the example files (puzzle.cl), a very cool | aserve application written by another developer at Franz (Charley Cox) | actually uses when and unless. Some day I plan on converting that over | to use if* but I don't feel an urgency to do so. Someone should convert the "ported" AllegroServes and other open source from your end to use the standard conditionals, because what good _is_ having a community standard if one does not follow it? Publishing source code for others to read is all about letting people who want to find good programming style and quality design learn by example, after they have found textbooks teaching or standards defining the language they are reading -- that is not what they find in if*-infested code. If they have to deal with some wacky old historical accident that transports them back to pre-Common Lisp times with every programmer's own version of basic language constructs, we have gained nothing with the standard, and that is clearly the _purpose_ of the if* form. We were _supposed_ to have progressed beyond random user macros for fundamental control structures with the establishment of the standard, but some have still not accepted it. I do not think they should be rewarded for their retro-rebellion and nostalgic pining for a time when we _had_ no standards. The Open Source community does not have to accept anyone's very personal "coding standard", especially when it proves to be a _liability_ to the community. Quite the contrary, the Open Source community should strive to make its projects acceptable to as many people as possible, to be inclusive of tastes -- which, contrary to the childish whining of those who have no concern for anything but their _own_ taste, to mature people means finding a point of _common_ agreement that offends as few people as possible and thus allows people to make _serious_ improvements instead of petty ones that only annoy lots of people. One such obvious common point of agreement is the _standard_, within its scope; outside its scope, we must strive to find other points of agreements, obviously, but still the respect for such agreements must be established and maintained. The Open Source community is already loaded with political issues that tend to exclude people who could have contributed serious improvmenets, so finding the intersection of those who accept the political issues and those who accept the irrationality of refusing to deal with standard conditionals and community-accepted coding practices, will of necessity be quite hard. Furthermore, does any part of the Open Source community _really_ want to marry into the anti-standard political agenda of someone who expresses strong disdain for _many_ clauses and committee decisions, disrespect for and hostility towards central committee members, and who refers to the upper-case symbol names of the standard as "braindamaged mode" as opposed to the "modern mode" of his own design? I certainly do not want to help further such agendas, so if I find bugs or some features I do not like, I just drop it or do not use it at all, just like some Microsoft "operating system", rather than try to make it better, which would simply mean making it better at hurting what I value. Sharing code with people who have agendas that are contrary to mine would be self- destructive -- I _really_ want ANSI Common Lisp to survive, and more than that, to be _the_ point of agreement for the whole commnunity. I want to work _within_ the accepted procedures to make changes or improvements if any are necessary, not undermine the standard by changing the language people see, indeed, to make sure that _textbooks_ and _references_ on Common Lisp really teach people the language they can expect to see _used_. By changing the conditionals, which John Foderaro says he thinks of as _fundamental_ to a language, he exposes people to a _different_ language, regardless of how much he keeps claiming that he is writing and using "Common Lisp". Getting rid of the personal idiosyncrasies of individual contributors does in fact improve both readablity and acceptability of the source code to a large number of people, just as it does for prose text. As I have pointed out repeatedly, publishers and _responsible_ companies ensure that their _published_ materials follow standards that are far more _inclusive_ than some "style" of a wacky employee, because the use of slang, sociolects, etc, in technical documentation, code, and the like _excludes_ all those who do not appreciate it, who do not want to be members of a freak show just because they want to use or take part in something. Considering the "sterility" of technical documentation and the sheer absence of "personality" in such material, one has to grasp the intent to communicate the ideas as cleanly as possible, understandable by as many people as possible, and thus is nearly devoid of idioms, local vocabulary, slang, poetic expressions, etc. It is considered hard to write good technical documentation because it has be "alive" despite all the usual means to keep prose text alive. But not only technical stuff, _every_ author has to deal with the kind of "ego bruises" that come from dealing with a serious publisher's copy editor, and most authors who are serious about being published _understand_ that their editors know a lot more about this than they do as authors -- after all, the author knows the subject matter while the editors know the publishing business, and that includes the language to use. Those who are too stupid and arrogant to listen to expertise, who refuse to consult dictionaries and style guides or who refuse to learn from those who have been published, do not get published -- it is a matter of "I know everything best" versus "I know _my_ stuff". The Net has unfortunately had a dramatic effect on the publication rate of trash and documents that scream "Look at my personal style!" instead of whatever they were trying to communicate, the same way many documents screamed "Look at what my Macintosh can do!" back when that was the measure of ridiculous hipness. But still we have publishing houses that manage to break in their authors and cause the whole stable of authors to agree to publish books using the same style, the same font, the same layout, etc, even though you can be dead certain that very few of them would have chosen it on their own, and some of them probably had a pet style that did _not_ get used. Those who go bananas over the use of certain quotation marks, say, are simply dropped by the publisher. A renegade author costs so much more for these publishers that you have be a _real_ big name to pull any such stunts. There are parts of Common Lisp that one Common Lisp programmer or another most probably does not like, would have designed differently, etc, but out of deference to the community of readers of _published_ code, they understand that it is actually _preferable_ for their _own_ personal goals to work towards community coherence over getting their personal ego stroked, because that means fighting people all the time, every time. Just in case there are _still_ some people who think this is about any "technical" aspects of the if* macro: It has never been. It is certainly not a smart macro -- is just a sugar-coated cond. What it has been about all along is the arrogance, disrespect, stupidity, egotistical attitude problem, and giving the finger to the community, that the primary (if not only by this time) user of if* has ensured has become the community-wide connotations of if*, but these connotations will not go away -- if* has to go away for people to forget this and return to value the community created by the standard, the textbooks, the editor and development system support, etc, that they share. This is just like those who have read Scheme texts that never use iteration because the authors think their readers will figure out for themselves what their recursive style is a _variation_ upon, since they are expected to know languages that do iteration already, but instead these readers believe that iteration is somehow evil and recursion is divine. In particular, if the readers of if* code do not know how Common Lisp can be used to define new control structures and accomodate any random lunatic's or smart programmer's desires alike for personal macros, especially when the macro definitions are not even included in the published source, they will not understand any point about the supposed "power" of the language being used -- what they will go away with it is the same kind of hostility that the author of the if* macro first made explicit: using the standard conditionals is _bad_. Even thinking that using such a bogus historical accident will tell people anything new just by example unless they were shown a number of such variations, is just silly, and yet that is precisely what they are _not_ shown. If if* was supposed to be an exercise in pedagogy, it was the most astonishingly incompetent such exercise in the history of pedagogy, so let us just dispell with the notion that it was. It was and remains a political vehicle for filibustering against the standard. This is what I oppose, just as I oppose the equally idiotic notion that loop is inherently bad, that upper-case symbol names are bad, that iteration is bad, etc. _This_ is why if* is bad. Since if* also has no inherent value for anyone besides those exposed to it in the past, meaning only "historical reasons", there is no point it keeping it along everything else, either. The end result is that when a vendor promotes if* in their published code, they are _actually_ saying "screw the community and its standard", whether they understand it or not, and admit to it or not -- it should, however, be fairly hard to ignore the consequences by now. They can say whatever they want, in fact, about how much they treasure the standard, but actions speak so much louder than words. The only reason they keep publishing code with if* in it, is that they do not care about those who want the standard to be the common point of agreement in the comunity. Customers and users of their open source offerings should take note of this and make their concerns explicit, just like the perpetrator and perpetuator of the if* stunt tells everybody else to do when they do not like something. The other possibility is that John Foderaro is able to hold Franz Inc hostage to his insane requirements. I would hope that this is not very likely, but by now, I no longer know. | I may not even be able to read and understand the extended loop code | though. Good! So you _do_ understand what using if* in your code _does_ to its readability and understandability and acceptability! I thought you never would. But keep it up, and maybe you can grasp why your keyword-laden, unnavigatable, unformattable, and generally ridiculous macro does to its non-fan readers _just_ as you have a hard time with loop, but probably even more so, since anyone can read up on what loop does in any number of references and get multiple views on its merits and demerits, including the ability to combine extended loop with do forms, mapping forms, simple loop, iterator functions, etc. Since there is no combining if* with any other conditionals, however, one has to buy the whole package deal, and that by itself is revolting to many people. Additionally, seeing that you are going to change their contributed code to use a bogus historic artifact instead of the _standard_ conditionals, will turn people away from contributing to source code that is full of if*. _None_ of this political baggage comes with using loop, so understanding that if* is much worse to readers who do not like it than loop is to you might be a good starting point if you really want to understand why it is rejected and why you and the vendor you _represent_ are hurting the coherence of the community. I really wonder what you get out of using and promoting if* at this time. All it is telling the world is "screw you all!", which you have also said in tone if not in words in every single one of your recent messages. How can that be of value to you? How can it be of value to your employer? I cannot be the only previously happy customer whose impression of your employer has fallen dramatically because of your insistence on publishing offensive code. It is clear to a lot of people that you would sacrifice the standard any minute if you could get away with it, because that is precisely what you _do_. That you obviously do not see this yourself is a problem that at least _some_ of your colleagues must recognize, but from what I understand, several people agree with you that upper-case is "braindamaged" and probably agree with you that whoever wants when and unless and extended loop are equally deranged, so you are _unreachable_. That nothing happens to your insistence or even to your arguments in what you probably believe is rightfully defending yourself, is not a good sign. It frankly has me worried. At some point, the personal value of continuing to publish if*-infested code will be less than the value of keeping your job, your customers, your membership in the _Common_ Lisp community, etc. This is not a threat, it is a simple prediction, which you are of course free to think will never come true. We all choose what we value higher among our options, and dedication bordering on stubborn is generally valuable, except when self-destructive. Some realize this in time to get help. Others self-destruct and take a lot of other people with them in the process. I care about those other people. /// -- 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.