Morning,

> Given that public is implied for all properties above there
> is a value in having the same rule for type.

public $bar, int $foo;

What does this mean?

If it's not an error, what does this mean ?

public $bar, int $foo, $qux;

If it's an error, why is it an error ?

Both of these examples are just as ambiguous as

public int $foo, $bar, $qux;

Access modifiers are assumed to apply to all declarations in a group,
because that's what grouping is actually for.

We don't need to make grouping about types, we need to make type
declarations unambiguous.

> Anyway, in Hack following syntax passes: https://3v4l.org/3tUu9

Hack does not consider types implicitly nullable.

<?hh
class Foo {
  public int $int = null;
  public stdClass $std = null;
}

things.php:3:10,12: Wrong type hint (Typing[4110])
  things.php:3:10,12: This is an int
  things.php:3:21,24: It is incompatible with a nullable type
things.php:4:10,17: Wrong type hint (Typing[4110])
  things.php:4:10,17: This is an object of type stdClass
  things.php:4:26,29: It is incompatible with a nullable type

<?hh
function foo(int $int = null, stdClass $std = null) {}

things.php:2:18,21: Wrong type hint (Typing[4110])
  things.php:2:14,16: This is an int
  things.php:2:25,28: It is incompatible with a nullable type
things.php:2:40,43: Wrong type hint (Typing[4110])
  things.php:2:31,38: This is an object of type stdClass
  things.php:2:47,50: It is incompatible with a nullable type

HHVM doesn't care about types ... we don't compare our type system to that
...

Cheers
Joe

On Wed, Mar 30, 2016 at 11:10 PM, Björn Larsson <bjorn.x.lars...@telia.com>
wrote:

> Den 2016-03-30 kl. 05:16, skrev Joe Watkins:
>
>> Morning Dmitry,
>>
>> 1) static typed properties are prohibited. why?
>>>
>> Feels like that's a separate feature, static properties are as good as
>> makes no difference, global variables.
>>
>> Instance properties, the engine has good control over their manipulation,
>> for static properties it doesn't, it's not impossible, but feels separate.
>>
> Good that it's clarified in the RFC since one could easily
> believe that it's possible to set type for a static property.
>
>>
>> 2) The handling of multiple properties in the same declaration statement
>>>
>> is inconsistent.
>>
>> This feels consistent to me .. in other languages where the type is
>> required, it makes sense to assume the type is implied.
>>
>> In a language where the type is optional, public int $foo, $bar; feels
>> ambiguous to me.
>>
> Given that public is implied for all properties above there
> is a value in having the same rule for type.
>
>>
>> 3) We already have nullable arguments without any special syntax. We
>>>
>> should reuse the similar approach for properties.
>>
>> Making properties implicitly nullable defeats the object of trying to
>> provide type safety.
>>
>> Null is never a valid value for a typed property, if it were, you would
>> never be sure of the type of variable you are getting, and would have to
>> litter your code with is_null checks.
>>
> Maybe good to clarify difference towards default parameters?
> Anyway, in Hack following syntax passes: https://3v4l.org/3tUu9
>
>>
>> I think it might be better to implicitly initialize them according to
>>>
>> type (if default value is not provided): bool by false, int by 0, double
>> by
>> 0.0, string by "" (interned), array by [] (immutable), objects by NULL
>> (always nullable).
>>
>> Definitely not, lying about the default value isn't a good idea.
>>
>> There are times when 0 is as valid as 1, or any other value for an int.
>>
>> If you have declared that you know the type of the property, and you write
>> code that accesses that property before there is any possible chance you
>> have set the property, that's a programming error.
>>
>> We should not hide that error with a default value, or by allowing the
>> engine to return null.
>>
> Don't have a strong opinion on this one, can see both views.
> Maybe a bit affected by programming in Java recently, having
> a slightly more positive attitude towards default values ;-)
>
> Regards //Björn Larsson
>
>

Reply via email to