Ошибки PascalABC.NET

На сборке от 18.03.2017 всё заработало. Ошибка больше не вылезает даже со включенным антивирусом без сохранения в папке. Большое спасибо!

1 лайк

Наверно так быть не должно?

begin
  var p:=Range('1','9').Select(c->Ord(c)).Sum;
  Print(p)
end.

Подозреваю, что если Ord() возвращает тип word, то Sum для такого типа не перегружена. Сборка 1407.

Ну, Вы сами и ответили.

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

begin
  var p:=Range('1','9').Select(c->integer(Ord(c))).Sum;
  Print(p)
end.

Обращаю Ваше внимание, что Sum не наша, а микрософтовская. Она переопределена для Int32 Int64 Single Double Decimal. Для экзотики надо явно приводить типы

Я так и написал, с явным приведением. Кстати, и Average надо явно приводить. Либо возвращать по Ord не экзотику… А сейчас как-то небогемно получается и Майкрософт слабо утешает. Т.е. надо помнить, что Ord - экзотика, что для экзотики что-то работает, а что-то - нет… Представим, что школьник пишет это не в компьютерном классе… программа не скомпилируется практически со 100% гарантией из-за подобных “исключений”.

Здравствуйте, у меня появилась проблема , я не могу зайти в Паскаль, пишет -Вы не имеете разрешения на просмотр этого каталога пли страницы.

вот такая ошибка что делать?

Антивирус отключите и проверьте

А что генерируется в папке с Program1.pas? Program1.exe? Мне кажется, надо просто запретить досовские имена в системе. Непонятно, почему в 10-ке их до сих пор не выкинули

https://support.microsoft.com/en-us/help/121007/how-to-disable-8.3-file-name-creation-on-ntfs-partitions

Сообщение перенесено в новую тему: Проблема с Point в PascalABC.NET

пробовал запретить, но ничего не получилось. а в папке генерируется файл с таким текстом: [Common] Version=1.2

[Window] Maximized=0 Width=1206 Height=576 Left=80 Top=64

[View] ShowOutWindow=0 OutWindowHeight=100

[Print] Left=10 Top=15 Right=10 Bottom=15 Header=10 Footer=10 LineNumbers=0 Wrap=1 Highlight=1 Colors=0 HeaderLine=1 HeaderBox=0 HeaderShaded=0 FooterLine=0 FooterBox=0 FooterShaded=0

[Editor] FontSize=10

[Files] File1=G:\Новая папка\программы\матрица.pas

[Assembler] Background=536870911 Foreground=536870911 Style=0 [Character] Background=536870911 Foreground=536870911 Style=0 [Comment] Background=536870911 Foreground=32768 Style=2 [Float] Background=536870911 Foreground=536870911 Style=0 [Hexadecimal] Background=536870911 Foreground=536870911 Style=0 [Identifier] Background=536870911 Foreground=536870911 Style=0 [Number] Background=536870911 Foreground=536870911 Style=0 [Preprocessor] Background=536870911 Foreground=536870911 Style=2 [Reserved Word] Background=536870911 Foreground=-16777190 Style=1 [Space] Background=536870911 Foreground=536870911 Style=0 [String] Background=536870911 Foreground=-16777190 Style=0 [Symbol] Background=536870911 Foreground=536870911 Style=0

О_О это норма? если описывать просто точку то работает норм, а если как статичную переменную записи - сходит с ума

версия 3.2 сборка 1398(07.03.2017)

Неприятно удивил yield вкупе с кортежным присваиванием. По отдельности они работают, а вот вместе…

Вот так все работает (особого смысла в программе прошу не искать - это демонстрационное)

type
  TF=(integer,integer);

function f(a:TF):sequence of integer;
begin
  var p,q:integer;
  p:=a[0]; q:=a[1];
  yield p;
  yield q;
end;

begin
  f((-3,5)).Println
end.

А вот так не компилируется, причем с “убойной” диагностикой ошибки: "неизвестное имя ‘a’ в строке с кортежным присваиванием…

type
  TF=(integer,integer);

function f(a:TF):sequence of integer;
begin
  var p,q:integer;
  (p,q):=a;
  yield p;
  yield q;
end;

begin
  f((-3,5)).Println
end.

Два дня молчания… И вспомнилось мне опять из “Золотого телёнка”…

