Wysiwyg Type System Discussion

Continued from ColdFusionLanguageTypeSystem


In the development context, yes. The debugger/console essentially has logic similar to : if (targVar.typeTag==STRING) {consoleResult = QUOTE + targVar.toString() + QUOTE;}. It's essentially a "friendly" way to echo the explicit type indicator. By WYSIWYG I mean there is nothing separate from the "value" or "representation" that affects IoProfile (observable language behavior). Further, debugger/console behavior may be implementation-specific such that a different vendor may display it different or without such type hints in their gut-displaying tools. It's courtesy info, not part of the language definition itself. -t

[Hmm. As far as I can tell, it's true that the console display of various values in JS isn't standardised -- there is at least a definite de facto standard in that all major implementations display values in-console in terms of their literal syntax, as I describe, rather than a user-facing string conversion. Your distinction between the "value" and a somehow-separate type seems rather misleading: A representation is entirely meaningless without some indication of how it is to be interpreted, as a type provides, and since representations are strictly opaque and also not observable using them as a (the?) descriptor of observable language behaviour strikes me as odd. -DavidMcLean?]

Why is it "meaningless"? Tag-free languages do just fine without a (detectable) type indicator. It's typical that dynamic languages use context and programmer convention to "define" meaning/usage, rather than "intent" explicitly defined to the machine. And while I agree that the "machine-level" implementation can often be undetectable and/or interchange-able to "outsiders", whether one models or thinks about "objects" (values, variables, etc.) as having a singular content "slot" or a separate "type slot" from the "value slot" may be a matter of personal choice and/or modelling parsimony. Something that ACTS LIKE it has a separate slot from "value" or "content" (in most cases) is not WYSIWYG because if you only see the content, you are not seeing the type slot (or a clear equivalent), and thus are NOT getting what you see (WYSI*N*WYG). There is a hidden part or mostly/usually hidden part. A debugger/console may always show a clue to the type indicator, but that's sneaking in the back room to see Mr. Oz manipulating the projection of the face he shows to "regular" users. Anyhow, I choose NOT it define a language by what a debugger/consoles shows for reasons already given, and that's my working frame of reference on this wiki. As a reality test, if a vendor released a language interpreter they called "JavaScript" but its console didn't have such type-clue features, most developers would STILL call it "JavaScript". Therefore, the console and its output is NOT a defining feature of "JavaScript" for users of JavaScipt? (app programmers). (We've had this discussion already somewhere in the "value fights" I'm pretty sure.) -t

