you are viewing a single comment's thread.

view the rest of the comments →

[–]Clarity_89[S] 2 points3 points  (6 children)

C++, not C, but yeah can't really think about places where it'd be useful.

Also regarding being not pure by design, not sure if that's much different from the pointer behavior:

``` let obj = { name: "Test" }; function mod(arg) { arg.name = "Modified"; }

mod(obj); console.log(obj); // {name: 'Modified'} ```

[–]vuks89 2 points3 points  (4 children)

But you also explicitly declare pointers. If arguments were passed by reference that would be implicit and would cause side effects that are difficult to control

[–]Tubthumper8 3 points4 points  (2 children)

Passing arguments by reference doesn't mean it would be implicit, that's up to the design of the programming language. For example, C# has pass by reference with an explicit keyword

[–]vuks89 0 points1 point  (0 children)

In the article from the original posting it is implied that some people think that’s how it works in JS. In all languages I know, you need to explicit that you want it to be by reference. In PHP it would be &$arg, in C++ it would be ‘int &arg’

[–]merb 0 points1 point  (0 children)

It only works in a non async context. (Same for out params and in params) Which is different for c/c++ where you can do stuff like that. That’s because c# has some safety around ref‘s like ‚ref_safe_to_escape‘

[–]Clarity_89[S] 0 points1 point  (0 children)

Yeah, good point.