Talk:Programming language/Archive 3

deletion of definitions section
This will probably start a howl of protest, but I feel this is the weakest section of the article currently and want to start a discussion.

I have problems with all of the definitions mentioned in this section.

"The language's function" mentions computer programs, which requires readers to know what a computer program is, hardly likely if they don't know what a programming language is.

"The language's users and audience" although a programming language can be used to instruct machines, the reason they exist and we don't use hex or assembler is because they are primarily used for communication between people.

"The language's constructs" different languages have different constructs. Declarative languages don't have control flow constructs.

"The language's expressive power" in my source quoted above there is a distinction between computer languages which are not Turing complete and programming languages which are. This definition may not be universal, but it is verifiable and neatly avoids having to include the explanatory paragraph below.

Note that if you want to argue for multiple conflicting definitions in general and these definitions in particular I will ask you for verification. Ideogram 11:44, 13 June 2006 (UTC)

Derek farn, you tell me to discuss the deletion on the talk page and then revert my changes while ignoring the fact that I have already started a discussion here. I'm not going to start a pointless edit war, but I want the mediator to take note. Ideogram 14:51, 13 June 2006 (UTC)

You also reverted my changes to the lead paragraph, which I supported with citations above. Ideogram 14:54, 13 June 2006 (UTC)


 * There are people + books that say programming languages must be Turing complete. There are people + books that do not require programming languages to be Turing complete.  Everybody can find a citation to backup their POV.  The existing definition points out that there is no consensus and lists common definitions.  Derek farn 15:11, 13 June 2006 (UTC)


 * If everybody can find a citation, please give us one, and one for each included definition. I have provided a citation for mine.  Ideogram 15:19, 13 June 2006 (UTC)


 * I really wish we could somehow remove the "delete" key from Ideogram's keyboard. Sorry, Ideogram, this was the same problem as over at functional programming.  It's just bad manners to delete whole sections without first discussing it.  I'm not necessarily all that partisan in support of the section, but I definitely cringe whenever I see multiple paragraphs deleted at once, and cringe again when I see that they are of at least clearly arguable relevance and quality.


 * I haven't really been all that fond of the presentation style in the "definitions" section, the bullets don't really seem to make up a list in a helpful sense. But there are definitely good and relevant concepts in there.  Clarifying them is great.  Even restructuring a bit is great.  But broad deletion is a very anti-social approach.  LotLE × talk  18:07, 13 June 2006 (UTC)


 * Okay, okay, I respect your input. I will avoid broad deletion without  prior discussion in the future.  Ideogram 19:07, 13 June 2006 (UTC)

history section
Any opinions on trimming the history section since there is now a separate article that duplicates it? Ideogram 12:02, 13 June 2006 (UTC)


 * I would agree with that idea. The child/sibling article seems to cover all the details (but we should resolve the merge notice).  In my opinion, two or three narrative paragraphs without further subsections could give a broad sense of the history of programming languages, with the details fleshed out in the child article.  But as above, let's make sure there's consensus on this before chopping.  LotLE × talk  18:11, 13 June 2006 (UTC)

purpose edits
I'm not sure what you mean by "can be performed using an interface which uses only the variable inputs as free parameters"? Ideogram 05:02, 14 June 2006 (UTC)


 * Command line with inputs? Jaxad0127 06:13, 14 June 2006 (UTC)


 * More general than that -- when you write a program some things are going to always be the same, and some things are free parameters that you need to pass in. For instance if you're writing an email using some (non-command-line) program, the recipeient, the text, etc. are free parameters, but how to talk to the IMAP server, or the cute little annoying graphics and sounds are fixed -- you don't need to respecify them.  kraemer 10:35, 14 June 2006 (UTC)


 * This phrase is hard to understand. You need to word it so that someone who doesn't know what a programming language is can understand it.  Ideogram 09:06, 15 June 2006 (UTC)

definitions section discussion
Again, I do feel this section is weak and want to discuss it. My problems with it are noted above. Certainly I prefer that the definitions listed be sourced, we will never achieve featured article status if they aren't. LotLE, you say there are "good and relevant concepts in there" can you list what you think should be kept and what can be cut? How do you think my concerns above should be addressed? Everyone else please comment as well. Ideogram 08:21, 15 June 2006 (UTC)

Turing-complete POV
In his revert Derek farn comments that requiring a programming language to be Turing complete is a POV. Of course the opposing position is also a POV; my POV has a citation and his does not.

Nevertheless I do expect he will eventually produce a citation, so on that assumption the next question is how to write the lead paragraph with a NPOV accommodating the two positions. Any thoughts? Ideogram 08:24, 15 June 2006 (UTC)

I would definitely agree that we should not state Turing completeness as a requirement for programming languages. Most (sort of) are, but if some language technically only modelled a push-down automoton, how many programmers would really know the difference? Moreover, some things, like the C++ pre-processor or XSLT turn out to be Turing complete via some obscure hackery, but the point is non-obvious.

