On Tue, Feb 28, 2012 at 3:58 PM, John Crenshaw <johncrens...@priacta.com>wrote:

> *From:* Adam Richardson [mailto:simples...@gmail.com]
>
> On Tue, Feb 28, 2012 at 2:53 PM, John Crenshaw <johncrens...@priacta.com>
> wrote:****
>
> OK everyone, it seems that some people have forgotten or missed the
> original agreement that this thread started with. There is a communication
> disconnect ("strict typing" means horribly different things to different
> people right now). Please read through and understand the following
> terminology before continuing to post on this thread. We've agreed to the
> following terms:
>
> - "Strict Typing" means the super strict old C style typing *with no
> implicit conversions*. (If you really think this is what you want, you are
> probably mistaken. Look through prior discussions on this topic. This fails
> for numerous reasons, including the fact that almost every input to PHP is
> a string.)****
>
> ** **
>
> Where is the term "strict typing" coming from? I've not seen this used to
> describe any type system (doesn't mean it's not been used, but I'd really
> like to see the usage so I can understand the label.)****
>
> ** **
>
> Adam, When you say you want “Strict” or “Strong” typing, this (case 1) is
> what the opponents of stronger typing think you are asking for, which is
> why I’ve defined it this way. There have been a tiny handful of individuals
> that really are asking for this, but most people don’t really want this
> level of strictness. Also, this level of strictness is fundamentally at
> odds with the nature of PHP, and it’s just never going to happen. The level
> of typing in this first case is littered with problems. I won’t get into it
> all, but you can read prior discussions in the archives to see it. Look for
> the passionate arguments made by typing opponents that talk about “massive
> changes”, “destroying the language”, and “Go use JSP”. Scattered in there
> are some occasional explanations of the actual core issues, all of which
> refer to this level of typing. (Incidentally, even C++ is not this strict,
> so this really isn’t what you want, I’m sure of it. If this is what you
> want, then this isn’t the thread for you, because this is **not** what
> will be advocated or discussed here.)
>

OK, if this is the case, I'd suggest we use the words "Weak" and "Strong",
and then speak to whether a proposal seeks to strengthen or weaken the
existing type system. That way we utilize the terminology the labels that
the existing programming language discourse community uses. Those
performing research on the topics will be able to find the terms used.

http://en.wikipedia.org/wiki/Type_system
http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/


> ****
>
>  ****
>
> - "Weak Typing" means types in the same sense that the PHP documentation
> uses types (for example, the docs indicate substr(string, integer), and
> substr(12345, "2") == "345".) (If you think you want "strict typing", this
> is probably what you mean.)****
>
> ** **
>
> Doesn't weak typing mean that the language implicitly converts types for
> use according to a set of rules? The opposite of this being strong typing,
> which means the language does not perform implicit conversions.****
>
> ** **
>
> “Weak” here really means weaker than the “Strong” above, but stronger than
> “none”. Right now PHP has no typing whatsoever. “weak typing” WOULD be
> typing, but it is flexible, optional, and aggressively uses implicit
> conversions. For comparison, by these definitions C++ is halfway between
> “weak typing” and “strong typing” (by virtue of operator overloads,
> overloaded functions, and cast operators.)
>

I'm not sure this is the case. PHP is typically categorized as a
dynamically typed language, meaning variables don't hold types, BUT, values
do:

http://en.wikipedia.org/wiki/Type_system#Dynamic_typing

Additionally, PHP performs conversions of values implicitly in many
instances, so it's typically referred to as weakly typed (as opposed to
strongly typed, although, as you point out, there is a continuum.) Hence,
the "===" operator compares the values without performing the implicit type
conversions PHP performs on values.

http://en.wikipedia.org/wiki/Comparison_of_programming_languages#Type_systems


> ****
>
> ** **
>
> This “Weak typing” will give you what you want, and it can work. Most
> importantly, it is **not** the thing that goes bump in the night for most
> strong typing opponents, which means it is probably possible to gather
> sufficient support for this. This discussion is focused on developing a
> rock solid proposal for “weak typing”.****
>
>  ****
>
> - "No Scalar Typing" should be used to indicate the current system (where
> there is no provision for hinting at scalar types.)****
>
>
> And, curious about the "No Scalar Typing"?****
>
> ** **
>
> This is PHP right now. The language has no provision whatsoever for scalar
> types. Function parameters can be hinted as an array or as a specific
> class/interface, but otherwise they are assumed to be absolutely anything.
> I know that for people with a lot of experience in a strongly typed
> language this sounds like what they would normally call “Weak Typing”, but
> it’s a 3rd level. “Weak Typing” under these definitions is a lot stronger
> than what you would call “weak”, but it’s much weaker than what strong
> typing opponents would call “strong”.
>

It still seems that we'd be best served by referring to PHP's current type
system as dynamic (as opposed to static) and weak (as opposed to strong) so
we use terms the language design community uses. In this respect, PHP is
very similar to Javascript.

Now, speaking to what programmers can do to declare their intentions in
terms of function parameters, I see what you're talking about. Adding the
ability to declare intentions for scalar types, too, would work to
strengthen the current  type system, although I believe it would still be
considered a weak type system when judged against the backdrop of the
programming language landscape. Given PHP's dynamic, weakly typed
characteristics, this is an interesting topic:

http://en.wikipedia.org/wiki/Parameter_(computer_programming)#Datatypes


> ****
>
> ** **
>
> It’s going to take some time to get used to the semantics, but if you want
> any typing enhancements you’re going to have to speak the language of the
> people you want to convince. The communication disconnect here has been
> sinking this proposal for a decade.
>

Agreed :) Sincerely, thanks for your feedback, John.

If you take issue with any of my questions/commentary, please correct my
knowledge shortfalls. I'm researching language design as a hobby, and
working on a parser for my own language. In addition to the communication
disconnect, I'd like to make sure that those who want to keep up with this
staggering dialogue will benefit from accurate depictions/terms.

Thanks,

Adam


-- 
Nephtali:  A simple, flexible, fast, and security-focused PHP framework
http://nephtaliproject.com

Reply via email to