Замечания и предложения

Если

uses System;

написать, то есть

1 лайк

Понятно, что этот тип существует, но вот вопрос: а для чего это писать?

И еще: должна ли об этом знать каждая школьная учительница?

:smile:

Каждая школьная учительница должна “уметь менять значения двух переменных местами, находить максимум в массиве и находить n-тое число Фибоначчи с помощью рекурсии”

2 лайка

А ещё уметь растянуть передачу этих знаний на 2-3 года, да так чтоб в итоге никто ничему не научился*

1 лайк

Вы там где-то писали, что программы по-разному работают. Смотрите, в том примере что Вы приводите с переменной после begin она локальная, но в стандартном Паскале так нельзя. Однако если в стандартном Паскале

Procedure Swap(Var a: Int32; Var b: Int32);
Var Temp: Int32;
Begin
  
...

Temp всё равно в стеке хранится. Она как локальная. Однако я посмотрел, вроде, в PascalABC.NET она переносится в поле объекта, становится boxed. То есть они по-разному могут инициализироваться, если руками не описать. Не знаю почему так сделали, не суть. У меня самого при переходе к разным версиям сколько раз переставали правильно работать программы, из-за того, что предположение об инициализации по умолчанию оказывалось ложным.

В NET всё инициализируется нулём

А если локальную забыл инициализировать? Которая в стеке. У него посмотрите какой пример. Ну там то она будет всё равно изменена и нулём инициализировать только программу замедлять. А иногда забываешь и на предупреждения компилятора тоже внимание не обращаешь.

Всё равно нулём

Вы будете прокляты великим Турбо Паскалем! :smile:

Предлагаю(опять) реализовать директиву компилятора, либо настройку компилятора, либо параметр консольного компилятора, отключающую привязку к стандартным модулям, таким как PABCSystem.pcu, PABCExtensions.pcu и __RedirectIOMode.pcu.

Вот как раз в старых то Паскалях без динамических массивов забивать всё нулями было дико. А уж нейросеть со случайными значениями каких-нибудь неинициализированных переменных только душевнее, непредсказуемее будет работать. :upside_down_face:

зачем?

Кстати, Free Pascal инициализацию при описании не выполняет. Довольно занятно смотреть, как “школота” пытается понять, почему не работает в fpc программа, которою они в школе отладили на PascalABC.NET (программируя на нем, как на Турбо Паскале, потому что за 20 лет преподавания в школе учительница информатики еще не успела освоить что-то иное).

Ну так это лишь аргумент в мою пользу. То, что КУМИР хуже других языков не означает, что эти самые языки хорошие. Просто из двух зол выбирают меньшее. :smile:

Об это уже давно говорят, причём не только я. Не думаю, что такая возможность останется без внимания. Чистым должен быть не только исходный, но и MSIL код.

Кстати, стандартная проблема при переходе между разными версиями. Вообще, если человек сам пишет программу, он по идее не должен лезть за значением туда, куда ничего до этого не положил. То что в .NET решили всё это пресечь на корню, так зато получается, что порой инициализация памяти занимает O(n) вместо O(1).

Это безобразие пресекли еще задолго до .NET. Память в нормальных языках должна нулиться.

1 лайк

Причем тут чистота. Паскаль не может работать без системного модуля. Как и .NET без FCL.

Согласен.