[Rd] string concatenation operator (revisited)

Martin Maechler m@ech|er @end|ng |rom @t@t@m@th@ethz@ch
Tue Dec 7 18:37:40 CET 2021


>>>>> Martin Maechler 
>>>>>     on Tue, 7 Dec 2021 18:35:00 +0100 writes:

>>>>> Taras Zakharko 
>>>>>     on Tue, 7 Dec 2021 12:56:30 +0100 writes:

    >> I fully agree! General string interpolation opens a gaping security hole and is accompanied by all kinds of problems and decisions. What I envision instead is something like this:
    >> f”hello {name}” 

    >> Which gets parsed by R to this:

    >> (STRINTERPSXP (CHARSXP (PROMISE nil)))

    >> Basically, a new type of R language construct that still can be processed by packages (for customized interpolation like in cli etc.), with a default eval which is basically paste0(). The benefit here would be that this is eagerly parsed and syntactically checked, and that the promise code could carry a srcref. And of course, that you could pass an interpolated string expression lazily between frames without losing the environment etc… For more advanced applications, a low level string interpolation expression constructor could be provided (that could either parse a general string — at the user’s risk, or build it directly from expressions). 

    >> — Taras

    > Well, many months ago, R's  NEWS (for R-devel, then became R 4.0.0)
    > contained

    > * There is a new syntax for specifying _raw_ character constants
    > similar to the one used in C++: r"(...)" with ... any character
    > sequence not containing the sequence )".  This makes it easier to
    > write strings that contain backslashes or both single and double
    > quotes.  For more details see ?Quotes.

    > This should be pretty close to what you propose above
    > (well, you need to replace your UTF-8 forward double quotes by
    > ASCII ones),
    > no ?

No it is not; sorry I'm not at full strength..
Martin


    >>> On 7 Dec 2021, at 12:06, Simon Urbanek <simon.urbanek using R-project.org> wrote:
    >>> 
    >>> 
    >>> 
    >>>> On Dec 7, 2021, at 22:09, Taras Zakharko <taras.zakharko using uzh.ch <mailto:taras.zakharko using uzh.ch>> wrote:
    >>>> 
    >>>> Great summary, Avi. 
    >>>> 
    >>>> String concatenation cold be trivially added to R, but it probably should not be. You will notice that modern languages tend not to use “+” to do string concatenation (they either have 
    >>>> a custom operator or a special kind of pattern to do it) due to practical issues such an approach brings (implicit type casting, lack of commutativity, performance etc.). These issues will be felt even more so in R with it’s weak typing, idiosyncratic casting behavior and NAs. 
    >>>> 
    >>>> As other’s have pointed out, any kind of behavior one wants from string concatenation can be implemented by custom operators as needed. This is not something that needs to be in the base R. I would rather like the efforts to be directed on improving string formatting (such as glue-style built-in string interpolation).
    >>>> 
    >>> 
    >>> This is getting OT, but there is a very good reason why string interpolation is not in core R. As I recall it has been considered some time ago, but it is very dangerous as it implies evaluation on constants which opens a huge security hole and has questionable semantics (where you evaluate etc). Hence it's much easier to ban a package than to hack it out of R ;).
    >>> 
    >>> Cheers,
    >>> Simon
    >>> 
    >>>> — Taras

    > [............]

    > ______________________________________________
    > R-devel using r-project.org mailing list
    > https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list