Hi Marcus,

> > -----Original Message-----
> > From: Marcus Boerger [mailto:[EMAIL PROTECTED]
> > Sent: Sunday, March 09, 2008 3:00 PM
> > To: Dmitry Stogov
> > Cc: Derick Rethans; internals Mailing List; Andi Gutmans; Stas 
> > Malyshev; phpxcache
> > Subject: Re: [PHP-DEV] Patch for opcode caches
> > 
> > Hello Dmitry,
> > 
> > please don't apply. The patch looks rather rough and untested (see 
> > below).

It was tested at least with Zend products and xcache.

> >  Also I really disagree to making the engine even 
> > more complex 
> > and adding
> > even more different behavior ways. That way we just introduce more
> > errors
> > as we cannot test the engine in all its modes.

It is not a good argument to hide this from APC, eAccelerator and
xcache.

> >  We simply do not have
> > the
> > infrastructure for that. And that means we will add even more bugs.

You will able to test it with "make test" and new versions of
APC/eAccelerator/XCache ...
At least I tested it in this way without problems

> > Further more I am missgin a description what you really do here and 
> > why we need to do that.

This is the description of the problem
http://www.mail-archive.com/internals@lists.php.net/msg32601.html
It is well known to all opcode cache weiters, but it is not possible to
solve it 100% correctly without ZE modification

> >  Ok Opcode caches have issues but so far all 
> > attempts to do
> > somethign about that have been blocked. Now this one 
> apparently has a
> > new
> > option. But as far as I can tell it simply allows to change the
> > compiler to
> > an opcode friendly order. If that is all what it does than we should
> > simply
> > drop all the options and do it anyway without flags.

As I remember opcode cache was planned as a part of PHP-6, probably
there we will able to follow your suggestion, but for now I don't see
any reason to make PHP slowdown (without caches).

Thank you for patch review

1) CG(extended_info) was a boolean falg, CG(compiler_options) is a
bitset one bit of which represents old CG(extended_info)

2) Changes related to ZEND_ACC_IMPLEMENT_INTERFACES  fix unnecessary
zend_verify_abstarct_class() calls. (For some reason it might be called
twice for the same class)

3)  ZEND_COMPILE_OPTION_... is to long, but I can accept this and of
couse I'll add comments as you requested.

4) zend_vm_opcodes.h is autogenerated file, zend_vm_gen.php chenged the
indents  :)

5) I'll recheck the -e option. Probably I missied something there.

Thanks. Dmitry.

