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

S

Series Expansion

I am neither.
So you consider yourself insulted ny being accused of being
Series Expansion.

I can understand that !

These tiresome personal attacks do not constitute rational arguments
in favor of either Lisp or Java, Arne, Jerry, and Larry.
 
S

Series Expansion

Read the thread more careful and

Fascinating. More unprovoked rudeness.
you would see that he is referring to Paul Derbyshire.

There have been two Pauls in the thread: Paul Foley, whom I had
already noticed, and Paul Donnelly. I have not seen a Paul Derbyshire.

I HAVE used it, extensively during the 90s on one particular remote
system and occasionally before and since.
There is this great thing called Wikipedia where you can
learn about think that you do not know about.

These tiresome personal attacks do not constitute rational arguments
in favor of either Lisp or Java, Arne.
or lack of skills).

These tiresome personal attacks do not constitute rational arguments
in favor of either Lisp or Java, Arne.
If *YOU* do the web research (link given above) then

Why repeat it?
you would see that Emacs contains a lot more than it did when
it was implemented on top of TECO.

Well, yes; when it was ported to C as GOSMACS Gosling had to basically
reimplement half of TECO to do it, since C's facilities (especially
the C they used back then!) are so primitive.
 
S

Seamus MacRae

Kenneth said:
Reminds me of a chat I had with one of the more intellectual bouncers
down at my sports bar. He said that whenever two guys start to get into
it he points out to them that they are about to turn off every girl in
the bar.

I forgot to ask if it works.

None of this is relevant here. What Duane has said about me is a pack of
lies; nobody here is analogous to a bouncer, since this is an
unmoderated group; in comp.* newsgroups, "every girl in the bar" means
all two of them; and last but certainly not least, not one word of any
of the quoted text has anything whatsoever to do with either Java OR Lisp.

In fact about the only commonalities between bars and these newsgroups
are the amount of boorishness and fight-picking that goes on and the
amount of public drunkenness that goes on (the latter inferred from many
incoherent, rambling, or just-plain-irrational posts that I've seen from
various people here none of whom were me).
 
S

Seamus MacRae

TomSW said:
There's not much chance of that.

Another threat. I suggest you find a more productive endeavor.
You put me in mind of this passage, which thanks to you I was prompted
to hunt down in full:

"A physician once remarked to me as a proof
of the exciting nature of anger, that a man when excessively jaded
will sometimes invent imaginary offences and put himself into a
passion,
unconsciously for the sake of reinvigorating himself; and since
hearing
this remark, I have occasionally recognized its full truth."

This is inapplicable. I am not angry; I am calm and collected.
Occasionally I have been disappointed in the way someone else has
behaved that I hoped would know better. And that's about it. My posts
reflect this: logical, precise, calm, largely lacking in expletives and
personal attacks, and rational even in the face of strong provocation.
 
P

Paul Foley

Series Expansion said:
Functions that acted on Lisp code as data could accomplish this,
reading Lisp code in one style and outputting the transformed code

Congratulations! You've just invented the macro!
 
P

Paul Foley

Series Expansion said:
As explained above, this guarantee is not possible to make. All that
is needed is to create a variable with the name #:G622 in the calling
scope and the same macro, given the same arguments, will cause
capture, since the variable name must be the result of the macro
computing some function of its arguments and since in the case of that
particular macro with those particular arguments the name thus
computed is #:G622.

This is what you get for insisting that names are the same as the
thing they name. Putting people's names in a hat is *not* the same
thing as putting the people in a hat.

#:G622 is not interned, so another occurrence of #:G622 is a
completely different symbol that has the same name. The variable name
is in the /identity/ of the symbol, not the /name/ of the symbol, so
two distinct symbols with the same name don't refer to the same
variable. If you create a variable with the name #:G622 in the
calling scope, that will be an entirely different variable than the
one in the macro, so there's no problem. [And symbols are only used
to name variables in the source code - after it's compiled there's no
relationship between the symbol used in the source and the storage
used for the variable, except for "special" variables]
could be managed, and devolves to case two, giving the macro
persistent state. But that, too, is impossible.