[Representation is meaningless without some indication of how it is to be interpreted because a "standalone" representation looks like this: 10101011110110110110101011101101110 (Maybe. A standalone representation could also look, say, like this {{}, {{}}}, if you're working on paper or using an unusual machine architecture. Generally, representation can have essentially arbitrary form, with no obvious resemblance to the value thus represented.) There's no way to know whether it's a string, or an integer, or an IEEE floating point number, or a bitmask, or anything at all. Associating the representation with some type gives the language the ability to interpret said representation meaningfully and hence make use of it. "tag-free" languages, as you call them, associate scalars' representations with the "string" type contextually -- there is indeed no need to "bundle" the type with the representation under such languages, apart from the indication that a given value is a scalar rather than an array, hash, object, whatever, but this is only because the language already knows that all scalars are strings with a particular representation. Treating the user-facing "display" formats as the be-all and end-all of values' forms borders on the absurd, considering that values can be displayed in any form desired for the application; if you must consider output rather than language meaning, focus on the literals that produce particular values (e.g., 1, 1.2, "1.2") since those unambiguously denote a particular, specific value by design. Indeed, a conforming JS interpreter could readily diverge from the de facto standard of displaying canonical string representations in the console, if it wanted to be unhelpful, but that doesn't render the canonical representations (as encoded in language syntax as "literals") any less canonical. (Oh, by the way, you may wish to switch analogies for your description of how debuggers give an "inside peek", considering that the Wizard's projection was the fake and that the man behind the curtain was real.) -DavidMcLean?]

Re: "if you must consider output rather than language meaning, focus on the literals that produce particular values (e.g., 1, 1.2, "1.2") since those unambiguously denote a particular, specific value by design." -- That's not necessarily true. In tag-free languages, 'a=7;' and 'a="7";' are completely equivalent as far as language behavior (unlike JavaScript). No known language operation can detect that one was assigned with quotes and one without. And I focus on what you call "output" instead of "meaning" because meaning is in the human head, not the computer. I focus on objective reality, not how (some) human may think about "types". You are again mistaking your internal pet head models for universe truths and/or canons. Calling something a canon does not make it so, nor does repetition of claim. Repetition is annoying, not truth. Anyhow, I define a language and type system (or lack of) by its IoProfile, and I believe most would agree, and I am going to keep doing it. If you want to define it different, that's your prerogative. Just don't paint it as a canon without stronger evidence or real surveys. Some will want to define "Oz" by what's projected on the wall, and others by what party crasher Dorthy and her rusted friends discovered in the control room. Let each have their way. But if a vendor comes along and replaces the professor but keeps the same projection style, the outside viewers may not know or care that he's been swapped.

[I claimed that a literal unambiguously denotes a particular, specific value by design. This is true, regardless of the fact that in some contexts the same value is denoted by two or more literals. In languages with a single scalar type, such as Perl, '$a = 7;' and '$a = "7";' are indeed equivalent, as both the numeric and string literals denote the same scalar; that doesn't stop literals from unambiguously denoting particular, specific values. Asserting that meaning exists in the human head is correct; asserting that meaning only exists in the human head is not. I believe this has been discussed on the wiki before, but the meaning -- or "semantics" -- of programming language constructs is well-defined and implemented in the language interpreter or compiler. Sure, it exists in the human head, but it also exists in the language specification and is objective and unambiguous enough to be processed by a computer. That which I describe as "canonical" is that described by language specifications and documentation, not by my "internal pet head models"; we have clearly canonical sources for programming language behaviour, since programming languages are constructed as an abstract, mathematical ideal. There's no need to infer or guess at how languages work based on their "IoProfile", because we built them and we know exactly how they work. -DavidMcLean?]

Exactly. Well put.

We were talking about types, not literals. Thus, I don't know why you are telling me "doesn't stop literals from unambiguously denoting particular, specific values." It appears to be off-topic. I don't see its purpose. And the language builders are not the target audience when discussing "type behavior"; and documentation on dynamic types is typically poor. Further, even if the interpreter builder used model/implementation X, there is nothing stopping a user from using model Y to "explain" or forecast language behavior, as long as the results match. You seem to want to beatify the builder's view. Remember our stack discussion? Interpreter builders are typically focused on machine-side issues, not human grokking. We've been over this many times in the Value Wars and I do not wish to participate in this dance again. -t

And my WYSIWYG point still stands: In tag-free languages most or all of the language's operators/API's that "emit" inspect-able content don't hide extra information, unlike tag-based languages such as JS and PHP. A variable that emits "123" will subsequently act the same for further usages, while JS and PHP may not because they have a "hidden" type indicator/tag that is typically not emitted by language's operators/API's. The emitting operators/API's are not showing you the whole picture (and I don't count debuggers etc. per above). -t

[Why cherry-pick? User-facing output formats can hide all manner of information, and not only values' types (e.g., rounding for display hides decimal precision). Development display formats, which typically correspond to literals for producing the values being displayed, do not. Why would the former be a more valid basis for a system of types, variables, and values (or lack thereof) than the latter? -DavidMcLean?]

Like I keep saying, debuggers/consoles can change or disappear without changing the perceived existence of the language. They are an unstable reference point. If you change the language's base operations/functions, you are changing the language itself, to most app programmers. And debuggers/consoles don't necessarily correspond well to literals, per above, such as where literal quote-ness doesn't have to be tracked or kept in some languages.

[A language isn't defined by what "most app programmers" think of it. Languages are defined by specification, and the specifications for popular imperative DynamicallyTyped programming languages describe development output formats (repr() in Python and .inspect in Ruby for example). The consoles for both languages use this facility, but in both cases it's definitely a baked-in core language feature and removal will change the language itself. -DavidMcLean?]

Vocabulary is ultimately defined by "the masses" rather than tool makers whether you want it to be or not. If some languages or implementations blur the distinction between user-side output and "X-ray" tools, that certainly may complicate the matter. Classification can sometimes get messy. Personally I think they should be careful about hard-wiring some things to arbitrary implementation, but no language builder has to take my abstraction advice. (Sometimes companies do such to make it harder to clone a language/tool.)

[Languages are defined by their specifications. If the masses disagree, they're simply wrong. And "implementation"? repr() and .inspect have nothing to do with implementation; they're utilities for producing a literal that denotes a particular value, as defined by the language's syntax and semantics. The underlying implementation is irrelevant, since only conformance to the specification is required for these to operate correctly. (And that wouldn't make it harder to clone such a language, because it's not depending on implementation details.) -DavidMcLean?]

Bullshit! It's generally agreed that usage defines vocabulary. And the last part is circular reasoning.

[Usage defines vocabulary, but a language is not a word. A language is defined by a specification, and disagreeing with that specification makes you wrong, because the specification is the canonical description of the language's behaviour. How is the last part circular reasoning? You suggested that dependence on implementation details would make cloning a language more difficult, so, since I'd just pointed out there's no dependence on implementation details, I also noted that cloning is not inhibited by such. -DavidMcLean?]

A language is defined by whatever hell the language user wants to define it by. The Vocabulary Gestapo is not going to take them away and lock them up (although Russia is getting weird of late). And the "repr()" thing appears to be a side distraction that adds nothing new and so I will not discuss it any further.

[No, a language is defined by its specification. That's why we have specifications. repr() may indeed add nothing new, since it's just one example of the ability to access canonical string representations (or, if you prefer, literals) for particular values; since it's just one example, however, and the functionality is commonplace, dismissing it relative to user-facing output still comes across as unreasonable cherry-picking. -DavidMcLean?]

Defining it by a specification is purely a language user choice.

[Citation needed. -DavidMcLean?]

Citation needed for opposite claim, otherwise the default answer stays at "null".

[Stop ShiftingTheBurdenOfProof. Languages are not discovered fully-formed and studied -- they're defined intrinsically by language designers. The specification is the document that describes the actual language design as chosen by its designers. Use of a specification is, if anyone's choice, a language designer choice. -DavidMcLean?]

Projection. Natural languages are rarely defined by a canon or authority, so why should computer languages be different?

[Because they are. Computer languages are constructed languages, which are designed and defined by an authority. -DavidMcLean?]

Because YOU say so? Lovely. All (known) languages are "constructed". It's not a difference maker.

[No, natural languages aren't constructed. They form organically over time. Computer languages, along with a few human languages which we typically explicitly describe as constructed, were defined and described by an authority. -DavidMcLean?]

So are computer languages. Almost every existing computer language was influenced by one or more prior languages, personal preference, and market success, ie, "organic". Not sure it would make a difference anyhow. Construction technique is a rather arbitrary tie. The tool user usually doesn't care how it was made; by a plant named "Seymore" in Little Shop of Horrors, or by some dude at a drafting table.

[Computer languages were certainly influenced by prior languages and other aspects, but they don't form organically -- they're explicitly designed by an individual or group. Thus they're called "constructed", since, rather than forming over time through use as natural languages do, they're designed and defined explicitly. Thus, the specification is an absolute authority on how the language works. It certainly doesn't matter to a user who wrote the specification; regardless of the language designer's identity, disagreeing with the specification remains incorrect. -DavidMcLean?]

Sorry, I don't see how the second part follows from the first part. Please flesh out your logic steps more. If Vender B comes along and makes a new interpreter with the same IoProfile, app developers could start using the B version and stop caring about A's version and the author of A would be ignored. IoProfile is closer to how the tool users view tool equivalency. You may personally WANT them to care about the original author, perhaps because you are an author yourself, but sorry, that's not the way the market in the USA works. I'm just the messenger.

[Which parts do you believe to be "first" and "second"? Natural languages form through use over time with no explicit effort from a designer; constructed languages are designed up-front and evolve only as a result of explicit design changes. A language designer may write a specification of their language's behaviour; as computer languages are constructed and have exactly-and-only the properties the language designer gives them, that specification is a definitive and canonical description of the language behaviour. Thus, personal disagreement with the specification is fundamentally wrong, since the specification is the canonical definition of every aspect of the language. If vendor B came along and made a new interpreter that conformed to the specification, there would be no difference; an interpreter that did not conform to the spec would, quite simply, not be implementing the same language. An implementation that follows the spec should meet your "IoProfile" requirement but should also meet the stronger requirement of having identical syntax and semantics to other conforming implementations. -DavidMcLean?]

If the spec had an error (deviate from implementation) and lots of source code built up to rely on the error, then the IoProfile would trump the written specification.

[No, it wouldn't. If the spec deviates from the implementation, the implementation is in error. -DavidMcLean?]

Languages are defined by usage and perception, not by perfection. I know you are going to disagree. So be it. LetTheReaderDecide.

[Natural languages are. Constructed languages are not. -DavidMcLean?]

Go ahead and believe that.

[I shall, and I'd encourage you to do the same. -DavidMcLean?]

I'm confident most readers will agree that you are full of shit. Shops are free to consider equivalency any damned way they please.

[Then most readers would be mistaken and would do well to comprehend the distinction between natural and constructed language. -DavidMcLean?]

That distinction is arbitrary.

[How so? What do you think it means for something to be arbitrary? Why would a distinction like this one be arbitrary? -DavidMcLean?]

Like you forgot above, shops are free to ignore that factor, and often do.

[How does that make the distinction between natural and constructed language "arbitrary"? How does it even relate to it? -DavidMcLean?]

I'm judging "compatibility" from the tool users' perspective. If you want to judge it from God's perspective, that's fine, but I won't care.

[Why are you even judging compatibility? When did we start doing that, instead of arguing over whether languages are defined by their specifications? -DavidMcLean?]

I can "define" anything I want, and a language author can define anything they want. Making definitions is free and easy. However, if users/masses choose not to use that definition, tough shit, they get the final vote.

[Language designers define the language and codify that in terms of specification. It doesn't matter if the definition is ignored -- that simply implies that the language is ignored. Popular languages, quite obviously, have not been ignored. -DavidMcLean?]

If you want to argue that 95% of the people are using a definition wrong, so be it. Only 5% will care.

[I'm not sure to what precisely you're referring with your imaginary statistics, but it reeks of ArgumentFromPopularity. A spec is still a canonical language definition even if 0% of users pay attention to it. -DavidMcLean?]

Language IS defined by ArgumentFromPopularity. Languages are meant to communicate, and if some or most communicators choose to not recognize or recognize differently some part of the language, they can and do.

[Natural languages are defined by ArgumentFromPopularity. Constructed languages aren't; they're defined by their designers. Stop equivocating. -DavidMcLean?]

No evidence that the rules of vocab are different for both. Stop making up false rules.

[Plenty of evidence. Just read what I've been saying. Constructed languages are those defined rigourously up-front by an explicit designer -- an individual or group specifically setting out to build a language -- and evolve only as a result of deliberate modifications to the language. Natural languages form and evolve simply through use in a community and have no governing body behind them. As the former are guaranteed to meet and only to meet the properties their designers explicitly baked into the definition, the design as planned by the designers and codified in their specification is canonical. -DavidMcLean?]

It's still not clear why or how "rigorously up-front" makes it canonical. Is this kindergarten where you get points merely for trying such that their fastidiousness should be rewarded with canonization? I don't get it.

[Put simply, the design and specification of a constructed language is that language. It can't help but be canonical, by definition. An interpreter might exist that interprets and executes instructions written in that language, but the interpreter isn't the language. If you write an interpreter that doesn't meet a given language's spec, you've not written an interpreter for that language. -DavidMcLean?]

No. The masses that utter "Php" get to define what "Php" means. Maybe that's not fair, but that's the way vocabulary is traditionally and currently defined.

[True enough, but that decision would be over whether "Php" means "the language commonly known as PhpLanguage, created by Zend" or if it means something else entirely. The language being referred to is formalised by specification (To an extent. As usual, PHP's a poorly-documented mess.), and its constructs are defined by its designers rather than by the masses who speak of it. -DavidMcLean?]

"Kleenex" (below) is likewise formalized in legal documents, but the masses choose to ignore that fact.

[Beware of conflating a word's definition with a concept's or more specifically a language's. The words "Kleenex" and "Php" can refer to appropriately-branded facial tissues and languages respectively, or might not, and that's a natural-language question. There is no authority that can assert that "Php" always means PhpLanguage, nor is there a canonical source. I haven't actually been claiming otherwise, however. What I do claim is that PhpLanguage itself, not the word referring to it, is a constructed language and hence has formalised and canonical definition. Whether, for example, the word "for" in PHP indicates a for loop or a function definition is a constructed-language question, which is answered by specification, rather than merely a decision for the masses. -DavidMcLean?]

I will agree that it "has a formal definition", but not that it's canonical. Canonical-ality is about authority. In our society, it's generally agreed that masses are the final authority on definitions technical and non-technical (except maybe in highly regulated professions such as medical and legal). In other words, the existence of a formal definition X is not necessarily the same as acceptance of the definition. Like you ignored above, ANYBODY and their dog can make a definition. But acceptance is a bigger hurdle. (The masses can and often do tentatively agree to follow the author's specification, but are not compelled to do so.)

[Absolutely a canonical definition demands an authority. The definition of a particular language has an authority, that being the language designer -- if you refer to a particular language, assuming you do mean language X when you say X, you necessarily defer to the authority of the language designer. Anyone can make a definition, and if they choose to do so and make a language definition, they are defining a new language. Acceptance is not necessary; the language is defined by its designer's definition, and ignorance of it is simply ignorance of the language. -DavidMcLean?]

You are repeating yourself. I think you just want your profession beatified. Well, too fucking bad, the masses get final say. If that hurts your ego or idealistic view of the world, the hell with it; time for your "pride" or idealism to get a reality check. I'm tired of your bullshit; you are a biased fool.

I personally find your Catholic-like view of IT disgusting and disturbing, bordering on being dangerous to the profession. --top

[Of course I'm repeating myself; you keep being mistaken in exactly the same ways, so I'm repeatedly explaining where you're mistaken and what's correct. The masses do essentially decide the definitions of words in English, but only the language designers get to decide whether "while" indicates a foreach or while loop in PHP. -DavidMcLean?]

Some control is not perfect control. And the masses decide whether to accept the language to begin with.

[Care to illustrate how a language designer's control over the meaning of their language is imperfect? -DavidMcLean?]

See xBase scenario on this page. And the Commodore 64 example where to the market it's defined by its IoProfile instead of what the documentation says.

[The xBase scenario has nothing to do with a language designer's control over the meaning of their language. Care to use an on-topic illustration? -DavidMcLean?]

"Meaning"?

[Yes, meaning. You could also use the word "semantics". I offered an example above: whether the "while" keyword in PHP indicates a foreach loop or a while loop. -DavidMcLean?]

Once it's used for a while, the associated terminology gets kind of "locked in place". However, if there is a discrepancy between "official" documentation and actual language behavior, the behavior usually trumps the doc in terms of what the language users actually consider to be "the language", especially if that difference is entrenched in existing code. If another vendor wants to make a clone, they usually choose to clone the actual behavior, not the originator's documentation.

[How does any of that imply that language designers don't have control over language semantics? "once it's used for a while"? It'd have to be designed into the language before being used at all. If there's a discrepancy between the specification and implementation, again, the implementation is wrong; it's irrelevant what users think of it. -DavidMcLean?]

I agree it may be "wrong", but definitions and conventions are not defined by accuracy, but by human perception, and to most of the humans, compatibility matters more than "accuracy", and thus shapes vocabulary more.

[Definitions in English and other natural languages are defined by perception. Definitions in programming languages are not. We've covered this. -DavidMcLean?]

You keep claiming that but do not prove it.

[I've elaborated already on exactly how it's the case, but, again: Programming languages are constructed, defined intrinsically by an individual or group. The definitions are codified in a language specification, and those definitions are established only by the decisions of the designers. The language only evolves or changes as a result of deliberate design effort -- which will also be codified in the spec -- and not organically as users work with the language. Thus, the language is defined by its specification rather than by how users perceive it. -DavidMcLean?]

You are not clear on how the non-organicness changes who or what gets to define a language. It appear to be a rule you pulled strait from your ass. I guess if your ego grants you to be the IT Pope, whatever you pull out of your ass is an instant canon.

[Very polite. Being organic or constructed is a literal description of who defined the language. An organic language arises through use throughout a population over time, a constructed language is codified by a group of designers through conscious action. By direct implication, the former is defined by the masses and the latter by its designers. -DavidMcLean?]

Nope! As the Kleenex scenario illustrated, even if the term is carefully crafted by expert marketer think-tanks, in the end the masses get to define "Kleenex" to be what they want.

[Again, you're equivocating between natural/organic and constructed language. "Kleenex" is a term in the English language, which is a natural language. Do you have a scenario that's actually from a constructed language to present as a counterpoint? -DavidMcLean?]

You are flat wrong. "Php" is also a term in the English language. When human mouths move to form the sounds for "Php", it's no diff than "Kleenex".

[… so? That doesn't change anything. All that brings into question is whether "Php" refers to PhpLanguage, to Zend's PHP interpreter, or to something else entirely. It's still an example of popularity-based definition in natural language, not constructed language. -DavidMcLean?]

As mentioned above, most developers are referring to implementation and not a written formal spec. And I don't know what you are getting at for the "constructed" issue. We are talking about what "Php" means, which is on par with "Kleenex" or "Commodore 64".

[Ah, that could be the point of contention. We aren't talking about what "Php" means. We're talking about what PhpLanguage (or, more specifically, constructs in that language) mean. PhpLanguage itself is a constructed language, which means its semantics are unambiguous, well-defined, and formalised in the documentation and spec. The word "Php" exists in a natural language (English) and hence is open to question. The elements of PhpLanguage itself exist only in a constructed language and are not. -DavidMcLean?]

The vast majority of language users care about the implementation as it is, not any formal spec. (A thorough spec is probably too dry to serve as a training or reference guide for most anyhow.) That's the perspective I usually look at. If you don't want to look at things from that perspective, it's your prerogative, but nobody may care, except a handful of like-minded beings or perhaps a clone language builder. But if the clone language builder wants success, they should also consider IoProfile.

[Well, to an extent. It's true that users typically work with the implementation rather than with the specification alone. However, the implementation will be of the language as specified by the spec, and understanding of how the language works will be based on the semantics described in the spec rather than the details of the implementation (e.g., things like evaluation stacks are not readily exposed). It's reasonable not to consider the specification directly for most programming, but irrational to deny that it canonically codifies the language's behaviour. -DavidMcLean?]

I guess I'm irrational then. You fuckers seem to be loons to me. If the formal spec is not clear or deviates from implementation, the functional "canon" is the implementation TO MOST LANGUAGE USERS. If they are angering the IT Pope by doing such, it appears the Pope's forces are slow to arrive such that it keeps happening.

[Yes, you're irrational, as well as rude. The language is that which is defined by formal specification. If an implementation deviates, then the implementation is in error, regardless of whether users have to work with the flawed implementation. -DavidMcLean?]

Re: "is that which is defined" to who, and by what authority? Nobody forces language users to recognize the authors as final authority on what constitutes a given language among users. I don't see where your alleged enforcement is coming from. It's 1800's luminiferous aether as far as I can tell. The Catholic church used to enforce so-called canons: one could be booted our jailed for not accepting their canon. There is no equivalent enforcement in the USA today, where it's generally accepted that professionals can accept whatever authority they want (for the vast majority of professions).

[Does the behaviour of language constructs change depending on how the masses view them? Or does it change as a result of conscious effort from language designers and implementers? Languages are designed. Deviation from the design produces a different language. Interpreters and compilers are deliberately built to follow a particular language specification and design, and hence to provide an implementation of that particular language; sometimes they don't succeed, due to bugs or a conscious decision to deviate from the language as specified, in which case the resulting implementation is of a different language to the one designed. There is no need for "enforcement" -- if language A as implemented differs from language B as designed and specified, then trivially A ≠ B, without any need for policing. -DavidMcLean?]

Technically that's probably true, but the masses (languages users) get to ultimately decide what they call "Php" or "Java" or whatnot, as the Commodore 64 scenario demonstrates. If the masses want to call the "broken" version "Php", they can. Neither you nor the ComputerScience Army can stop them. The massed pushed forth the awkward "quantum leap" phrase to mean a "big change", which butchered the original concept behind it, but that's life. The victors write the history and the end-users write the vocabulary. Do the language authors influence vocabulary? Certainly, but that's NOT the same as ultimate control. I do NOT dispute influence.

{Nobody is disputing that the public gets to decide what the terms "PHP" and "Java" refer to. That's true because the terms "PHP" and "Java" are part of a natural language. What you are failing to realize is that neither the term "PHP", nor "Java" are part of the language that those terms refer to. Therefore, using those in the way you are is like trying to counter a claim that apples are red or green by pointing out that this citrus fruit is orange. It's may be true (and in this case it is), but it doesn't matter if it's true or not.}

{On the other hand, the computer languages that the terms "PHP" and "Java" currently refer to cannot be changed simply because the masses want to start using the therm "while" to mean "stop everything at once and exit". The implementation will still treat "while" in exactly the same manner that it did before even if every user starts using "while" when they want to stop everything at once and exit.}

It's not about changing a language, it's about vocabulary. I'm not claiming term usage (directly) changes an interpreter. As far as the While example, see PageAnchor Function001.

{The example I gave is about vocabulary. Notice that the vocabulary didn't change even though all the users of the language started using it as if it had. This objectively shows that the mechanism that is used to change vocabulary in natural languages is different from the one used in computer languages.}

I'm not sure what you are referring to. Please restate.

{I'm referring to the only example I've given. The one referenced in your previous response. The one where the users tried to make a change in the vocabulary of a language by using "while" where they mean "stop everything at once and exit" instead of the usual meaning of while.}

You mean "function"? I don't see that as a realistic example; it's a unicorn on a UFO. When "the masses" accept a language as a de-facto standard, they accept most of it's vocabulary with it. Most of that is not going to change in practice. (The masses still "voted" to accept the initial set.) Thus, in practice the users are not going to change the usage of the base idioms. But here is a variation that is perhaps more practical. Suppose a common Visual Basic-like interpreter inadvertently allowed SUB (subroutines) to return a value if one uses a RETURN statement (of the generic type "object" or "variant"-like thingies):

sub myRoutine(x)

dim foo

foo = x + zoomp(x)

...

return foo // interpreter boo boo

end sub

Language users could end up using it because they are too lazy to rework their intro key-words in their code when they want to change a SUB to a FUNCTION, then start talking about "functions" when referring to sub's, pretty much ignoring the difference between SUB and FUNCTION, and that grew entrenched. Therefore, the user meaning of "function" has changed.

No, the user interpretation of that particular language feature had changed. The intended nature of that language feature was defined by the language designer, and mis-implemented by the language implementer. The presence of bugs and discovered features does not mean users define the language, it only means they've discovered bugs and unintended features.

Terms are not necessarily defined by original intent. The "bugs" to users often "become" the language, just as the C64 bugs became "features" in the C64 emulators people built. Just to be clear, developers often blur the distinction between "language" and "interpreter", and when they say "language" they usually mean as processed through a given interpreter or set of interpreters. While this may be misleading or ambiguous, it's how developers generally view it. "Language" is essentially overloaded in colloquial-land.


Language is merely a mutual agreement between communicating parties; nothing more, and this includes computer languages. Language may not be, and often is not a perfect representation of reality nor human thoughts. The only thing close to a "canon" in our society is the legal system, especially in terms of trademarks and copyrights. However, the colloquial world is usually free the ignore that, and often does. For example, "Kleenex" is a trade-marked name, but often used in a generic sense. Using it in a small crowd causes no drama, but saying it on TV may get one sued. Legally, "robbed" includes armed confrontation, but colloquially it's often used interchangeably with "burglarized" in which there was no sighting of the thief at all. -t

[Again, you're equivocating between natural and constructed language. A constructed language is more than a mutual agreement; it's formalised and well-defined by its builders. -DavidMcLean?]

Doesn't matter if the masses are free to ignore the builders' wishes, names, or intentions; which they usually are and often do in our society.

[Does matter. The masses are free to ignore everything they want; they'll just be wrong a lot more often if they do. -DavidMcLean?]

As illustrated above, language usage is not dependent on accuracy.

[Again, you're equivocating between natural and constructed language. Your examples are of natural language use. -DavidMcLean?]

I see no evidence they are or should be treated different. And "Kleenex" was quite possibly carefully constructed by a room full of marketers.

[Then you aren't looking. Read everything I've said again. "Kleenex" is an example of a word in natural language and not a counterpoint to my claims. -DavidMcLean?]

"Php" is also "a word in natural language".

[It certainly is. Is that relevant? -DavidMcLean?]

Yes, because you can formalize it until you are blue in the face, and the masses can still choose to ignore that formalization.

Actually the term "dBASE" ran into a relevant situation. Book and software publishers started using "dBASE" to refer to clones of Ashton Tates' original product. Ashton Tate (or whatever they later called themselves) started suing everybody such that the industry collectively switched to using "xBase" instead. Colloquially, many kept using "dBASE" in a generic sense for a while.

[Ah, I think I see where you're confused now. Check the other conversation thread, above. -DavidMcLean?]


Defect is Relative

I've heard cases where defects in hardware design are used to generate interesting special effects in games. The game builder and game users don't consider it a "defect", but rather a feature to be exploited for fun and profit. The game builder and game users don't care what the original engineer's intention was. "Defect" is also relative. One man's shit is another man's fertilizer. In the market, the platform is generally defined by IoProfile. If you ivory tower dwellers want to make up your own cabal definition, go ahead, but the rest of the population will ignore it.

The notion behind IoProfile is usually called a ValidationSuite, and it's used to verify that one language implementation adheres -- in relevant aspects -- to the same specification as another. It's not used for anything else, because it's not of use for anything else. In the "market", platforms are defined by their designers. The proof of this is that no matter how much a user might try, no user can change a language or platform. Indeed, no language user is going to get very far in using a language or platform without the designer's documentation. Noting that, for example, "my new language piffle is Javascript but with the 'function' keyword defined as 'fn'" is eminently useful; in fact, it's the only useful thing -- the implementation would be utterly useless without that crucial bit of specification.

Like I've already said, there are many approximate stand-ins for formally running a "suite", such as running existing shop code. And it's not about changing something it's about defining it. Change of the tool is irrelevant. And most language users do NOT learn from the "official" documentation. Most don't even know where it is. Formal language documentation is often poorly suited for common education or practical reference anyhow. That's why there are so many FooOneOhOneInSevenDaysForDummiesInaNutshellSuperBibleUnleashed books. And if there was a difference between the formal spec and implementation, the FooOneOhOneInSevenDaysForDummiesInaNutshellSuperBibleUnleashed books would more likely document the second (IoProfile) because that's what most readers care about.

"Existing shop code" is no less a ValidationSuite than any commercial ValidationSuite.

It's irrelevant where language users learn a language from; a language is defined by its specification, and all knowledge of a language derives directly or indirectly from that. Imagine a new language was invented and implemented but not documented at all. Imagine there aren't even examples. If users define a language, surely they should be able to figure it out in its entirety given nothing but the compiler or interpreter. No?

Obviously, that's unreasonable. If the language syntax and semantics are unusual, it would be virtually impossible. Extensive experimentation might -- if we're lucky or the language was relatively conventional, and we can be bothered -- reveal some aspects of how it works but we'd never know whether that was the whole of the language or there was more to discover. Therefore, it's not the users that define the language but the language designer who defines -- and documents -- the language. All understanding of the language -- good, bad, accurate or inaccurate -- derives from that. That's true even if the specification is nothing more than "Javascript, but the 'function' keyword is replaced with 'fn'." Of course, in that case it's easy because we're explicitly referring to the specification for Javascript. Similarly, even a language described entirely by undocumented code examples is implicitly referring to the specification of whatever language it most resembles. Otherwise, it would be incomprehensible. Most programming languages share a large proportion of semantics in common, so as long as the syntax of the examples adequately hint at their underlying semantics, it's possible to rely on our understanding of typical language semantics to effectively deduce how a new language works.

Of course, users (and documenters) may invent their own interpretations (which may be dire *cough*PHP manual*cough*) of language semantics, but ultimately an interpretation is only correct if it accurately reflects the mathematical and computational basis for the language. That comes from ComputerScience, which provides the terminology, definitions, concepts, and formalisms that form the basis of all computer languages. Obviously, users can ignore that and create their own PrivateLanguage to describe how they think languages work, but like all PrivateLanguages, it creates a WalledGarden that may initially seem useful -- perhaps to beginners -- but ultimately limits communication and inhibits greater understanding.

Like you keep forgetting, if there is a variance between the publisher/authors' specs and the implementation, the language users and cloners usually use the implementation (IoProfile) as their reference, NOT the authors' documentation. As far as alternative models to "explain" or emulate the IoProfile, we have very different opinions on the utility of those to developer WetWare that are already described in the "value fight" topics that I won't reinvent here in the name of OnceAndOnlyOnce. -t

If there is a variance between some author's specs and an implementation, it gets documented. E.g., someone writes that "it's Javascript, but the 'function' keyword is replaced with 'fn'." Can you show an example where IoProfile is used as a reference? I've never heard of such a thing; I've only seen languages and language attributes documented in terms of syntax and semantics, with sample code often used to illustrate them.

How is the fact that it "gets documented" change anything? I don't see that as relevant. I don't know of a "function"-like example that extreme at this point, but the Commodore-64 example already describes such scenarios. To claim X "C64 compatible", the emulator builders are expected (by the marketplace) to clone the bugs also, which you guys didn't appear to dispute. The documentation for the C64 may indeed change to reflect that expectation. But it doesn't really matter if they change it or not, the public usually uses the actual behavior of the device as their reference point.

The device is specifically defined by its developers, including whatever inadvertent bugs and quirks it may exhibit. How it works in general is defined by engineering and ComputerScience. Its users may believe whatever they like -- from reasonable, say that it was powered by a 6502 processor (it wasn't, it was a 6510, which doesn't matter for most purposes), to unreasonable, like it's powered by ants pulling tiny levers -- but those views are incorrect. What the public believes, rightly or wrongly, is irrelevant. An engineer who wishes to understand the device will not refer to "the public", but to the device itself (every working C64 is a reference implementation of a C64) plus whatever technical documentation is available.

"Incorrect" does not matter. Definitions and "meaning" are defined in the head by the mass of tool users, NOT by God nor ivory tower gurus. I know that seems to bother you, but tough shit!

I don't think the bothered party is me, as I don't appear to be resorting to emotionally-driven vulgarity. Definitions are agreed by convention, and interpretations may be "defined in the head", but what a C64 is, is defined entirely by its designers and developers. No interpretation or terminology has the slightest impact on what a C64 is or does. However, ComputerScience, SoftwareEngineering, electrical engineering and computer engineering provide a common set of conventional terminology and interpretations that are shared throughout these technical fields, thus facilitating communication. Public misuse or misinterpretation of these, should it occur, is irrelevant.

Relevancy is relative. If my target audience is X, I usually write from or for X's perspective. Your Catholic-like view of vocabulary is both stupid and arrogant. The church of the middle ages had a strong physical enforcement policy. Nothing similar exists today. You seem to want a technocracy or "ivorytowerocracy" in place.

Not at all. I'm not talking about what I want in place, but what is in place, and not by any intent but simply by nature. Whilst it's entirely reasonable to target writing at the level of your audience, if you invent a new vocabulary to do so it will almost certainly be ignored. Using the C64 example, you can call integrated circuits "micrits" and I/O "datronics" and the screen a "viduliser" and you might fool a handful of beginners who somehow run across your PrivateLanguage, but the majority of the community will ignore it or laugh at it. Your handful of beginners will soon learn that your PrivateLanguage is unique to you, and will correct their usage.

General technical terminology is defined by the fields of ComputerScience, SoftwareEngineering, electrical engineering and computer engineering; specific "official" terminology is defined by the designers and developers of the C64, and informal or colloquial terminology evolves organically in user and technical communities. All of that terminology is what beginners read or are taught when learning the subject. Of course, once they are no longer beginners, they use the technical terminology that is defined by the fields of ComputerScience, SoftwareEngineering, electrical engineering and computer engineering if they expect to communicate with communities in those fields.

Bullshit. Insist and claim it repeatedly 99 times and it's still wrong. Repetition worked when getting a cookie from your mom, but I am not your mom. Those entities heavily influence IT terms, true, but that's not the same as being an ultimate authority. Anyhow, I going to stop focusing on "ultimate authority" and focus on communicating with the target audience, typically regular developers. Target audience X determines what terms X accepts and denies, and nobody's army will stop them (at least in the USA, unless they mistake it for WMD tech). If you claim they are "wrong" from some kind of Catholic-like University God View, so fucking what. I don't give a flying shit and they probably don't either. Let the Ivory Tower God send us all to Ivory Hell AFTER we die, but here on Earth as mortals, the groups use whatever fucking terms they want.

Is your vulgarity necessary? At the very least, it diminishes the credibility of your argument.

Without force or serious threats, groups can use whatever language or terms they please. Your university has no teeth to stop them. You are paper tigers.

No one is claiming that universities (or anything else, other than the natural language regulators I mentioned above) are attempting to regulate terminology. Universities couldn't care less -- they've got better things to do. I've described what occurs naturally and organically. It's true that groups can use whatever language or terms they please, but in technical fields, the language or terms that groups are pleased to use turn out to be those that come from the definitive sources of the technology and theory that they use. It's easiest that way, because they don't have to go to the effort of constructing new terminology, and it naturally maximises the chances of successful communication if everyone uses the same terminology.

In general I agree in terms of influence, but still the ultimate authority is within the groups doing the communicating. Like I said before, it's often convenient to ride the language authors' horses, but a group can hop off any time they want. (Note the academics don't always agree with each other.)

What you're really talking about are frames of reference. For example, "relation" as used by the RelationalModel research community has a different meaning from "relation" used by mathematicians. They're both using the correct term correctly, but their frames of reference are different. Mathematicians who work in the RelationalModel research community disambiguate by context, i.e., they explicitly identify the frame of reference. Another example is the use of the terms "centrifugal force" and "centripetal force" -- both are manifestations of the same "force" -- but the former is colloquially used far more often than the latter. That usage is usually incorrect, but in informal discussions it's generally known what is meant. Correct usage is dependent upon frame of reference, and engineering work is careful to use the correct term in the correct context.

So, indeed, groups may create variant usage, but that's when their frames of reference are different from the original. However, as usual, their variant terminology is conveniently derived from published academic and engineering origins rather than being evolved or constructed.

In every case, what is considered "correct" terminology harks back to originating academic and engineering papers and texts, not colloquial usage, even when the originating academic and engineering papers and texts derive their terminology from colloquial sources. For example, the term "normalization" was apparently chosen by TedCodd after hearing a political speech that referred to "normalizing relations" with China. There have been ample opportunity for groups to choose alternatives to "normalization" since then, but it doesn't appear that any have. Or, if they have, their use of alternative terminology hasn't caught on enough for us to have heard of it.

Of course it's true that academics don't always agree with each other. Humans in general don't always agree with each other, and this page is proof. I'm not sure how that's relevant here.

Again, I do NOT dispute that academics heavily influences the vocab of many IT tools. That's not the point of contention.

Then what is the point of contention?

Frankly, I don't frikken know. There is a communication logjam somewhere.

Not necessarily. It could be that you agree with me, but the sensation is so unfamiliar that you're sure there must be something wrong.

Indeed. It's uncharted territory. It's like unscrewing parts in the yin and yang machine. It might put an eye out.


EditText of this page (last edited August 19, 2014) or FindPage with title or text search