> > unnoticed.
> > 
> > marcus
> > 
> > Friday, March 7, 2008, 12:36:58 PM, you wrote:
> > 
> > > Index: Zend/zend.c 
> > > 
> ===================================================================
> > > RCS file: /repository/ZendEngine2/zend.c,v
> > > retrieving revision 1.308.2.12.2.35.2.9
> > > diff -u -p -d -r1.308.2.12.2.35.2.9 zend.c
> > > --- Zend/zend.c 5 Mar 2008 13:34:12 -0000       
> 1.308.2.12.2.35.2.9
> > > +++ Zend/zend.c       7 Mar 2008 11:34:14 -0000
> > > @@ -463,7 +463,7 @@ static void zend_set_default_compile_tim
> > >         CG(asp_tags) = asp_tags_default;
> > >         CG(short_tags) = short_tags_default;
> > >         CG(allow_call_time_pass_reference) = ct_pass_ref_default;
> > > -       CG(extended_info) = extended_info_default;
> > > +       CG(compiler_options) = compiler_options_default;
> > >  }
> > >  /* }}} */
> > >
> > 
> > Why rename this variable? It still is an exetended 
> information in the 
> > compiler globals. It's full name would be 
> > compiler_globals_extended_info' versus 
> > 'compiler_globals_compiler_options'.
> > 
> > > Index: Zend/zend_compile.c 
> > > 
> ===================================================================
> > > RCS file: /repository/ZendEngine2/zend_compile.c,v
> > > retrieving revision 1.647.2.27.2.41.2.46
> > > diff -u -p -d -r1.647.2.27.2.41.2.46 zend_compile.c
> > > --- Zend/zend_compile.c 3 Mar 2008 15:07:04 -0000
> > 1.647.2.27.2.41.2.46
> > > +++ Zend/zend_compile.c       7 Mar 2008 11:34:15 -0000
> > [...]
> > > @@ -2588,7 +2577,7 @@ ZEND_API void zend_do_inheritance(zend_c
> > >
> > >         if (ce->ce_flags & 
> ZEND_ACC_IMPLICIT_ABSTRACT_CLASS && ce- 
> > >type == ZEND_INTERNAL_CLASS) {
> > >                 ce->ce_flags |= ZEND_ACC_EXPLICIT_ABSTRACT_CLASS;
> > > -       } else {
> > > +       } else if (!(ce->ce_flags & 
> ZEND_ACC_IMPLEMENT_INTERFACES)) 
> > > + {
> > >                 zend_verify_abstract_class(ce TSRMLS_CC);
> > >         }
> > >  }
> > > @@ -2700,7 +2689,7 @@ ZEND_API zend_class_entry *do_bind_class
> > >                 }
> > >                 return NULL;
> > >         } else {
> > > -               if (!(ce->ce_flags & ZEND_ACC_INTERFACE)) {
> > > +               if (!(ce->ce_flags &
> > > (ZEND_ACC_INTERFACE|ZEND_ACC_IMPLEMENT_INTERFACES))) {
> > >                         zend_verify_abstract_class(ce TSRMLS_CC);
> > >                 }
> > >                 return ce;
> > 
> > This looks like a change of behavior to the untrained eye.
> > 
> > [...]
> > > @@ -3238,54 +3235,36 @@ void zend_do_end_class_declaration(znode
> > >
> > >         ce->line_end = zend_get_compiled_lineno(TSRMLS_C);
> > >
> > > -       if (!(ce->ce_flags &
> > > (ZEND_ACC_INTERFACE|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS))
> > > -               && ((parent_token->op_type != IS_UNUSED) || (ce-
> > >num_interfaces > 0))) {
> > > +       if (!(ce->ce_flags &
> > > (ZEND_ACC_INTERFACE|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS))) {
> > >                 zend_verify_abstract_class(ce TSRMLS_CC);
> > > -               if (ce->parent || ce->num_interfaces) {
> > > +               if (ce->ce_flags & 
> ZEND_ACC_IMPLEMENT_INTERFACES) {
> > >                         do_verify_abstract_class(TSRMLS_C);
> > >                 }
> > >         }
> > > -       /* Inherit interfaces; reset number to zero, we 
> need it for
> > above check and
> > > -        * will restore it during actual implementation. */
> > > -       if (ce->num_interfaces > 0) {
> > > -               ce->interfaces = NULL;
> > > -               ce->num_interfaces = 0;
> > > -       }
> > >         CG(active_class_entry) = NULL;
> > >  }
> > 
> > Again looks like change of behavior.
> > 
> > [...]
> > 
> > > Index: Zend/zend_compile.h 
> > > 
> ===================================================================
> > > RCS file: /repository/ZendEngine2/zend_compile.h,v
> > > retrieving revision 1.316.2.8.2.12.2.14
> > > diff -u -p -d -r1.316.2.8.2.12.2.14 zend_compile.h
> > > --- Zend/zend_compile.h 12 Feb 2008 00:20:33 -0000
> > 1.316.2.8.2.12.2.14
> > > +++ Zend/zend_compile.h       7 Mar 2008 11:34:15 -0000
> > > @@ -143,6 +143,10 @@ typedef struct _zend_try_catch_element {
> > >  /* deprecation flag */
> > >  #define ZEND_ACC_DEPRECATED 0x40000
> > >
> > > +/* class implement interface(s) flag */
> > 
> > 'Class implements interface(s) flag' Not the additional s. 
> Either way, 
> > this comment is completely useless. The name of the damn flag
> > tells me that it has something to do with classes implementing
> > interfaces.
> > A comment is only uiseful if it adds information. And yes 
> names should
> > be
> > clear.
> > 
> > > +#define ZEND_ACC_IMPLEMENT_INTERFACES 0x80000
> > > +
> > > +
> > >  char *zend_visibility_string(zend_uint fn_flags);
> > >
> > >
> > > +
> > > +#define ZEND_COMPILE_EXTENDED_INFO
> > (1<<0)
> > > +#define ZEND_COMPILE_HANDLE_OP_ARRAY            (1<<1)
> > > +#define ZEND_COMPILE_IGNORE_INTERNAL_FUNCTIONS       (1<<2)
> > > +#define ZEND_COMPILE_IGNORE_INTERNAL_CLASSES   (1<<3)
> > > +#define ZEND_COMPILE_DELAYED_BINDING                   (1<<4)
> > > +
> > > +#define ZEND_COMPILE_DEFAULT
> > ZEND_COMPILE_HANDLE_OP_ARRAY
> > > +#define ZEND_COMPILE_DEFAULT_FOR_EVAL                  0
> > > +
> > 
> > The above are all possible options. So why not name them 
> > 'ZEND_COMPILE_OPTION_*' and why no comments here?
> > 
> > [...]
> > > Index: Zend/zend_vm_opcodes.h 
> > > 
> ===================================================================
> > > RCS file: /repository/ZendEngine2/zend_vm_opcodes.h,v
> > > retrieving revision 1.42.2.17.2.1.2.4
> > > diff -u -p -d -r1.42.2.17.2.1.2.4 zend_vm_opcodes.h
> > > --- Zend/zend_vm_opcodes.h      31 Dec 2007 07:17:06 -0000
> > 1.42.2.17.2.1.2.4
> > > +++ Zend/zend_vm_opcodes.h      7 Mar 2008 11:34:26 -0000
> > > @@ -18,135 +18,136 @@
> > >     
> > > +----------------------------------------------------------------
> > ------+
> > >  */
> > >
> > > -#define ZEND_NOP                       0
> > [...]
> > > +#define ZEND_NOP                               0
> > Please do not change the indent here or create the patch 
> with -uwp as 
> > otherwise one cannot tell where you added new stuff.
> > > Index: sapi/cgi/cgi_main.c 
> > > 
> ===================================================================
> > > RCS file: /repository/php-src/sapi/cgi/cgi_main.c,v
> > > retrieving revision 1.267.2.15.2.50.2.13
> > > diff -u -p -d -r1.267.2.15.2.50.2.13 cgi_main.c
> > > --- sapi/cgi/cgi_main.c 28 Feb 2008 00:51:56 -0000
> > 1.267.2.15.2.50.2.13
> > > +++ sapi/cgi/cgi_main.c       7 Mar 2008 11:34:29 -0000
> > > @@ -1691,7 +1691,7 @@ consult the installation file that came
> > >                                                         break;
> > >
> > >                                                 case 'e': 
> /* enable
> > extended info output */
> > > -
> > CG(extended_info) = 1;
> > > +
> > > CG(compiler_options) |= ZEND_COMPILE_EXTENDED_INFO;
> > >                                                         break;
> > >
> > >                                                 case 'f': /* parse
> > file */
> > 
> > This does not work.
> > 
> > > Index: sapi/cli/php_cli.c 
> > > 
> ===================================================================
> > > RCS file: /repository/php-src/sapi/cli/php_cli.c,v
> > > retrieving revision 1.129.2.13.2.22.2.4
> > > diff -u -p -d -r1.129.2.13.2.22.2.4 php_cli.c
> > > --- sapi/cli/php_cli.c  3 Feb 2008 17:49:46 -0000
> > 1.129.2.13.2.22.2.4
> > > +++ sapi/cli/php_cli.c  7 Mar 2008 11:34:29 -0000
> > > @@ -821,7 +821,7 @@ int main(int argc, char *argv[])
> > >                                 break;
> > >
> > >                         case 'e': /* enable extended info 
> output */
> > > -                               CG(extended_info) = 1;
> > > +                               CG(compiler_options) |=
> > ZEND_COMPILE_EXTENDED_INFO;
> > >                                 break;
> > >
> > >                         case 'F':
> > 
> > Does not work either.
> > 
> > > Index: sapi/milter/php_milter.c 
> > > 
> ===================================================================
> > > RCS file: /repository/php-src/sapi/milter/php_milter.c,v
> > > retrieving revision 1.14.2.2.2.3.2.2
> > > diff -u -p -d -r1.14.2.2.2.3.2.2 php_milter.c
> > > --- sapi/milter/php_milter.c    31 Dec 2007 07:17:18 -0000
> > 1.14.2.2.2.3.2.2
> > > +++ sapi/milter/php_milter.c    7 Mar 2008 11:34:29 -0000
> > > @@ -1033,7 +1033,7 @@ int main(int argc, char *argv[])
> > >                                 break;
> > >
> > >                         case 'e': /* enable extended info 
> output */
> > > -                               CG(extended_info) = 1;
> > > +                               CG(compiler_options) |=
> > ZEND_COMPILE_EXTENDED_INFO;
> > >                                 break;
> > >
> > >                         case 'f': /* parse file */
> > 
> > And this does also not work.
> > 
> > The reason is that you did not update the table that allows those 
> > additions. Given that fact I doubt that you tested what you did and 
> > hence this is just a quick shot at something I fail to get.
> > 
> > Best regards,
> >  Marcus
> 
> 

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

Reply via email to