On 15.06.26 08:22, Seifeddine Gmati wrote:
Hello Internals,

I'd like to start the discussion on a new RFC adding literal scalar
types to PHP.

- RFC: https://wiki.php.net/rfc/literal_scalar_types
- Implementation: https://github.com/php/php-src/pull/22314

Thanks,
Seifeddine.


Hey Seifeddine,

I went through the RFC and the implementation tests. A few thoughts...

1) if I did not miss anything the empty string case is not covered. Would `""` be legal? Any thoughts on providing ways to explicitly disallow empty strings? I don't think this should be further scope -- because we would need to make sure that we actually have a usable syntax to disallow empty strings.

2) having strict and non-strict mode in PHP is bad enough, IMO. Seeing this brought further, and combined with "literal" (literal should be literal) feels wrong -- a coerced `true` is de facto not a literal 1, it's a coerced `true`. I understand that you recommend strict and want to leave it to a vote, but I feel like the "Coercive matching (alternative)" section should make a stronger point against it, to discourage a tempting "always been like that" for a new concept.

3) the performance section is thin; solely addressing what Tim brought up. I am wondering, does introducing this have any implications for non-literal types? Having a benchmark would be nice. I also agree with Jorg, that a benchmark comparing the performance with enums (memory + speed) would be helpful.

4) the last part of the previous point extends to the general usefulness of the feature. I again have to agree with Jorg: it is not clear what problem it is trying to solve. Why not enums? It is a trend to get rid of stringy APIs, and magic strings and ints -- for reasons. But this feature will encourage bringing them back. With an enum you define it in one place (easier to refactor), with literal scalar types you repeat it in multiple places. Do we really want that?

--

Cheers
Nick

Reply via email to