> The idea behind PHP from day one was that it was an environment for
> wrapping compiled code. Things that are performance critical is written
> in C/C++ and things that aren't are left in the PHP templates. Whether
> you issue an SQL query from PHP or from a compiled C program doesn't
> affect the overall performance of the system so you might as well do
> that from PHP.
>
> If you are calculating a fractal, you write it in C and expose it to PHP
> with a get_fractal($args) function call so you can mark it up and easily
> change the args passed to the underlying function.
Ah yes, thank you (the people who built the system in PHP) for that, it
is very easy to use.
Well, more to the point, I don't think this should be a requirement. It
is possible to call PHP functions from within machine code, so more to
the point, why not build functions in PHP language and keep them as
machine code for each machine? The technology is there to where you
won't even have to interpret the source until you see it has been
modified and can do the conversion over again.
Not everyone knows C/C++, not everyone cares to know C/C++, not everyone
should need to know C/C++. That requirement for speed intensive code
bothered me and still does. Yes, thank you there are other languages,
but I'll rather learn PHP until I reach advanced level and I'm not there
yet. Should always learn one language really well before going on to
"greener" pastures.
The second reason is that it is harder to get someone to compile your
extension and include it than it is to get someone to use your PHP
language library or script. What you stated is what ADOdb does, but I
would suspect that not many that use it have the extension also. That is
the point, I shouldn't have to write C, unless the feature doesn't
exist. If I have to write C for PHP functions, then what is the point?
PHP does do a really great job of making it extremely easy to write
extensions or as much as is possible. You still have to worry about
whether or not the user is able to add the extension, the user knows
enough to install it, or would take the time to do so.
I do remember reading something that JIT compiling can be better than
regular compilation since it can do the sensing you described.
> It is really important for PHP to have as little overhead as possible
> between itself and the speed-critical code behind it and less important
> that the userspace executor is fast. That doesn't mean it should be
> slow. It should be as fast as we can make it, but not at the cost of
> convenience.
Yes, I'm saying the userspace executor can be quicker using JIT
compilation. Well, to be completely accurate, there would be a little
tiny, you'll-barely-notice-it-is-there delay during the JIT stage. It
should be manageable.
>
> What APC does is to eliminate the continual recompilation to bytecode.
>
Bytecode cache? That is interesting, I understand how APC is used, I
just don't know the implementation. It is nice that APC uses bytecode
instead of PHP opcodes as it might be a little bit quicker.
Why not go a step further and compile to machine code? I like the idea
of using opcode to transfer from machine to machine (such as in Java),
but it was always confusing why PHP's standard package never just saved
the opcode. Sure there are compilers (some don't work well, others you
have to pay for), but the technology already exists in PHP.
The idea of using JIT compiling is really to do away with continuing
interpreting, compiling, and running to slice it down and save the
machine code for later reading. You can cut that all down to just one
stage. PHP runs compiled code on top of itself and does the whole
interpreting stage if it needs to.
>
> It would make PHP more complicated to distribute since a translator to
> CPU specific machine could would be needed.
>
That would be where Lightning library would come in. I would suspect
that the library would be able to sense the CPU architecture at compile
time.
>
> Before thinking about this: try to demonstrate how much we would gain
> on typical web sites.
>
Ah yes, the million dollar question. How much would be benefited from
JIT compiling? Would there be a benefit? Currently with the commercial
PHP compiler, there is an overall increase of milliseconds (not much if
you think of it). The only way to answer this is doing it and giving the
results. Give me a year or two, I just didn't want to start it if
someone else was doing it.
The discussion with my teacher was that when you have an algorithm that
uses an loop in an interpreted language it will always be faster to have
that in machine code (eh, you could argue that a poor assembler
algorithm would be slower than a better written C algorithm). There, I
would assume, is overhead in the PHP engine where you have to run the
code, reading it, running the compiled routine. If it was machine code
PHP would not be required to read the Opcode and would remove that
overhead from the process.
How much would you save? A few milliseconds at least. When you have a
horrible loop intensive algorithm, you would be able to tell the
difference as my teacher was. I think it is pretty... well, I'll rather
would like to stay away from C web programming thank you.
Most Web sites only take a few milliseconds to process anyway and most
overhead is from SQL transactions. Still, I contend that JIT compiling
would still be worth looking at.
Really, what I would think the biggest overhead is at is (even with APC)
interpreting and compiling the source. It is possible to save the
machine code for later use for shared hosting. For the idea of using
APC, I kind of like it and will take a look at the source to see if it
is possible for me.
JIT doesn't have to be a function at a time, it can be whole classes,
files, or the entire script.
The symbol table would map better to assembler, I mean machine code
since basically you are working with stacks anyway. The PHP symbol table
in C is just easier to write and maintain. That probably would have to
be compiled at run time.
Personally, I would like to do without the whole interpreting of the
source and have PHP as a completely compiled (as in bytecode) language.
I suspect that would not go off to well, so therefore I propose
something that is compatible with what PHP does now. Should also be
easier as everything I would need to do already exists.
Jacob Santos
You don't understand how APC is used. On large web sites that run APC
each PHP file will, eventually, end up being compiled once and end up in
the bytecode cache. On these sites the PHP code that is run is known and
does not change (often). A good administrator will ensure that the cache is
large
enough so that you don't get thashing -- memory is cheap.
The above might not be true for an ISP that hosts many virtual sites, but
then APC may not help them much.
JIT is different. The language (eg Java) is compiled to a bytecode and then
often stored in a file. This bytecode will then run later, possibly on another
machine. The JIT translates the bytecode to machine code just prior to it
being executed - a function/... at a time, only translating the bits that
are needed.
JIT translates the bits of bytecode that are needed into machine code.
So you see that they are really different things. I suppose that you could
add an extra JIT step to APC that translated bytecode to machine code
as it is needed -- to get the big win it probably ought to cache the machine
code as well. I suspect that if this were to be done, APC/translator would
probably be best translating all the bytecode to machine code on the
assumption that most of the code is going to be run eventually anyway
and that the hit of a full translation is small considering that the code
is going to be run many times.
Quite how big the win would be I don't know.
Much PHP execution is NOT nice integer/... loops that make fast machine
code but involves function calls for things like string manipilation,
these functions are in machine code anyway (written in C). So the
improvement might not be as much as you expect.
There are also some PHP features that I suspect don't map to machine code well
(like the use of the symbol table). I'll let others talk about that.
It would make PHP more complicated to distribute since a translator to
CPU specific machine could would be needed.
intelligent people of this mailing list beat me down, if the case is
that I'm wrong.
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php