Версия PascalABC.NET 3.0

Вышла версия PascalABC.NET 3.0.

Что нового:

Лицензия

Разработка Приглашаются новые разработчики для совершенствования следующих подсистем:

  • языка
  • компилятора
  • оболочки
  • Web-среды
  • модулей
  • справки и документации

Подсистемы

  • Web-среда актуализирована до версии 3.0
  • Кардинально обновлена и актуализирована справочная система.
  • Актуализирована Online справочная система
  • Обновлён Programming Taskbook до версии 4.14, появились задачи LinqBegin и LinqObject.

Язык программирования

  • Реализованы русские идентификаторы
  • Полностью реализованы лямбды, в т.ч. вложенные лямбды, замыкания
  • Реализовано описание процедурного типа в виде T->T, ()->T,(T1,T2)->()
  • Реализован тип sequence of T как синоним типа IEnumerable
  • Реализован case по строкам
  • Реализован автовывод типов в цикле foreach
  • Реализованы автоклассы: type Point = auto class x,y: integer; end;

Компилятор

  • Ускорено выполнение foreach по контейнеру с размерными типами.
  • Кардинально улучшен автовывод типов для лямбда-выражений.
  • Ускорено выполнение foreach по контейнеру с размерными типами
  • Уменьшено потребление памяти при компиляции
  • Уменьшен размер генерируемого exe-файла и ускорена компиляция по Ctrl-F9

Стандартные модули

  • Добавлен ряд методов расширения для sequence of T: Sorted, Print, JoinIntoString, ForEach, операции + (конкатенация), * (умножение на число)
  • Добавлен ряд функций для генерации последовательностей: Seq, SeqFill, SeqGen, SeqRandom, SeqRandomReal, SeqWhile, Range, ReadSeq…
  • Добавлен ряд функций для генерации динамических массивов: Arr, ArrFill, ArrGen, ArrRandom, MatrixRandom, ReadArr…
  • Добавлены стандартные подпрограммы Print, Sort, MillisecondsDelta, OpenRead, OpenWrite и OpenAppend
  • Для типа string реализованы методы расширения ToWords, ToIntegers, ToReals, ToInteger, ToReal, ReadInteger, ReadReal, ReadWord, Inverse
  • Для файловых типов добавлен ряд методов
  • Основные имена коллекций и интерфейсов перенесены из System.Collections.Generic в системный модуль PABCSystem

Интегрированная среда

  • Интегрированная среда адаптирована к высоким разрешениям экрана.

  • Модуль GraphABC адаптирован к высоким разрешениям экрана.

  • Реализован переход к определению по Ctrl-Click

  • Реализован выбор пути папки PABCWork.NET при инсталляции

  • Реализовано докирование окон

3 симпатии

Хотел бы поблагодарить разработчиков за отличную работу, в результате которой система PascalABC.NET стала лучшим в мире средством обучения программированию.

Надеюсь, на этом работа не закончилась. Например, хотелось бы иметь настраиваемую панель инструментов. Сейчас на ней отсутствует очень нужная кнопка запуска программы без связи с оболочкой, зато жёстко закреплены 3 кнопки задачника Абрамяна. Кстати говоря, задачник Абрамяна требует установки .NET Framework 3.5, а сама система работает с версией 4.0. Необходимо устранить этот анахронизм, который создаёт проблемы с запуском задачнике в ОС Windows 10. Она, как известно, не переносит .NET Framework 3.5, поэтому приходится изловчаться, чтобы её установить.

Спасибо и новых успехов!

1 симпатия

Спасибо за отзыв!

Надеемся, что поскольку разработка стала свободной, появятся контрибуторы, которые будут решать вопросы, подобные Настраиваемой панели инструментов. Записал сюда: https://github.com/pascalabcnet/pascalabcnet/issues/

Про .NET 3.5 и проблемах с запуском задачника - расскажите, когда и как это происходит. Там только одна dll под 3.5 - она связана с XML - странно, что Вы ее вообще нашли. Почему Вы решили, что весь задачник Абрамяна требует .NET 3.5? Он в основном состоит из нативных dll.

Пришлось установить Windows 10 (восьмая версия благополучно загнулась). Система PascalABC.NET на десятой версии работает отлично. Но при запуске задачника Абрамяна (те самые 3 кнопки) ОС выдаёт сообщение, что программе для работы требуется .NET framework 3.5. Лично я не искал библиотек dll, их проверяет Windows 10. В принципе, можно загружать задачи вручную, минуя диалоговые окна задачника, но это неудобно.

Сейчас я на другом компьютере, поэтому нашёл картинку в Инете:

У меня выпадает такая же, но на русском языке.

Вроде исправили - проверяйте

Не помогло:smile:

Вся система работает, а при нажатии любой из кнопок с задачником выпадает это диалоговое окно.

Отправил по почте сообщение об ошибке, обнаруженной в версии 3.0. Ответа нет. На всякий случай решил продублировать его здесь Неожиданно обнаружилась стойкая ошибка- Не обрабатывается унарный минус в операции присваивания переменной типа single значения другой переменной типа single. Так, в последовательности операторов вида a := -1; b := -a обе переменные получают значение -1. Ошибка устраняется при записи a:=-1; b:=0-a. Если использовать тип double/real, то ошибки нет.

