Re: Seeking computer-programming job (Sunnyvale, CA)

P

Paul Foley

Seamus MacRae said:
I did no such thing. I only assumed that classes and/or
functions/methods live IN namespaces.

"Big mistake"
I assumed that there were three possible ways to resolve names:

package.class.method (perhaps with inheritance) (Java uses this)
package.method.class
package1.class.package2.method

that is, either packages namespace classes which namespace methods
(Java model), packages namespace methods which namespace classes
(don't know what uses this), or packages namespace both methods and
classes.

You seem to be saying that Lisp does the last of the three.

None of the above.
 
S

Series Expansion

Hello @ you re: numerous posts where people have patiently explained
 - the differences between the Lisp macro system and the C macro
system,

I have patiently and repeatedly explained why these are irrelevant; my
arguments depended only on those features common to all macros, indeed
inherent in the very definition of "macro".
 - the power of the Lisp package system

I have shown little interest in the topic of the package system.
Perhaps you are thinking of Seamus MacRae, another
comp.lang.java.programmer poster who has been involved extensively in
that topic?
 - Emacs

Your fascination with archaic software and tolerance for archaic user
interfaces remains inexplicable.
 - Why you are a flaming frolicking freelance TROLL

These tiresome personal attacks do not constitute rational arguments
in favor of either Lisp or Java, Adlai.
How has politics come out in this thread?

Certainly pragmatism and reason has not, except primarily on my own
part.

There have been indications that Lew's behavior in particular stems
from misdirected rage whose true target is absent. His animosity, and
also certain exchanges among Kaz, Kevin, and Seamus involving
references to living persons as "gods", imply some kind of power
politics is in play among the more regular users of both newsgroups,
as is to be expected in any large enough group of human beings with
somewhat stable membership, and furthermore that the politics in
question is influencing peoples' behavior in this thread, particularly
where they are observed displaying hatred, loyalty, solidarity, anger,
and other irrational emotions, and allowing these to thoroughly
override reason and supplant civilized behavior.

Furthermore, there were some anti-Semitic remarks from Lispers a while
ago, and, more recently, a claim fronted by Lew that promoted bigotry
against a sizable fraction of the planet's population, particularly
those of British ancestry.

It is possible that this last is a clue to the identity of Lew's
inferred nemesis. I will observe with some fascination the fireworks
that are likely to ensue should this individual choose to put in an
appearance here.
I think the only remotely political comment made RECENTLY (there were
some posts about the politics of the job market, but those were before
anti-Lisp flaming began)

There has been some argumentation with respect to the utility and
desirability of some Lisp features, but actually very little of what I
would characterize as "anti-Lisp flaming". There was considerably more
anti-Java flaming. Of late, the vast majority of the flaming has been
interpersonal rather than intergroup, however, and indeed much of it
has been internal to comp.lang.java.programmer's population, to wit,
the voluminous irrational personal attacks by Lew perpetrated against
both myself and Seamus MacRae.
I think that more political is the style of the responses you use,
where you filibuster away patient and thought-out explanations with
tear-jerking (not!)tales of your troubles trying to reason (not!)
logically (not!) with all the ignoranuses (not!) on c.l.l and their
oft-changing (not!) ill-defined (not!) opinions.

On the contrary, it is you who filibuster away my patient and thought-
out explanations with tear-jerking (not!) tales of your troubles
trying to reason (not!) logically (not!) with all the ignoramuses
(not!) on c.l.j.p.

I have been exceedingly patient, with only a few outbursts of my own,
whereas I have witnessed a most remarkably diverse array of illogic,
emotion, random behavior, and churlishness from many of the other
participants here.
Good night, and good luck.

I require neither rest nor what you superstitiously term "luck"; only
logic, and that I already have. You, however, could benefit greatly
from acquiring more, in my estimation. You fervently believe your
side's propositions yet you seem unable to muster any arguments for
them more cogent than "I believe it" or "I don't believe your
objections" and frequently resort to ignoring your opponent,
misstating his position, insulting his character, and mere repetition
in an attempt to convince him or others that, using such methods, is
quite futile. If your position has merit, logic will be your ally in
supporting those points that you have on your side, and eventually in
enabling those points to prevail against opposition. Of course, if it
has none, logic will avail you of nothing, save the capability to
realize that it is not your opponents' minds that need changing but
rather your own.
 
S

Seamus MacRae

Paul said:
Only in your head.

Personal attacks such as this will not help you to rationally address
the issues that I have raised. You will need to discuss the issues
themselves, not your personal opinion of me, in order to successfully
address those issues.
I don't know what you're talking about, but I /suspect/ you've
misinterpreted something...

If you'd only focus on the subject matter of the discussion, instead of
being distracted uselessly by your uncharitable thoughts and
*suspicions* about other people here ...
if you're talking about something like

(defmethod whatever ((foo foo) (bar bar) (baz baz)) ...)

I am not. It started with "defgeneric".
Of course it's not useless. But since methods belong to generic
functions, not classes, you don't have to inherit from a class just to
get access to its namespace to define your own methods for functions
defined in that class.

Indeed, it seems inheriting from a class gets you very little in Lisp.
In Lisp, you gain access to no namespace; you can break its
encapsulation anyway, and you can have polymorphic dispatch anyway; and
there is no is-a type relationship enforced by the compiler. About all
you get is the least useful OO feature: inheritance of unoverridden
base-class methods.
 
J

Joost Kremers

Seamus said:
No, it cannot. A WYSIWYG view of anything fancier than plain unadorned
pages-full of monospaced Courier

have you even bothered to look at the screen shots? you'd have noticed that
a) it's *not* unadorned, b) it's not courier
is going to necessarily require a
better user interface than what any terminal (emulator) can provide emacs.

