Live data from Hacker News

Algorithms in PHP: Deques

withinboredom.info

11–20 of 25 posts

Re: Algorithms in PHP: Deques

#11
post #5

nieve -> naive Just a small typo, article is good. Clear examples and good explanations.

That code is so bad. Who does this?! return ($this->head === 0 && $this->tail === $this->size - 1) || $this->head === $this->tail + 1; Or this? $return = $this->next?->resetPrevious(); Or this!!! $this->tail = $this->tail?->setNext(new Node($this->tail, null, $value))->next ?? $this->head = new Node(null, null, $value); Or leaves typos in their code? elseif ($this->tail === $this->size - 1) { $this->tail = 0;just a t…

or maybe you're being overly critical.

PHP aint pretty, but that code doesn't seem unreasonable to me. I certainly wouldn't blink at it outside of the typo.

Re: Algorithms in PHP: Deques

#12
post #5

nieve -> naive Just a small typo, article is good. Clear examples and good explanations.

That code is so bad. Who does this?! return ($this->head === 0 && $this->tail === $this->size - 1) || $this->head === $this->tail + 1; Or this? $return = $this->next?->resetPrevious(); Or this!!! $this->tail = $this->tail?->setNext(new Node($this->tail, null, $value))->next ?? $this->head = new Node(null, null, $value); Or leaves typos in their code? elseif ($this->tail === $this->size - 1) { $this->tail = 0;just a t…

You are not helping either. Show how it is supposed to be :)

Re: Algorithms in PHP: Deques

#13
post #10
post #5

Earlier quoted context omitted.

That code is so bad. Who does this?! return ($this->head === 0 && $this->tail === $this->size - 1) || $this->head === $this->tail + 1; Or this? $return = $this->next?->resetPrevious(); Or this!!! $this->tail = $this->tail?->setNext(new Node($this->tail, null, $value))->next ?? $this->head = new Node(null, null, $value); Or leaves typos in their code? elseif ($this->tail === $this->size - 1) { $this->tail = 0;just a t…

> I get that PHP has a bad rep Have you ever tried reading perl code?

I learned that Perl is a write-only language back in the day, and that really helped.

Re: Algorithms in PHP: Deques

#14
post #5

nieve -> naive Just a small typo, article is good. Clear examples and good explanations.

That code is so bad. Who does this?! return ($this->head === 0 && $this->tail === $this->size - 1) || $this->head === $this->tail + 1; Or this? $return = $this->next?->resetPrevious(); Or this!!! $this->tail = $this->tail?->setNext(new Node($this->tail, null, $value))->next ?? $this->head = new Node(null, null, $value); Or leaves typos in their code? elseif ($this->tail === $this->size - 1) { $this->tail = 0;just a t…

Actually this type of over-usage of ternary operators is not a PHP thing.. it's very prevalent in the JavaScript world

Re: Algorithms in PHP: Deques

#15
post #14
post #5

Earlier quoted context omitted.

That code is so bad. Who does this?! return ($this->head === 0 && $this->tail === $this->size - 1) || $this->head === $this->tail + 1; Or this? $return = $this->next?->resetPrevious(); Or this!!! $this->tail = $this->tail?->setNext(new Node($this->tail, null, $value))->next ?? $this->head = new Node(null, null, $value); Or leaves typos in their code? elseif ($this->tail === $this->size - 1) { $this->tail = 0;just a t…

Actually this type of over-usage of ternary operators is not a PHP thing.. it's very prevalent in the JavaScript world

None of those snippets contain a ternary operator.

?? is the Null Coalescing Operator[1]

?-> is the nullsafe operator[2]

[1]: https://www.php.net/manual/en/language.operators.comparison.... [2]: https://www.php.net/manual/en/language.oop5.basic.php#langua...

Re: Algorithms in PHP: Deques

#16
post #12
post #5

Earlier quoted context omitted.

That code is so bad. Who does this?! return ($this->head === 0 && $this->tail === $this->size - 1) || $this->head === $this->tail + 1; Or this? $return = $this->next?->resetPrevious(); Or this!!! $this->tail = $this->tail?->setNext(new Node($this->tail, null, $value))->next ?? $this->head = new Node(null, null, $value); Or leaves typos in their code? elseif ($this->tail === $this->size - 1) { $this->tail = 0;just a t…

You are not helping either. Show how it is supposed to be :)

That's kind of the whole issue, isn't? Who knows what that kind of code is supposed to mean?

Re: Algorithms in PHP: Deques

#17
post #9

Earlier quoted context omitted.

> who does this Well, I’m doing this for fun, mostly in an illustrative manner. I’m not getting paid for this, nor is anyone reviewing my work. So thanks for volunteering, though your critical analysis could be more constructive. As to the typos, I suspect it comes from the WordPress editor just being its weird self and perhaps me starting to type in the wrong place, or Grammarly updating the wrong thing. Who knows,…

I also wonder what the purpose of wrapping native PHP array mutation in an object is and what overhead that introduces. I'm with you on being kind in code reviews but one of the canonical examples of sticky bad PHP code is the addslashes top answer on SO for preventing SQL injection. It stayed there for years/decades and hundreds if not thousands of junior devs copied and pasted it. So there's some risk when we share…

> purpose of wrapping native PHP array mutation in an object is and what overhead that introduces.

The purpose is to illustrate what we are doing and setting the stage for later implementations. The overhead is practically unmeasurable unless we are filling the object table with these things (we are not).

Property lookup and function calls are pretty darn fast in PHP, especially with JIT enabled.

Re: Algorithms in PHP: Deques

#18
post #9

Earlier quoted context omitted.

I also wonder what the purpose of wrapping native PHP array mutation in an object is and what overhead that introduces. I'm with you on being kind in code reviews but one of the canonical examples of sticky bad PHP code is the addslashes top answer on SO for preventing SQL injection. It stayed there for years/decades and hundreds if not thousands of junior devs copied and pasted it. So there's some risk when we share…

> purpose of wrapping native PHP array mutation in an object is and what overhead that introduces. The purpose is to illustrate what we are doing and setting the stage for later implementations. The overhead is practically unmeasurable unless we are filling the object table with these things (we are not). Property lookup and function calls are pretty darn fast in PHP, especially with JIT enabled.

> The overhead is practically unmeasurable unless we are filling the object table with these things

I think that's typically how one would measure complexity and regardless of JIT I think it introduces some artificial cost.

Re: Algorithms in PHP: Deques

#19
post #4

Php's array_shift() does seem unusually slow. $ time php -r '$a=array_fill(0,100000,"test");while(array_shift($a)){}' real 0m10.238s user 0m10.238s sys 0m0.000s $ time perl -e 'my @a=("test") x 100000;while(shift(@a)){}' real 0m0.027s user 0m0.027s sys 0m0.000s $ time node -e 'a=Array(100000).fill("test");while(a.shift()){}' real 0m1.350s user 0m1.343s sys 0m0.011s

[deleted]

Re: Algorithms in PHP: Deques

#20
post #18

Earlier quoted context omitted.

> purpose of wrapping native PHP array mutation in an object is and what overhead that introduces. The purpose is to illustrate what we are doing and setting the stage for later implementations. The overhead is practically unmeasurable unless we are filling the object table with these things (we are not). Property lookup and function calls are pretty darn fast in PHP, especially with JIT enabled.

> The overhead is practically unmeasurable unless we are filling the object table with these things I think that's typically how one would measure complexity and regardless of JIT I think it introduces some artificial cost.

Sure, it adds a cost, but it’s infinitesimal compared to the cost of what we are measuring.
Post reply on HN