I think that operator
for string concatenation is an unfortunate decision, because:
  1. String concatenation is noncommutative unlike addition operator
    . This argument mentions the developers of Julia programming language:

    In mathematics,
    usually denotes a commutative operation, where the order of the operands does not matter. An example of this is matrix addition, where
    A + B == B + A
    for any matrices
    that have the same shape.
    And I suggest to make operator
    strictly commutative and in presence of
    F +(MyType, Int)
    F +(Int, MyType)
    . This will reduce a work of definition of additional/extra operators' overloadings, and at the same time this will increase the predictability of programs [{}].
  2. In some languages (for example in PHP and Perl) "5"+5 yields 10.
  3. Dart Puzzlers: Chapter 2:
    Can you guess what the following statement prints?
    System.out.println("2 + 2 = " + 2+2);
    Translating this mini-puzzle into Dart, we get:
    print('2 + 2 = ' + 2+2);
    Both the Java and Dart versions print
    2 + 2 = 22
    , which may not be what you expected.
    Or more vital example:
    print("id=" + id+1)
  4. Dart Puzzlers: Chapter 2:
        System.out.println("Animals are equal: "
                           + pig == dog);
    It doesn't print
    Animals are equal: true
    . It doesn't print
    Animals are equal: false
    , either. It just prints
    . Why? Because the
    operator binds tighter than the
    This [as in 3] problem is solved with a separate string concatenation operator, because its priority may be lower than of operator

For this [and/or some other] reasons operator
is not used for string concatenation in many languages (PHP, Perl, D, Lua, Julia, Visual Basic, Nim, Dart), but definitive designation for this operation is still not found [{}], therefore I decided to go another way and reject a dedicated operator for string concatenation. To concat string literal and variable in 11l just place it next to each other without spaces:
To concat two variables use this notation:
or this:
In the last case a raw string literal is used — raw strings should be enclosed in single quotation marks: characters

Consecutive string literals [of one type (‘’ or "")] are not concatenated [unlike in languages C or Python], because it is error prone {} — space between two string literals indicate that likely comma is missed here.
String literals are concatenated only with variables:
‘Value = ’value"\n"
, and with string literals of other type:
. And in this case there should not be a space between string literal and a variable or string literal of other type.

Why is
bad for strings, but
is not?
almost always has one of the operands as a string literal [
"s" * n
n * "s"
and such an operation is easily noticeable.