Of course it isn't. Macros can alter variables (for state in the
current image) and read and write files (for state that outlasts the
image), just like any other function.
Macros run at compile
time, and therefore have no ability to make use of run-time data
structures to maintain state. Indeed, you could engineer a collision
easily regardless, by compiling one source file using the macro in
question, noting the name the macro generated when it expanded, and
then authoring a new source file never before seen by man that used
the same name and put it into a scope visible at the call site, say,
the top level of the scope hierarchy. If this second file is then
compiled and the object code from the two compilations linked, the
collision occurs long after the macro had any opportunity to avoid it.

Except that, you know, you can't get the name of that variable.
 
T

TomSW

Another threat. I suggest you find a more productive endeavor.

It wasn't meant to be a threat. I just don't think you're even going
to set the record straight.
This is inapplicable. I am not angry; I am calm and collected.

You're always so categorical and right, aren't you? I never said you
were angry, but you do seem to be locked into a cycle of finding
offence and then (to your mind) prevailing against it logically,
precisely, calmly and whatnot. It hardly matters what your
interlocutors say or whether they exist: this discussion could have
happened entirely in your head, the unfortunate thing for you is that
it's happening on a public archived newsgroup. You're making a
glorious fool of yourself - that's why I told you to stop - and you
have the nerve to suggest to other people that they find "more
productive endeavour"s?
But thank you, I will.

TomSW
 
P

Paul Foley

Seamus MacRae said:
Not the same thing. A Java int is intrinsically known by, and thus
easily optimized by, the compiler.

A Lisp integer is intrinsically known by, and thus easily optimized
by, the compiler.
Similarly, your Lisp compiler cannot know about a user-defined type in
any real detail, only perhaps what it's a subtype of and what its own
subtypes are. (Perhaps the macro processor can know more, because the

The "macro processor" is Lisp.
 
L

Lars Enderin

Seamus said:
Arne said:
Seamus said:
(e-mail address removed) wrote:
[You can even have multiple frames on different displays, in
different
countries if you want...]
The ability to run multiple xterms concurrently had occurred to me,
yes. Why would I want to though? Twice as much of a bletcherous thing
is more, rather than less, bletcherous. One xterm at a shell prompt is
the most I'd normally ever desire.

Besides, it's not as if I'd magically get any real-GUI goodness out of
it, like being able to cut in one window and paste in a different
one. The X clipboard and the various emacs instances' clipboards would
all know nothing of one another.
You must be aware that emacs can run in windowed mode under both
X-windows and MS windows (and others I am not familiar with).

Yes, trivially; any console app can be run "in windowed mode" by
displaying it in a windowed terminal emulator instead of a
full-screen one or a real terminal.

But

But nothing. Any console app can be run "in windowed mode" by displaying
it in a windowed terminal emulator instead of a full-screen one or a
real terminal.

X is a full-blown windowing system. Emacs communicates directly with X,
not via another X application like xterm. Emacs can *also* be run as a
console app, which is useful if you don't have an X server able to
communicate with a remote system which you have accessed with ssh, say,
but the normal case for emacs is to be run as an X application.Even
better: emacs can be a GTK application.

What will it take to get through your mind-blocks?
 
L

Lars Enderin

Seamus said:
Since it is normal human nature, it would be unless you were from Pluto
or something.

Arne referred to your hang-up about having to "correct" every posting
disagreeing with you. He is familiar with that from previous encounters
with your other aliases (Twisted, Jerry Gerrone, etc, etc, in absurdum).
Your behaviour is, fortunately, not normal human behaviour.
 
G

gugamilare

One of the actual Lisp knowledgeable will have to correct me if
I am wrong but I thought that [you're a liar, Seamus!]

I am not.

Don't you know the difference between being a liar and being mistaken?
Every time someone says you are mistaken, you listen that you are a
liar and get angry about it without any motive.

You are not a liar, but you are mistaken. Common Lisp was made ANSI in
1994:

http://www.lispworks.com/documentation/common-lisp.html
http://www.techstreet.com/cgi-bin/detail?product_id=56214

And CLOS IS part of it:

http://www.lispworks.com/documentation/HyperSpec/Body/07_.htm
 
D

duane

Reminds me of a chat I had with one of the more intellectual bouncers
down at my sports bar. He said that whenever two guys start to get into
it he points out to them that they are about to turn off every girl in
the bar.

I forgot to ask if it works.

Likely not. The fight instinct and the need to dominate, fueled by
testosterone, will far outweigh the instinct to be liked or loved.

Duane
 
G

GP lisper

The really interesting thing in this trash is how fast the various
"entities" respond, just check the posting time. Perhaps the fricken
idiot humans still posting can check that and see exactly how good
Eliza-Expansion or whatisname have been coded. Java is good for
something it appears.

I declare Turing Test victory!
 
A

Adlai

is irrelevant.

You cut off what Joost was saying in the middle of a sentance. I think
that's more rude than telling somebody they're wrong, because it shows
that you care more about misquoting them than about reading what they
were telling you.
I did not, and your admonishment based on a faulty assumption is quite
rude.

The only thing I assumed was that a) a Lisp macro invocation gets
replaced with some code for the compiler to compile in it place, and
b) in that code certain placeholders are replaced by the macro
arguments.