But thinking about it some more, I thought about the hyper-pedantic point that, e.g. C is not Turing complete as a language. If you want to be really technical, C only gets you a simple state machine. That is, pointers in C are of some finite size, say 32-bit. After that, addresses have no way of being named. But 32-bit pointers to 8-bit bytes only gets you 2^40 states. A machine with a trillion states is a pretty complex one, but it's not a Turing machine. Notice that file-system access is not part of C proper. However, even if you include STDIO here, common filesystems are themselves finite. So if a given filesystem can access, say 2^64 addresses, that still allows only a finite number of states of the filesystem. Now this might give you a state machine with, e.g. 2^(2^64) states in it... which is reasonable to call "a hell of a lot". But it's still finite, e.g. not Turing complete.

Some other languages actually are Turing complete qua languages. But as run on actual machines, they are as finite as the machines. So, for example, the specification of Python makes long integers unbounded. But on a given machine, there is still a largest long that can concretely be stored (a very large such number, but not infinite). Well, as a purely language question, unbounded integers gets you Turing complete (or you could use the fact the length of strings is formally unbounded, etc). Now certainly that doesn't mean in any practical sense that Python is "more powerful" than C; but in computational theory, it actually is (which is of no real-world interest at all). LotLE × talk 08:34, 15 June 2006 (UTC)


 * Does C's STDIO require a 64-bit filesystem? If it doesn't, you can expand the filesystem as much as you want and C is as Turing complete as Python is.


 * Doesn't really matter since STDIO is part of the standard library, not part of the language spec itself. C is often used on platforms with no filesystem at all, which is generally the reason for the distinction.  But the filesystem is external to STDIO, even at the library level: A C call doesn't "know" whether it's reading from a file on HFS+, NTFS, RFS, FAT12, etc.  In contrast, Python as a language spec includes unbounded types rather than only finite-sized pointers. You could certainly create a language called "Just-slightly-more-than-C" that was also theoretically Turing complete (it might even by syntactically equivalent).  LotLE × talk  16:57, 15 June 2006 (UTC)


 * I think that when Turing-complete is applied to languages it is generally understood that the finite memory size of actual computers is not considered a limitation. C certainly is used on 64-bit machines and probably will be used on 128-bit machines.  The fact that all real machines are finite is really a hyper-pedantic point.


 * It's also used on 8-bit machines where the actual limits "matter" in some sense. The distinction between a computation you can't perform because a machine isn't technically Turing complete, and one you can't peform because the universe will experience heat death before it is done, is not of any practical importance.  But mathematically they are different.


 * But likewise, this is the reason we should definitely not have a sentence like "All programming languages are Turing complete", which I believe you advocated, Ideogram. A programming language that implements a push-down automata at a theoretical level is strictly less powerful as a language definition (even if you could have infinite hardware to run it on), but it could just as well "feel like" a programming language to 99% of users.  Or probably even one that implemented only a finite state machine, if you could allocate a reasonably large number of states (not heat-death-of-the-universe orders like a mention, but just say hundreds).  LotLE × talk  16:57, 15 June 2006 (UTC)


 * Verifiability, not truth. All your reasoning is not as important as a citation, which I have.  Ideogram 17:12, 15 June 2006 (UTC)


 * I haven't the foggiest idea what point you hope to make with the sentence "verifiability not truth". Obviously that's one of the WP policies, but I can't really ferret out any connection to this discussion thread.  LotLE × talk  17:23, 15 June 2006 (UTC)


 * We're not here to determine the facts by reasoning amongst ourselves. We're here to report on what the literature says.  Do you remember my argument about the flat-earth theory on functional programming?  Even if you are correct, it doesn't matter as much as what the published literature says.  Ideogram 17:27, 15 June 2006 (UTC)


 * I still can't figure out what point you're trying to make. I'm not suggesting adding the sentence "C isn't Turing complete" to the article; did you think I suggested that?! If I wanted to, for some strange reason, obviously I'd give a citation (which would be easy enough for the commonplace fact).  Talk pages, of course, precisely are about "reasoning among ourselves".... that's what the entirety of all the discussion threads are.


 * The mantra about "verifiable not true" isn't to be taken with absurd literalness. If some reliable source makes a claim that can be shown to be self-evidently wrong when taken literally, we grant a certain spirit of generosity to the source.  Perhaps they were writing more informally, or making a point in some specific context by allowing temporary imprecision.  So if some reputable text book write "All programming languages are Turing complete", we allow for the fact that they are writing for a certain introductory audience, and being deliberately fuzzy as a first-approximation of the truth.  We don't do original research in articles, but we also don't entirely throw common sense out the window.  LotLE × talk  17:42, 15 June 2006 (UTC)

(outdenting) I have two citations, quoted in full, at Talk:Programming language/Archive 2 which define programming languages to be Turing-complete. They were quickly archived which is why you probably missed them. Common sense tells me that the very intelligent authors of those definitions are not here to defend their positions against your very clever reasoning, and I'm not going to try to do it for them. Ideogram 17:51, 15 June 2006 (UTC)


 * Anyway we are not debating truth here, we are debating verifiability. Ideogram 08:43, 15 June 2006 (UTC)


 * The idea of Wikipedia is that although it may take an expert to find a citation from a reliable source, anyone can check it. It's a bit like RSA - it takes exponential time to factorise a number, but polynomial time to check it. Of course, you won't find a cite for this because no one can prove it, but this is the talk page, so different rules apply. Anyway, here's WP:V, WP:CITE, WP:RS and WP:NOT which you can check very easily. Stephen B Streater 17:39, 15 June 2006 (UTC)

