> On Sep 11, 2024, at 4:43 PM, Hammed Ajao <hamieg...@gmail.com> wrote:
> 
> Using WebAssembly (Wasm) for PHP doesn't make much sense. PHP already runs on 
> its own virtual machine server-side, so adding another VM (Wasm) would just 
> introduce unnecessary complexity and overhead. 

Sorry, but I am going to have to call your assertions ill-informed, at best.  
Having one VM does not invalidate the value of a different VM with very 
different strengths. 

If using two VMs really made no sense there would not be so many people running 
a Lua VM in Java.

> Additionally, would this be the LLVM or Cranelift variant of Wasm?

TBD


> For extensions, Wasm would perform even worse than current implementations, 
> no matter how it's integrated. Presently, I define zif_handler function 
> pointers that operate on the current execution frame and return value, 
> triggered when the engine detects an internal function (fbc). This approach 
> is as direct as it gets.

It is not the performance of integration point but what can be done within 
WASM, and that would be able to be done on managed hosts if incorporated into 
PHP core.  

As for use of extensions that are not part of core on a managed host, some of 
us in the USA have a saying that relates: 

 "Besides that Mrs. Lincoln, how was the play?"  

> Suggesting AssemblyScript, especially in this context, seems illogical. Have 
> you actually worked with WebAssembly and considered performance implications, 
> or is this based on theoretical knowledge?

Admittedly theoretical.  

Are your objections based on actually working with it, or theoretical too?

> Your point about operator overloading doesn't seem valid either.

One cannot validly claim validity or lack of validity of an _opinion_.  

You can disagree or agree — as that is how one engages with opinion — but an 
opinion does not beg a proof.

> Consider the following:
> 
> ```php
> class X {
>     public function plus(X $that) {}
>     public function equals(X $that) {}
> }
> ```
> 
> In this case, `plus` could represent any behavior, as could `equals`. If I 
> wanted to, I could implement `plus` to perform what `equals` does and vice 
> versa. Should we consider methods broken just because their names can be 
> arbitrary?

You are comparing apples and oranges.  

There are very few standardized method names and the number of potential method 
names is combinatorially large. There are a very few number of operators and 
each has a well-known meaning with numbers or in boolean expressions, which 
means that if you use one you have reduced by one the scarce resource of 
operators, assuming they are used in a manner were 99 out of 100 developers 
would choose to overload them in the same way (vs. say 60 out of 100.)

But this is just one concern. Read on for other concerns.

> PHP already distinguishes between comparison operators for objects:

It seems them operator overloading is not needed so much then, right?

> `===` compares object IDs, while `==` compares their properties. Beyond this, 
> there's little reason to apply an operator to an object directly. Why would 
> you need to call `$user1 + $user2` or similar operations on an object? 

Why would you add $money1 + $money2, or more likely $subtotal *(1+ $tax) + 
$shipping?  Because it make sense.  

And my opinion is that is makes sense if done in core, but not if done in 
userland.  Again, my *opinion*.

> What scenario would break by allowing operator overloads?

The scenario of reading code and being confused if looking at scalars or 
objects, and if objects then being able to find the implementation. The more 
unique a method is named, the faster it is to find in a codebase, even with a 
really smart IDE like PhpStorm. Now imagine having to search for the 
implementation of `+`, and not even knowing if there is such an override for 
code that is not type-hinted.

Basically operator overloading is one of the subsets of features for writing 
DSLs and having watched everyone in the Ruby community write their own DSLs in 
their projects they ended up with as many different languages as they had 
programming teams, and 99% of those languages were incomplete and poorly 
designed.  

There is something freeing about constraints and it is just my opinion that PHP 
having the constraints that you cannot really write  DSLs mean that people end 
up more often getting work done rather than writing their own custom DSL.And 
operator overloads are in this category for me.

BTW, the first time I realized this was in the early 90's when I compared 
Clipper to FoxPro.  Clipper was so much more powerful than FoxPro as a 
language. I taught Clipper professionally and I wrote a book on it.  But after 
the end of that phase of my life I looked back on Clipper vs. FoxPro and 
realized that Clipper developers spent lots of time trying to create their 
perfect DSL — myself included — but because you couldn't do that in FoxPro 
people just really got a lot of shit done with FoxPro.

> However, consider a case where comparing just one property of an object (like 
> a hash) is enough to determine equality. Wouldn't it be great if, without 
> changing any of the calling code, the engine compared `$this->hash === 
> $that->hash` when `$this == $that` is invoked, instead of all properties?

No, it would be awful.  I would not be able to look at the code and know what 
it is actually comparing.  

And what if I actually want to compare the objects and not the hashes? What if 
I did not know the object has an overload for equals and I wrote code assuming 
it was comparing objects?

> Without operator overloading, I'd have to define an `equals` method and 
> replace every `$obj == $x` call with `$obj->equals($x)`.

IMO doing what you'd "have to" do equates to better software engineering.

> Moreover, operator overloading unlocks new possibilities for algorithm 
> design. For example, you could define complex mathematical operations on 
> custom objects, enabling you to express algorithms more concisely and 
> naturally. Imagine implementing vector addition, matrix multiplication, or 
> symbolic computation directly in PHP. Instead of verbose method calls like 
> `$vec1->add($vec2)` or `$matrix1->multiply($matrix2)`, you could use simple 
> and intuitive syntax like `$vec1 + $vec2` or `$matrix1 * $matrix2`. This is 
> particularly useful for domain-specific algorithms where overloading enhances 
> readability and performance.

Not sure if you read all my comments in this or the prior thread, but I was 
arguing that there are *some* good use-cases — ones that could easily be 
standardized across all PHP users — and those use-cases would make great 
features to have in core: vector addition, matrix multiplication, and symbolic 
computation fit into those categories IMO.

> Operator overloading isn't just about convenience. It opens the door to more 
> expressive algorithms, better readability, and reduces boilerplate code, all 
> while maintaining backward compatibility with existing PHP behavior.

It opens the door to DSLs which opens the door to allowing every team to have 
their own unique DSL, and that is why I am against it.

But listen, I am just voicing my opinion, and I am only voicing it because I 
made a comment about relaxing operators in typedefs and someone claimed 
(something like) "that has the same issues as operator overloading" for which I 
disagreed. But now because of further replies I have gone really far down the 
operator overloading rabbit hole which I had not intended to go down.  

On this I have a firmly-held opinion based from well over 30 years of 
programming experience, so I am really unlikely to change my opinion. But it is 
still just my opinion, I don't have a vote anyway, anyone is in the right to 
disagree with me, and AFAIK there is not even an active RFC currently being 
discussed where the ones 4[1] and 3[2] years ago were both declined.
 
So arguing with me about operator overloading is effectively just tilting at 
windmills.  If you really want userland operator overloading in PHP so badly, 
propose another RFC and everyone who wants it will likely champion it, I will 
likely argue against it, but maybe it will finally pass and you'll get what you 
want.

Whatever the case, respectfully, you can disagree with me but please do not 
claim my opinion is "invalid" as that is just hubris.

-Mike

[1] https://wiki.php.net/rfc/userspace_operator_overloading 
<https://wiki.php.net/rfc/userspace_operator_overloading> 
[2] https://wiki.php.net/rfc/user_defined_operator_overloads 
<https://wiki.php.net/rfc/user_defined_operator_overloads>

Reply via email to