and it's *not* a terminal emulator. emacs has developed into an X
application running inside its own X window (which happens to be called
frame in emacs lingo). it, btw, also runs on windows and os x as a gui
application.
What the hell terminal type does italics?

stop being (deliberately? unintentionally) ignorant. yes, emacs still runs
on a terminal, but it also runs in X, doing all the font tricks one would
expect.
Besides, what you're describing isn't WYSIWYG, it's some sort of
half-assed thing that gets you the worst of both worlds: the formatting
codes aren't visible but you're not seeing it as it really looks either.

oh? before, having both seemed to you like the best of both worlds. now
it's suddently the worst... sure, emacs doesn't give both next to each
other, but the code is there when i need it.

and sure, it's not *exactly* as it will look on paper or pdf. but that only
becomes important in the final stages, not while writing a text. who cares
how a paragraph is formatted when you're still writing it?
ASCII art just doesn't do it for me.

like i said, you obviously haven't actually looked at the screen shots.
that's not ascii art, that's a png image.
Mouse clicks on what?

on the relevant menu items.
I'm sure you do. Those are plain old text,

yes, but i don't deal with them as text files.
I, apparently unlike you, can imagine such hypothetical features as
having an M-x quake mode, or a fly-through of CAD models,

well, surprisingly, i *was* only thinking about features that would come in
handy for an IDE, such as the list of netbeans features that you claim
emacs cannot do.
or graphing of implicit functions,

given the graph and tree structures i've seen emacs do in different
packages, i don't see why this would be principally impossible.
none of which can be done in any reasonable manner
using only a grid of letters, numbers, and punctuation, and therefore
none of which can be done in emacs, no matter how powerful elisp is.

if emacs *were* still just a grid of letters, numbers and puncuation, you'd
be right. it's not, though.

i'm not saying that emacs already has the necessary graphics processing
capabilities for a quake mode, but you're free to add them, if you wish.
Everything else was civil (if a bit odd), and then this disappointment:
a gratuitous, unprovoked, ungrammatical insult with delusions of relevance.

well, you seem to think that emacs is just a text-mode application, which
it is not. you claim that emacs cannot handle a mouse, which is simply
wrong. you claim that it's a lousy IDE, even though you've never used it to
actually write code. that's what i call "not knowing a thing about it".
 
J

Joost Kremers

Series said:
I have patiently and repeatedly explained why these are irrelevant; my
arguments depended only on those features common to all macros, indeed
inherent in the very definition of "macro".

the definition of the british word 'fanny' does not have anything in common
with the definition of the american word 'fanny'. they both name body
regions that sit between the torso and the legs, but that's about it.

don't assume that because two words sound identical, they mean the same
thing or that their definitions have anything in common. lisp-style macros
and C-style macros have about as much in common as british 'fanny' and
american 'fanny'. so IOW there is nothing "inherent in the very definition
of 'macro'".
 
A

Adlai

These tiresome personal attacks do not constitute rational arguments
in favor of either Lisp or Java, "Lew".

These tiresome personal attacks do not constitute rational arguments
in favor of either Lisp or Java, "Lew".

I would not. If they provided me the number of their own volition,
uncoerced, then no theft would have taken place.

These tiresome personal attacks do not constitute rational arguments
in favor of either Lisp or Java, "Lew".

These tiresome personal attacks do not constitute rational arguments
in favor of either Lisp or Java, "Lew".

Incorrect. You are the nastiest person in this thread at this time, by
any sane standard.

These tiresome personal attacks do not constitute rational arguments
in favor of either Lisp or Java, "Lew".

No, I am disappointed in your failure to grasp the essential nature of
logical argumentation.

These tiresome personal attacks do not constitute rational arguments
in favor of either Lisp or Java, "Lew".

Note that I have remained calm in the face of your provocations, while
you are reduced to such nonsense as this:


The only person evincing signs of an imminent breakdown is yourself.

These tiresome repetitions of a formula do not constitute any evidence
that you have looked at Emacs screenshots, or that you have tried to
understand CLOS, Lisp Macros, or Lisp Packages.

Series and Seamus, as the two of you keep demanding more and more
"evidence" and examples of "impossible" things, we keep providing
them. You keep dodging the fact that our examples answer your
questions by posing newer and more ridiculous misunderstandings of
what we explain, and trying to claim the logical high ground for
yourselves. Now it's completely possible that you may be smarter, more
mature, stronger, faster, better, etc, than us, but that has no
bearing on the discussion if you refuse to make a bit of a mental
stretch and check out some examples.

Oh and Seamus, thank you for coming back. Series's humour was starting
to dry up...


- Adlai
 
S

Series Expansion

Lew wrote:

Why reply to yourself?
Gods, I hope not!

Then your hopes are in vain.

And apparently you did not reply to yourself; you mangled your
attributions again.
Your behavior sucks, you liar.

These tiresome personal attacks do not constitute rational arguments
in favor of either Lisp or Java, "Lew".

These childish personal attacks do not constitute rational arguments
in favor of either Lisp or Java, "Lew".
That nasty worm, who styles himself "Series Expansion"

