Версия PascalABC.NET 3.2

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

Основные изменения с версии 3.1

  • Реализован оператор yield
  • Реализован оператор yield sequence
  • Добавлено большое количество методов расширения в PABCSystem
  • Реализовано описание типов вида List<(integer,integer)> и List<(integer,integer)->integer>
  • Реализованы срезы a[2:4:2] для массивов, строк, списков
  • Справочная система автоматически генерируется по документирующим комментариям в PABCSystem
2 лайка

Круто) правда паскаль прекращается в смесь других языков. Вот в этой версии фичи питона

Как сказать…

yield - это базовое средство C# yield sequence - это из PHP Тип (int,int) появился в C# 7.0 позже нас Срезы есть во многих языках - мы запретили отрицательные индексы как в Питоне

Все языки превращаются в другие языки если они развиваются :slight_smile:

А жаль, что отрицательные индексы запретили. Удобно иногда ими пользоваться. А по поводу развития: я рад, что эта среда активно развивается, раньше часто ей пользовался. Правда потом пришлось чаще сталкиваться с Си-подобными языками и как-то уже не пользуюсь почти. После Си очень не привычно как-то. Особенно := вместо =. Но в любом случае pabc иногда выручает. Спасибо вам за то, что развиваете среду и компилятор:)

4 лайка

Особенно := вместо =

Будущее за конфигируемыми языками на свой вкус и цвет :slight_smile:

1 лайк

В версии 3.2 (сборка 1318), как и указано на сайте в замечании, при использовании в цикле for переменной, описанной ранее, выдается предупреждение “Параметр цикла for в PascalABC.NET должен описываться в заголовке цикла”. Программа запускается и выполняется нормально. Каков смысл этой выдачи? Если чисто информационный, то почему уровень предупреждения? Если же возможны проблемы, то какие именно? Ведь не секрет, что многие учебные заведения применяют PascalABC.NET для работы по своим учебным пособиям, где конструкция вида for var <переменная>:= отсутствует напрочь. И выдача такого предупреждения вызывает явное недоумение. Хотелось бы все же разъяснений по поводу обратной совместимости… А если с параметром все на так страшно, может заменить “должен” на “рекомендуется”?

1 лайк

Через год-два это предупреждение станет ошибкой. Пока - предупреждение - чтобы использовали стиль PascalABC.NET

Т.е. еще раз: разработчики взяли курс на отход от “традиционного” стиля Pascal и в соответствии с этим отказ от обратной совместимости? Но ведь это явный “звоночек”, который без обиняков говорит о том, что при обучении за пределами ЮФУ методически не следует опираться на PascaABC.NET, как не обеспечивающий совместимости на уровне синтаксиса с иными известными реализациями языка Паскаль (Turbo/Borland Pascal, Object Pascal, Delphi, Free Pascal) в таких базовых конструкциях, как оператор цикла. Мне казалось, первоначально было иное направление: добиться как можно более широкого распространения языка, в том числе и в школах.

Неужели это локальное описание параметра цикла столь категорически необходимо, что мешает дальнейшему развитию языка? Я еще мог бы понять введение такой несовместимости, если бы, к примеру, оператор for получил какие-то новые качества (к примеру, стал таким, каким он был в Алгол-60, пока его не исковеркал Н.Вирт), но “за просто так”? Зачем? Чтобы не отслеживать при компиляции неправомерное использование параметра цикла за пределами этого цикла?

Язык начинает распадаться на частности вместо тяготения к некоей общности. Мы говорим о локализации переменных в некоем блоке, где их описание либо непосредственно предшествует блоку для случая некоей программной единицы (стиль Паскаль), либо сделано где-либо внутри этого блока (стиль С). Но теперь почему-то возникает требование описывать собственную переменную внутри цикла for и оно выпадает из общей картинки. Даже в С с его аляповатым синтаксисом не додумались “втыкать” в оператор for жесткую необходимость описывать в заголовке типа переменную-счетчик. Какие еще сюрпризы ожидаются в дальнейших релизах в части отхода от “традиционного” Паскаля? Может, давайте просто скажем, что это уже ни разу не Паскаль, а нечто “с местами синтаксисом языка Паскаль” (сделал же Вирт потом Модулу, Оберон…) и тогда все вопросы восхитительно отпадут сами собой?

1 лайк

Ну, в нормальных языках так принято. Ошибку я бы никогда не выводил конечно (зачем ломать язык?), но предупреждение пусть будет. Для коротких строк тоже кстати будет выводиться предупреждение (если вне записей). Пусть используют длинные нормальные строки, а не атавизмы турбо паскаля.

1 лайк

Что такое нормальные языки"? Перечислите пожалуйста эти “нормальные языки” с категорическим требованием описывать параметр цикла в заголовке цикла.

А ничего, что абсолютно все школьные учебники (и вообще все книги, в которых упоминается Паскаль), содержат оператор цикла for в его традиционной форме? Вы как представляете себе преподавание Паскаля в нынешней школе при наложении вышеупомянутого требования? “Ребята, конечно в Паскале, как в книгах написано, оператор цикла for на самом деле имеет именно такой вид, но есть такой дядя в Ростове-на-Дону, который решил, что цикл for должен выглядеть иначе и поэтому, если Вы почему-то захотите работать с PascalABC.Net, то должны будете учитывать его желание”. Что-то мне сильно это все напоминает известную историю о том, как в коде одного из первых “Бейсиков” стояло непонятное занесение в один из адресов некой константы с комментарием “Так захотел Билл [Гейтс]”.

В конце-концов, если все это “in the search for beauty” так необходимо, пусть будет в опциях компилятора настройка, позволяющая выбрать или “архаичный синтаксис”, или этот новодел.

1 лайк

Если вы не согласны с предупреждением, просто игнорируйте его. Netbeans, например, выводит предупреждение, что метод должен содержать не более 20 (не помню точно) строк. Я это предупреждение посылаю в dev/null. Можем сделать обычным хинтом.

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

Но речь-то о другом: о том, что эту систему активно используют в школьном образовании. Которое, как известно, весьма косно и не может (да и не должно) переориентироваться на хотелки тех, чья система программирования была взята в качестве инструментальной для целей обучения. Представляете себе картинку: некий “человек из ЮФУ” появляется в Минобрнауки РФ и говорит: “А теперь мы в Паскале будем писать оператор for вот так и никак иначе!”. Я вот заранее предугадываю, что ему скажут. Принимаю и возражение в стиле “Не хочешь - не ешь”. Но тогда вы получите Паскаль-секту в рамках ЮФУ.

Безусловно, вышенаписанное может иметь место в случае, если, как писалось ранее “Через год-два это предупреждение станет ошибкой.”. Если останется на уровне Warning/Information - да ради бога!

1 лайк

Понятно. Примера языка с аналогичными требованиями по for Вы найти не смогли.

Нет, ошибкой не станет. Или добавится режим PascalABC.NET, в котором это будет ошибкой.

В C++, Java, C# так принято, но нет ошибки и предупреждений. В Go, Rust счетчик цикла недоступен вне цикла, то есть неявно является локальной переменной цикла. В C99 можно уже так писать. В Algol-68 счетчик цикла объявлялся внутри цикла (тип вычислялся автоматически).

Я думаю, мы сделаем корректно: появится стиль или диалект PascalABC.NET, который можно будет отключать в настройках. А в диалекте PascalABC.NET это, несомненно, будет ошибкой. Как и неприсваивание Result внутри функции, скажем.

Поэтому противоречия никакого нет.

Если в настройках будут опции - это самое лучшее решение. В свое время фирма Microsoft в СУБД Visual FoxPro и SQL Server сделала на уровне языка возможность с помощью директив устанавливать уровень совместимости со старыми версиями с тем, чтобы в последних разработках не тяготиться грузом прошлых лет. Так же поступили и с последними фортранами, чтобы все же сохранить преемственность. Надо - отключил “старьё” и компилируй на здоровье в новых концепциях (и даже в новом синтаксисе).

Думаю, другого варианта-то и нет.

Полностью запрещать - это настолько существенное ограничение, что сразу превращает наш Паскаль в НеПаскаль. А это совсем непонятно - зачем мы работали столько лет чтобы сразу взять и это разрушить.

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

Здравствуйте. Не знаю, в чем здесь может быть проблема, помогите, пожалуйста.

// Так работает
type
  fn = real -> real;
 
begin
  var lm : (fn, real) -> real := (f, x) -> f(x);
  print(lm(sqrt, 4));
end.
 
// А так нет
var lm : (real -> real, real) -> real := (f, x) -> f(x);

Возникает семантик-error, хотя по сути код одинаков.

Так это несложно сделать! Нужно обеспечить, чтобы все вкусности Паскаля-2016 работали только при включенной опции “новый стиль”, а без этого получался огрызок типа ТурбоПаскаля. Для этого не надо даже существенно менять код, достаточно на уровне синтаксического/семантического анализа исходного текста выйти на уровень Error при компиляции “недопустимых по опции” конструкций языка.