Срезы на запись и анонс версии PascalABC.NET 3.6.3


#1

http://pascalabc.net/downloads/W1/SetupNewSlices363.exe

Прошу потестировать новые срезы на запись для массивов, списков и строк.

Новые срезы можно использовать в левой части оператора присваивания:

begin
  var a := ArrGen(10,i->i);
  a[2:4] := a[7:9];
  a[::2] := a[1::2];
  Print(a);
end.

Кроме того, можно использовать отсчёта от конца с использованием синтаксиса как в Python (-1) и в C# 8.0:

begin
  var a := ArrGen(10,i->i);
  Print(a[:^1]);
end.

#2

В левой*. В правой то и так можно было.


#3

Собственно работают, только пока не реализована выдача внятных сообщений по ошибке - “падения” происходят c указанием места в PABCSystem, но для тестирования это непринципиально. Наиболее популярная “ошибка” - неравенство длин правой и левой части. Может быть, тут тоже подумать и о мягких срезах?

По поводу [:^k] - предлагаю понимать конструкцию как “без k последних элементов”. Потому что a[:^1] вернет элементы, кроме одного последнего, a[:^5] - кроме пяти последних, a[:^0] - все, т.е. это без 0 последних.


#4

А можно подробнее, возможно с картинками? Это как раз важно - без этого в release не пойдут. Какое такое место в PABCSystem? Такого не было - и вот опять.


#5

Это я некорректно написал, виноват. Ошибка не в этом, а в попытке узнать, есть ли и безопасные срезы левой части.


#6

О, это серьёзно. Хотел бы я понять, есть ли смысл в безопасных срезах в левой части. Наверное-таки нет


#7

Понятно, что количество элементов сечения в левой части обязано быть согласованным с количеством в правой. Но я бы тут сделал исключение для случая, когда в правой части один скалярный элемент. Использование - “заливка” одинаковыми значением. А мягкие срезы - они, действительно тут не нужны, но нужна диагностика на случай попытки их использовать.