You might all consider the BlooP programming language, a slightly-less-than-Turing complete language designed by Douglas Hofstadter. While not a practical language (it was devised for pedagogical purposes), it is a language capable of computing primitive recursive functions, but not all recursive functions. (In other words, it cannot compute Ackermann's function). Despite not being Turing-complete, it can solve most mathematical problems of interest. --EngineerScotty 17:49, 15 June 2006 (UTC)


 * Hmm am I the only one pushing the Turing-complete definition? If all of you really disagree with me even after reading the quoted citations, I will yield.  Ideogram 17:55, 15 June 2006 (UTC)


 * Yep, you're the only one pushing it.


 * Let's hear from Stephen B Streater and Allan McInnes before you jump to that conclusion. Ideogram 18:36, 15 June 2006 (UTC)


 * I'm not sure which author in the archived thead you were trying to refer to,


 * The authors I'm referring to are the authors of Principles of Programming Languages, Bruce J. MacLennan (used at Stanford) and Programming Linguistics, David Gelernter (surely you've heard of him) and Suresh Jagannathan. Ideogram 18:36, 15 June 2006 (UTC)


 * Of those, only the latter mentions the Turing-equivalence, at least as quoted in the archive. LotLE × talk  19:12, 15 June 2006 (UTC)


 * I left off a footnote. The sentence "We reserve the term programming language for a computer language that can be used, at least in principle, to express any computer program." has the footnote "This is not a vague notion.  There is a precise theoretical way of determining whether a computer language can be used to express any program, namely, by showing that it is equivalent to a universal Turing machine.  This topic is beyond the scope of this book."


 * but I'm certain all such very-smart authors present those types of blurbs in the spirit of "first approximation of the truth". Certainly at a "first approximation", C is a very Turing-style language (though the cleverness of my reasoning that it's otherwise is very minimal).


 * Note that we are supposed to be writing for a general audience here, that is even less interested in hair-splitting correctness than the readers of the textbooks I cited. Ideogram 18:36, 15 June 2006 (UTC)


 * Right, which exactly why the Turing-complete thing is even less relevant to include. A lot of readers have no idea what computation complexity is at all, so trying to make a pedantic point that goes over there head is of no help (especially when it's actually false, if you are still more pedantic than that).  Gelernter is writing more for an audience of CS students who have either already heard of Turing machines, or will before the semester's over.  As a first approximation, it's worth telling those CS students that "all general-purpose programming languages are Turing-equivalent" so they don't go off into an unneeded digression of wondering which languages are more powerful (e.g. ordinary ones like C vs. Python vs. Lisp).  But someone like Glernter (no, I don't know him, but I assume he's a CS guy from your tone) is crossing his fingers or adds a little tiny implicit footnote... obviously he knows that fixed pointer sizes theoretically limit the state space (to something very large).  LotLE × talk  19:12, 15 June 2006 (UTC)


 * I am not by any means suggesting we include the term "Turing-complete". Instead it is possible to assert that "all general purpose programming languages are equally powerful in a mathematical sense".  This is the wording that Derek farn reverted here; it was he who used the term Turing-complete in his edit summary.  Ideogram 19:34, 15 June 2006 (UTC)

Other models of computation
The problem is that the assertion that "all general purpose programming languages are equally powerful in a mathematical sense" is either meaningless (equally powerful in what mathematical sense?) or flat out misleading (if by "mathematical sense" you implicitly mean Turing-equivalent - see for example Peter Wegner's work on equivalence models for interactive programs). --Allan McInnes (talk) 23:49, 15 June 2006 (UTC)


 * Some notes on this paper:
 * It is highly theoretical and hard for me to understand.
 * Although it claims there are more powerful models of computation than Turing Machines and that object oriented languages implement these models of computation, nowhere is there an explicit definition of programming language that could be cited for our purposes.
 * It is work in progress, not a published peer-reviewed paper and therefore OR.
 * This narrow point is definitely wrong. There's nothing wrong with citing a generally circulated draft of a scientific paper.  None of the textbooks mentioned are peer-reviewed either, nor are 99% of all the sources used on WP.  LotLE × talk  17:31, 17 June 2006 (UTC)
 * This was the precise argument used to reject most of Carl Hewitt's edits. Back me up here please, Allan.  Ideogram 18:05, 17 June 2006 (UTC)
 * I personally have problems with claims like object oriented programming makes structured procedural programming obsolete. Ideogram 08:45, 17 June 2006 (UTC)


 * Some responses:
 * I agree that it gets a bit dense in places. My apologies for that. But I think that the basic message (Turing machines do not model interactive or concurrent computation, other mathematical models are necessary) is fairly clear. Nor is it original with Wegner. It's the same thing that drove people like Carl Hewitt, Robin Milner, and Tony Hoare to develop things like the Actor model, the pi-calculus, and CSP. Wegner just happens to provide (IMHO) a good summary of the issues.
 * The reason I pointed to that paper was not because it contained a definition of "programming language", but because the paper refutes the notion that "all general purpose programming languages are equally powerful in a mathematical sense", since there are several different "mathematical senses" that we might consider and not all languages are "equally powerful" in these different "mathematical senses".
 * You are correct that the paper I linked to is labelled a "work in progress". It also dates from 1999. Wegner's website contains more recent work, some of which has been published in places like CACM and LNCS. And as I pointed out above, these ideas are not original to Wegner. The paper I linked to just happens to be (I think) a pretty good summary. I'd be happy to dig up other cites if you want them.
 * I personally don't like such statements either. I happen to believe in selecting the appropriate computational model for the problem at hand. But neither my feelings nor yours on Wegner's opinions detract from the basic point of the paper, which is that Turing machines are a limited computational model and Turing equivalence is not the only possibly equivalence between general purpose programming languages &mdash; so claiming that all languages are "equally powerful" is misleading since it the truth of the assertion depends on the way you determine "equal".
 * --Allan McInnes (talk) 14:59, 17 June 2006 (UTC)


 * Thank you Allan for having by far the most patience with me of anyone in the debate. Please see the section "Lead paragraph trying again" below for a summary of my position.  Ideogram 16:12, 17 June 2006 (UTC)


 * Moreoever, there are many other possible meanings to a claim like "All PLs are equally powerful in a mathematical sense". While I definitely feel strongly we shouldn't introduce the false precisision of claiming "All PLs are Turing-equiv" (if only because that's gobblety-goop to many readers), trying to find a statement that's more friendly to the common vernacular introduces other points of failure.  For example, if langauge A could do a certain type of operation in O(N), while language B took O(2^N) to complete the same type of operation (stipulating that this is a fact of the language definition level, not just of implementations), it would be quite accurate to say that "A is more powerful than B, in a well-defined mathematical sense".  Of course A and B could still both be Turing-complete, but that's not the only concept within mathematics (complexity theory is another such area well within the PL lingo).  LotLE × talk  17:41, 17 June 2006 (UTC)


 * We can do exactly as my cited sources did, and add a footnote. We have to add an in-line citation anyway to reference where I got the definition from.


 * Now this page is getting kind of long. Can we move discussion to the bottom and archive the rest?  Ideogram 18:05, 17 June 2006 (UTC)

Ramblings on languages and their formal power
Actually, this thread also got me thinking about Postscript. It's sort of a mantra to point out that Postscript is Turing-complete (since many people think of it as "just a page-layout description"). I don't know PS well, but thinking on it slightly more, I realize that it's "stack based"... which would seem to make it formally a push-down automaton not a Turing-machine. I can't find anything in the Postscript article; can anyone tell me in 20 words how PS achieves random-access rather than a strict FILO stack only?


 * I'm pretty damn sure Postscript is Turing-complete. I've never programmed it and I have no citations, but I'd advise you not to waste your time on that score.  Ideogram 18:36, 15 June 2006 (UTC)


 * Oh, I'm pretty sure it is too since I've heard it so often. I'm just wondering "how".  I'm pretty sure whatever then answer is, it's something pretty simple: like "The so-and-so command accesses a data structure in a random rather than stack way" (or along those lines).  I don't want this digression in this article, it's just for my edification.  LotLE × talk  19:12, 15 June 2006 (UTC)


 * But along those lines, I'm pretty sure those programmable calculators with a stack-based syntax are also limited to push-down computation abilities, but I think it reasonable to call the languages used on programmable calculators "programming languages". LotLE × talk  18:17, 15 June 2006 (UTC)


 * Reverse Polish Lisp as used in HP calculators is Turing-complete, modulo memory size. Ideogram 18:36, 15 June 2006 (UTC)


 * Is it? I never had one of those calculators, nor looked closely at the language they use. But are you sure of that? Can you do generalized recursion on them? (modulo memory size)  LotLE × talk  19:12, 15 June 2006 (UTC)


 * Again, I haven't programmed them, and have no citations, but I have friends who were into it, and it is called Reverse Polish Lisp after all. Ideogram 19:34, 15 June 2006 (UTC)

Back to what phrase to use as definition

 * I'd yield. While all practical general-purpose languages are Turing-complete; there are several pedagogical languages which aren't.  In addition, there are quite a few domain-specific languages which aren't Turing complete, either. --EngineerScotty 18:18, 15 June 2006 (UTC)


 * Well that's the issue, are pedagogical and domain-specific languages general-purpose programming languages? My sources say no.  Ideogram 18:36, 15 June 2006 (UTC)


 * The question isn't really if they are "general-purpose programming languages" but if they are "programming languages". The latter is the topic of this article.  LotLE × talk  19:12, 15 June 2006 (UTC)


 * My sources define programming languages as general-purpose programming languages. This is just a choice of definitions, you aren't going to prove anything by reasoning from first principles.  Ideogram 19:34, 15 June 2006 (UTC)

This argument's gone on too long. Nobody denies that FORTRAN is a programming language, but old-style FORTRAN had neither a stack nor a heap, and was therefore not Turing-complete. Nobody denies that the simply-typed lambda calculus is a programming language, but STLC is strongly normalizing, i.e. all programs terminate and STLC is therefore not Turing-complete. Non-Turing-complete programming languages are proposed at top PL research conferences all the time, for reasons that any PL researcher can explain at length --- take, for example, the stackless, heapless language ESP. Turing-completeness is a theoretical property that has almost no relevance to whether any language should be considered a "programming language" or not. k.lee 18:41, 15 June 2006 (UTC)


 * I think the article ought to note that practical general-purpose languages, modern ones especially, are all Turing Complete. However, Turing-completeness isn't, and shouldn't be claimed to be in the article, a prerequisite for a programming language. --EngineerScotty 18:58, 15 June 2006 (UTC)

I don't understand why everyone here thinks they are smarter than three full professors with published textbooks. Ideogram 19:08, 15 June 2006 (UTC)


 * Actually, I am smarter than most full professors with published textbooks :-) (I'm not a professor, but I am a Ph.D. and have written a CS textbook; still, there are lots of folks a lot smarter than me). But that's not at all the point.  We're trying to write an encyclopedia for a certain readership; not everything any smart person wrote in any context is necessarily equally germane in the different context we're writing for.  A textbook is a different format than an encyclopedia, and follows somewhat different stylistic goals.


 * The particular statement you like—let's abstract it as "All general-purpose programming languages are Turing-complete"—has a somewhat different "truth status" at different readership levels:
 * To a "general readership" the statement is gibberish since it uses terms they have no sense of.
 * To a CS 101 student the statement is "true (enough)", and makes a good point about what is and isn't relevant to contrast among familiar programming languages.
 * To a CS graduate student or professor (or even more-so, to a mathematician) the statement is false, since it confuses a "very large" state space with an infinite one.
 * To a programming language expert the statement is false not just in the mathematical sense, but because there are many "edge case" languages (old FORTRANs, special domain languages, research languages, etc).
 * Statements come in more shades than just "true" and "false", and good writers (like those textbook authors you cite) know that. LotLE × talk  19:27, 15 June 2006 (UTC)


 * See my note above about not using the term "Turing-complete". A large portion of this debate could have been avoided if you had just seen my edit before Derek farn reverted it.  Ideogram 19:38, 15 June 2006 (UTC)

My 2c: I don't think "Turing completeness" should be used to define "programming languages". As others have pointed out, there are some things that are generally considered programming languages that are not Turing complete (e.g. Charity). Conversely, even languages like Brainf**k are technically Turing complete, but are not all that useful for any practical purpose. I think it's probably worth mentioning Turing completeness somewhere within the article. But not as a defining characteristic. --Allan McInnes (talk) 20:00, 15 June 2006 (UTC)
 * Of course, as an aside, it's probably worth mentioning that Brainfuck has an article here on Wikipedia. :) --EngineerScotty 20:02, 15 June 2006 (UTC)


 * But Allan, don't you see my point about verifiability, not truth? Ideogram 20:08, 15 June 2006 (UTC)


 * I do. I even agree with it. My point is that while it's certainly valid and verifiable to say that "Authors X, Y, and Z define programming languages as Turing complete languages", that is not the same as directly asserting that "all programming languages are Turing complete" since (a) the verifiable fact is that certain authors have made a definition, not that a particular definition is in some sense "true", and (b) it is a verifiable fact that some people define certain non-Turing complete languages (such as Charity) as programming languages. --Allan McInnes (talk) 23:42, 15 June 2006 (UTC)


 * I'm treading on thin ice here since I don't want to piss off LotLE, but let me just note that I had all this in mind when I made my comments in the section above, "Turing-complete POV" which no one seems to have noticed.


 * Now, I really don't think I should post on this subject anymore, as we all need a chance to cool down. Ideogram 23:58, 15 June 2006 (UTC)

I've got to sort out may baby RSN, so I've just skimmed the hundreds of closely argued technical points, but here is my view pending a thorough analysis:
 * A language like C has a fixed pointer size (as mentioned above). The size is not defined by the language, but sizeof(ptr) is defined to be fixed once the program starts. This means that, technically, you cannot implement a Turing machine in C, as a Turing machine has an infinite number of possible states.
 * The meaning of Turing machine is vague in popular speech, and includes a normal general purpose computer.
 * A programming language is a language you can write programs in.
 * Cites are important, but cites for contradictory things will be easy to find when the concept is used widely by non-technical people.
 * Who is this article aimed at?
 * Baby has woken up now! Stephen B Streater 21:13, 15 June 2006 (UTC)


 * Thank you for your time Stephen, I hope we're not wasting it. As I noted above, I am not proposing using the term "Turing-complete", rather I want a phrase something like "all general purpose programming languages are equally powerful in a mathematical sense".


 * I feel this article should be aimed at a general reader who doesn't even know what a programming language is. Ideogram 21:26, 15 June 2006 (UTC)


 * Thank for your thoughtfulness. I like the idea that all programming languages are basically equivalent. I'll have to look into markup languages and other restrictive languages to see whether they count as programming languages. What about a calculator with a 36 instruction memory? Or 1 instruction? Clearly, in practice, for two implementations, it is likely that only one can emulate the other as one will run out of memory first. But does this matter in practice, which is what computing is about. After all, a faster computer is only one upgrade away. Stephen B Streater 21:41, 15 June 2006 (UTC)

Many sources
I feel that we should be reporting definitions as used in the literature rather than trying to figure it out for ourselves, thus my constant repetition of "verifiability, not truth". Ideogram 21:51, 15 June 2006 (UTC)


 * But what do we report? I'm assuming a 5k word article doesn't have enough room in it to blindly copy every word in each of several 300k word books. Actually, probably hundreds of 300k word books.  Heck, even if we could blindly copy, that would by copyvio.  So in fact, what we do isn't very much at all like what you are claiming here.


 * What we actually do is make lots of judgements about relevance, organization, selection, balance, reliability, etc. As well we need to make judgements about mellifluousness and other stylistic qualities.  All of that requires using our own judgement and intelligence, and knowledge, as editors, not act as photocopiers or card catalogs.  Wikipedia's not Google either.  Or in other words, editors need to do a whole lot of thinking, and very little reporting.


 * The familiar mantra about "verifiability not truth" has a certain purpose, but it is very much an edge case. It's basically there to curtail arguments of stunning new conclusions by editors.  We don't want original research, but that doesn't mean editors are brain dead.  It means... well, that editors don't do research in the sense of primary scientific results.  And also that the argument that some esoteric minority idea doesn't "need to be presented because it's true" (even though the conspiracy of majority opinion persecutes the poor suffering truth).  Essentially the "verifiability not truth" mantra is a shortcut around paranoid delusions, not a demand to throw out common sense and background expertise.


 * And in this case at hand, none of the stuff about languages that are and are not Turing-equivalent (with or without mentioning Turing's name) is any sort of novel new result. It's CS 301 or something, and the basic stuff of hundreds of textbooks.  But there's no one sentence in those hundreds of textbooks (such as the one or two you've suggested) that leaps out of its own volition as more important or more verifiable than the rest of the academic field.  Yeah, a couple smart people have no doubt decided that it was a reasonable pedagogical shortcut to tell students that "All programming langauges are Turing-complete"; and dozens or hundreds of other smart people have decided on slightly different pedagogical organizations (for example, the few dozen definitions we've seen that don't use this formulation).


 * Stephen B Streater gets this point exactly right above: the terms involved are used by many different people—both experts and non-experts—in slightly different ways. I don't think it matters whether we use the phrase "Turing-complete" (or "Turing-equivalent") or just "equally powerful mathematically".  In either case, we are pretending to have a greater precision and exactness than actually exists in the use of "programming language" as a term.  I'm quite happy (as we have now) to put in something along the lines of "Most widely-used general-purpose programming languages are equally powerful in a mathematical sense".  Clearly, to a very rought first-order approximation, that's right.


 * I do find the mechanistic repetition of a not-particularly-relevant WP policy as if it "proves" you're right on some stylistic discussion a bit dissimulative, and annoying. I'm still trying to figure out if somehow in your own head WP:V seems to mean something different than anything I've been able to decipher.  It sure doesn't mean that we must quote Smith rather than Jones, as you seem to reduce it to.  LotLE × talk  21:55, 15 June 2006 (UTC)


 * I suggest we take a break from discussion. You are getting cranky.  I hope you realize this does not diminish my respect for you in any way.  Ideogram 22:31, 15 June 2006 (UTC)


 * Nah... I started out cranky :-). Or maybe crankish? Don't take my crotchety nature too seriously, if you can avoid it.  I do endorse the points I'm trying to make, of course, but I should really learn to be a little more happy-joy-joy in my manner of expressing them.   LotLE × talk  01:19, 16 June 2006 (UTC)


 * Thank you for a much needed laugh. Unfortunately now I'm the one feeling cranky.  I'm taking a break from this page for a while.  Ideogram 01:26, 16 June 2006 (UTC)