No, you made another assumption -- it is as follows:

It is possible for the compiler to generate code referring to a symbol
named by code given to the compiler. This is wrong, because you can
have two symbols with names that print (and read) the same, a feature
primarily used for generating safe macro code without resorting to
Scheme-style macros. This is /not possible to do/ in C macros, but
possible in Lisp macros.


- Adlai
 
A

Adlai

On May 16, 8:15 pm, Paul Donnelly <[email protected]> wrote:
[snip]
The fact that defmethod is a macro does not mean it remotely
modifies any code.

In and of itself, you are correct: it does not. However, I did not
base my remarks solely upon its being a macro. I also used your own
statement that it could be used to add more dispatches to the dispatch
table from anonymous.c.lisper. Taken together, those statements imply
that this particular macro can and does modify code.

So either it can, or you are incorrect about it adding more
dispatches, or you are incorrect about it being a macro.

The answer is, it doesn't modify any existing code.
The code at issue is:


This is quite clearly tabular data and anonymous.c.lisper himself
stated that it controls the dispatch of frobnobdicate method calls.
These observations, taken together, suffice to imply that it is a
dispatch table.

It's not tabular data -- it's a bunch of forms that have parallel
structure, and seem tabular because you're looking at nicely indented
code rather than this:
(defgeneric frobnobdicate(a b):)method((foo foo)(bar bar)).body)
:)method((foo foo)(baz baz)).body):)method((foo foo)(quux
quux)).body))

The resemlance to a table is only to illustrate to a human reader the
behaviour of the dispatch table generated by that code.
If you did that, then where would the macro put the dispatches?

In the running Lisp image. Lisp programs aren't just executed one
statement at a time -- there's an "image" of all the symbols, classes,
functions, closures, methods, etc that are in use at the time. This
(along with consing) does tend to slow down a lot of Lisp code, but
there are techniques for writing efficient code despite this (well-
optimized Lisp runs at a comparable speed to C).
If this were true, then the defmethod macro could not function in the
manner claimed. The macro can only replace source code with other
source code at compile time. For it to modify a dispatch table,
therefore, that dispatch table must be located in the source code. Its
only alternative is to generate run-time instructions to allocate and
construct dispatch tables, which has two consequences:

