[fpc-devel] Some thoughts on multi-line string support, and a possible syntax that I think is perfectly clean and Pascal-ish.

Ben Grasset operator97 at gmail.com
Wed Jul 3 18:53:53 CEST 2019


On Wed, Jul 3, 2019 at 10:22 AM Marcus Sackrow <alb42 at web.de> wrote:

> I use an operator overload(not for constants but inside the code)
> because I'm used to our script engine have the '/' as operator for
> strings as line break.
>

That's certainly a neat use of operator overloading! However, I think that
it is still rather less clean/readable than what would be possible with
"true" unbroken multiline strings.
For really short stuff like your writeln example, also, it's not much
different from just doing the following, which is already supported:

writeln('1st line'#13#10'second line');

or

writeln('1st line'#10'second line');

BTW, doing it with an operator like that introduces quite a bit of
additional overhead, as the concatenation is no longer done at compile time.

Look at the assembler output here to get an idea.
<https://godbolt.org/#g:!((g:!((g:!((h:codeEditor,i:(j:1,lang:pascal,source:'unit+output%3B%0A%0A%7B$mode+ObjFPC%7D%7B$H%2B%7D%0A%0Ainterface%0A%0Aoperator/(const+a,+b:+string):+string%3B+inline%3B%0Aprocedure+TestMultiLine%3B%0A%0Aimplementation%0A%0Aoperator/(const+a,+b:+string):+string%3B%0Abegin%0A++Result+:%3D+a+%2B+%2313%2310+%2B+b%3B%0Aend%3B%0A%0Aprocedure+TestMultiLine%3B%0Avar%0A++MultiLineString:+string%3B%0Abegin%0A++MultiLineString+:%3D%0A++++!'this!'/%0A++++!'is!'/%0A++++!'a!'/%0A++++!'multiline!'%3B%0A++//+or+even+shorter:%0A++MultiLineString+:%3D+!'this!'/!'is!'/!'a!'/!'multiline!'%3B%0Aend%3B%0A%0Aend.'),l:'5',n:'0',o:'Pascal+source+%231',t:'0')),k:41.17647058823529,l:'4',n:'0',o:'',s:0,t:'0'),(g:!((h:compiler,i:(compiler:fpc304,filters:(b:'0',binary:'1',commentOnly:'0',demangle:'0',directives:'0',execute:'1',intel:'0',libraryCode:'1',trim:'1'),lang:pascal,libs:!(),options:'-O3+-Ci-+-Cr-+-g-+-CX+-XXs',source:1),l:'5',n:'0',o:'x86-64+fpc+3.0.4+(Editor+%231,+Compiler+%231)+Pascal',t:'0')),k:58.82352941176471,l:'4',n:'0',o:'',s:0,t:'0')),l:'2',n:'0',o:'',t:'0')),version:4>

After thinking about it more though I think Michael's backtick suggestion
might actually be the best way to go, because of the fact that backticks
currently have *no *meaning at all in Pascal, and as such, the compiler
could safely directly and immediately assume that any use of them was
specifically either the opening or closing of a multiline string.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20190703/84e53aa6/attachment-0001.html>


More information about the fpc-devel mailing list