Afternoon Steven,

I'm not going to apologize for making a joke ... it was a joke ...

That being said, if you insist on pursuing an RFC for this, and would like
to get on with writing that RFC, then here is an initial patch:
https://gist.github.com/krakjoe/efff492611ce8f9fc12909023c89c7dc

Let compile time optimization of the call be implemented if the feature is
accepted, and don't worry about doing that yourself.

I haven't changed my mind, this is not justified in my opinion, but it is
just my opinion and I could have been more helpful yesterday ...

Cheers
Joe

On Mon, 4 Mar 2019 at 16:30, Steven Penny <svnp...@gmail.com> wrote:

> On Mon, 04 Mar 2019 02:23:46, Peter Kokot wrote:
> > Now, interesting is that in bash and some langs (where the main
> > environment is CLI), there is by default newline echoed. In PHP and
> > other languages there isn't. Changing default functionality of echo in
> > PHP is like changing left-hand traffic countries to use right-hand
> > traffic. A new function name would be needed for that. You can start
> > with creating an extension for this.
>
> I think the best option is a new function like "puts" or "posix_puts". I
> looked
> into this but im having trouble. i started with "var_dump" because that
> does
> produce a newline by default [1]:
>
>     php_printf("%sbool(false)\n", COMMON);
>
> new function would be most similar to "print", so i went to look at that
> code,
> but it seems "print" uses "echo" internally [2]:
>
>     opline = zend_emit_op(NULL, ZEND_ECHO, &expr_node, NULL);
>
> so then i went to look at "echo" code. however i cant actually seen to find
> where that is defined, as the PHP codebase is... byzantine. it seems
> ZEND_ECHO
> is handled by "zend_write" [3]:
>
>     zend_write(ZSTR_VAL(str), ZSTR_LEN(str));
>
> which is handled by "write_function" [4]:
>
>     zend_write = (zend_write_func_t) utility_functions->write_function;
>
> which is handled by "php_output_write" [5]:
>
>     zuf.write_function = php_output_write;
>
> which is handled by "php_output_op" [6]:
>
>     php_output_op(PHP_OUTPUT_HANDLER_WRITE, str, len);
>
> which is handled by "ub_write" [7]:
>
>     sapi_module.ub_write(context.out.data, context.out.used);
>
> which is handled by "orig_ub_write" [8]:
>
>     sapi_module.ub_write = orig_ub_write;
>
> which is handled by... "ub_write"? [9]:
>
>     size_t (*orig_ub_write)(const char *str, size_t str_length) =
>     sapi_module.ub_write;
>
> it seems like a circular definition. surely i am getting something wrong,
> and
> is it really need to go 8 levels of abstraction to write to standard
> output?
>
> [1] https://github.com/php/php-src/blob/df57395/ext/standard/var.c#L109
> [2] https://github.com/php/php-src/blob/df57395/Zend/zend_compile.c#L7361
> [3] https://github.com/php/php-src/blob/df57395/Zend/zend_vm_def.h#L1584
> [4] https://github.com/php/php-src/blob/df57395/Zend/zend.c#L810
> [5] https://github.com/php/php-src/blob/df57395/main/main.c#L2140
> [6] https://github.com/php/php-src/blob/df57395/main/output.c#L255
> [7] https://github.com/php/php-src/blob/df57395/main/output.c#L1076
> [8]
> https://github.com/php/php-src/blob/df57395/ext/opcache/ZendAccelerator.c#L4211
> [9]
> https://github.com/php/php-src/blob/df57395/ext/opcache/ZendAccelerator.c#L4126
>
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

Reply via email to