These tiresome personal attacks do not constitute rational arguments
in favor of either Lisp or Java, "Lew".

Fascinating. The frequency and severity of these irrational, emotional
outbursts from "Lew" indicate that he is on the verge of some kind of
breakdown of mental functioning. He appears largely incapable of
reason at this time, yet insists on attempting to participate in this
debate regardless of his possibly-temporary incompetence to do so. I
would suspect that he was inebriated, quite severely, but for the
observation that he has been in this state more-or-less continually
for over 96 hours now.

It is possible that he is in need of medical attention.
Not at "Lispers", as you call them, but certainly at "Seamus" and you, you
unworthy.

These tiresome personal attacks do not constitute rational arguments
in favor of either Lisp or Java, "Lew".

You did indeed flame several of the Lispers prior to beginning to
flame your former allies. The following links all are to examples of
your flaming non-comp.lang.java.programmer-regulars early in this
thread:

http://groups.google.com/group/comp.lang.lisp/msg/6702901a0832ef74
http://groups.google.com/group/comp.lang.lisp/msg/ee3e2fc66718b18f
http://groups.google.com/group/comp.lang.lisp/msg/013ddb2d0a59b931

Of these, at least one of them, Kaz, is or has been a Lisp partisan in
the present debate.
Neither you nor "Seamus" are in my camp.

By "your own camp" I refer to Java advocates.

There seem to have been two recent events affecting your behavior.
Neither of them appears to have happened in this thread, but one
occurred approximately on May 14, at which time you started
occasionally flaming non-Java participants; the second occurred
approximately one day later. At that time your posting volume rose by
an order of magnitude, you turned on the other Java-advocate
participants in this thread (at that point only myself and Seamus),
and you appear to have lost all remaining capacity for reason or self-
control.

What happened?
 How arrogant of you to place yourself with me.

I place myself with the other advocates of Java. If for some reason
you wish to avoid that you will have to change programming-language
preference.

I do not, however, recommend that you alter your language preference
for irrational reasons stemming from emotions such as animosity, but
rather only for pragmatic ones.
 I spurn you.  You are beneath contempt.

These tiresome personal attacks do not constitute rational arguments
in favor of either Lisp or Java, "Lew".
I can take it.  Can you?

As you can see, I am completely unperturbed by your illogical
behavior. Indeed, to be otherwise would be illogical. You pose no
threat to me, and your visible progression of mental collapse,
triggered by causes unknown, is fascinating to observe.
Your bias is to self-aggrandisement and nastiness, and certainly as far from
the truth as one can get.

That is incorrect. I have engaged in no self-promotion or similar
illogical, egotistical behaviors here. Nor have I displayed much of
what you term "nastiness". And I most certainly have not lied.

The behaviors you are describing, with the possible exception of self-
aggrandizement, appear to apply best to you, among all of the present
participants in this thread and based on their present behavior. There
has been some mutual aggrandizement, though not self-aggrandizement,
in the Lisp camp.
Clearly.  Not in a good way, either.

These tiresome personal attacks do not constitute rational arguments
in favor of either Lisp or Java, "Lew".
You wouldn't know a valid argument if it bit you in the fundament.

These tiresome personal attacks do not constitute rational arguments
in favor of either Lisp or Java, "Lew".

Bald assertions unsupported by evidence or reason, expressions of
faith devoid of logic, and assorted ad hominem remarks do not
constitute valid arguments.
You're a fine one to talk about "absurdities in something they said", whose
every utterance is as absurd as it is unwarranted and hostile.

These tiresome personal attacks do not constitute rational arguments
in favor of either Lisp or Java, "Lew".

Your every utterance is unwarranted and hostile. Many times you have
responded to a civil remark by myself or another person with a
personal attack directed against myself or another person, often not
the same person as made the civil remark.

My own posts are devoid of absurdities, and none are unwarranted.
Exceedingly few have been hostile.

Your accusations are peculiar. Most of the traits you erroneously
impute to me are in fact traits possessed by you; likewise most of the
traits you erroneously impute to my posts are possessed in quantity by
your own. This may be an indication of psychological projection.
Another possibility is transference; your anger truly lies with
another, and the various attacks upon my character reflect your
feelings about that individual, but his or her absence leads you to
"vent" your anger upon a substitute target, essentially a scapegoat
for whatever perceived or actual wrong you experience on or near the
fifteenth of May.

Psychotherapy may offer some relief of your condition. If that does
not suffice, psychiatric examination and medication may be indicated.
You have engaged with me, which is all that I required.

Your behavior and motives are not rational. Perhaps you have
misunderstood the purpose of comp.lang.java.programmer?
 I just could not understand why you didn't answer me when I have tried so
hard to goad you into responding by calling you out for what you are, you
craven fool.

Perhaps it is because your irrational posts, devoid as they are of
useful content, did not interest me much.
 Now my ego is fulfilled, and I hope I haven't spoiled it for everyone else.
Now that I have your attention, "Series Expansion", I shall plonk you.
 Rest assured, "Series", that I am flipping you the bird as I do so.

Fascinating. A most illogical outburst of emotion. First he attempts
to obtain attention not by posting something worth other people's time
and attention, but by posting irrational nonsense and drivel. Then,
when someone alerts him that his nonsense is of no value and that it
fails to advance either side of the debate, he asserts an intention to
leave it, though this will deprive him of the attention he formerly
craved. Add to that an expression of hostility directed at the person
that informed him helpfully of his strategic error. His behavior
contradicts his stated aims, and appears devoid of logical purpose. A
most unusual case of temporary psychosis.
To the rest of the world, and especially to the Lisp adherents whom "Series"
has abused

