Logo

9 апреля 2016 г.

Форматирование строк

Форматирование строк в Канторе будет реализовано как предметно-ориентированный язык (DSL). Символ традиционный — знак процента:
s = {%Строка {%} из {%}.%}.AsString[{index, count}];
Если свойству AsString будет сопоставлена операция *, вызов можно записать и так:
s = {%Строка {%} из {%}.%} * {index, count};
Формат {%} подразумевает, что тип сопоставляемого выражения будет передаваться через RTTI, как это сделано в Delphi. Соответствующая реализация в CoreLite пока находится в разработке (отложена), но повлияла на Кантор.

На Delphi

Штатная функция SysUtils.Format:
s = Format('Строка %d из %d.', [Index, Count]);
Удивительно, но формируемые компилятором Delphi сведения о типе передаваемых параметров лишь ограниченно используются в стандартных функциях RTL/VCL — только для генерации исключений о несоответствии типа. В известных мне форматтерах строк Delphi нет символа, соответствующего понятию «тип из параметра».

Поскольку необходимая информация передается, соответствующая реализация возможна. Формат «тип из параметра» будет реализован в CoreLite и в дальнейшем будет использоваться в Канторе.

Цели

Сейчас все борятся за безопасность кода и статический анализ, а в Канторе его можно сразу встроить в язык, благо общий механизм для этого есть — расширения в виде предметно-ориентированных языков.

4 комментария

  1. Для простых случаев очень полезны $-строки:

    $"Строка $index из $count."

    ОтветитьУдалить
    Ответы
    1. Знак доллара — это префикс шестнадцатиричных констант.

      Удалить
    2. Но не внутри строковых выражений же :)

      Удалить
  2. А что имеется в виду под RTTI? Метод ToString у каждого аргумента будет вызываться?

    ОтветитьУдалить

Выбрав в выпадающем списке пункт «Имя/URL», можно оставить комментарий от своего имени без предварительной регистрации.