PascalABCCompiler.Core v3.0.0.1064 (24.10.2015), debug version Runtime version: 4.0.30319.1 OS version: Microsoft Windows NT 5.1.2600 Service Pack 3 Processor count: 2 WorkingSet: 66632 kb:

Попутно возник вопрос о последовательностях.

var a:=SeqRandom(10,-5,5); Writeln(a); Writeln(a); дает вот такую выдачу [2,2,1,4,-4,0,1,-1,5,1] [0,0,-2,-3,5,-2,2,4,-4,-4]

Конечно, я понимаю, что если последовательность не хранится, а каждый раз порождается в соответствии с записанным для нее выражением, то SeqRandom() – это «большой сюрпризец», но где реально его можно применить?

Нашел, исправил, спасибо за сообщение. На сайте обновленная версия дистрибутива появится через какое-то время.

Доброго времени суток, сборка 1073, исчезла ошибка с унарным минусом для типа single. Зато появилась новая ошибка, которой не было в сборке 1066: по крайней мере в ReadReal и ReadInteger подсказ пишется вразрядку

begin var n:=ReadInteger('Введите натуральное число: '); end.

В в е д и т е н а т у р а л ь н о е ч и с л о : 1

Похоже, это фокусы с UNICODE.

PascalABCCompiler.Core v3.0.0.1073 (23.11.2015), debug version Runtime version: 4.0.30319.1 OS version: Microsoft Windows NT 5.1.2600 Service Pack 3 Processor count: 2 WorkingSet: 69056 kb

Исправили. Скачайте новую версию

Это такая особенность или все же ошибка?

begin

var s:=‘Слово1 слово2 слово3 слово4 слово5’;

var ss:=s.ToWords;

ss.Println;

var s1:=ss.Take(3);

Writeln(s1);

var f1:=OpenWrite(‘out.txt’);

Writeln(f1,s1);

f1.Close

end.

:rage: Здесь когда-нибудь будет возможность писать без убивания переводов строк, кроме как делать двойной пропуск строк?

На экране:

Слово1 слово2 слово3 слово4 слово5

[Слово1,слово2,слово3]

В файле:

System.Linq.Enumerable+d__3a`1[System.String]

Недолгое ковыряние в модуле PABCSystem.pas говорит о том, что при вызове Writeln(s1); идет обращение к CurrentIOSystem, которое определено и реализовано в этом же модуле в виде IOStandardSystem, который при выводе объекта преобразует его в строку с помощью функции

function _ObjectToString(o: object): string;
begin
  Result := StructuredObjectToString(o);
end;

в строку. А при записи в файл этим занимается стандартный .NET класс TextWriter, который таким преобразованиям не научен, надо определять свой метод .ToString(). Я конечно не разработчик (по крайней мере среды PascalABC.NET), но ошибки тут не вижу, потому что система в первую очередь предназначена для обучения, и на момент работы с методами типа Writeln еще нет необходимости заострять внимание на методах-расширениях для удобства работы с массивами, но раз уж вы до них дошли (s.ToWords, ss.Take) то уже должны знать о том, что по умолчанию Object.ToString возвращает полное имя типа объекта, об этом написано например на MSDN.

Вопрос не в том, почему это происходит, вопрос в том, что при программировании с использованием предлагаемых для обработки последовательностей возможностей оказываешься на минном поле и каждый шаг надо прощупывать. Как раз при обучении сложно внятно объяснить, что вывод на экран и в файл одних и тех же данных могут в одних случаях давать одинаковые результаты, а в других - совсем разные. Не должны начинающие ломать голову, как это получается, потому что нет у них для этого достаточных знаний. Любая система программирования должна при работе с ней давать определенную надежность, а иначе она превращается в язык С++, где можно всё, а “кто не спрятался - я не виноват”.

P.S. Тем более, что в версии 3.0 имеется реклама Write() в части того, что теперь “можно выводить абсолютно всё”.

Была с первого дня: посмотрите кнопочки на панели сверху от поля ввода сообщения. Пример:

begin
    Writeln
end.

Исходный код:

```
begin
    Writeln
end.
```

Это ошибка. Будем исправлять

При попытке выполнить программу H:\PABCWork.NET\Samples!MainFeatures\02_Types\Dynarray.pas в сборке 1156 (как и в 1150, в более ранних не пробовал) возникает внутренняя ошибка компилятора.

Error[0]: Внутренняя ошибка компилятора в модуле [pabcnetc.exe] :'System.Exception: System.TypeLoadException: Не удалось загрузить тип “System.Runtime.CompilerServices.ExtensionAttribute” из сборки “mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”.

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

Это был сюрприз от опции компиляции “Ускорять запуск из под оболочки”. Отключаю - пример нормально работает, включаю - тут жe компилятор аварийно завершается, как было показано выше. И потом только перезапускать IDE.

Это так и задумано в языке или все же должно быть исправлено?

У нас нет такого поведения даже при ускорении из-под оболочки.

Локализуйте ошибку пожалуйста.

Есть версия, что это - из-за строчки

a[i] := PABCSystem.Random(100);

Проверьте