I have abused no-one. Those who do not wish to engage in a reasoned
debate with me are quite free to ignore me or even to ignore this
entire thread. There is no coercion, and where there is no coercion
there is by definition no abuse.
and to the Java programmers (myself excluded, of course, since I'm
every bit as trollish in this thread)

Intriguing. There are now signs of some degree of logical self-
assessment returning within "Lew". Perhaps his condition has begun to
resolve itself spontaneously, without the need for counseling or
medical attention.
whom "Series" has so egregiously misrepresented

I have done nothing of the sort. My statements regarding Java have
been accurate, as have, in the aggregate, my statements regarding Java
programmers.
I sincerely apologize for stooping to his level.

This statement is irrational. For you to have "stooped to my level"
would have required that I had been engaged in the sort of inane,
content-free, violently abrasive, and irrational posting behavior as
you have, whereas my posts have almost entirely been cogent, logical,
and above petty name-calling, chest-beating, vindictive character-
assassination, and similar personal power politics.
But, man, it sure was fun for me!

"Fun" is not a justification for unpleasant and antisocial behavior.
 
S

Seamus MacRae

Paul said:
"Big mistake"

Incorrect. You yourselves have repeatedly indicated that Lisp has a
package system and that all definitions within Lisp are in packages
within that system, and that the sole purpose of the package system is
namespacing.

My own assumption is derived from your statements. If my assumption is
in error it can only be because one of your own was in error.
None of the above.

You are once again contradicting earlier posts by your own side in this
conflict.

I am aware that Lisp's syntax is not identical with the above, but
syntax was not at issue here, and multiple languages' behaviors were, so
I chose a syntax resembling Java's for convenience.

Regardless, it remains the case that either methods belong to classes
belong to packages, classes belong to methods belong to packages, or
classes and methods each separately belong directly to packages, unless
one or both are not subjected to namespacing at all, in which case their
names collide easily and this will cause a tremendous amount of trouble.

Several of you have stated repeatedly and in no uncertain terms that all
constructs in Lisp ARE subjected to namespacing, however, which is what
eliminates that last possibility and leaves only the three outlined
previously.
 
S

Series Expansion

I find it far more likely that the term "troll" is applicable to the
two individuals in this little side-debate that are flinging insults
around and making imperious demands, than that it is applicable to the
one who has (with one or two exceptions) remained rational.

It's not called rational when:
 - People tell you to [etc]

Yes, it is indeed irrational to demand that a usenet poster do
something, given the general inability to back such a demand up with
force. Perhaps you should stop being irrational.
 - They provide resources, whether by directly explaining, or pointing

Resources are not relevant. Evidence and logic are needed to refute an
argument. You have employed neither of them very often.
 - They redirect you to these efforts after the first few times you
ignore them

It is illogical to expect me to not ignore irrelevancies and
distractions. I described how ANY macro with the basic property of
eventual lexical replacement of the call with other code, which in
turn includes embedded copies of the call's arguments, will inevitably
suffer from at least one of a particular set of four problems. No
links to Lisp tutorials and similar information, much of which I
already know anyway, would have any bearing on this more general
subject. The arguments I fronted do not depend in any way, shape, or
form on the language details, merely on the fact of lexical
replacement of the call and substitution within the replacement code
of the arguments. From this fact alone, which is demonstrably
applicable to Lisp macros, the consequences and associated tradeoffs
that I outlined inevitably result. Nothing in my final argument
assumed the presence of any behaviors peculiar to C macros or to any
other particular implementation of macros; their SOLE assumption was
that the call is replaced with some code, within which certain
placeholder constructs are replaced by the call's arguments, after
which the altered code is compiled. And that assumption is not
violated by Lisp macros.
 - You continually ignore these resources, while saying that you only
deal reasonably and requesting us to supply any backing for statements
like "C macros and Lisp macros are two very different beasts."

I ignored what was not relevant. I never did request backing for "C
macros and Lisp macros are different". They are different in some ways
but they share the essential characteristic that a call is replaced
with some code, within which certain placeholder constructs are
replaced by the call's arguments, after which the altered code is
compiled. A characteristic that, in particular, is true of Lisp
macros.

You continue to ignore this core point and nibble away at peripheral
matters and irrelevancies, which I take to be evidence that you are
unable to address the core point; in other words, that you are unable
to prove your position or to disprove mine.

An honest and fair-minded opponent might react to such a state of
affairs via a graceful capitulation. You, on the other hand, have
resorted to verbal violence. That is poor sportsmanship.
Open up your eyes, and tell us what you see.

I see a Firefox window containing a form with this post nearly ready
to send.
 
A

Alessio Stalla

Thomas said:
Seamus MacRae <[email protected]> writes:
[We'll ignore the fact that + in Common Lisp is not a generic function,
 but rather a built-in function that does coercion.  We'll also ignore
 the fact that complex numbers are built-in to Common Lisp, since
 neither fact affects the larger issue here.]
Now you can see where the problem will show up. If I want to add a
Complex noun, now I have to add a plus(Complex, Complex) to plus. Which
means I have to modify something in the system package. Uh-oh!
Well, this paragraph is great up until you get to "Uh-oh!".

