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

Bernd Oppolzer bernd.oppolzer at t-online.de
Thu Jul 4 14:34:31 CEST 2019


I have to admit first, that I did not read all the comments in this 
thread. But anyway,
I'd like to comment on this. Because I have done Pascal programming for 
almost 40 years
now and even on platforms that are much older than PCs and machines 
typically run
by Unix systems, I have a somehow different view.

First of all, there is a good reason why Pascal has a WRITELN procedure;
because there are platforms where it is simply not possible to write a 
special
character like 0x0a to flush an output buffer and start a new output line.
On old scientific computers of the 1960s and 1970s, there simply was no 
such character;
this comes from the teletype heritage of the Unix operating system. Even 
today there
are platforms (and languages) where it is not possible to write a new 
line on output
simply by writing a 0x0a char. Only people which have grown up with 
systems like
MS-DOS and Unix take this as given.

So I doubt that there is a portable solution for multi-line strings in 
the sense that
strings involve carriage-return characters. If you need such things, you 
have to find
non-portable solutions (like platform-specific constants:
CONST NL_Number = 0x0a; for example
or CONST NL_CHAR = X'0a'; ... if your compiler allow such a notation).

Second:

To split strings in source programs, I strongly suggest a solution where 
the parts are
terminated on every line; otherwise (with strings left open), you will 
always have a
problem with trailing and leading blanks. The source code should be 
format free,
after all.

The simplest solution IMO is: simply close the string on one line and 
open it on the
next one, like here:

CONST long_string = 'this is a long string '
                     'which occupies '
                     'multiple source lines';

if you absolutely need to put line feed characters into such a long 
string, do it like this:

CONST long_string = 'this is a long string ' x'0a'
                     'which occupies ' x'0a'
                     'multiple source lines';

This is implemented in my New Stanford Pascal compiler.

Kind regards

Bernd



Am 04.07.2019 um 13:54 schrieb Michael Van Canneyt:
>
>
> On Thu, 4 Jul 2019, Tomas Hajny wrote:
>
>> On 2019-07-04 12:59, Marģers . via fpc-devel wrote:
>>
>>  .
>>  .
>>> Why introduce ` if there already is ' ? Just use '
>>> as well for multi line strings. For people of more
>>> conservative view point, put multilinestring
>>> behind mode switch.
>>
>> Because then it's never clear whether the fact that there's no ending 
>> quote before the end of the line is an omission, or an intention.
>
> Exactly. The same goes for all other quote characters. That's why the 
> directive is a better approach; it is unambigious.
>
> Michael.
>
> _______________________________________________
> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20190704/69f58db7/attachment.html>


More information about the fpc-devel mailing list