Форум программистов, компьютерный форум, киберфорум
Соколиный глаз
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Почему не стоит писать на PascalABC.Net

Запись от Соколиный глаз размещена 11.07.2018 в 18:28. Обновил(-а) mik-a-el 01.08.2025 в 10:29
Показов 4014 Комментарии 43

Сам Pascal - язык неплохой. Осуждать его самого я не буду. Однако, существуют множество его реализаций и у каждой есть свои плюсы и минусы. Сегодня поговорим о диалекте PascalABC.Net. Если Вы новичок, то скорее всего со мной не согласитесь в том, что этот диалект ужасен и до неузнаваемого непохож на тот Паскаль, которому привыкли учить нас в школе и в университете. Вам, наверное, еще не приходилось сталкиваться с множеством проблем данного диалекта. И, наверняка, Вы думаете, что проблемы этого диалекта Вас не затронут - Вы же пишите на уровне начинающего. Но, тем временем, Вы становитесь мудрее и Вам хочется пробовать все больше возможностей языка на практике. И вот с этого момента начинается веселье. Для начала попробуйте вставить этот код себе в последнюю версию компилятора и скомпилировать:
Pascal
1
2
3
4
5
var a := Arr(6,2,3);
var q := a?.Max;
 
begin
end.
Скомпилировалось?
Internal compiler error in module [pabcnetc.exe] :'System.Exception: System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
в SyntaxVisitors.SugarVisitors.QuestionPoi ntDesugarVisitor.visit(dot_question_node dqn)
в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.BaseChangeV isitor.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.BaseChangeV isitor.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.BaseChangeV isitor.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.BaseChangeV isitor.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.BaseChangeV isitor.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTreeConverters.S tandardSyntaxTreeConverter.Convert(synta x_tree_node root)
в PascalABCCompiler.SyntaxTreeConverters.S yntaxTreeConvertersController.Convert(sy ntax_tree_node root)
в PascalABCCompiler.Compiler.CompileUnit(u nit_node_list Units, unit_or_namespace SyntaxUsesUnit)
в PascalABCCompiler.Compiler.Compile()'
А не тут то было. И это только одна из многих проблем данной среды. В общем, если говорить прямо, то не следует лезть дальше простого ООП - к дженерикам, обобщенным интерфейсам, автоклассам, и другим подобным вещам. Причина проста: эти "фичи" криво реализованы и их использование может быть лишней тратой времени для Вас поскольку Вам придется искать причину почему программа не компилируется, а она... она в самом компиляторе. А ждать исправления багов - кому оно надо, если, например, надо написать срочно проект? Верно, никому. Однако, не все так печально. Базовые возможности языка работают неплохо. Но все же этого не достаточно для полноценной работы. Так что единственный и верный способ: забыть этот диалект и перейти на Lazarus, либо на C#, на что Вам больше хочется. Первый вариант - адекватный Паскаль. Второй - современный язык, к которому так безуспешно тянется PascalABC.Net... Выбор за Вами, но помните, этой среде осталось недолго в сфере разработки проектов средней и выше сложности. Максимум на что она способа - на обучение людей программированию, не больше. Да и то... с такими багами (как с Ctrl+Z) желание писать даже у не совсем новичков пропадает.

Не по теме:

Раньше удивляло то, что разработчики PascalABC.Net, не исправляя старые баги, кидаются делать новые "фичи", которые, конечно же, без исправления существующих багов работают не очень адекватно. Теперь не удивляет - привык.

Есть вариант писать в PascalABC, но не советую - нашел в нем баги (которые проявляются в простейшем коде).