Which means we have a second "uh-oh": the fact that Thomas A. Russ does
not consider it an "uh-oh" that someone has to modify something in the
system package. Uh-oh!
There is not "Uh-oh!" in Common Lisp at this point.  In fact, that it
precisely the point of all of this.  You can do this.  It is natural.
It is not a problem.  You just do it.

You just do it, and then your coworkers string you up by your toenails
and leave you hanging from the sprinkler head above the office Xerox
machine overnight.
Well, why not use a system that makes either one just as easy?

Because no such system exists. It would require needing to scope both
nouns and verbs separately, instead of the verb being disambiguated
based on the noun or vice versa so only one of the two needed
disambiguation by the programmer. Now the programmer has to worry his
head about both!

What if the package system scoped generic "names", and those "names"
could be used to refer to verbs, nouns, pronouns, etc. etc.? That's
what the CL package system does. It is not attached to function,
classes, methods, variables, ... it's relative to *symbols*, which can
name any of the above.
Yes. Instead of 84% of the job being easy and the other 16% of it being
hard, or 84% of it being hard and the other 16% being easy, 84% of it is
hard and the other 16% of it is also hard.


Easier to understand! You're a laugh riot. Java's basic language model
can be grasped in a day. You've spent more than a week attempting to
convey Lisp's to the people of comp.lang.java.programmer and have
apparently thus confused at least two of them and probably most of them.
Either you're all exceptionally bad at explaining things, down to the
last man, or Lisp is emphatically NOT "easier to understand".

I have the impression that those two people you're speaking about are
actively trying to remain "confused".
Because you have to monkey around in someone else's namespace and in
someone else's code to add quux.frobnobdicate() when there's already a
frobnobdicate verb and you're addign the quux noun.

I thought I'd explained this?

the method MY:frobnodicate(MY:quux) is different from
the method MY:frobnodicate(YOUR:quux) which is different from
the method YOUR:frobnodicate(MY:quux) which is different from
the method YOUR:frobnodicate(YOUR:quux)

this because in general MY:frobnodicate and YOUR:frobnodicate are two
different symbols. Ditto for quux.
Big mistake.

Why? I'm curious.
which is to say, about as easy as ascending Everest without any special
equipment or any clothing and living to tell the tale
Why?



The solution adopted by CLOS apparently being to make an object system
that gets in the way for EVERY class of problem!

Why? Give me an example, please.
See, for example, the demolition of your hammer and picnic blanket
analogy elsewhere in this thread.



I did no such thing. I only assumed that classes and/or
functions/methods live IN namespaces.

I assumed that there were three possible ways to resolve names:

package.class.method (perhaps with inheritance) (Java uses this)
package.method.class
package1.class.package2.method

that is, either packages namespace classes which namespace methods (Java
model), packages namespace methods which namespace classes (don't know
what uses this), or packages namespace both methods and classes.

You seem to be saying that Lisp does the last of the three.

No. In Lisp you have

package.symbol

and stop. This means there's no difference between

package.className and
package.genericFunctionName

except the fact that they're two different symbols. There's no
namespace associated with a class nor with a gf.

package.class.genericFunction does not make sense in Lisp. Neither
does package.genericFunction.class.
The problem, partly, is the combinatorical explosion of possible package
pairs in every invocation of a method when there are now two packages
involved in resolving every method invocation instead of one.

Regardless, there are no errors in my analysis. Ever.

Sure, and there are no bugs in my code. Ever. Guys, let's be
serious... :)
Equality of ease isn't the be all and end all. Making it hard in all
cases is worse than making it easy in some cases and hard in others, as
a general rule.

Making it easy in all cases is better than making it easy in some
cases and hard in others, as a general rule.
Heartburn macros upset stomach, dispatch tables diarrhea! Yay, Pepto-Bismol!



Nope. I'm a human being, not one of Pavlov's dogs, and the suggestion
otherwise is frankly insulting.


Perhaps that is the price of encapsulation and having a non-hairy name
resolution system. The amount of bug-hunting time saved by encapsulation
alone in the history of OO probably makes it worth it.



Make the utility class have subclasses and change the static method to a
polymorphic one. Well, it still can't be polymorphic in the arguments,
but it can still use the polymorphic methods OF the arguments.


It's going to be no matter what. If you want to add more classes and
more methods both, or more classes with dispatch of a two-argument
method based on the types of both parameters, then no simple inheritance
system is going to work and you'll have to manually specify what to do
for every possible pair ... somehow.

Or you can define a general case and specialize only the cases that
interest you, only for the "pairs" (or tuples) that make sense for the
problem at hand.
When it's one dimensional, you can use inheritance and have each
subclass take care of itself.

As soon as it's two-or-more dimensional, you can't. Some of the
information about class X or whatever is going to be scattered about,
and there's going to be something like a switch statement, pointer
array, or other explicit dispatch mechanism in the source code.

Maybe then it's not information about class X, but about classes X, Y
and Z. It is precisely this kind of thing that is easy to express in
CLOS and harder in Java (in fact, it is generally avoided in Java and
considered bad practice, but it can't be avoided in all cases, and
sometimes avoiding it causes a convoluted design).
Lisp just sticks you with this by default instead of letting the cases
that CAN be easy actually BE easy.



So you claim. Color me skeptical.

