Henrik,

As R is an interpreted language and paste0 is likely a nice and fast built-in 
function likely already written in some version of C, there does not seem much 
room for a speedup as everything is done at run time. The parser phase may 
indeed have abilities to simplify but often at the expense of a more complex, 
and perhaps slow, parser.

-----Original Message-----
From: R-devel <r-devel-boun...@r-project.org> On Behalf Of Henrik Bengtsson
Sent: Monday, June 2, 2025 5:34 PM
To: Josiah Parry <josiah.pa...@gmail.com>
Cc: r-devel@r-project.org
Subject: Re: [Rd] Specifying a long string literal across several lines

One could also argue that paste0("a", "b", "c") is a function call
that needs to be evaluated at runtime, whereas "abc" is a string
constant understood by the parser, and often also language agnostic.
I'd assume compilers and code- and text-search tools do a better job
with the latter.

/Henrik

On Mon, Jun 2, 2025 at 2:18 PM Josiah Parry <josiah.pa...@gmail.com> wrote:
>
> I suppose taste is learned as well. It does feel quite odd that the best
> way to define a long string without a note or text wrapping is by being
> creative with functions.
>
> This is valid in Python, Julia, and Rust (if you add `let` and a
> terminating semi-colon):
>
> my_str = "part1\
> part2\
> part2"
>
> I don't think it is abnormal to expect or desire this type of functionality
> in our favorite language.
>
> On Mon, Jun 2, 2025 at 13:59 Kasper Daniel Hansen <
> kasperdanielhan...@gmail.com> wrote:
>
> > Like Tomas, I find the paste0 readability to be **much** better, partly
> > because it allows for better indentation (as Tomas pointed out). Perhaps a
> > pointless email, but sometimes - for these subjective issues - it is
> > worthwhile to point out a difference in opinion.
> >
> > Best,
> > Kasper
> >
> > On Mon, Jun 2, 2025 at 12:27 PM Tomas Kalibera <tomas.kalib...@gmail.com>
> > wrote:
> >
> >>
> >> On 6/2/25 17:37, Josiah Parry wrote:
> >> > Tomas,
> >> >
> >> > Here is a good example of where this functionality would be useful:
> >> >
> >> https://github.com/R-ArcGIS/arcgislayers/blob/2b29f4c254e7e5a1dadce8d4b0015a70dfae39d4/R/arc-open.R#L19-L56
> >> >
> >> > In order to prevent R CMD check notes I have to use `paste0()` to
> >> > concatenate long URLs. If we were able to use `\` to
> >> > separate the string across multiple lines, it would make the solution
> >> > much nicer!
> >>
> >> It may be a matter of taste. To me the current form
> >>
> >> #' furl <- paste0(
> >> #' "https://services3.arcgis.com/ZvidGQkLaDJxRSJ2/arcgis/rest/services/";,
> >> #'   "PLACES_LocalData_for_BetterHealth/FeatureServer/0"
> >> #' )
> >> #'
> >>
> >> would be actually clearer than say this:
> >>
> >> #' # FeatureLayer
> >> #' furl <-
> >> "https://services3.arcgis.com/ZvidGQkLaDJxRSJ2/arcgis/rest/services/\
> >> PLACES_LocalData_for_BetterHealth/FeatureServer/0
> >> <https://services3.arcgis.com/ZvidGQkLaDJxRSJ2/arcgis/rest/services/%5CPLACES_LocalData_for_BetterHealth/FeatureServer/0>
> >> "
> >> #'
> >>
> >> Inside a per-line comment (#), a backslash followed by a newline would
> >> probably be disallowed, anyway - e.g. in C it is considered dangerous
> >> and is discouraged. And the code resulting from splices is hard to read
> >> due to missing indentation. There is also risk of accidentally putting a
> >> space after the backslash before the end of line (which some
> >> languages/parsers then don't treat as a splice, some do, some issue a
> >> warning - of course it is hard to see in the code).
> >>
> >> The idea of automatically concatenating consecutive string literals as
> >> in C would not easily work in R. This is now valid R code:
> >>
> >> x <- "part1"
> >> "part2"
> >>
> >> if we introduced concatenation, we would change behavior of this code
> >> (the value of x would be different, the result of these two lines would
> >> be different).
> >>
> >> I think paste0() is not that bad in the end.
> >>
> >> Best
> >> Tomas
> >>
> >> > On Mon, Jun 2, 2025 at 3:19 AM Tomas Kalibera
> >> > <tomas.kalib...@gmail.com> wrote:
> >> >
> >> >
> >> >     On 5/28/25 04:15, Pavel Krivitsky via R-devel wrote:
> >> >     > Dear All,
> >> >     >
> >> >     > Perhaps this should go in r-package-devel, but I suspect that
> >> >     this is
> >> >     > going to turn into a feature request, and I want to run it by
> >> >     the list
> >> >     > before filing it in the Bugzilla.
> >> >     >
> >> >     > I would like to specify a long string literal without making the
> >> >     line
> >> >     > of code too long. In R,
> >> >     >
> >> >     > "abc
> >> >     > def"
> >> >     >
> >> >     > yields the string "abc\def", and, as far as I can tell, there is
> >> no
> >> >     > mechanism for preventing it from inserting a newline into the
> >> >     string.
> >> >     >
> >> >     > Putting a backslash before the newline, i.e.,
> >> >     >
> >> >     > "abc\
> >> >     > def"
> >> >     >
> >> >     > eliminates the newline in (that I know of) C/C++, Python, and
> >> Julia,
> >> >     > but it makes no difference in R.
> >> >     >
> >> >     > The implicit concatenation of Python and C/C++, e.g., "abc"
> >> >     "def", is a
> >> >     > syntax error as well in R.
> >> >     >
> >> >     > It is, of course, possible to use paste0(), but is there a more
> >> >     concise
> >> >     > built-in mechanism in R of which I am not aware?
> >> >     >
> >> >     > If not, I think it would make sense to bring R in line with the
> >> >     others.
> >> >     > Currently, backslash and no backslash before a newline behave
> >> >     > identically (at least as far as I can tell), so I doubt that a
> >> >     > nontrivial amount of code relies on the current behaviour. [1]
> >> >
> >> >     What would be real example of a long string literal you would want
> >> to
> >> >     enter this way?
> >> >
> >> >     For entering a long text with newlines, one can use raw strings in R
> >> >     (see ?Quotes) - but there you would see the newlines and
> >> indentation.
> >> >     I've seen code where  "paste0" has been aliased to a local function
> >> >     named with a single letter to make concatenation more concise.
> >> >
> >> >     Best
> >> >     Tomas
> >> >
> >> >     >
> >> >     >                               Any thoughts?
> >> >     >                               Pavel
> >> >     >
> >> >     > [1] On the off chance that it does, it should easy to check by
> >> >     > searching for "\\\n" in package sources, because a backslash
> >> >     before a
> >> >     > newline is a syntax error outside a string.
> >> >     > ______________________________________________
> >> >     > R-devel@r-project.org mailing list
> >> >     > https://stat.ethz.ch/mailman/listinfo/r-devel
> >> >
> >> >     ______________________________________________
> >> >     R-devel@r-project.org mailing list
> >> >     https://stat.ethz.ch/mailman/listinfo/r-devel
> >> >
> >>
> >> ______________________________________________
> >> R-devel@r-project.org mailing list
> >> https://stat.ethz.ch/mailman/listinfo/r-devel
> >>
> >
> >
> > --
> > Best,
> > Kasper
> >
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-devel@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

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

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

Reply via email to