Ошибки PascalABC.NET


#1452

intellisence показывает массив целых после Power

begin
  var n := 10;
  var a := Range(1, n).Select(el -> Power(2, el)).ToArray;
  a.Println;
end.

Скрин там


#1453

В том то и дело, что версия последняя (3.4 от 01.07.2018) + Microsoft .NET Framework 4.7.1. Ошибка повторяется на двух разных компьютерах.


#1454

Попробуйте скачать сейчас и отпишитесь, заработало ли.


#1455

да


#1456

Да, известная проблема. Ещё не до конца реализовали лямбды для шаблонных функций. А Select как раз шаблонная, она может менять тип возвращаемого параметра в зависимости от того - какая лямбда.

Из решений на пока что - вижу только:

begin
  var n := 10;
  var a: array of real := Range(1, n).Select(el -> Power(2, el)).ToArray;
  a.Println;
end.

По крайней мере, после этого анализатор кода работает правильно для a.


#1457

Ошибка времени выполнения: System.BadImageFormatException: Была сделана попытка загрузить программу, имеющую неверный формат. (Исключение из HRESULT: 0x8007000B)

begin
  var tupl := (1,2,[3,4,5]);
  Print(tupl.Item1);
end.

Помощь новичкам
#1458

У меня не воспроизводится.


#1459

У меня воспроизвелось


#1460

#1461

А так работает:

begin
 var tupl := new System.Tuple<integer,integer,TypedSet>(1,2,[3,4,5]);
 Print(tupl.Item1);
end.

?


#1462

Да


#1463

А с кортежем у Вас не работало?


#1464

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


#1465

Program4.exe (25 КБ)

Это файл скомпилированный с моего кода, того что с ошибкой


#1466
{$platformtarget x86}
begin
  var tupl := (1,2,[3,4,5]);
  Print(tupl.Item1);
  readln;
end.

Уточнение. Эта ошибка возникает только при компиляции на 32-битных платформах и с включенным ускорением запуска (с PABCRtl).


#1467

Вот две программы:

begin
 var tupl := (1,2,[3,4,5]);
 Print(tupl.Item1);
end.

и

begin
 var tupl := new System.Tuple<integer,integer,TypedSet>(1,2,[3,4,5]);
 Print(tupl.Item1);
end.

Отличие в генерируемом коде в одной строчке:

Tuple<int, int, TypedSet> tuple = Tuple.Create<int, int, TypedSet>(arg_5B_0, arg_5B_1, PABCSystem.CreateSet(Program.$intarr1).CloneSet());

Tuple<int, int, TypedSet> tuple = new Tuple<int, int, TypedSet>(arg_56_0, arg_56_1, PABCSystem.CreateSet(Program.$intarr1));

Может, ibond посмотрит, что может быть не так


#1468

Однако повреждённых частей .exe я не нашёл. Декомпилятор не видит ничего странного. И у меня этот .exe выполняется без ошибок.


#1469

Убрал галку в настройках “Опции компиляции>Ускорять запуск из под оболочки” и заработало, windows 64 разрядная. А вот еще вам скрин, таки что-то с кортежем из множеств не все в порядке. Интелисенс не предлагает по точке третий элемент и последующие элементы кортежа если в нем есть множество. %D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA


#1470

Да, я уже заметил и сделал #991. Анализатор кода сейчас вообще не умеет определять тип кортежа, когда 1 из элементов - множество. А первые 2 элемента всё же показывает только потому, что у всех кортежей есть 2 элемента, но у некоторых их может быть до 7 (или 6, или 8, там всё сложно).


#1471

Если тут открыть и сделать активным test.pas, а затем открыть NN3Data и запустить - получаем ошибку чтения .psu . Если поставить всем модулям {$savepcu false} - ошибка пропадает. Надо ли искать минимальный код? Или этого архива вам хватит?