Re: [PHP-DEV] supporting the final keyword for properties
Hi Ferenc, Am 28.05.2013 um 08:15 schrieb Ferenc Kovacs tyr...@gmail.com: [...] I would like it to work the same way as it does in java( http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.4) eg. you can set the initial value either in the declaration or later on, but after it is set, you can't change it, trying to do that would create a recoverable fatal error (or throwing an exception which extends RuntimeException). What do you think? Would this be viable? Is there any still-present reason why we shouldn't support that? [...] the accessors rfc got rejected, so I'm bringing this up again. It’s a good idea in general but what about having it for variables as well? Could open interesting possibilities for an optimizer. final $foo = str; $foo = bar; // bails out cu, Lars -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] supporting the final keyword for properties
On 28-5-2013 10:58, Lars Strojny wrote: Hi Ferenc, Am 28.05.2013 um 08:15 schrieb Ferenc Kovacs tyr...@gmail.com: [...] I would like it to work the same way as it does in java( http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.4) eg. you can set the initial value either in the declaration or later on, but after it is set, you can't change it, trying to do that would create a recoverable fatal error (or throwing an exception which extends RuntimeException). What do you think? Would this be viable? Is there any still-present reason why we shouldn't support that? [...] the accessors rfc got rejected, so I'm bringing this up again. It’s a good idea in general but what about having it for variables as well? Could open interesting possibilities for an optimizer. final $foo = str; $foo = bar; // bails out cu, Lars Don't we already have that? It just has a different name: constants. - Tul -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] supporting the final keyword for properties
2013/5/28 Maciek Sokolewicz maciek.sokolew...@gmail.com It’s a good idea in general but what about having it for variables as well? Could open interesting possibilities for an optimizer. final $foo = str; $foo = bar; // bails out Don't we already have that? It just has a different name: constants. It's different. You can manipulate variables in some ways you can't with constants. This code, for example: $a = 'abc'; $b = 'a'; print($$b); It will display abc. It's currently not possible to do something similar with constants. I think the subject was already debated, but I wonder why we should write that: final $foo = 'bar'; instead of: const $foo = 'bar';
Re: [PHP-DEV] supporting the final keyword for properties
2013/5/28 Amaury Bouchard ama...@amaury.net 2013/5/28 Maciek Sokolewicz maciek.sokolew...@gmail.com It’s a good idea in general but what about having it for variables as well? Could open interesting possibilities for an optimizer. final $foo = str; $foo = bar; // bails out Don't we already have that? It just has a different name: constants. It's different. You can manipulate variables in some ways you can't with constants. This code, for example: $a = 'abc'; $b = 'a'; print($$b); It will display abc. It's currently not possible to do something similar with constants. define('FOO', 'bar'); $b = 'FOO'; print(constant($b)); and yes, constant() works for namespace- and class-constants too. I think the subject was already debated, but I wonder why we should write that: final $foo = 'bar'; instead of: const $foo = 'bar'; -- github.com/KingCrunch
Re: [PHP-DEV] supporting the final keyword for properties
2013/5/28 Sebastian Krebs krebs@gmail.com print($$b); print(constant($b)); It's definitely different. In your example you have to know that you are manipulating constants only.
Re: [PHP-DEV] supporting the final keyword for properties
On Tue, May 28, 2013 at 10:58 AM, Lars Strojny l...@strojny.net wrote: Hi Ferenc, Am 28.05.2013 um 08:15 schrieb Ferenc Kovacs tyr...@gmail.com: [...] I would like it to work the same way as it does in java( http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.4) eg. you can set the initial value either in the declaration or later on, but after it is set, you can't change it, trying to do that would create a recoverable fatal error (or throwing an exception which extends RuntimeException). What do you think? Would this be viable? Is there any still-present reason why we shouldn't support that? [...] the accessors rfc got rejected, so I'm bringing this up again. It’s a good idea in general but what about having it for variables as well? Could open interesting possibilities for an optimizer. final $foo = str; $foo = bar; // bails out cu, Lars I think that this proposal only makes sense in a class context. For your example we already have a solution: constants. Unfortunately class constants has more limitation, as you can't assign expressions to them, and using global(namespaced) constants which will be only used in that class breaks the encapsulation part of OOP, as your constants are leaking out. One solution would be to allow the class consts to accept expressions, but for that the simple solution would slow down the class constanst for everybody. -- Ferenc Kovács @Tyr43l - http://tyrael.hu
Re: [PHP-DEV] supporting the final keyword for properties
2013/5/28 Amaury Bouchard ama...@amaury.net 2013/5/28 Sebastian Krebs krebs@gmail.com print($$b); print(constant($b)); It's definitely different. In your example you have to know that you are manipulating constants only. And in your example you have to know, that you are manipulating a variable :? -- github.com/KingCrunch
Re: [PHP-DEV] supporting the final keyword for properties
2013/5/28 Sebastian Krebs krebs@gmail.com And in your example you have to know, that you are manipulating a variable :? Sure. But my example's goal was to show the idea of Lars. Using the final keyword on variables would allow to manipulate variables and constant variables, without the need to know if it's a variable or a constant (obviously because they are all variables). Not my idea, I was just explaining.
Re: [PHP-DEV] supporting the final keyword for properties
However, I guess this new feature would slow down the parsing process and therefore I am against it. It might slow the process down because on every assignment you have to make sure it's not a final variable. Until we really know how much that slows it down, I'm not sure that is much of an issue. We should really focus on deciding whether or not we want the 'final' functionality. -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] supporting the final keyword for properties
C# does this with the readonly keyword, sounds like a good idea. On 16 July 2012 13:25, Ferenc Kovacs tyr...@gmail.com wrote: Hi, The recent http://www.mail-archive.com/internals@lists.php.net/msg59301.html discussion made me wonder why did we decide not supporting the final keywords for properties as it would provide an easy way for read-only attributes (const would be a better choice in performance wise, but then you can only set it in your declaration where no dynamic expression is allowed.) I would like it to work the same way as it does in java( http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.4) eg. you can set the initial value either in the declaration or later on, but after it is set, you can't change it, trying to do that would create a recoverable fatal error (or throwing an exception which extends RuntimeException). What do you think? Would this be viable? Is there any still-present reason why we shouldn't support that? -- Ferenc Kovács @Tyr43l - http://tyrael.hu -- Andrew Faulds (AJF) http://ajf.me/ -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] supporting the final keyword for properties
Ferenc, On Mon, Jul 16, 2012 at 8:25 AM, Ferenc Kovacs tyr...@gmail.com wrote: Hi, The recent http://www.mail-archive.com/internals@lists.php.net/msg59301.html discussion made me wonder why did we decide not supporting the final keywords for properties as it would provide an easy way for read-only attributes (const would be a better choice in performance wise, but then you can only set it in your declaration where no dynamic expression is allowed.) I would like it to work the same way as it does in java( http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.4) eg. you can set the initial value either in the declaration or later on, but after it is set, you can't change it, trying to do that would create a recoverable fatal error (or throwing an exception which extends RuntimeException). What do you think? Would this be viable? Is there any still-present reason why we shouldn't support that? My question would be where in code would this be enforced? A trivial implementation could be done in the object.write_property handler. But wouldn't things like references and the such (read_property and get_property_ptr_ptr, as well as get_properties) also be paths to writability? Would that then mean that this would need to be added to the zval type directly, and not just the property table? And if that's the case, why not make it final for the entire engine (meaning that I can declare a global property as final using `final $var = 1;`)... Thereby making this a rather significant engine changes? Or is there an easier way that I'm missing...? Anthony
Re: [PHP-DEV] supporting the final keyword for properties
On Mon, Jul 16, 2012 at 2:59 PM, Anthony Ferrara ircmax...@gmail.comwrote: Ferenc, On Mon, Jul 16, 2012 at 8:25 AM, Ferenc Kovacs tyr...@gmail.com wrote: Hi, The recent http://www.mail-archive.com/internals@lists.php.net/msg59301.html discussion made me wonder why did we decide not supporting the final keywords for properties as it would provide an easy way for read-only attributes (const would be a better choice in performance wise, but then you can only set it in your declaration where no dynamic expression is allowed.) I would like it to work the same way as it does in java( http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.4) eg. you can set the initial value either in the declaration or later on, but after it is set, you can't change it, trying to do that would create a recoverable fatal error (or throwing an exception which extends RuntimeException). What do you think? Would this be viable? Is there any still-present reason why we shouldn't support that? My question would be where in code would this be enforced? A trivial implementation could be done in the object.write_property handler. But wouldn't things like references and the such (read_property and get_property_ptr_ptr, as well as get_properties) also be paths to writability? Would that then mean that this would need to be added to the zval type directly, and not just the property table? And if that's the case, why not make it final for the entire engine (meaning that I can declare a global property as final using `final $var = 1;`)... Thereby making this a rather significant engine changes? Or is there an easier way that I'm missing...? Anthony Introducting final for the procedural code would be a bad idea imo, but on the other hand it would be in sync with the fact that we added the const keyword to be used in the global scope for example. About whether we should handle it in the zval or in the object.write_property I also don't have a strong opinion, I see both cons and pros. Another thing: If implemented, we should add a few methods to Reflection like: - ReflectionProperty::isFinal(void) - ReflectionProperty::setFinal(bool $final) -- Ferenc Kovács @Tyr43l - http://tyrael.hu
Re: [PHP-DEV] supporting the final keyword for properties
On Mon, Jul 16, 2012 at 2:25 PM, Ferenc Kovacs tyr...@gmail.com wrote: Hi, The recent http://www.mail-archive.com/internals@lists.php.net/msg59301.html discussion made me wonder why did we decide not supporting the final keywords for properties as it would provide an easy way for read-only attributes (const would be a better choice in performance wise, but then you can only set it in your declaration where no dynamic expression is allowed.) I would like it to work the same way as it does in java( http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.4) eg. you can set the initial value either in the declaration or later on, but after it is set, you can't change it, trying to do that would create a recoverable fatal error (or throwing an exception which extends RuntimeException). What do you think? Would this be viable? Is there any still-present reason why we shouldn't support that? I don't like this overloaded meaning of final. final currently means cannot be overwritten by inheritance. This would add a second meaning which would be somewhat similar to const (but only somewhat). Nikita -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] supporting the final keyword for properties
hi, On Mon, Jul 16, 2012 at 2:25 PM, Ferenc Kovacs tyr...@gmail.com wrote: The recent http://www.mail-archive.com/internals@lists.php.net/msg59301.html discussion made me wonder why did we decide not supporting the final keywords for properties as it would provide an easy way for read-only attributes (const would be a better choice in performance wise, but then you can only set it in your declaration where no dynamic expression is allowed.) Final and readonly are too totally different concepts. Read only properties can be implemented by doing something using the nice getter/setter RFC (https://wiki.php.net/rfc/propertygetsetsyntax-as-implemented). Cheers, -- Pierre @pierrejoye | http://blog.thepimp.net | http://www.libgd.org -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] supporting the final keyword for properties
In that case, we should use what C# calls it, readonly. Writable only once by the constructor. On 16 July 2012 14:35, Nikita Popov nikita@gmail.com wrote: On Mon, Jul 16, 2012 at 2:25 PM, Ferenc Kovacs tyr...@gmail.com wrote: Hi, The recent http://www.mail-archive.com/internals@lists.php.net/msg59301.html discussion made me wonder why did we decide not supporting the final keywords for properties as it would provide an easy way for read-only attributes (const would be a better choice in performance wise, but then you can only set it in your declaration where no dynamic expression is allowed.) I would like it to work the same way as it does in java( http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.4) eg. you can set the initial value either in the declaration or later on, but after it is set, you can't change it, trying to do that would create a recoverable fatal error (or throwing an exception which extends RuntimeException). What do you think? Would this be viable? Is there any still-present reason why we shouldn't support that? I don't like this overloaded meaning of final. final currently means cannot be overwritten by inheritance. This would add a second meaning which would be somewhat similar to const (but only somewhat). Nikita -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php -- Andrew Faulds (AJF) http://ajf.me/ -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] supporting the final keyword for properties
It could be useful (given the example of Java usage). But still, if the goal is to have read-only attributes, I think my proposal (separate reading and writing visibilities) is more precise and powerful. 2012/7/16 Ferenc Kovacs tyr...@gmail.com Hi, The recent http://www.mail-archive.com/internals@lists.php.net/msg59301.html discussion made me wonder why did we decide not supporting the final keywords for properties as it would provide an easy way for read-only attributes (const would be a better choice in performance wise, but then you can only set it in your declaration where no dynamic expression is allowed.) I would like it to work the same way as it does in java( http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.4) eg. you can set the initial value either in the declaration or later on, but after it is set, you can't change it, trying to do that would create a recoverable fatal error (or throwing an exception which extends RuntimeException). What do you think? Would this be viable? Is there any still-present reason why we shouldn't support that? -- Ferenc Kovács @Tyr43l - http://tyrael.hu
Re: [PHP-DEV] supporting the final keyword for properties
On Mon, Jul 16, 2012 at 3:42 PM, Pierre Joye pierre@gmail.com wrote: hi, On Mon, Jul 16, 2012 at 2:25 PM, Ferenc Kovacs tyr...@gmail.com wrote: The recent http://www.mail-archive.com/internals@lists.php.net/msg59301.html discussion made me wonder why did we decide not supporting the final keywords for properties as it would provide an easy way for read-only attributes (const would be a better choice in performance wise, but then you can only set it in your declaration where no dynamic expression is allowed.) Final and readonly are too totally different concepts. except in those programming languages, where declaring attributes as final does the same thing. Read only properties can be implemented by doing something using the nice getter/setter RFC (https://wiki.php.net/rfc/propertygetsetsyntax-as-implemented). thats true, maybe we should drop this thread until that RFC gets voted on. -- Ferenc Kovács @Tyr43l - http://tyrael.hu