PascalABC.NET 3.6.3

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

Новое:

  • Реализована конструкция ^i, позволяющая обращаться к i-тому элементу с конца в массивах, списках, строках
  • Конструкция ^i может использовыаться в срезах и безопасных срезах: например, a[:^1] означает “все элементы кроме последнего”
  • Реализованы срезы на запись для массивов, списков и строк
  • Реализованы обработчики OnClose в GraphWPF, WPFObjects, Graph3D, а также обработчик OnDrawFrame в GraphWPF
  • Дополнен набор задач в электронном задачнике в группе ExamTaskC для решения задач ЕГЭ группы C
  • Реализован метод расширения последовательностей Product с проекцией
  • В типы IntRange, CharRange добавлены Step(n) и Reverse
  • Улучшения для HighDPI - кнопки закрытия окна, улучшение отображения иконок в окне проектов и менеджере компонент в приложении Windows Forms,
  • В инсталлятор теперь не вшивается версия .NET - при необходимости она скачивается с сайта Microsoft и устанавливается
  • Переработана DrawGraph в GraphWPF - выводится сетка и координаты
  • Проверка и запрет захвата имен в безымянных и вложенных записях

Полный список изменений с примерами использования - здесь.

Вах сколько вкусного! Срезы на запись надо не забыть освежевать…

Безопасный срез бракуется в левой части оператора присваивания.

begin
  var a := ArrGen(10, i -> i);
  a?[3:5] := Arr(-3, -4);
  a.Print
end.
  if from.IsInverted then
    from.IndexValue := Self.Count - from.IndexValue;

Это плохо. Тут .Count - метод последовательностей. Он перечисляет все элементы перед тем как вернуть длину. В то время как для массивов и строк - .Length возвращает готовое число хранимое в памяти.

В то же время:

begin
  var a := new char[36];
  a[:10] := Range('0', '9');
  a[10:] := Range('A', 'Z');
  a.Println;
end.
Выражение типа IEnumerable<char> не может быть присвоено срезу с типом array of char

Почему вдруг? Ну хотя бы IList<> разрешите, чтоб между списками и массивами элементы кидать…

Прежде чем высказывать это неправильное расхожее мнение, загляните в реализацию Count

А, и правда. Последний раз много лет назад смотрел…

    public static int Count<TSource>(this IEnumerable<TSource> source)
    {
      switch (source)
      {
        case null:
          throw Error.ArgumentNull(nameof (source));
        case ICollection<TSource> sources:
          return sources.Count;
        case ICollection collection:
          return collection.Count;
        default:
          int num = 0;
          using (IEnumerator<TSource> enumerator = source.GetEnumerator())
          {
            while (enumerator.MoveNext())
              checked { ++num; }
          }
          return num;
      }
    }
1 лайк

Когда можно ожидать цифровые подписи / сертификаты для файлов PABC (exe/msi) ? Системы безопасности и антивирусы панику наводят при скачивании и установке PABC

А точнее какие? И может это настройки такие - гавкать на каждый .exe без подписи? Нормальные антивирусы 1 раз проверяют / спрашивают и дальше относятся с пониманием.

Microsoft Defender (SmartScreen), Kaspersky

Речь ведь о том, что это потенциальная дыра для системы. Мало ли что по пути к EXE прицепилось. Конечно можно проигнорировать всё. Но это неправильный путь. Я не углублялся в цену вопроса. Но проект претендует на уровень национального. Поэтому, целесообразно было бы изыскать возможность добавления цифровой подписи / сертификатов.

Если вы мне поможете с путями, как это сделать, и ценой вопроса, я готов. Там погодовая плата - это не очень конечно.

Kaspersky Endpoint Sequrity 10. Нем, как рыба.

Интересно, что может прицепиться, если Вы скачиваете с официального сайта напрямую через опцию обновления? А если с сетки раздаете, то это уж Ваша проблема обеспечить там безопасность раздачи. Например, скрутить файл с достойным паролем тем же WinRar, там пишется контрольная сумма.

