С высокой вероятностью в следующих версиях будет кардинально изменён смысл конструкций вида
[1,2,2,3]
[2..5, 8..12, 4..6]
Предложение заключается в следующем.
- [1,2,2,3] будет иметь тип не set of integer как сейчас, а array of integer. Это позволит писать
var a := [1,2,3]*2;
var aa := [[1,2,3],[4,5,6],[7,8,9]]
создавая одномерные массивы и массивы массивов простым синтаксисом
- В коде
var s: set of integer := [1,2,2,3];
запись справа будет трактоваться по-старому - как инициализатор множества
Коды
s := [1,2,2,3];
p([1,2,2,3]);
также будут трактоваться контекстно в зависимости от типа s и типа формального параметра. В сложных случаях нескольких перегрузок процедуры p предпочтение будет отдаваться массивам.
- При стандартном использовании
if i in [1,2,3]
никто не заметит изменения типа
- Перестанут работать следующие конструкции:
[1,2,3] + [2,3,4]
[1,2,3] - [2,3,4]
[1,2,3] * [2,3,4]
Над массивами такое будет делать нельзя. Точнее, для массивов определена сумма - и это - конкатенация. Это - самое большое зло этого изменения. Несовместимость с Delphi повысится
- Конструкции с диапазонами
[2..1000]
будут принадлежать к особому типу, не хранящему все значения. В результате запись
x in [2..1000]
станет работать существенно эффективно
- Конструкции с диапазонами
[2..1000,1,3,5,200..205]
будут неявно преобразовываться к массивам и множествам. К массивам, разумеется, - будут перечисляться элементы с повторами в этом же порядке.
Предлагаю обсудить