What reason on Earth would Thomas have to say it works fine if it
didn't? He's not trying to sell you anything. I (and him too, and
everyone else here, I think) am perfectly fine if you'll never use
Lisp, because Java fits you better. Languages are designed mainly for
humans. But if you confuse your personal preference with objective
truth, and write that "truth" in public, I - we - feel the need to
correct your claims.
Which changes the verb.

Adding a method to a class is changing the class, right?
Lisp methods live in generic functions instead of classes, right?
Ergo adding a method to a genetic function changes the generic function.

Yes, but only with respect to the types on which the method is
specialized. You don't change the behavior of the "verb" for other
kinds of "nouns".
(Subclassing a class doesn't change the base class. But subclassing a
class creates a new class that has its own name and is in its own
package. Adding a method to a generic function does not create a new
generic function that has its own name and is in its own package. It
adds to the existing generic function instead, thus changing it.)

Subclassing a class DOES change the class, if you intend "class" as
the set of all possible instances of that type. Consider:

class A {
int method() { return 42; }
}

calling method() on ANY instance of A will ALWAYS return 42.

Then you add:

class B extends A {
int method() { return 25; }
}

and now, calling method() on instances of A will return 42 in some
cases, 25 in others, due to runtime dispatch.

That's the same with CLOS:

(defgeneric f (arg))

(defclass A () ())
(defmethod f ((arg A)) 42)

(defclass B (A) ())
(defmethod f ((arg B)) 25)

Only difference, CLOS does runtime dispatch on all arguments and not
just one in particular (the implicit one before the dot in Java).
Your coworkers are going to have SO much fun trying to guess where you
put everything.

Not if you follow some convention in your team. This is not specific
to Lisp, conventions are needed in every language that allows more
than one way to do the same thing (IMHO, every serious language).
Yes ouch.


I have misunderstood nothing. According to you, Common Lisp programs are
organized at the whims of individual programmers. Not conducive to
scaling up to a large development team, mind you.

Only if you let individual programmers do it at their whim. Just as if
there wasn't no convention among Java programmers in a team on how to
name packages, for example.
etc. etc. etc.

I think I've had quite enough of being insulted by you.

The rest of your text has been deleted unread, with one small exception.



So instead of everything you can "close" having a "close" method, you
end up "close"ing one type, "shut"ting another, "slam"ming a third,
"plug"ging a fourth, and onward to increasingly unintuitive and
unguessable names? Wow, that must REALLY help code readability.

No. You'll have a streams:close, a doors:close, a mouth:close, ... if
they're really different verbs (for example, take completely different
parameters). Then, you'll have specializations of the verbs for
related nouns, for example

streams:close(file-stream)
streams:close(network-stream)

etc.

Alessio
 
A

Alessio Stalla

Personal attacks such as this will not help you to rationally address
the issues that I have raised. You will need to discuss the issues
themselves, not your personal opinion of me, in order to successfully
address those issues.



If you'd only focus on the subject matter of the discussion, instead of
being distracted uselessly by your uncharitable thoughts and
*suspicions* about other people here ...



I am not. It started with "defgeneric".



Indeed, it seems inheriting from a class gets you very little in Lisp.

It gets you more or less what it gets you in Java:

- the subclass intherits the slots (fields) of the superclass
- the methods applicable on the superclass are also applicable on the
subclass
- the subclass can have its own slots
- the subclass can have methods specialized on it
In Lisp, you gain access to no namespace;

Because there's no need to, since namespaces are not tied to classes.
you can break its encapsulation anyway,

You can in Java too, using reflection.
and you can have polymorphic dispatch anyway;

And this is a Good Thing.
and there is no is-a type relationship enforced by the compiler.

There is a "is-a" relationship. The compiler does not enforce it due
to dynamic typing, but that's another story.
About all you get is the least useful OO feature: inheritance of unoverridden
base-class methods.

Read carefully what I wrote above and ask yourself if your statement
above is true.

Cheers,
Alessio
 
S

Seamus MacRae

Joost said:
have you even bothered to look at the screen shots? you'd have noticed that
a) it's *not* unadorned, b) it's not courier

The ability of the xterm to use a different font, or of the emulated
terminal to display inverse video or similarly, does not suffice to
enable a WYSIWYG word processor to exist within it.
and it's *not* a terminal emulator.

Actual terminals are even more constraining than their emulators.

[some purely nonsensical statements trimmed]
What the hell terminal type does italics?

stop being (deliberately? unintentionally) ignorant. [most of rest of
post deleted]

I have little interest in continuing this if you will not be civil and
polite.

oh? before, having both seemed to you like the best of both worlds. now
it's suddently the worst...

Having both, yes; you have neither, if, as you have stated, the
formatting codes are (partly) hidden and the "WYSIWYG" is not actually
WYSIWYG.
sure, emacs doesn't give both next to each other

and sure, it's not *exactly* as it will look on paper

In other words, it's just what I asked for, except for being nothing at
all resembling what I asked for.
that's not ascii art, that's a png image.

A png image cannot appear inside an xterm. Any screenshot purporting to
display such an occurrence is therefore presumptively a digital fake.
on the relevant menu items.

What menu items? The terminal emulator's? Those will provide only a few
limited capabilities to terminate the attached process, capture
screenshots or visible text, and possibly (though this won't be useful
running a screen-oriented editor) access a backscroll buffer, with maybe
one or two other minor doodads.
well, surprisingly, i *was* only thinking about features that would come in
handy for an IDE, such as the list of netbeans features that you claim
emacs cannot do.