Попробовал сделать обновление через меню. Перекинуло на HTTP, в трафик которого нынче только ленивый не лезет. Почти все провайдеры встраивают туда свою рекламу инжекцией своего JS. Взломанные роутеры, на которых битая прошивка стоит (а многие производители забивают на обновления, не говоря уже о пользователях), запросто могут подменить и суммы на HTML странице, и даже EXE подсунуть нужный. В современных условиях это дыра в безопасности. Нельзя так оставлять.

Нельзя требовать от автора сделанного на энтузиазме проекта, который купил доменное имя и за хостинг платит из собственного кармана, чтобы он за собственные средства покупал еще и ЭЦП.

Тогда проекту придется оставаться в песочнице, к которому серьезно относиться не будут. И будущего у проекта не будет, увы. И придумать статьи финансирования проекта такая же инженерная задача, как и разработка кода. Нужно искать варианты. Будет ли ФИПИ интегрировать PascalABCNet в свою систему КЕГЭ? Пытались ли они это сделать? А будут ли пытаться? Если в КЕГЭ PascalABCNet не будет, тогда любой школьник будет рассуждать о бессмысленности вложения своих сил в “мертвый язык”.

PS: сам ничего не подписывал, поэтому деталей процесса не знаю, увы. И на данный момент даже спросить не у кого.

Вы хотите сказать, что пиратски скачанный из неизвестных мест Турбопаскаль с DosBox защищены от вирусов? Или Free Pascal?

Касательно КЕГЭ пока вообще ничего не известно. Они могут отдать на откуп регионам, а могут тупо сделать фиксированный пакет, обязательный к инсталляции. В последнем случае если будет виден шанс попасть в этот пакет, можно думать об инсталляции поддержке и проч.

Загуглите “ЭЦП. Удостоверяющий центр”

Поскольку Вы, как писали, давно уже в IT-области, возможно застали эпоху P2P сетей, когда еще не было речи о протоколе WWW.и народ сидел в FIDO. Конфиденциальность там обеспечивалась программкой PGP (Pretty Good Privacy), которая реализовывала систему шифрования с открытым ключом. ЭЦП в целом - то же самое. Вы получаете секретный ключ, и при подписании любого своего файла он внедряется в тело файла (тупо приписывается в хвост) и содержит особым образом вычисленную контрольную сумму с учетом себя. Получив файл от Вас, корреспондент берет парный Вашему открытый ключ - вы его рассылаете всем корреспондентам, либо для автопроверки держите внутри инсталлятора. Открытый ключ считывает ЭЦП и удостоверяется, что файл от Вас. После чего получает контрольную сумму удостоверяется, что она верна. Уровень достоверности выше в разы, чем у личной подписи или мокрой печати.

А что мешает скачанный файл перед запуском проверить антивирусником? Windows Defender лает, но не кусает. До сих пор о человеческих жертвах ничего не известно. И вообще: волков бояться - в лес не ходить.

Некоторые антивирусники вообще отправляют выполняемые файлы паскаля в карантин. Потом присылают сообщение, что всё нормально. Это проблема защиты, которая установлена на компьютере, а не паскаля.

Собака лает - ветер - носит.

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

Алгоритм подписи ЭЦП мне известен. И да, застал этот период. Я не знаю текущей процедуры и цен, чтобы операционная система распознавала программу как подписанную. Т.е. нужно у кого-то купить открытый ключ, затем с помощью VS или другой программы загрузить этот ключ в EXE. Затем регулярно подтверждать ключи и платить регистратору. Это интуитивно понятно. Вопрос в деталях и ценах.

Есть центр у MS. С них и надо начинать. Есть несколько уровней. Драйвера ядра наиболее жестко сертифицируются. Остальное должно быть дешевле и проще.

А что мешает скачанный файл перед запуском проверить антивирусником?

Всё один в один как с коронавирусом ) Антивирусы не знают новую дрянь. А по “специальным запросам” могут и игнорировать, даже если знают.

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

1 лайк

Круто всё объяснили ))

Я полностью согласен со всем этим. Надо пробовать.

1 лайк