Решение задачи #10 предполагает, что нативные вставки будут оформляться как в том числе и литеральные строки Модульного Рефала. Но часто такие вставки будут представлять собой длинные многострочные куски текста на C++. Очевидно, набирать их, учитывая escape-последовательности, завершая строки на \n (ведь хочется, чтобы в целевом коде они тоже были разбиты на строки, довольно утомительно и ненаглядно.
Поэтому предлагается внедрить в язык специальный синтаксис для сырых строк — строковых литералов, которые могут разбиваться на несколько строчек текста, не учитывают escape-последовательности и завершаются особым завершителем.
При этом завершитель должен быть таким, чтобы минимально ограничивать содержимое самой литеральной строки. Плохой пример — Python, где три кавычки запрещают наличие трёх кавычек внутри самой строки. Heredoc’и Perl’а позволяют пользователю самому указать вид завершителя, но при этом завершитель (ЕМНИП) должен начинаться с новой строки, да и сама строка начинается со следующей строки.
Очень неплохой подход демонстрирует Rust — в нём сырые строки имеют вид r"…", r#"…"#, r##"…"## и т.д. То есть, буква r, за которой следует ноль или более решёток, кавычка и сама строка. Завершается строка кавычкой и таким же числом решёток. При этом если мы хотим внутри сырой строки указать, скажем "##, мы можем для ограничителя указать три решётки и конфликта не будет.
Предлагается использовать подход Rust, при этом незначительно изменив его.
Сырые строки в Модульном Рефале будут выглядеть так: @'…'@, @@'…'@@ и т.д. — снаружи кавычек не менее одной собачки, число собачек в начале и конце должно быть одинаковым.
Решение задачи #10 предполагает, что нативные вставки будут оформляться как в том числе и литеральные строки Модульного Рефала. Но часто такие вставки будут представлять собой длинные многострочные куски текста на C++. Очевидно, набирать их, учитывая escape-последовательности, завершая строки на
\n
(ведь хочется, чтобы в целевом коде они тоже были разбиты на строки, довольно утомительно и ненаглядно.Поэтому предлагается внедрить в язык специальный синтаксис для сырых строк — строковых литералов, которые могут разбиваться на несколько строчек текста, не учитывают escape-последовательности и завершаются особым завершителем.
При этом завершитель должен быть таким, чтобы минимально ограничивать содержимое самой литеральной строки. Плохой пример — Python, где три кавычки запрещают наличие трёх кавычек внутри самой строки. Heredoc’и Perl’а позволяют пользователю самому указать вид завершителя, но при этом завершитель (ЕМНИП) должен начинаться с новой строки, да и сама строка начинается со следующей строки.
Очень неплохой подход демонстрирует Rust — в нём сырые строки имеют вид
r"…"
,r#"…"#
,r##"…"##
и т.д. То есть, букваr
, за которой следует ноль или более решёток, кавычка и сама строка. Завершается строка кавычкой и таким же числом решёток. При этом если мы хотим внутри сырой строки указать, скажем"##
, мы можем для ограничителя указать три решётки и конфликта не будет.Предлагается использовать подход Rust, при этом незначительно изменив его.
Сырые строки в Модульном Рефале будут выглядеть так:
@'…'@
,@@'…'@@
и т.д. — снаружи кавычек не менее одной собачки, число собачек в начале и конце должно быть одинаковым.