Again, it's not in the source code -- it's in the Lisp image. Lisp
source just includes macros, which modify the Lisp image to update (or
generate, if you're creating a new generic fn) the dispatch tables /in
the Lisp image/.
1. How are many uses of the same macro with the same method name
   throughout the code base to coordinate? They must create and use a
   single dispatch table, not one each, for that sort of scheme to
   work.

They don't have to coordinate, because the generated code deals with
the dispatch table.
2. The dispatch tables are then being "faked" using ordinary
   user-accessible run-time data structures, rather than being true
   dispatch tables analogous to Java's or C++'s, which the compiler
   and runtime generate and use and which are not user-accessible,
   except, in C++, via unwise pointer manipulation. In particular,
   the Lisp dispatch tables would not be "state maintained in the
   system's internals, just like in Java, C++ etc."

Well, they are "state maintained in the system's internals". It's just
state that can be generated by code, the same way that code in Java or
C++ generates some state in the system's internals.
This implies that it will quietly do what is unlikely to be what the
programmers intended, without generating any overt warning or error
message. This is commonly called "failing silently". Instead of a
prompt diagnostic, the result is a logic error in the program, and a
greater amount of effort needed subsequently to debug this error.

The compiler will give a warning. Although LITERALLY it's silent,
there is quite the visual cue when little red underlines start
appearing in your code, and the compiler says that there are warnings.
Also the compiler will tell you precisely where the errors were
encountered, so you can find them quite easily.
That contradicts the previous, quoted statement about it "just"
overwriting a method.

OK, that's reading too much meaning into what I said. I meant "just
override ..." in the sense that it would generate valid code rather
than failing to compile at all.

I've actually been corrected about that. However, it would still apply
only to the currently running Lisp image. So if, for example, you were
using a library, and a DEFMETHOD form in your code extended the
library, somebody else working in a project with you could still use
the same library code, from the same file, as you and the DEFMETHOD
form in /your/ code would not affect them.
If that is the case, it can only be because Adlai was inaccurate in
describing packages to me.

See what I just wrote in teh previous paragraph.
This is contradicted by statements made elsewhere by yourself and
others, particularly, one claiming that a function and a class in the
same package can share the same name. If the package did not
distinguish among these, then that could not be the case.

They do share the same name. A package doesn't know the difference
between them. However, when EVAL hits a name, it knows the difference /
in context/ between a variable, function call, etc. The package
doesn't have to know.
Since that is based on a description of Common Lisp package behavior
that Adlai posted, you should endeavor to figure out which one of you
is apparently mistaken about packages. At this time I have no basis
for choosing either of your interpretations over the other.

I was mistaken, but not in the way that you thought.
Public = exported. Private = not exported.

These ideas don't translate so cleanly between Lisp and Java, because
only symbols are "public" or "private". The code itself is still
accessible to anybody who has the symbol reference.
So whereas there is arguably a distinction to be made, in practice
it's a pointless one: "the method is private" is more or less
synonymous with "the method's name is private".

Firstly, Lisp has a lot more freedom, in the sense that "private"
stuff is not inaccessible; this does mean that you have to rely on
people not to use private things in a way that will cause them to
break. However, multimethod dispatch is done in a very safe and
predictable way, so it's not a risk to allow user-defined code do
"call-next-method" to something which could be considered "private" to
an imported package.
You're forgetting that, by your own prior testimony, the defmethod
macro in turn adds the dispatch entry. So whether you do it by hand,
or have the macro do it for you, the dispatch table must be accessible
to you.

Yes, I could get to the dispatch table. I have no clue how to do it,
although I could find out by examining the macroexpansion of
DEFGENERIC and DEFMETHOD, and then essentially writing that code by
hand. However, this is not done, unless somebody wants to create their
own object system; it would be like editing the Java compiler by hand,
yourself.
Again, macros operate by transforming source, so if this were true,
the defmethod macro could not function in the manner you have claimed.

Lisp image != source. I've gone over this already.
That is not a valid argument against my reasoning. It is, rather, a
"cop-out". It is also an arrogant presumption on your part, purporting
to be able to speak for gugamilare as you have just done.

We assume (and I think I speak for others who have posted in response
to you and Seamus) that when somebody else says something that seems
wrong, it's a "thinko", rather than a real mistake. A thinko is like a
typo, but on the scale of ideas -- it's an easily identifiable
MISTAKE, that the person who made probably didn't intend that way.

gugamilare seems, from other things he's said in this group in the
past, to be more knowledgeable in Lisp than I am. If he writes
something that could be read a bit ambiguously, I'm assuming it's
because of a) the fact that English doesn't seem to be his first
language (which is NO PROBLEM WHATSOEVER, you just have to THINK), and
b) he's assuming that the people reading his comments are familiar
with basic Common Lisp concepts.
Of course not, since the contradictions in question are contradictions
between a statement made by one of you and a statement made by another
of you. No assumption that I made could alter either statement in any
such case -- you each said whatever you said.

