Версия PascalABC.NET 3.3

Вышла версия PascalABC.NET 3.3.5, сборка 1644 от 23.03.2018.

В выводе посредством Write/Writeln появилась возможность использовать своеобразный аналог интерполированных строк C#. Своеобразие их в том, что используется смесь форматов традиционного Pascal и среды .NET. Методом проб и ошибок удалось выявить следующее:

Оператор вывода записывается в виде

Write($'форматная строка');

Форматная строка - это произвольный текст, в который в нужных местах внедрены элементы вида {элемент вывода}, а каждый элемент вывода - это имя переменной (не массива, но записи и кортежи понимаются верно), за которым могут следовать паскалевская спецификация ширины поля для вывода и количества цифр в дробной части, как обычно, предваряемые двоеточиями:

begin
  var (a,b,c):=(3.156,8,False);
  Writeln($'Вещественное a: {a:5:2}, целое b={b} и булево {c:10}')
end.

Без спецификации ширины форматные строки можно также писать в расширении .Ptint/.Println:

begin
  var (a,b,c):=(3.156,8,False);
  ($'Вещественное a: {a}, целое b={b} и булево {c}').Println  
end.

форматные строки могут оказаться удобно читаемой альтернативой уже имеющимся средствам вывода. Вариантов с программным созданием форматирующих строк я не нашел. Но зато вместо имени переменной в фигурные скобки можно ставить произвольное вычисляемое выражение. А вот дважды повторять один и тот же элемент вывода почему-то запрещено.

begin
  var a:=1;
  Writeln($'Первый раз {a} и второй {a}') 
end.

Будет сообщение “Program1.pas(3) : Встречена неправильная форматная строка”

2 лайка

Уже нет

1 лайк

Приятно, но новая сборка пока что недоступна.

Это очень похоже на то, что есть в Хаскеле, кстати. (Наверное, его авторы не читали Страуструпа :slight_smile:). Впрочем, это действительно не так уж просто, как хотелось бы, из-за того что нужно понять приоритет операций (например, что понимать под a *! 2 + 1: то ли a *! 3, то ли (a *! 2) + 1). Это решается отдельной декларацией приоритета нового оператора.

Разработчики молодцы, что на это решились. :wink:

Очень приятно и отлично. Молодцы разработчики, что не сидим сложа руки. PascalABC.NET - это современная развивающая система ПРОГРАММИРОВАНИЯ! Только вперёд!

procedure p1<T>(a:T) := exit;

type
  t1<T>=class
    constructor(a:T) := exit;
  end;

begin
  p1(byte(0));//ок
  new t1(byte(0));//Количество шаблонных параметров типа t1 должно равняться 1
end.

Подпрограммы могут авто определять спецификаторы шаблонов, а типы нет, почему?

2 лайка

Ну, нигде не могут - во всех распространенных аналогичных языках

Ну, для подпрограмм аналогичные языки тоже ведь не могут, а в паскале могут. И то что никто так не делает - не оправдание))

Для подпрограмм все могут

Новая сборка появилась - PascalABC.NET 3.3.5, сборка 1648 от 31.03.2018 и в ней действительно уже работает

begin
  var a:=1;
  Writeln($'Первый раз {a} и второй {a}') 
end.

А вот что недавно обнаружилось на CyberForum:

begin
  Randomize;
  var(a,b):=(Random(1,10),Random(1,10));
  var s:=a+b;
  var r:=ReadInteger($'{a}+{b} =');
  if a+b=r then WriteLn('Правильно!') else
    WriteLn($'Косяк! Правильно вот так: {a}+{b}={s}');
end.
2 лайка

Не очень удобно, что имена фигурных скобках не выделяются как-то по другому, как в VS 2017, например, поскольку трудней читать эту строку. ИнтерполированныеСтроки

А почему у вас текст в двойных кавычках?

А как меня-то раздражает, что солнце каждое утро восходит на востоке и будит, светя прямо в глаза! А главное, сколько не ругаюсь, оно, блин поминальный, все равно продолжает так делать!

“Если бы губы Никанора Ивановича да приставить к носу Ивана Кузьмича, да взять сколь-нибудь развязанное, какая у Балтазара Балтазаровича, да, пожалуй, прибавить к этому еще дородности Ивана Павловича…”

Вот почему: Строки (Руководство по программированию на C#).

Накройтесь одеялом… P. S. Я написал разработчикам на заметку, если захотят - пусть исправят этот минус, а не для того, чтобы разводить увлекательную беседу про то как Вам мешает спать по утрам солнце. :slightly_smiling_face:

2 лайка

Так и Вы накройтесь одеялом и пишите на C#

Вы знайте, и пишу. Пока ни разу не было причины пожаловаться.

Я всё ещё не понимаю прикола писать C# в паскале. IDE паскаля на много хуже, больше багов, хуже поддержка. Легче должно быть написать модификацию к студии или чему то типо неё, чтоб внести всё любимое из IDE паскаля, чем мирится с выше перечисленным.

Так это не в паскале - это в C# строки были у меня в двойных кавычках. Писал в VS 2017. :slightly_smiling_face: