Мнимые ошибки PascalABC.NET

Я это даже скачивать не стану. По стилю - словно тебе в почтовый ящик мимоходом какой-то пакет закинули без надписи даже.

Я уже устал переносить такое в мнимые ошибки

Заведите ветку Trash Collection - и туда )))

Некоторы особенности компилятора, которые не отражены здесь - http://pascalabc.net/downloads/pabcnethelp/index.htm?page=Common/PABCNETvsDelphi.html

Параметры по умолчанию определяются через := , а в Delphi через = Указано только “Инициализация переменных: var a: integer := 1;”

После окончания цикла for i := 1 to 10 do у Delphi будет i=11 , а в pascalabc.net будет 10. Так что глюкокод, использующий значение i работать не будет при переносе.

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

1 лайк

Ну тут можно только посочувствовать.

На FPC всё правильно:

var
    i: integer;

begin
    for i := 1 to 10 do;
    writeln('Значение i после цикла: ', i);
end.
Значение i после цикла: 10

Код, который за пределами цикла использует параметр этого цикла - это не глюкокод, это (если пользоваться эвфемизмом) дерьмокод. В лаборатории, где я работал по окончании вуза, при входе висела табличка: “Если Вам нечего делать, не занимайтесь этим у нас”. Хорошая фраза, полезно вспоминать почаще. Вот переносить программу в “правильный” PascalАВС.NЕТ из других языков, позволяющих заниматься волюнтаризмом - это тоже из разряда “нечего делать”. Ну, т.е. если Вы себе занятие ищете - Ваше право, но вряд ли Вы у нас добьетесь в этом вопросе понимания. Мы с удовольствием пытаемся отвечать на вопросы, но не такие, вроде “Доктор, я что-то съел несвежее и теперь мне плохо…”

Можно съесть свежее, но много. От многих знаний многие печали. А вообще-то, переводить нужно с умом, а не писать русский текст латинскими буквами.

Никогда не ешьте да свежее дерьмо.

Так PascalАВС.NЕТ вполне себе позволяет использовать i после окончания цикла. Так что вы вас получилась просто многословная отмазка, почему лень делать нормальную документацию отличия PascalАВС.NЕТ и почему нужно оставлять халтуру. Если это “у вас” (с какой стати вы кстати за всех посетителей форума говорите) вызывает не понимание, мне остаётся только посочувствовать. Можете и дальше думать, что PascalАВС.NЕТ набираете популярность по всему миру, а тут кто попало приходит , что что-попала говорят и мешают прогрессу.

Ну мы тут говорим об отличиях именно от Delphi и соответсветующей документации.

Документацию делает разработчик. Если Вы называете “халтурой” то, как написана документация, можете сделать лучше. Не нравится - не пользуйтесь, что за проблема?

Конкретно по поводу Вашего брюзжания, связанного с тем, что “не так, как в Дельфи и не описано” - так еще много чего вообще на описано, потому что говорить о прописных истинах практике и культуры программирования в Справке никто не будет. Для этого имеются достаточно обширные работы известных авторов. Никто не будет Вам расписывать в Справке, почему в программе плохо использовать goto и точно так же в программе плохо использовать внутреннюю переменную цикла за его пределами. Это давно уже каноны в программировании. Если семантика слова “канон” у Вас вызывает затруднения, загляните в словарик и посмотрите, чем он отличается от разрешения или прямого запрета.

Не за всех, а использовал множественное число, потому что авторы более ранних реплик фактически высказались о том же, только в иной форме.

А зачем как-то особо отмечать, чем PascalABC.NET отличается от Дельфи? Они что, близнецы? Или найдите отличия на двух картинках?

1 лайк

Позволяет. Ради совместимости.

Но: Как сказал RAlex - в справке не написано потому что это не то место. Вместо этого выдаёт предупреждение, в котором ясно говорится что правильно описывать переменную цикла прямо в цикле.

Разработчики почему то очень боятся огорчить дельфистов. А последние тем временем…

1 лайк

Дельфистов уже давно и сильно обидели. А о нашем глубочайшем сочувствии к ним они никогда и не узнают. Кто жалеет других, потом сам сильно пожалеет.

Это особенности реализации, не отражаемые в спецификации языка. Подчеркиваю - в спецификации. В спецификации Delphi про это ничего не сказано.

А вот что в спецификации языка Паскаль завещал его автор

Как говорится, Администратору виднее, но в данном случае ветка “Ошибки компилятора” по-моему для этого материала не подходит. Скорее, “Ошибки пользователей”.

У нас не было целью делать документацию отличия. Delphi и сейчас меняется, и мы на него уже не опираемся.

Наш документ, на который ссылаетесь вы, несомненно, описывает отличия “крупными мазками”. Достаточно посмотреть на набор ключевых слов Delphi чтобы увидеть, что их - огромное количество. Но в возможностях языка, используемых в каждой программе, отличия минимальны.

По поводу переменной цикла ещё раз - в документации FP и Delphi нигде не сказано, какое значение должна иметь i после цикла. Или сказано про неопределенное поведение как у Вирта. Это означает, что эта особенность может измениться в следующей версии компилятора, от процессора к процессору и для разных ОС может быть разной. Этот факт нам казался очевидным и судя по тому, что о нём 15 лет никто не писал, для остальных тоже.

Про параметры по умолчанию - обратите внимание, что в целях совместимости с Delphi у нас работает вот это:

var a: integer = 1;

begin
end.

Но согласен - нет документа со всеми отличиями. Он вряд ли будет - ниша у проекта другая. Он не предусматривает, что кто-то с глубоким опытом в Delphi будет переходить на PascalABC.NET.

1 лайк

Если значение переменной цикла после его окончания зависит от реализации, то её НИКОГДА не следует использовать. тут и сказочке конец.