Ссылки на некоторые баги:
1. При наведении на константу множественного типа показывает PascalABCCompiler.SyntaxTree.pasccal_set_constant
2. Анализатор кода игнорирует явно указанные шаблонные параметры
3. Многострочный комментарий заглючивает, если удалить строчку с его началом
4. Не позволяет переименовать шаблонный тип функции
5. SortedDictionary.Values сломано
6. Реализовать форматирование для расширенных свойств
7. Некорректность во благо оптимизации
8. Анализатор кода не правильно выводит тип элемента при преобразовании в foreach
9. Переменная не инициализируются, при присваивании константе значения функции
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 43
Комментарии
  1. Старый комментарий
    Аватар для Usaga
    придется искать причину почему программа не компилируется
    Эту причину до вас должен доносить сам компилятор описывая, что ему не понравилось. А из статьи я так и не понял, чем же плох данный диалект. "Вот кусок кода, он не компилируется. Не используйте PascalABC.NET".
    Запись от Usaga размещена 12.07.2018 в 09:34 Usaga на форуме
  2. Старый комментарий
    Аватар для Соколиный глаз
    Компилятор зачастую не доносит причины ошибки компиляции, выдавая что-то вроде:
    Internal compiler error in module [pabcnetc.exe] :'System.Exception: System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
    в SyntaxVisitors.SugarVisitors.QuestionPoi ntDesugarVisitor.visit(dot_question_node dqn)
    в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
    в PascalABCCompiler.SyntaxTree.BaseChangeV isitor.DefaultVisit(syntax_tree_node n)
    в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
    в PascalABCCompiler.SyntaxTree.BaseChangeV isitor.DefaultVisit(syntax_tree_node n)
    в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
    в PascalABCCompiler.SyntaxTree.BaseChangeV isitor.DefaultVisit(syntax_tree_node n)
    в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
    в PascalABCCompiler.SyntaxTree.BaseChangeV isitor.DefaultVisit(syntax_tree_node n)
    в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
    в PascalABCCompiler.SyntaxTree.BaseChangeV isitor.DefaultVisit(syntax_tree_node n)
    в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
    в PascalABCCompiler.SyntaxTreeConverters.S tandardSyntaxTreeConverter.Convert(synta x_tree_node root)
    в PascalABCCompiler.SyntaxTreeConverters.S yntaxTreeConvertersController.Convert(sy ntax_tree_node root)
    в PascalABCCompiler.Compiler.CompileUnit(u nit_node_list Units, unit_or_namespace SyntaxUsesUnit)
    в PascalABCCompiler.Compiler.Compile()'
    Это выдал при попытке компиляции этого кода:
    Pascal
    1
    2
    3
    4
    5
    
    var a := Arr(6,2,3);
    var q := a?.Max;
     
    begin
    end.
    Разве нормально? Компилятор должен помогать программисту в написании кода, а не мешать ему.
    Запись от Соколиный глаз размещена 12.07.2018 в 10:28 Соколиный глаз вне форума
  3. Старый комментарий
    Аватар для Usaga
    Ну, в этом случае можно просто сказать, что компилятор - просто кусок г**на.
    Запись от Usaga размещена 12.07.2018 в 11:10 Usaga на форуме
  4. Старый комментарий
    Аватар для Rius
    Цитата Сообщение от Volobuev Ilya
    Разве нормально? Компилятор должен помогать программисту в написании кода, а не мешать ему.
    Они сами выбирают эти средства разработки. Раз сами хотят - пусть страдают.
    Запись от Rius размещена 12.07.2018 в 11:13 Rius вне форума
  5. Старый комментарий
    Аватар для volvo
    единственный и верный способ: забыть этот диалект и перейти на Lazarus, либо на C#, на что Вам больше хочется
    Если спросить у людей, серьезно работающих с вышеназванными языками/средами, я более чем уверен, что у них найдется немало примеров нестабильной работы там, где этого "ну не может быть". Программ без багов не бывает, тем более - компиляторов. Другое дело - отношение разработчиков к этим багам. "Жрите, что дают" при малейшей критике со стороны пользователя, и взаимопоглаживание по шерстке - очень непрофессионально.

    Все вышесказанное, разумеется, не отменяет моего негативного отношения как к PascalABC.NET в частности, так и к .NET и вообще Windows в целом. Ни первого, ни второго, ни третьего больше не держу.
    Запись от volvo размещена 12.07.2018 в 15:22 volvo вне форума
  6. Старый комментарий
    Аватар для Соколиный глаз
    Я к .NET на данный момент претензий не имею. А вот к Windows... достаточно - тормозит жутко (не всегда, но частенько). А еще эти частые обновления...
    Запись от Соколиный глаз размещена 13.07.2018 в 19:37 Соколиный глаз вне форума
  7. Старый комментарий
    Аватар для netBool
    А вот к Windows... достаточно - тормозит жутко (не всегда, но частенько). А еще эти частые обновления...
    Обновления - это беда. Считаю, от них надо сразу отключаться на винде. За долгие годы работы, пришел к выводу, что прочный залог ее долгой и безглючной работы. Если что-то надо установить, лучше скачать отдельно и установить вручную
    Запись от netBool размещена 14.07.2018 в 11:54 netBool вне форума
  8. Старый комментарий
    Аватар для Rius
    Сколько лет сижу с обновлениями на винде - бед не знаю.
    А на линуксе обновления то ещё... То видеодрайвер заглючит и в логин скрин станет выкидывать, то ядро в панику ударится...
    Запись от Rius размещена 14.07.2018 в 12:22 Rius вне форума
  9. Старый комментарий
    Обновления можно отключить.
    Запись от Sasha38 размещена 14.07.2018 в 15:49 Sasha38 вне форума
  10. Старый комментарий
    [QUOTE=Volobuev Ilya;bt18470]Компилятор должен помогать программисту в написании кода, а не мешать ему.[/QUOTE]
    Выход один - для начала перепишите компилятор. К тому же, на сегодняшний день есть много других сред разработки ПО. Тот же Delphi например. Хотя и там куча проблем -

    [url]https://habr.com/post/111554/[/url]
    [url]https://habr.com/post/150943/[/url]
    Запись от Дмитрий2008 размещена 14.07.2018 в 17:44 Дмитрий2008 вне форума
  11. Старый комментарий
    Аватар для Соколиный глаз
    Этот код пройдет компиляцию:
    Pascal
    1
    2
    3
    4
    
    begin
      if false then 
        a.b.c.d.q.f.g; 
    end.
    Это ужасно... А в ней еще и обучают студентов и в школе...

    Хотя и там куча проблем
    Но я не знаю ни одного компилятора (кроме PascalABC.Net), у которого косяки разработчиков начинают вылезать в программах уровня "hello world".

    Выход один - для начала перепишите компилятор. К тому же, на сегодняшний день есть много других сред разработки ПО.
    Научусь писать компиляторы, тогда, может, и займусь этим. А на сегодня выход один - тщательно учить программирование, чтобы не стать таким же как они разработчиками.
    Запись от Соколиный глаз размещена 14.07.2018 в 19:16 Соколиный глаз вне форума
  12. Старый комментарий
    Аватар для Avazart
    Начнем с того что обновления не стоит отключать, ибо это грозит потерей безопасности из-за уязвимостей.
    Другое дело так эти обновления ставятся и чистится, и что происходит со временем с системой.

    По линуксом там же фигня только там всегда проще переставить систему если что-то не так.

    То видеодрайвер заглючит
    Дай угадаю NVideo ?
    Запись от Avazart размещена 14.07.2018 в 20:04 Avazart вне форума
  13. Старый комментарий
    Аватар для Avazart
    Этот код пройдет компиляцию:
    Это ужасно... А в ней еще и обучают студентов и в школе...
    Мм и что ужасного? Ужасный код можно писать на любом языке.

    Как по мне очень слабенькие статьи ни о чем.
    Запись от Avazart размещена 14.07.2018 в 20:05 Avazart вне форума
  14. Старый комментарий
    Аватар для Соколиный глаз
    что ужасного?
    То, что неверный код проходит компиляцию.
    Пользователю не должно быть позволено писать всякий бред, только потому что есть оптимизация. Должна быть ошибка компиляции. Иначе что это за компилятор такой, который только потому что оптимизирует код, позволяет творить пользователю все что ему захочется? Код, который полностью корректен, должен проходить компиляцию, а затем а оптимизацию, а некорректный - нет.
    См. Некорректность во благо оптимизации
    Запись от Соколиный глаз размещена 14.07.2018 в 20:10 Соколиный глаз вне форума
  15. Старый комментарий
    Аватар для Rius
    NVidia проприетарный. Открытый слишком медленный.
    Запись от Rius размещена 14.07.2018 в 20:11 Rius вне форума
  16. Старый комментарий
    Аватар для Avazart
    Может кардинально, но вероятно стоит выкинуть карту NVideo.
    Ибо проблема в нежелании NVideo открываться.
    Запись от Avazart размещена 14.07.2018 в 20:20 Avazart вне форума
  17. Старый комментарий
    Аватар для Avazart
    То, что неверный код проходит компиляцию.
    Что там неверного?
    Запись от Avazart размещена 14.07.2018 в 20:22 Avazart вне форума
  18. Старый комментарий
    Аватар для Соколиный глаз
    Что там неверного?
    Использование идентификаторов, которые не существуют. Об этом должен говорить компилятор, но он этого не делает. Тот же Rextester адекватно реагирует, сообщяя:
    source.pas(7,5) Error: Identifier not found "a"
    source.pas(8,4) Fatal: There were 1 errors compiling module, stopping
    Error: /usr/bin/ppcx64 returned an error exitcode
    на следующий код:
    Pascal
    1
    2
    3
    4
    5
    6
    
    program HelloWorld;
     
    begin
      if false then 
        a.b.c.d.q.f.g;
    end.
    Запись от Соколиный глаз размещена 14.07.2018 в 20:24 Соколиный глаз вне форума
  19. Старый комментарий
    Аватар для Avazart
    Пользователю не должно быть позволено писать всякий бред, только потому что есть оптимизация. Должна быть ошибка компиляции. Иначе что это за компилятор такой, который только потому что оптимизирует код, позволяет творить пользователю все что ему захочется? Код, который полностью корректен, должен проходить компиляцию, а затем а оптимизацию, а некорректный - нет.
    Ну это дурни писали. Зачем нужен программист если есть ИИ в виде компилятора?
    Должен ли компилятор облегчать работу программисту - да, должен ли полностью думать за него - нет.
    Запись от Avazart размещена 14.07.2018 в 20:24 Avazart вне форума
  20. Старый комментарий
    Аватар для Avazart
    Использование идентификаторов, которые не существуют. Об этом должен говорить компилятор, но он этого не делает.
    Имеете ввиду a,b,c,d не объявлены?
    Запись от Avazart размещена 14.07.2018 в 20:27 Avazart вне форума
 
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru