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

J

Jerry Gerrone

Jerry said:
Seamus MacRae wrote:
Lars Enderin wrote:
Seamus MacRae wrote:
You're right though about the productivity of this debate. It's like
evolutionists vs. creationists: one side has logic and evidence on
its side, the other unshakable faith, and neither will budge. We'll
never give up our logic and evidence and apparently you'll never give
up your faith. And since there are no important public policy issues
at stake, your continuing to argue is pointless.
It's ironic, really, that when you write something which seems to make
sense, [numerous insults deleted]
Who are you, and what is the point of this unprovoked drive-by flaming?
The point is to expose you as a [insult deleted].
And unless you really are a [insult deleted], you know me through
your other aliases: Twisted, Jerry Gerrone, etc, etc.
No. Seamus is not me and none of the nasty things that you have said
or implied about me are at all true.

I find it difficult to believe that there could exist more than one
person (in Canada) with your particular [insults deleted]. It's a
kind of Occams's Razor reasoning. The alternative, that there are
several [insult deleted] like you, is quite horrible to contemplate.

No, you're the crazy one.

None of the nasty things that you have said or implied about me are at
all true.

Besides, who said Seamus was in Canada? I don't see any claim of this
by anyone except you, nor any evidence to support it.
 
S

Seamus MacRae

Alessio said:
There cannot be anything that looks like CLOS but is not CLOS

