29
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
this post was submitted on 22 Apr 2023
29 points (100.0% liked)
Fediverse
17665 readers
1 users here now
A community dedicated to fediverse news and discussion.
Fediverse is a portmanteau of "federation" and "universe".
Getting started on Fediverse;
- What is the fediverse?
- Fediverse Platforms
- How to run your own community
founded 4 years ago
MODERATORS
@PeterPoopshit @petrescatraian
* String concatenation using a "." character (instead of a "+" like everyone else)
* Namespaces using a backslash as path separator ("\" is for escaping!)
* The whole idea of running an interpreter on every page request.
* Untyped variables
Just to name a few things on top of my head.
String concatenation with
+
is evil. Well-designed languages (Lua, for example, among many others—I'm not calling PHP well-designed!) doesn't do this.Why?
Because
+
, in every other context is commutative, but suddenly, in the case of concatenation, it is not. This is an unnecessary cognitive burden for no material gain.Concatenation can be accomplished by juxtaposition (e.g. SNOBOL4, Rexx, much of the C family tree), by
..
(Lua), by.
(Perl, PHP), by||
(PL/I, Rexx again), by&
(Ada, some BASIC dialects), etc. without this added cognitive burden of overloading+
for no good reason.I've never bought this argument. It really doesn't take much brain power to figure out that if you are dealing with strings, the left side is going to be on the left and the right side will be on the right. That's incredibly intuitive logic.
I would offer up a different reason that neither should be used. Format strings do the trick nicely and allow you to start including literals, convert other types to strings, etc. as needed.
A whole lot of misdesigns are only a "small amount of brain power" to use. As your language accumulates these, however, the load builds up.
This also has the extra problem that overloading in general brings with it. What is the result of
3 + "string"
? What is the result of"string" + 3
? You have to have rules for this. These rules have to be learned. They have to be kept in mind. There is room for error. And of course the way different languages react to them will vary strongly.For example in Rexx, Python, and Ruby these are errors (and with the latter two the error changes depending on which order). In Awk and Perl the result is 3 in both cases.
Format strings are better than
+
as concatenation, to be fair, but are still not very good compared to separate concatenation operators. It's hard to make them type-safe. They separate the value from its location in the string.Using actual concatenation operators has the advantage of format strings, but add the possibility for type safety. For example in Ada:
See here,
&
will only concatenate string types. If you want to print something that's not a string, you have to convert it to a string. This means you can't accidentally mix types. Further, it's immediately obvious where a given value will show up in the output. Compare and contrast with the C equivalent:Not only is location of the value obfuscated—trivial to spot here, but in a complicated string it's very difficult to spot at times. And it's easy, too, to have the format code not match the value. As this example illustrates. Again, easy to spot in trivial code like this, but horrifically hard in real-world code, especially if the variable type changes.