(following in response to Ideogram) Furthermore, I am not certain that your citations would be dispositive even if they weren't contradicted by clear practice in the literature. Sometimes textbook authors will define a term in a particular way for convenience within the lexical scope of the textbook, even though in practice that term is used in a different sense in the broader discipline. k.lee 22:25, 15 June 2006 (UTC)
 * The author list for ESP paper (cited above) includes a full professor at Princeton (Kai Li). The program committee that accepted it to the ACM Conference on Programming Language Design and Implementation in 2001 had about a dozen former or current professors, as well as the vice-chair of ACM SIGPLAN.
 * The simply-typed lambda calculus is described in the textbook Types and Programming Languages  by U. Penn. prof. Benjamin Pierce.
 * Even one of the textbooks you cite (Programming Linguistics) counts FORTRAN as a programming language, even though FORTRAN-77 clearly is not Turing-complete.

Here are some ideas this morning: Stephen B Streater 06:36, 16 June 2006 (UTC)
 * Citing sources is definitely good.
 * To me, programming language is an English term usually defined by giving examples so there may be no consistent definition which everyone who uses the term agrees with.
 * A definition which includes a range of alternatives (all cited if possible) would be better than a narrow definition. Alternatively "PL can be defined as ...". This will avoid alienating people with their own pet version.
 * On Mathematics we spent a lot of effort coming up with a consensus definition (uncited but there's an extensive discussion on derivation). At least programming languages are relatively recent.
 * A glance at Language and Formal language and Computer language may be instructive.
 * Although many programming languages have finite memory, a cited definition along Turing lines with a caveat is one solution.


 * This all sounds pretty good to me. Sorry I can't be more specific but I'm kind of burned out on the topic.  Ideogram 06:56, 16 June 2006 (UTC)

fully specified behavior
"The combination of the language definition, the program, and the program's inputs fully specify the external behavior that occurs when the program is 'executed'."

Correct me if I'm wrong, but don't all language definitions have sections where they say "if you do this the resulting behavior is unspecified"? Should we mention this? Ideogram 09:13, 15 June 2006 (UTC)

We could change this to:

"The combination of the language implementation, the program, and the program's inputs fully specify the external behavior that occurs when the program is 'executed'." Ideogram 09:24, 15 June 2006 (UTC)


 * While your statement is true this is an article about programming languages, so they ought to get a mention. In fact your sentence really belong in the article on programs.  There is quite a bit of the Purpose section that would probably go better in the Program article.  Derek farn 10:14, 15 June 2006 (UTC)


 * Please elaborate. Ideogram 10:20, 15 June 2006 (UTC)


 * Which bit requires eloboration?  The Purpose section could read "The purpose of programming languages is to enable programs to be written."  A rather pointless statement, but then (as you know) I have never been a fan of this subsection  Derek farn 16:20, 15 June 2006 (UTC)


 * If you wish we can go back to the list of topics covered that I provided earlier and go over them one by one. We can also consider alternative titles for the subsection.  Ideogram 16:27, 15 June 2006 (UTC)

untyped and typed
I'm not sure about the phrase "semantically meaningless". I don't understand what it means in formal semantics, since I don't understand formal semantics, but if you are using the term "semantically" in a general sense then the programmer certainly has a meaning in mind (assuming it is not an error).

In assembly language the results are usually not unspecified since it has no types and everything is just bits. The results depend on the representation used by the assembly language which is certainly visible to the assembly language programmer.

Forth is an untyped language; Forth programmers wouldn't consider such operations "meaningless" with "unspecified results". Ideogram 09:22, 15 June 2006 (UTC)

unicode
That's a very good point, anonymous editor at 213.41.137.29. You should create an account and join us. Ideogram 17:15, 15 June 2006 (UTC)

verifiability, not truth
There's some discussion of this issue at User talk:Lulu of the Lotus-Eaters that you might want to read. If we want to discuss this issue in earnest we should probably take it to the Village Pump. Ideogram 20:59, 15 June 2006 (UTC)
 * I'm not sure the meta-debate is necessary. It is verifiable that there exist non-Turing complete languages in the literature (some with implementations); it is also veriable that there is a noted absence of modern production general-purpose languages which aren't Turing-complete.  The latter point is hard to verify, as "proving" it would require an enumeration of all such languages (whereas a single example suffices in the former case).  At any rate, I think we're presently debating minutaie, when there are much bigger fish to fry in this article.  --EngineerScotty 21:10, 15 June 2006 (UTC)
 * No no you're missing my point. The definition I'm pushing is verifiable, so far all of this debate has missed that point.  The actual facts as to which languages are Turing-complete or not is completely irrelevant.  None of you pushing the other definition have verified the definition.  It has nothing to do with the facts you are asserting.  Ideogram 21:22, 15 June 2006 (UTC)


 * As for the bigger fish to fry, I have the last post on just about all of them, but it's this one that everyone responded to. Ideogram 21:28, 15 June 2006 (UTC)

reverting without discussion
I have had it beaten into my head not to make controversial changes without discussing them first. Derek farn seems to feel this rule does not apply to him and feels free to revert anything he likes without discussion. From previous comments it is clear that Derek farn holds me in utter contempt. I earnestly request the mediator to step in. Ideogram 23:22, 15 June 2006 (UTC)


 * Ideogram Please read the links referred to by material. This will enable you understand why the material makes sense.  Also I notice that you rarely add links in your own material.  Please do so as this enables people to follow up on what you have written.   Derek farn 23:38, 15 June 2006 (UTC)


 * Without commenting on the personalities involved in this debate; Derek's edit appears to be the more correct one. Many languages not supporting Unicode will happily accept the full Latin-1 character set, allowing most European languages to be encoded.  Unicode also extends beyond non-English alphabets, allowing other cool symbols like &le; or &larr; to easily be encoded, rather than having to use approximations such as <= or <-.  (I don't know of any language off the top of my head which allows such Unicode operators, and most keyboards don't have keys for such things, but the HTML-4 escape sequences like &lt;le; for &le; are easy enough to generate).
 * Turning to the personalities... might I suggest that oil and water appear to be mixed here? I intend this in the most polite tones possible, but both of you gentlemen seem to be very defensive of your positions on minute details.  I propose the following language as a compromise:
 * Support for Unicode so that source code is not restricted to those characters contained in the ASCII character set; allowing, for example, use of non-Latin-based scripts or extended punctuation.
 * Support for Unicode so that source code is not restricted to those characters contained in the ASCII character set; allowing, for example, use of non-Latin-based scripts or extended punctuation.

If you don't like the "or extended punctuation" part due to lack of practice, feel free to strike it.

--EngineerScotty 23:40, 15 June 2006 (UTC)


 * Looks good to me. EngineerScotty most languages handle Unicode at the lexical level, ie before operators 'exist'.  Some languages allow Unicode everywhere (eg, Java) while others are more restrictive (eg, C).   Derek farn 23:46, 15 June 2006 (UTC)

All I wanted was to talk about it. Was it really necessary to have an edit war to reach this point?

Scotty, your proposal looks good, but I would like to propose that we replace "source code with "program text". Ideogram 23:50, 15 June 2006 (UTC)
 * Fine by me. --EngineerScotty 23:52, 15 June 2006 (UTC)


 * Waiting for your approval, Derek farn. Scotty if he approves I think you should make the edit.  I think both of us should lay off editing for a while.  Ideogram 00:01, 16 June 2006 (UTC)


 * Source code is a well known term and the subject of an article that discusses what might otherwise be called 'program text'. Why invent another term for something that already has a well known name?    Derek farn 00:18, 16 June 2006 (UTC)


 * Egads. I smell another somewhat inelegant compromise coming.  :)  Will change the article forthwith.  --EngineerScotty 00:21, 16 June 2006 (UTC)


 * I really think we should be aiming this article at a person who doesn't know what a programming language is and for whom "source code" is not a well known term. The meaning of "program text" is self-evident.  I don't think it's a good idea to make many readers click on a link to understand the sentence; it breaks their concentration.  Ideogram 00:23, 16 June 2006 (UTC)
 * I've made my change. If you two wish to argue over two words, be my guest.  I withdraw for now.  --EngineerScotty 00:25, 16 June 2006 (UTC)


 * I think "source text" is unacceptable to both of us. Ideogram 00:26, 16 June 2006 (UTC)
 * Good, you agree on something. :)  Feel free to change it to whatever is acceptable to both of you.  --EngineerScotty 00:30, 16 June 2006 (UTC)


 * I think that "source text" is ok, "source code" would be better, but I am happy with things as they are. At least it makes it clear we are talking about source.   Derek farn 00:33, 16 June 2006 (UTC)


 * Someone who doesn't know what a programming language is isn't going to understand the term "source". Why won't you address my objections?  Ideogram 00:38, 16 June 2006 (UTC)


 * I really feel like I should refrain from editing for a while. I can only hope that Derek farn will do the same.  Ideogram 00:31, 16 June 2006 (UTC)

