Ошибки PascalABC.NET

Будет ли улучшен IntelliSence, чтобы более стабильно работал? Наблюдаю явление, при котором он может часто работать только в части файла программы, но не во всей.

Нельзя.

Не плодите в ветках Ваше негативное отношение - мы будем его убивать. Конструктив мы читаем.

Добавьте. class поля и методы пришли из delphi. Static class - да, надо сделать

Да, но ведь Вы делаете не копию Delphi. Многого, что есть в PascalABC.NET нет в Delphi и наоборот. Я знаю про то, что статические члены класса иногда называют классовыми, но static для них всё же явнее. К тому же, в структурах тоже есть статические члены, и когда они называются классовыми, получается уже некрасиво, говоря прямо. Такая крепкая параллель между терминами программирования и непосредственно языком не приводит ни к чему хорошему. Явный пример-Python.

Сделал, добавьте лейбл…

Пожалуйста, примеры в студии, где он не работает и issue на github. Как делает Sun_Serega.

Не отображается подсказка по точке после скобки (на скрине), также при наведении на: JoinIntoString и Println().

begin
  ReadlnString().ToWords().Where(x -> x.All(y -> y in ['0'..'9'])).JoinIntoString(' ').Println();
end.

А теперь начинаете как то упрощать, если ошибка пропадает - возвращаетесь назад с Ctrl+Z и пробуете другое. Правда анализатор кода не сразу обновляется, но если отформатировать и подождать пока появятся точки сворачивания кода - можно быть уверенным что он обновился. И в конце то что получится постите на гитхаб, со скриншотом и кодом как тут (так тоже ``` пашет). Только скриншот ещё можно ещё в пеинте подрезать, чтоб без лишнего. А, и ещё стоит для начала проверить нет ли уже открытой issue про это, открытых не так много. Чтоб дубли не создавать.

Если написать:

begin
  ReadlnString().ToWords().Select(x -> x).JoinIntoString(' ').Println();
end.

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

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

Говоря про сложность нахождения ошибок, можно, в принципе, попробовать сделать программу, которая переберёт много разных вариантов и найдёт странные. Надо только разобраться - как тестировать файлы как отсюда. Но такая программа всё равно найдёт не всё.

1 лайк

“Тестирование программ может использоваться для демонстрации наличия ошибок, но оно никогда не покажет их отсутствие” (Э.Дейкстра, 1970)

2 лайка

Ну да, все ошибки никогда не будут исправлены, но и, к примеру, в студии их хватает, хоть её много профессионалов делало… Но с каждой исправленной ошибкой барьер сложности программы, после которого ошибки начинают проявляться - отдаляется.

2 лайка

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

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

По вашему IntelliSence “высокие материи”? Тогда может и классы с интерфейсами и обобщениями туда же отнести? Зачем тогда вообще эту среду делали? Если для обучения - то зачем туда столько напихали, если для хоть какой-то работы, то почему даже IntelliSence криво работает?

Я против такого отношения к среде - если делать, то нормально. А с вашим отношением, @RAlex, извините, но мы далеко не уедем.

Если назвать файл именем, например, PABCExtensions.pas, а затем написать:

begin
  Writeln('Hello world');
end.

, то не выполняется и не компилируется с неадекватным сообщением об ошибке:

Неизвестное имя 'Writeln'

. Почему бы не выдавать сообщение о том, что это недопустимое имя?

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

Конечно, это не приятно - когда нашёл ошибку, а исправлять её не хотят, но вы можете сохранять такое где то на компьютере или в облаке, для более удобного времени. Хотя гарантий что такие времена настанут тоже никто не даст))). Но опять же, никто не будет мешать вам приблизить эти времена, поучаствовав в разработке паскаля…

Сейчас, на сколько я понимаю, самая большая проблема с документацией, надо исправить справку, возможно и полностью переделать её. И возможно придумать ещё что то что поможет новичкам быстрее и мягче начать программировать… С тем что лучше всего у этого паскаля удаётся обеспечить “вхождение” в мир программирования - я согласен с @RAlex. И если говорить про “вылизанность” - основные функции компилятора, которых будет достаточно для начала, работают безотказно, а вот всевозможных туториалов, с пояснениями что пошло не так - явно не хватает.

Если же вам не подходят предыдущие способы, и вы считаете нахождение ошибок хорошей помощью - могу вам лишь подсказать: Искать их в лоб, нудно и без цели - даст вам только ошибки как в последнем сообщении. Вместо этого лучше найдите что то, для чего можно написать программу, и используйте для этого как можно больше навороченных методов (лямбды, экстеншн методы и т.п.). Это улучшит ваше понимание о их работе + выкопает целый мешок ошибок.

1 лайк

Вы сначала определитесь, куда едете. :stuck_out_tongue_winking_eye:

2 лайка

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

Почему он ругается, что Interpolators.pas(47) : _low не объявлен в типе TInterpolator?

Архив: Engine 5.2.4.

Кстати, ошибка с Sealed Abstract Class появилась и у меня, только после вчерашнего обновления(а так не обновлялся с февраля). В MnistNet(скачать архивом можно в теме про json) используется данная запись, и есть откомпилированная версия в подтверждение.