Версия PascalABC.NET 3.3

А почему за бортом? Весь PABCExtensions этому посвящён

Написать, какой бы хотелось видеть работу с типизированными файлами? )))

Давайте в отдельную тему с примером что именно выходит громоздким…

Вы правы, так будет правильнее.

Если сравнить, сколько всего добавлено для текстовых файлов с тем, что есть в PABCExtensions для типизированных (а половина там - просто “сахарок”), станет понятно, почему я назвал это “практически за бортом”. Ведь реально добавлен только обмен с последовательностью а процедуры всего лишь стали одноименными расширениями.

А хотелось бы иметь Skip(n) для относительного смещения по записям, сахарок Seek(Top) и Seel(Bottom), а также чтение и запись без смещения указателя ReadNoSkip, WriteNoSkip (или опциональный параметр у Read/Write, разрешающий выполнять операции обмена без смещения указателя)

Вышла версия 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#).