Hi Andrea,

On Wed, Feb 4, 2015 at 8:21 PM, Andrea Faulds <a...@ajf.me> wrote:
> Hi again,
>
>> On 4 Feb 2015, at 11:15, Andrey Andreev <n...@devilix.net> wrote:
>>
>> On Wed, Feb 4, 2015 at 1:02 PM, Florian Margaine <flor...@margaine.com> 
>> wrote:
>>> Hi Leigh,
>>>
>>> Le 4 févr. 2015 11:50, "Leigh" <lei...@gmail.com> a écrit :
>>>>
>>>> What was wrong with:
>>>>
>>>> function x(int $y, string $z) { // strict
>>>> function x((int) $y, (string) $z) { // casting
>>>>
>>>> This was the best suggestion I've seen that covers the requirements of
>>>> both camps, and is still very clear how data is going to be handled.
>>>>
>>>> Authors who want their APIs to adhered to strictly can do that,
>>>> authors who want to accept anything and have it end up as their
>>>> desired type can do that too.
>>>
>>> Because it is then the callee who decides, not the caller, whether or not
>>> he wants strict typing.
>>>
>>
>> ... and apparently, this is the root of all evil. :)
>
> It’s not “the root of all evil". But the two-syntax approach has 
> disadvantages I’ve elaborated numerous times.
>
> It shifts the choice to the callee, not the caller. This means existing 
> applications are broken if strict hints are added to existing libraries. It 
> means that programmers will have to deal with two different systems, 
> simultaneously, in the same file or function or method, because one API uses 
> (int) and the other uses int. It means that if the API author decides to have 
> weak types, you are prevented by the language from having the benefits of 
> strict typing, even if you want them. It also has a syntax issue: (int) looks 
> like an explicit cast, yet what is usually proposed doesn’t something 
> similar. There’s also the consistency issue in that we’d have to support real 
> for consistency with (real), since T_DOUBLE_CAST is a token. It means that 
> internal functions could now also use strict hints - or if they can’t, we 
> have a consistency issue. It means beginners, and people who don’t like 
> strict types, now have to deal with strict types in their code, despite PHP 
> always having been a weakly-typed, beginner-friendly language. And so on, and 
> so forth.
>
> The current RFC deliberately does not propose this because I think it causes 
> more problems then it solves.
>
>> I am baffled by how the two-syntaxes suggestion is always so easily
>> dismissed by that argument. I'd argue that most people who support the
>> current proposal don't fully understand what declare(strict_type=1)
>> really does.
>
> Well, *I* understand what it does.

That's an own goal (in football/soccer terms), you know. ;)

> I’ve used it. It worked really, fantastically well… better than I expected it 
> to. It provided benefits that the two-syntax suggestion wouldn’t have. It 
> provided benefits that just strict hints wouldn’t have. It provided benefits 
> that just weak hints wouldn’t have.
>
>> As I've previously said - putting the caller in control
>> (and really the caller, not in a per-file context) makes it a
>> debugging tool, not support for strict typing.
>
> What’s the difference between “per-file” and “really the caller”? The RFC 
> *does* allow you to use declare() blocks if you really want to.
>
> Also, type hints are mostly a debugging tool anyway. They’re a tool for 
> catching errors early, and to enable better documentation. That’s all that 
> they do.
>

Yeah, you've said that numerous times ... almost as much as I have
disagreed with your arguments.

I didn't want to turn this thread into a re-iteration of the RFC
discussion one. I'm just completely surprised how relentlessly all
suggestions about two syntaxes have been waved off by a callee vs
caller argument like it's a golden rule or something ... it's not, you
just don't like the other approach.

Cheers,
Andrey.

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to