The visual diff viewer falls within that set, as has already been
explained several times. It cannot be effectively emulated inside of an
xterm or any similar environment.
given the graph and tree structures i've seen emacs do in different
packages, i don't see why this would be principally impossible.

ASCII approximations to function graphs, using for example the
characters \|/-, will not be an acceptable-quality substitute for true
graphics.
if emacs *were* still just a grid of letters, numbers and puncuation, you'd
be right.

Well, of course it is. It's a text editor. Even Notepad and other GUI
text editors are essentially just grids of letters, numbers, and
punctuation, only with editor-specific menus above them instead of
generic terminal-emulator menus.
i'm not saying that emacs already has the necessary graphics processing
capabilities for a quake mode, but you're free to add them, if you wish.

Since it has no graphics processing capabilities worthy of the name, nor
is it capable of acquiring them, this is essentially a vacuous statement.
well, you seem to think that emacs is just a text-mode application

Well of course I do. It was written in 1970 for crying out loud! There's
nothing else that it COULD be.

[trimmed another batch of insults]

The uncivil parts of your posts are a waste of my time and yours. Please
don't bother with them again, as I will merely ignore them.
 
A

Alessio Stalla

Yes, Sir, I can see what you want me to see here. With all due respect,
Sir, I will not agree with you on this one, Sir.

Your behavior is not respectful, though. Least of all your attempts to
misdirect my replies. With the Acrobat Reader post, you even asked me a
question and set it to omit my reply from comp.lang.java.programmer; had
I not fixed that, I would not have ended up seeing a subsequent reply by
you. And here for no logical reason you tried to hijack my reply to
comp.lang.c, where none of this is relevant.

What is the MATTER with you?
[irrelevancies deleted]

My statement stands. A full-fledged IDE requires things around and to
the sides of the source edit pane.

A generic full-fledged IDE, or just the particular kind of full-
fledged IDE you're accustomed to?
It seems that all your arguments against Emacs reduce to this - that
it hasn't got "things" around the "source edit pane". Interesting... :)
 
S

Series Expansion

Then why don't you try to learn about Lisp?

I have learned enough to have raised several objections that you have
failed to adequately address.
If I told you that both Lisp and Java had classes and a package system,
that would by no means justify the conclusion that they're the same.

This statement, though true, is irrelevant.
Thus, to understand Lisp macros, packages, and CLOS, you should look
into how they're different from C macros, Java packages, and "noun-
based" object systems.

I do not need to. In the case of macros, it sufficed for me to look
into one particular similarity: that a macro invocation is replaced
with some code, inside which placeholders are replaced with copies of
the call's arguments, and then the result of the substitution is
compiled.

My concerns regarding macro use derive entirely from this one fact,
which you have not denied is true of Lisp macros.

Since my concerns do not hinge upon the macros in question having any
particular other feature than that one, and Lisp macros have that one,
my concerns are applicable to Lisp macros.

To address my concerns logically, you must actually address the
concerns themselves. Saying that "Lisp macros are different"
repeatedly does not constitute a logical argument, particularly when,
with respect to the salient feature described above, Lisp macros are
not different.
I hope you understand why.

I do not. My expertise lies in areas other than group psychology.
You really have ignored many arguments and links put forth by people

I have done so when they were irrelevant, which occurred often. If you
wish me to pay more attention to something, you should endeavor to
make it relevant and then I shall in all likelihood do so. Meanwhile,
responding with posts that are even less relevant, such as ones full
of insults, shall tend have the opposite effect.
You haven't even said something along the lines of "I read xyz,
but I'm still confused about how generic functions frobnobdicate their
quuxmagogs... clarifications plz?"

Generic functions are irrelevant to the matter at hand, namely,
macros. Therefore it is unsurprising that I have not said much about
them.
There have been very few erroneous beliefs about Java posted here.