Остап молча взял европейского гостя за руку, подвел его к висевшему на стене ящику для жалоб и сказал, как глухому: — Сюда! Понимаете? В ящик. Шрайбен, шриб, гешрибен. Писать. Понимаете? Я пишу, ты пишешь, он пишет, она, оно пишет. Понимаете? Мы, вы, они, оне пишут жалобы и кладут в сей ящик. Класть. Глагол класть. Мы, вы, они, оне кладут жалобы… И никто их не вынимает. Вынимать! Я не вынимаю, ты не вынимаешь…

Хочется быть правильно понятым. Я вовсе не топочу копытцами, чтобы “немедля поправили”. Жили с этим - и дальше проживем)). Но хочется понять, что это кто-то просмотрел из тех, “от кого зависит”. И оставил пометку “исправим” или “сам дурак!”. Была бы какая-то определенность. А то, может, так недопустимо писать в программе, а я жду чего-то…

Лучше Вы пишите сразу в Issues. Так правильнее всего. Там гарантированно видят все разработчики и - без соплей.

И - Вы должны понимать, что любая - ЛЮБАЯ - ошибка в компиляторе нами немедленно фиксируется и рано или поздно исправляется.

Но - как приятно читать такие цитаты!

Я напишу, куда скажете и как скажете. Но,… к стыду своему, я не знаю, как туда писать. Готов получить напутствие в личке или тут.

У меня есть несколько “настольных книг”, которые я знаю почти наизусть. Так что, вполне вероятно, это не последняя…)))

Пока про Issues не подсказали, напишу тут.

// PascalABC.NET 3.2, сборка 1417 от 28.03.2017

begin
  (SeqGen(5,i->i)+SeqGen(5,i->i+5)).Println;
  (ArrGen(5,i->i)+ArrGen(5,i->i+5)).Println;
  ((SeqGen(5,i->i).Reverse)+(SeqGen(5,i->i+5).Reverse)).Println;
  //((ArrGen(5,i->i).Reverse)+(ArrGen(5,i->i+5).Reverse)).Println;
end.

Если строку перед end раскомментарить, возникает ошибка компиляции. На мой взгляд, не должна. Есть много аналогичных вариантов возникновения таких ошибок, например, со срезами и т.д., но я думаю, тут причина одна и та же.

P.S. Ошибка не возникает, если после Reverse добавить .Select(i->i)

По крайней мере, в сборке 1427 от 24.04.2017 ошибка уже устранена

В справочный раздел “Методы расширения динамических массивов” влезла вот такая ерунда:

Методы расширения типа array of T
/// Возвращает минимальный элемент 
        oDo Сделать AdjacentGroup с функцией сравнения 
/// Возвращает максинимальный элемент 
        ction Min<T>(Self: array of T): T; extensionmethod; where T: System.IComparable<T>; 
/// Возвращает минимальный элемент 
        ction Max<T>(Self: array of T): T; extensionmethod; where T: System.IComparable<T>; 
/// Возвращает минимальный элемент 
        ction Min(Self: array of integer): integer; extensionmethod; 
/// Возвращает максимальный элемент 
        ction Min(Self: array of real): real; extensionmethod; 
/// Возвращает максимальный элемент 
        ction Max(Self: array of integer): integer; extensionmethod; 

Еще одна ошибка. Вот так не работает:

// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
type
  Point=(real,real);
begin
  var a:Point:=(1.0,2.0)
end.

Выдается ошибка “Program1.pas(5) : Нельзя преобразовать тип ArrayConst к Point<real,real>”

А вот так все нормально:

// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
type
  Point=(real,real);
begin
  var a:Point;
  a:=(1.0,2.0)
end.

Происходит, как будто в первом случае сначала работает конструктор массива, делается попытка автовывода типа, а потом обнаруживается несовместимый с этим автовыводом тип Point.

По крайней мере, в сборке 1427 от 24.04.2017 ошибка уже устранена

Да, поместили в Issues

Сегодня столкнулся с такой проблемой:

Внутренняя ошибка компилятора в модуле [pabcnetc.exe] :‘System.Exception: System.ArgumentNullException: Значение не может быть неопределенным. Имя параметра: key в System.Collections.Generic.Dictionary2.FindEntry(TKey key) в System.Collections.Generic.Dictionary2.ContainsKey(TKey key) в PascalABCCompiler.NETGenerator.ILConverter.ConvertFromTree(IProgramNode p, String TargetFileName, String SourceFileName, CompilerOptions options, String[] ResourceFiles) в PascalABCCompiler.Compiler.Compile()’

Всё было нормально, программу не изменял, Pascal не обновлял. Как будто компилятор сам сломался.