Patently false. When CLOS was being developed, at some point CLOS was in
a working state but not in its final form yet. This would constitute
legal CL code (else it wouldn't have been a working state) that looks
like CLOS but is not (quite yet) CLOS. Also, if a design decision had
been made slightly differently, the CLOS library would have been
slightly different, and this would have been legal CL code, resembling
our universe's CLOS, but not quite the same.

A conforming CL implementation obviously must accept all legal CL code.
I have proven from the fact of CLOS's own successful creation that
CLOS-resembling code that's not quite CLOS must exist in that set.

Or think of it this way: at some point relatively late in the
development of CLOS, there was some spot where they could have done
either X or Y. Suppose they did Y, and that led to CLOS. If you took the
same set of tools and compilers, developed a clone identically up to
that same point, then did X and continued from there in some logical
manner, you'd end up with a para-CLOS resembling CLOS that also would
compile and run on those tools and compilers.

Which we assume are compliant with the CL standard.

Ergo, a compiler that will not compile a runnable para-CLOS is not
compliant with the standard.

So either you are wrong here, or no compilers are compliant with the CL
standard anymore! (And which of these possibilities seems more plausible?)
when the compiler sees a call to CL:DEFCLASS, for example, it can
safely assume it's a CLOS class declaration.

As I have just proved, it cannot, though it can optimize for the common
case that it is such a declaration, unless it is not standards
conformant -- and, in particular, nonconformant in the severe manner of
rejecting code that would have been accepted by the implementation the
CLOS developers were working on when CLOS was first being written.
 
A

Alessio Stalla

Exactly my point: you no longer get this assignability from inheritance,
because you have it even without.

So, inheritance does not give you something you already have. Well, I
don't see it as a problem of inheritance :)
It does mean inheritance isn't required to get it.

Your original claim was that "inheritance gives you very little". Not
that "inheritance is not required for enough things".
No, just having a dispatch in a generic function in each class suffices.
They needn't be related at all.

No, because A inheriting from B means that all methods applicable to B
are automatically also applicable to A, and you don't get this without
inheritance.
WHAT "runtime is-a behavior"? I've just run down the list. Can assign to
variables that can hold an X: in CL you can do so without inheriting
from X. Can have a method dispatch to different versions depending on
whether some argument is an X or an instance of your class: in CL you
can do so without inheriting from X. Can access protected methods of X:
in CL there are no "protected" methods, so moot.

- you inherit slots.
- you inherit methods.
- you answer 'yes' to 'am-I-subclass-of' questions.
- you answer 'yes' to 'am-I-subtype-of' questions.
Fully qualify.

In other words, there is no real "private". Anyone can access anything,
even without using reflection or something equally hairy that says
"Danger -- use sparingly" with its awkwardness.

So much for encapsulation.

There is, it's only easier to circumvent if you want to.
Java doesn't allow you to access a private field inadvertently with a
single slip of a finger.

Java itself doesn't, but many Java libraries can and do freely access
private fields (e.g. Hibernate, JAXB). Making them much less "private"
than they are, imho.
In their optimizations. As explained elsewhere, they can do little else
without risking breaking other legal CL code, including very likely any
implementation of a CLOS-like object system that was slightly different
from CLOS.

What else should they do besides optimizations? Are you referring to
type checking?
Yes, it was three times. It is now four, but it was three at the time
that I wrote that.



Unless you did the appropriate defgeneric, defmethod stuff to create a
specialization of m for c2 "the hard way".

No. No. No. You CANNOT automatically have an existing method work on
your class WITHOUT inheritance. The only "hard way" is COPY-PASTING
the existing method and specializing it for your class - ugh. Better
use inheritance, no?
Writing them is what I was referring to.

Well, then I don't use any other means.
And must you randomly write the same identifiers in all-caps sometimes
and not others?

I write them in all-caps when I want to stress they're identifiers.
Maybe I should always write them in all-caps, but I don't always
remember to.
 
S

Seamus MacRae

Kaz said:
I'm a comp.lang.lisp regular, and most of the names behind these jabs and pokes
are completely new to me.

It is a well-known fact that, however they might be disavowed by its
mainstream, the extremists of a movement have a tendency to tarnish the
image of that movement if they act in a violent or otherwise uncivilized
manner.

It therefore is wise for those participating in a movement to try to
keep their own side's extremists in check, lest they give them all a bad
name.
For instance, let's see, looking at Arne's posting history on Google Groups,
it's concentrated Java and C# newsgroups, and in a small sample of it
I have not discovered Lisp advocacy.

I just did the same check. It seems he has a tendency to flame people
throughout comp.* and has had for years. He mixes these with a
smattering of on-topic posts, which probably prevents him losing his net
access for being a tosser. (A spot-check of 20 randomly selected posts
of his had 7 presumptively on-topic-and-useful posts across four grouos,
two in comp.lang.java.programmer, and 13 flames and otherwise off-topic
posts. Two were bitching about some spam. Seven were in a single thread
in comp.lang.java.programmer and were flames; the thread has over 5000
posts and Google needed some coaxing to display it, at first insisting
that the thread did not exist. The other four ranged from rude and
snappy replies to various newbies in newsgroups to outright flames.
[Nice to meet you, Arne.]

To judge by his posting history and my own recent experience, no, it is
not nice to meet Arne.
It looks like you're attracting jabs and pokes from your
comp.lang.java fellows.

They probably don't like that this thread is largely about Lisp now, and
hence off-topic there.

Unfortunately, I've been publicly badmouthed there and so I must
publicly respond there to explain why I'm actually in the right here, so
they will have to either ignore or learn to tolerate the off-topic posts
until this dies down. Posting their own flames in here will only prolong
matters, as I end up having to respond to those, too, and some of them
draw yet more responses like this latest one drew a reply from you.

Double unfortunately, Arne appears not to be the tolerant type. If he'd
just set his newsreader to mark this thread read automatically, we'd all
be a lot happier.
 
S

Seamus MacRae

Tamas said:
Well, at least Photoshop has macros :)

Paul Foley is being ridiculous here. I never claimed to know "far more
about Lisp", nor that CLOS didn't work, only that I didn't know
*nothing* about it and that CLOS is in some ways clunky.
 
K

Kaz Kylheku

Any valid CL code has to compile flawlessly and run to spec. When CLOS
was developed as a CL library, it was made of valid CL code.

When CLOS was in this state, that was long ago. Today, it's part of the
language spec.
Design decisions were made in the process, that could perhaps have gone the
other way. Now suppose someone makes a clone of CLOS but changes one of
those design decisions and diverges things from there? The result, we
assume, is valid CL code, and moreover, this para-CLOS resembles CLOS,
with parts probably being identical.

The CLOS in a modern Lisp implementation is no longer just a bunch of portable
CL code; it is deeply integrated.
If the compiler assumes that
anything that "looks like" CLOS is CLOS

The compiler is a computer program, not a guessing moron by the name of Seamus
MacRae. It isn't guided by vague impressions of what something looks like.

The situation you describe is impossible (or rather would be the result of a
stupendously spectactular implementation bug).

You can't redefine standard Lisp macros and functions. Doing so renders the
program nonconforming to the ANSI Common Lisp standard. If you want to have a
parallel CLOS whose elements are named by symbols which are similar to those of
CLOS, it has to live in its own package.

So you end up with, say, MYCLOS:DEFCLASS, which is a completely different
symbol, not in any way related to COMMON-LISP:DEFCLASS.

There is no way that the Lisp implementation could mistake PCL:DEFCLASS for the
real DEFCLASS.

You're again making up bullshit and presenting it as fact.
 
S

Seamus MacRae

Kaz said:
On 2009-05-22, Seamus MacRae <[email protected]> wrote:
[snip]

Please stop posting five minutes after I post. Post, then wait a day or
so. That way maybe I'll actually be able to get caught up.
When CLOS was in this state, that was long ago.

Time is irrelevant. Valid CL code is valid CL code.
The compiler is a computer program, not a guessing moron by the name of Seamus
MacRae.

**** you. Rest of post mostly deleted unread.
You can't redefine standard Lisp macros and functions. Doing so renders the
program nonconforming to the ANSI Common Lisp standard. If you want to have a
parallel CLOS whose elements are named by symbols which are similar to those of
CLOS, it has to live in its own package.

If this were true, then it would have been impossible to create CLOS in
the first place.
You're again making up bullshit and presenting it as fact.

No, you're the liar. You will keep your attitude in check and remain
civil in the future, or every time you are not I will remind you, and
everyone, that you are a liar. (The lie you told having been the last
quoted line above.)
 
S

Seamus MacRae

Alessio Stalla wrote:
[snip]

Please stop posting five minutes after I post, in the interests of
letting me get caught up so I can move on to other tasks. I do have
other things to do than defend myself against you and your pals, you
know, and it is disrespectful to keep me jumping like this without any
time to even catch a breather. Furthermore, please try to limit your
posts to a reasonable length. This one isn't as ludicrously long as some
of your recent posts have been, but it isn't exactly short either.
So, inheritance does not give you something you already have.

But I've just demonstrated unequivocally that (in CL) it does.
Your original claim was that "inheritance gives you very little".

Yes, and we've established that it gives you what, access to superclass
fields? And that's it. Everything else can be had elsewhere.

Yes.

Just give each method of A a version in B as well and away you go.
- you inherit slots.

Maybe do need inheritance for this.
- you inherit methods.

Can get methods in other ways, and retain polymorphic dispatch.
- you answer 'yes' to 'am-I-subclass-of' questions.
- you answer 'yes' to 'am-I-subtype-of' questions.

Can no doubt get that in some other way as well. Hopefully don't need to
-- those are similar to Java instanceof, which it's recommended one
avoid unless it's absolutely necessary.
There is, it's only easier to circumvent if you want to.

And it's coarse-grained as hell.
Java itself doesn't, but many Java libraries can and do freely access
private fields (e.g. Hibernate, JAXB). Making them much less "private"
than they are, imho.

Perhaps those libraries are poorly designed. There are alternatives that
do their jobs, though, and you're not stuck with them. With CL, you are
stuck with ::.
What else should they do besides optimizations? Are you referring to
type checking?

Among other things.

Various niceties that users of Java and similar programming languages
have come to expect from their tools over the years.

Scoped name autocomplete in IDEs. Certain trickier optimizations. Doc
generation. Lots of stuff like that.
No. No. No.

Yes. Yes. Yes.
You CANNOT automatically have an existing method work on your class
WITHOUT inheritance.

Who said anything about "automatically"? You snuck that in there to try
to move the goal-posts, didn't you? Because I certainly don't recall
stipulating "automatically" anywhere.
The only "hard way" is COPY-PASTING the existing method and
specializing it for your class - ugh. Better use inheritance, no?

Maybe. Strictly necessary? No.
Well, then I don't use any other means.

OK, then.
 
A

Alessio Stalla

Patently false. When CLOS was being developed, at some point CLOS was in
a working state but not in its final form yet. This would constitute
legal CL code (else it wouldn't have been a working state) that looks
like CLOS but is not (quite yet) CLOS. Also, if a design decision had
been made slightly differently, the CLOS library would have been
slightly different, and this would have been legal CL code, resembling
our universe's CLOS, but not quite the same.

A conforming CL implementation obviously must accept all legal CL code.
I have proven from the fact of CLOS's own successful creation that
CLOS-resembling code that's not quite CLOS must exist in that set.

Or think of it this way: at some point relatively late in the
development of CLOS, there was some spot where they could have done
either X or Y. Suppose they did Y, and that led to CLOS. If you took the
same set of tools and compilers, developed a clone identically up to
that same point, then did X and continued from there in some logical
manner, you'd end up with a para-CLOS resembling CLOS that also would
compile and run on those tools and compilers.

Which we assume are compliant with the CL standard.

Ergo, a compiler that will not compile a runnable para-CLOS is not
compliant with the standard.

So either you are wrong here, or no compilers are compliant with the CL
standard anymore! (And which of these possibilities seems more plausible?)


As I have just proved, it cannot, though it can optimize for the common
case that it is such a declaration, unless it is not standards
conformant -- and, in particular, nonconformant in the severe manner of
rejecting code that would have been accepted by the implementation the
CLOS developers were working on when CLOS was first being written.

An awesome example of proof-by-fantasy.

CLOS was a library, and then it has been standardized. Of course the
current CL compilers don't know anything about CLOS-the-library; they
do know about CLOS-the-part-of-Common-Lisp, though. What is so strange
about this?

By your line of reasoning, the compiler could not know anything about
those parts of CL implemented in CL! And those are quite a lot in most
implementations.
 
S

Seamus MacRae

Alessio said:
An awesome example of proof-by-fantasy.

No, it's called proof-by-logic. Oh, I forgot, apparently they don't have
logic where you come from.
CLOS was a library, and then it has been standardized.

This is irrelevant.

Let's start over from the beginning.

First, there is a Standard. The CL Standard. This Standard has existed
for most of CL's history.

Then there are compilers. Compilers that conform to The Standard must do
certain things. In particular there is a set of possible source files
they must accept as valid and compile without error. Some subset of
these compile to binaries that, when run, will do something useful.

Now, CLOS started as one set of such source files. Obviously these were
ones that The Standard considers valid.

Furthermore, there must be a lot of other possible valid source files
"close to" those ones in some sense, many of which would produce
CLOS-resembling object systems that worked okay. Anything that could
plausibly have been CLOS itself had the development team done some
things slightly differently will be among them. So will incomplete but
working-with-some-features-missing pre-1.0 versions of the CLOS that
actually got made. All of these are necessarily valid according to The
Standard.

And therefore conforming CL compilers must accept them all, because The
Standard says they must.

Still with me?
By your line of reasoning, the compiler could not know anything about
those parts of CL implemented in CL! And those are quite a lot in most
implementations.

That's not the same. Those parts were developed before The Standard was
finalized, when the language itself was still being developed. So when
The Standard was created, on whatever date it was created, it could take
those parts into account. But it predates CLOS.
 
K

Kaz Kylheku

["Followup-To:" header set to comp.lang.lisp.]
Pillsy said:
Pillsy wrote: [...]
Your lucid writing

almost makes up for your hypocrisy and willful ignorance.
But no thanks. None of that's true of course.

OK, fine: your crappy writing does nothing to make up for your
hypocrisy and willful ignorance.

More stupid ad hominems.

Now go look up what the ad hominem fallacy actaully means.

Recognizing that your opponent in a debate is a pitiful moron is not the ad
hominem falacy.

Ad hominem means that you weave irrelevant facts from someone's background
into an argument against him.

That you're willfully ignorant is not an irrelevant fact about your background.
 
D

duane

Oh, nevermind. It's wacky, you like it anyway, I don't, and that's the
end of the matter. There's really little point in continuing this.

I doubt it. You don't have the discipline not to continue it.
Let's tick things off shall we? One. More. Time.

Again, I doubt the "One. More. Time." aspect. It's been pretty
obvious for a long time that you don't know Lisp, and you yourself
have stated that you don't care about learning it. This thread has
not been about Lisp or Java for a very long time. Instead, it's been
about control, and your attempt to control a conversation. But the
joke's on you; the control belongs to the others who answer your
posts. Here's why: everyone has a choice to answer or not answer your
posts. Many choose not to answer. A few do answer. However, you
have no choice; you are compelled to answer every post that you feel
is an insult to you. If you did have a choice, you would choose to
not answer some of these posts, but you can't do it. Therefore, it is
the others who control your behavior, and not the other way around.

Duane
 
D

duane

Alessio Stalla wrote:

[snip]

Please stop posting five minutes after I post, in the interests of
letting me get caught up so I can move on to other tasks. I do have
other things to do than defend myself against you and your pals, you
know, and it is disrespectful to keep me jumping like this without any
time to even catch a breather. Furthermore, please try to limit your
posts to a reasonable length. This one isn't as ludicrously long as some
of your recent posts have been, but it isn't exactly short either.

I just answered another of your posts, and this precisely demonstrates
my point there; you are not in control in this conversation, but are
trying to be. But you can't help yourself; you must post, and here
you are complaining that others are keeping you jumping. In reality,
nobody is doing any such thing; any jumping you are doing you are
doing all on your own. If you truly want control, then take control,
including control over the urge you have to answer every argument and
to answer every argument quickly. It will do your health a world of
good.

Duane
 
K

Kaz Kylheku

["Followup-To:" header set to comp.lang.lisp.]
It's mysterious /to you/ because you refuse to learn anything at all
about Common Lisp (even the things that people tell you directly, that
don't even require you to go the trouble of clicking a link), claiming
you just know everything there is to know by virtue of your infallible
logic. See how that doesn't work out?

#:foo is how you write a symbol named foo that isn't in any package.

Not quite.

The notation means that FOO doesn't have a home package, not that it isn't
present in any package.

However, the situation of a symbol with no home package which is nevertheless
present in some packages is rare, and not easy to create. You see whenever a
``homeless'' symbol is imported into a package, it is ``rehomed'' to that
package.

So we have to enter a symbol into two packages, and then remove it
from its home one.

Define a pkg package:

[1]> (defpackage :pkg)
#<PACKAGE PKG>

Intern a new symbol foo in pkg; pkg becomes its home package.

[2]> (intern "FOO" :pkg)
PKG::FOO ;
NIL

Import that symbol into the current package (cl-user):

[3]> (import 'pkg::foo)
T

Now blow it out of the pkg package, which is its home.
The symbol is now homeless.

[4]> (unintern 'pkg::foo :pkg)
T

Foo is still interned in the current package, and we can refer to it without
qualification. What is its print syntax?

[5]> 'foo
#:FOO

:)
 
L

Lars Enderin

Seamus said:
Lars said:
Jerry said:
Seamus MacRae wrote:
Lars Enderin wrote:
Seamus MacRae wrote:
You're right though about the productivity of this debate. It's like
evolutionists vs. creationists: one side has logic and evidence on
its side, the other unshakable faith, and neither will budge. We'll
never give up our logic and evidence and apparently you'll never
give
up your faith. And since there are no important public policy issues
at stake, your continuing to argue is pointless.
It's ironic, really, that when you write something which seems to
make
sense, [numerous insults deleted]
Who are you, and what is the point of this unprovoked drive-by
flaming?
The point is to expose you as a [insult deleted].
And unless you really are a schizo, you know me through your other
aliases: Twisted, Jerry Gerrone, etc, etc.

No. Seamus is not me and none of the nasty things that you have said
or implied about me are at all true.

I find it difficult to believe that there could exist more than one
person (in Canada) with your particular blah blah blah blah blah blah
blah

Who said I was in Canada? Whoever it was ought to try asking me instead
of making wild guesses next time.

Your email is (e-mail address removed).
Could be as much of a fake as yourself, of course.
 
T

Thomas M. Hermann

Oh for Christ's sake. I meant, what I don't have is a Lisp text. So
"there is nothing for you to have or not have" was wrong. Who wrote that
anyway? Oh, you did.

Stop being intentionally dense, admit it, and move on already.

I'm not being intentionally dense. It was inconceivable to me that
when you replied "Don't have one, sorry." that the one you referred to
was a Lisp text, because you had been repeatedly given references to
freely accessible Lisp texts including the language standard. Next, I
connected "one" to a problem and in no way wished to imply that you
had a problem for fear of you thinking I was making a personal attack.
On reflection, it probably would have been most appropriate for me to
connect "Don't have one, sorry." with an interest in understanding
Lisp.
Then you might as well quit arguing!

I am not arguing. I have only posted information and links to Common
Lisp references in the attempt to resolve misunderstandings about
Common Lisp. Well, now, I suppose I am arguing that I'm not arguing,
but it's more a clarification than an argument.
More intentional density. I meant, of course, that if your disagreement
is really with gugamilare or any other non-me person, then you can
express that in replies to their posts and leave my name out of it!

Oh, I do not have a disagreement with gugamilare, nor you for that
matter. I only wish to help people in this discussion understand
Common Lisp. The best way I know of helping you understand Common Lisp
is directing you to suitable references so that you can explore it for
yourself.
Is this a way of saying "no comment" without actually saying "no
comment", which has acquired a connotation of "guilty but not admitting
it" after decades of scandal-embroiled politicians using it? :)

No, it's a way of saying that I hope the information and
clarifications I provided helped you in your understanding of Common
Lisp and in our communication.

Hope that helps,

Tom

P.S. I noticed that you selectively clipped the quotations of my
responses without noting that they were clipped. In some cases, the
information you neglected to quote was important context for the
conversation. Just as you do not appreciate being selectively quoted,
neither do I.
 
A

Alessio Stalla

So now you're disagreeing with *yourself*? Well, I guess you might
sometimes change your mind about one of these things, but still, the
timing in this case was atrocious!



But it wasn't. Or else the later one wasn't correct. You can't have it
both ways! Either they all go into one name-resolution pool or they
don't; they can't both do so and not do so at the same time.


So, the earlier post WAS incorrect.


Not consistent. Either the former or the latter is false. I think you
have package and namespace confused, and the package actually has a
separate namespace in it for each of several kinds of thing. In other
words, it doesn't just have symbols, it has methods separate from
variables separate from classes etc.; it has some notion of which of
these is which and keeps them tidy.

No, I don't. Packages in Lisp are name-spaces: spaces of names, sets
of names. They contain - names. Just names, nothing else. Really.
Names can refer to many things. They can have many meanings attached.
But those meanings are not attached using packages.

The same is true in Java, somehow, too: if you use a Class as a
namespace (classes are indeed namespaces in Java, though not the only
kind of namespace).
class.getField("foo") returns a field, class.getMethod("foo") returns
a method, yet the name is always "foo". See? Lisp works like this.
When in Lisp you use the symbol foo where a variable is expected, the
compiler uses foo as a variable name; when you use foo where a
function name is expected, the compiler uses foo as a function name;
and so on. But foo is always the same symbol, the very same object.

Java on the other hand has "packages" which are namespaces, but also
are a sort of "logical directories" that contain resources (typically
classes). Lisp is not like that at all.
An admission of the truth at last?

I'm using "namespace" improperly here, in hope to make things clearer
to you. Probably it's more correct to say there are more symbol-to-
object mappings.
By "problems" in this instance I meant scoping headaches for the
programmer, rather than actual failures of the code.

Ok, but this case is like if you had, in Java,

a.X.method(a.Y thing)
a.X.method(b.Y thing)
b.X.method(a.Y thing)
b.X.method(b.Y thing)

used in the same file; not very probable (and exactly as problematic
in Java as in Lisp).

[snip]
Oh God, it just gets worse and worse! Now you say your system's bollixed
up enough that you can't even have, say, a private variable named foo
and a public method named foo in the same place? Who thought this up?
Why would you make private apply to everything of the same NAME,
regardless of whether that name was overloaded? Why?

It's the price you have to pay for having a general naming mechanism
like packages. It's not really a big price, since I've never come up
with a case where it actually gave problems. Naming conventions help,
of course (e.g. variables are usually named *variable-name* with
asterisks).
Oh, nevermind. It's wacky, you like it anyway, I don't, and that's the
end of the matter. There's really little point in continuing this.

If you think so.
It's spelled "****". With an F.


Let's tick things off shall we? One. More. Time.

1. Your module size is like in C, a few per program (plus libraries'),
    rather than like Java or even C++, one per class.
    Imagine C++ only with "private" visible to everything in the same
    .cc file, or all pairs of classes in a single source file implicitly
    mutual "friends".

C does not have namespaces IIRC. If it had, then yes, CL would be
similar to C (but with the huge benefit that symbols are first-class
and you can manipulate them at runtime).
2. The encapsulation is extremely weak even so. Not only can you
    circumvent it by adding a single colon to a scope operator somewhere,

    a) it's right next to another colon, so an easy typo to make simply
    by bouncing a key;

No, since you have to type the symbol name, so you have to add a colon
AND mistype the symbol name so that accidentally you hit an existing
private symbol - quite unlikely.

b) you can presumably automate even the one lousy extra colon using a
macro;

No, you can't, since symbol resolution is done at read-time, before
macros are expanded.
and c) it will look enough like normal to
    be easily overlooked and mistaken for innocent code, unlike, say,
    Java reflection and setAccessible(true) calls. Heck you can even get
    your Java IDE to find all setAccessible calls on reflection API
    objects without false positives and throughout the code base, if your
    IDE is decent enough. Meanwhile :: is a search that will have false
    positives I guarantee it. All two-or-less-character searches do.

Yet it never gave me problems. Because it's not easy to make a mistake
(see above).
Technically nothing since they're both Turing complete. But much that is
decent and good in Java would require implementing a Java emulator in CL
to get in CL. (The JVM spec is readily available, so this should be
trivial right?)

Ok, turing-equivalence apart, I meant with current Java and CL, and
I've shown you, too.
Class-granular "private" comes to mind in particular.

You have it. Just make the slot name private.
Exactly my point. It works differently, and in this case, differently =
worse. Now every unrelated pair of "close" methods collides, unless you
start being creative with your thesaurus, and then code gets less
readable and there's more and harder memorization to learn to use the
darn thing.


The one for iostreams.

What about closing windows? Oops, no windows, forgot. :p Well, I'll
think of *something*...

Those about closing windows are different verbs, yes. There are not
many cases like this. How many more totally unrelated things can you
close?
No you're not, not one damn bit.

I meant WRITING IN ALL CAPS.
I'm sure the guys down at Bellevue that think they're Napoleon think the
same thing when they try to get people to believe them.

yeah, right...
That's not a workaround. We can also have Circle.drawOn, Rect.drawOn,
etc. if we want to be able to do them all consistently. Or we can add a
generic draw() to Graphics2D that takes a Drawable and just calls
argument.drawOn(this). (Assuming we control Graphics2D.) Then you can
happily do graphics.draw(chart).


Why? You're the one designing the system, hypothetically.


Why? The system's designed would make Drawable public, and an interface
so any class could implement it regardless of constraints on its superclass.

What if I want to draw something I didn't wrote, and whose author
didn't know about my Drawable interface?
The cost of having this is that you can change someone else's code, and
even are encouraged to. If they didn't make their class Drawable, why,
you'll just do it for them!

Sure, and what's the problem? I don't change their code, I write new
code which happens to use their class.

[snip]
Not explicitly! And not really at all; the classloader builds up a
dispatch table at runtime.

The classloader does it for you then. The effect is the same.
And I'm telling you, it doesn't quite work.


NO, IT ISN'T! If you still don't understand why I'm afraid you never
will. It's time to drop this line of debate.

For the last time:

--- Lisp ---

(defgeneric f (x))

(defclass c () ())

(defmethod f ((x c)) 'default-value)

BEFORE adding a method for class d:

(f (make-instance 'c)) ==> DEFAULT-VALUE

AFTER

(defclass d (c) ())

(defmethod f ((x d)) 'ok)

(f (make-instance 'd)) ==> OK

(note that the class name D can be in MY package while the name of the
generic function F is in YOURS)

--- Java ---

BEFORE

class C {
String f() {
return "DefaultValue";
}
}

C c = new C();
System.out.println(c.f()); //Prints "DefaultValue"

AFTER

class D extends C {
String f() {
return "OK!!!";
}
}

C c = new D();
System.out.println(c.f()); //Prints "OK!!!"

--------------

The only differences are that, in Lisp,

1. you can define the new method after the class and not necessarily
together with it,
2. you have multiple dispatch, but in this example it is indifferent
since the argument is only one.

Don't be confused by the name "method", which means a different thing
in CL than in Java. A lisp method is a particular specialization of a
generic function: a generic function having one more method in Lisp is
like a method having one more override in Java.
I once knew a guy who was of the opinion that the earth was flat.
LOL.


"Read syntax"?

Yep. An instruction for the Lisp reader.
Of course you can,

Ok, that's good.

[snipped some tangential rant about things not in Java's standard
library]

HAHAHAHAHA! How is the sentence "No, ABCL" calling you a liar?!? We're
going into total madness here, boy! I'm a really stubborn guy, as the
poor people reading our posts have noticed (well, those who haven't
still put us in their killfile), but even I am getting tired!
 
K

Kaz Kylheku

Kaz said:
On 2009-05-22, Seamus MacRae <[email protected]> wrote:
[snip]

Please stop posting five minutes after I post. Post, then wait a day or

Stop posting shit that anyone with two brain cells can debunk in five seconds.
so. That way maybe I'll actually be able to get caught up.

Good luck.
Time is irrelevant. Valid CL code is valid CL code.

If time is irrelevant, then don't complain about me posting X minutes
after you.
If this were true, then it would have been impossible to create CLOS in
the first place.

There is so far exactly one ANSI standard codifying Common Lisp. That standard
has CLOS in it. Before that standard, there was a draft language, which went
through changes. The predecessors to CLOS were obviously not developed in ANSI
CL, which did not exist. Those predecesors are not valid ANSI CL code.

No program conforming to 1994 ANSI Common Lisp can redefine the bindings of the
standard symbols in the common-lisp package.

The experimentation laeding to CLOS was done in dialects which preceded ANSI
Common Lisp, which did not have CLOS support in the compiler, and did not
already have, say, a defclass symbol in the common-lisp package bound to a
macro (if indeed they even had a common-lisp package!).

Time might not be relevant, but software and language version is relevant.

Doh.
 

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,438
Messages
2,571,699
Members
48,796
Latest member
Greg L.
Top