I counted at least six. However, there were numerous repetitions of at
least some of them.
In fact, the only one I can think of is MINE, where I implied
(although didn't explicitly say) that I believed you couldn't have a
heterogenous list in Java. I stand corrected now.

That was one of the six, and it occurred a few additional times,
though perhaps not from you. The others, as I recall, were:

1. assertions that Java is slow;
2. assertions that Java programmers are, on average, incompetent;
3. assertions that Java is bloated;
4. assertions that Java code looks like vomitus; and
5. assertions that Java lacks ways to bypass type-checking in
contexts other than heterogeneous lists.

Of these, only the third is remotely plausible. The large size of the
standard library is an asset, not a liability. The verbosity of the
code is occasionally unfortunate, but more often contributes to that
code being self-documenting. Finally, Java's propensity to consume a
lot of memory at runtime causes scaling problems at the low end of
application size, but is an unavoidable requirement of a garbage-
collected system in order to be time-efficient, and this tradeoff is
therefore equally applicable to Lisp.
Many of what you've interpreted as erroneous beliefs about Java were
in fact statements about the process of coding in a language that
doesn't have xyz Lisp feature, most often Lisp macros.

Those statements were proven to be incorrect.
Specifically, the comments in response to "Java is turing-complete, so
it can do anything Lisp can" were not to contest that FACT.

As I recall, it was the Lisp side that initially raised the issue of
Turing-completeness, with an insinuation that either Java was not, or
Lisp systems contained an oracle.
They were to point out that between two turing-complete languages,
one can still have more power.

Power is not the sole measure of a language. Indeed, it often trades
off with readability and modularity. Both of the latter are important,
but especially so the larger the development team, as has been pointed
out by Seamus MacRae. Moreover, modularity makes fault isolation far
easier to perform, and reduces the defect rate to begin with. Well-
specified interfaces between components such as classes will act as
shock-absorbers, greatly reducing the tendency for changes in one part
of the code-base to have unintended consequences in others. For this
to occur, encapsulation is a must, and power and encapsulation are in
direct opposition.

The conflict between power and readability arises somewhat
differently, although well-specified interfaces between well-defined
components can improve readability. More significantly, having a large
number of different language constructs serving essentially the same
purpose increases the amount of entropy in the source code without a
corresponding increase in the amount of meaningful program semantics,
as the particular choice of alternative constructs at each site begins
to require several bits of information to specify. This extraneous
entropy represents noise, and readability always suffers as the noise-
to-signal ratio rises.

A recent post by Seamus MacRae remarks upon this in another way, with
an unflattering comparison to perl, whose numerous concise ways of
doing things results in code that resembles the consequences of a
catastrophic keyboard failure and requires extreme expertise to
interpret. The end result of excessive proliferation of language
constructs thus tends to be unmaintainable code.
It takes much less time to write a working Lisp program

This is an excellent example of an assertion unsupported by evidence,
of which you have made so many over the past few days.

Furthermore, it places all of its emphasis upon the initial creation
of the program, and none whatsoever upon the subsequent maintenance of
that code, or upon its reusability or integrability with other code in
the future.
(benchmarks are quite clear here)

This, of course, does not constitute a credible citation. You would
not get away with this at Wikipedia.
 
S

Series Expansion

Adlai said:
Specifically, the comments in response to "Java is turing-complete, so
it can do anything Lisp can" were not to contest that FACT. They were
to point out that between two turing-complete languages, one can still
have more power. It takes much less time to write a working Lisp
program (benchmarks are quite clear here), and yes, I'm talking about
full developement, including debugging. Here's a comparison:
programming in C is turing-complete, and so is writing by hand a state
diagram for a turing machine that does the same things as that C
program. But wouldn't you rather just write in C? To bastardize
Orwell: "All [languages] are [Turing-complete], but some [languages]
are more [Turing-complete] than others."

It is likely that answering "Series" is not going to be fruitful.

It is quite certain that posting personal attacks is not going to be
fruitful.

As for what Adlai wrote, it is not going to be fruitful but the reason
for this is the lack of supporting evidence or citations for the
assertions that it makes.
 
A

Alessio Stalla

Yes really, unless you're going to change your claim.


seems to me to imply that the code at the bottom is the Lisp analogue of
"import foo;". Are you saying that this was an error, perhaps even a lie?




Apparently you are saying that.

Yes, apparently I'm saying that. So? :)
Arguing with a side that contradicts itself and changes the "rules"
every time it's pressed quickly gets tiresome.

That's because the concepts are similar enough between Lisp and Java,
yet not completely equal.

Let me explain:

package myPackage;

in Java does 2 things:

1. declares that package myPackage exists
2. declares that the code in the current file is to be considered
inside package myPackage.

import foo.*;

in Java means: the symbols in package foo can be accessed unqualified.

(defpackage :my-package
:)use #:cl #:foo))

in Lisp does 2 things:

1. declares package my-package exists
2. declares that all symbols from packages :cl and :foo are also in
package my-package (and thus can be accessed unqualified when code is
read in package my-package)

(in-package :my-package)

in Lisp means: the symbols read from now on in this file will be read
in package my-package.

As you see, the place where you say which symbols from other packages
are unqualified is different between Lisp and Java, and this probably
is where confusion arises.

hth,
Alessio
 
K

Kaz Kylheku

Personal attacks such as this will not help you to rationally address
the issues that I have raised.

I, for one, would gladly address some those issues, but I can't do that without
a reference manual.

Is there a website where I can download, or read online, the specification of
Seamus MacRae Lisp?

I'm not comfortable spouting off about languages I don't know anything about.
 
D

duane

Arguing with a side that contradicts itself and changes the "rules"
every time it's pressed quickly gets tiresome.

I may not bother much longer.

Yes, please, leave us stupid Lispers to our own ignorance.

Duane
 
S

Series Expansion

What's an entire job?  If the Lisp programmer implements and maintains
the DSL's for a big project, and 1000 other programmers use those DSL's
as the foundation of that project, do you consider the DSL's an entire
job?

If the DSL is essentially a separate library, yes. If it's not, no.
When a huge team of programmers works so closely together that they
interfere with each other, the result is usually not worth a tiny
fraction of the cost.  Is that the "commonplace" you're thinking of?  
That's the reality of a lot of big projects.

Language support for modularizing, encapsulation, and rapid location
of bugs can make a big difference. Also for documenting things and
encouraging readable code.

As a result you see a lot more successful large Java projects than you
do perl ones, in particular.
They should be separated into specialized groups, and when the work of
one group affects the work of another, it should make that work easier
and more effective, and not interfere with it.  That's one thing DSL's
do.

In principle. In practice, the absence of much encapsulation in Lisp
is going to pose problems as everyone is tempted to, and able to,
tweak things just *slightly* to ease their own task of the moment, and
eventually the tweaks become divergent or incompatible in some way.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,436
Messages
2,571,696
Members
48,796
Latest member
Greg L.
Top