Should we have a straw poll? Am I (once again) the only one who feels this way? Ideogram 00:32, 16 June 2006 (UTC)

I have a brilliant suggestion:


 * Support for Unicode so that source code (program text) is not restricted to those characters contained in the ASCII character set; allowing, for example, use of non-Latin-based scripts or extended punctuation.

Ideogram 00:41, 16 June 2006 (UTC)


 * Looks fine to me. --EngineerScotty 00:48, 16 June 2006 (UTC)

Ideogram please follow your own suggestion and let's leave this issue alone. EngineerScotty has worked out a compromise (thanks to him, from me). Derek farn 00:59, 16 June 2006 (UTC)

Here we see further evidence of Derek farn's total contempt for me: User talk:Cobaltbluetony. Ideogram 01:01, 16 June 2006 (UTC)

At this point I cannot work with Derek farn until the mediator returns. Ideogram 01:08, 16 June 2006 (UTC)


 * And as if by magic, the shopkeeper appeared. Sorry, crap UK old childrens TV program joke. TIME OUT guys, calm down, have a beer, and relax.  This situation keeps arising because you seem determined to aggravate each other.  Here's a proposal - if someone does something to the article you don't like, DON'T revert it, bring it to the talk page to discuss it.  And actually discuss it.  By the nature of the wikipedia, articles need to be written in language that is acceptable to everyone, not necessarily the exact wording each editor would choose.  If the language of the text does the job, but isn't the wording you would have used, let it go - other bits of the article will be in your language.  The above argument is a prime example - source code would be perfectly fine.  Sure, some people may be a bit confused, but would have done the job perfectly well.  Before objecting to language, try and think putting aside who made the edit, does it do the job reasonably well (note, not perfectly, just well enough), if so let it be and move on.  You're both skirmishing with the 3RR, which isn't a good idea, please be cautious with your reverts. Kcordina Talk 08:48, 16 June 2006 (UTC)


 * Well said, well said. Maybe we could put program text in paras after the first use od source code to help aliviate confusion. Jaxad0127 17:17, 16 June 2006 (UTC)


 * That was my suggestion. Derek farn doesn't want to discuss it.


 * I'd like to point out that I am always the one who wants to discuss things, and Derek farn always ignores me. Ideogram 23:32, 16 June 2006 (UTC)

Jaxad's merge
Jaxad, I don't know if that merge was a good idea. It's bound to confuse anyone coming upon the discussion later trying to figure out what happened.

Ah, who am I kidding. No one is bored enough to wade through all that crap. Ideogram 00:08, 16 June 2006 (UTC)


 * The reason I did that was because the discussion was split between two topics. SOmeone looking at just one wouldn't get everything. Jaxad0127 00:14, 16 June 2006 (UTC)


 * It's ok, not a big deal. Thanks for trying to help.  Ideogram 00:19, 16 June 2006 (UTC)