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