For instance, supposing you were to say that the sky was green, and
gugamilare that it was blue, these statements would contradict,
independently of my own personal opinion on the matter or of any
assumptions on my part.

See what I said in my previous paragraph, it applies here too. By the
way, I would assume that somebody saying that the sky was green would
also be a THINKO -- maybe they meant to type blue, or meant to talk
about grass. These things happen when people are multitasking, as we
all often have to. I would assume that the person I'm talking with has
made a thinko unless they repeat the same mistake several times, in
different phrasings, and defend it when somebody tries to correct
them.

- Adlai
 
A

Adlai

Congratulations!  You've just invented the macro!

Although, what makes macros different from normal functions is that
they don't evaluate their arguments. In this sense, you could actually
think of something like:
public boolean prime (int x) { blablabla }
as a macro that generates JVM bytecode from the single string argument
that is the entire call -- from public, to the closing }.

- Adlai
 
A

Adlai

I have not. What you described affected the storage allocation of an
object referenced by a variable. This has no impact on collisions
among the names of variables when the compiler parses the code that
has been transformed previously by the macro.

GENSYM generates a symbol that is not interned in any package; in
fact, any such symbol could not be re-referenced by simply reading
it's name, because each time a symbol name beginning with the
characters #: is read in (for example, the symbols #:cl and #:foo were
used earlier in this discussion), the reader creates a new symbol.
Thus, you have to have the original reference to these symbols from
their creation to access them.
Thus we have arrived at a contradiction. Your hypothesis that a macro
exists that can do as you have described has been disproven.

Addressed by the first paragraph in this post.
I've tried to explain here again, why GENSYM creates symbols that
enable capture-free macros.
I have put precisely as much effort into doing so as you have put into
describing them, since I have read what you have written about them.
If you have not done a very good job of explaining them in terms a lay
person would understand, then that is hardly a basis for concluding
something negative about me.

I've tried to explain them in the same terms that PCL, Successful
Lisp, or On Lisp use, since those are the resources that have taught
me about these concepts so far.
Nobody asserted that they stored actual code. But they organize it,
indirectly by organizing the names of parts of the code. Furthermore,
it was indicated elsewhere that they distinguish names of functions,
names of classes, names of variables, and the like from one another,
in that a class and a variable, say, can have the same name and be in
the same package.

/Packages/ don't do that. Saying that Lisp has separate function and
variable namespaces is a bit misleading, because all symbols are equal
in the eyes of packages, the same way that the word "bat" has one
entry in the dictionary, but multiple meanings as different parts of
speech. A person /reading/ a text determines which part of speech to
use to understand the word.
But, as I have demonstrated, it is irrelevant to the capture problem.
Unless of course you have misdescribed them, in which case they might
be relevant without that having been made apparent to me.

Maybe I didn't describe it clearly enough. I've tried again. Remember,
a symbol that is not in any package cannot be referred to by its name.
If symbols from GENSYM got interned, then yes, everything you said
about macros would be true. However, because they are not interned,
it's impossible to reference them without the return-value of the
GENSYM function. In a sense, GENSYM is Lisp's version of truly
"private" stuff -- usually variables, in macro code.
What was the nature of the test program? This kind of thing can very
easily be biased, even inadvertently, by the selection of a test
program suited to a particular language's strengths.

Did you read the page that I linked to? It explained the test program
there. Although it wasn't a huge project, the results did seem to have
some statistical significance. Another example I'd cite, which isn't
as specific, is Viaweb's massive success. Paul Graham, one of Viaweb's
founders, attributes much of this success to the productivity boost
experienced by Lisp programmers.


- Adlai
 

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

Forum statistics

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