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

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

Запись от Соколиный глаз размещена 11.07.2018 в 18:28
Обновил(-а) Соколиный глаз 15.07.2018 в 15:50

Сам 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.QuestionPointDesugarVisitor.visit(dot_question_node dqn)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.BaseChangeVisitor.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.BaseChangeVisitor.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.BaseChangeVisitor.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.BaseChangeVisitor.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.BaseChangeVisitor.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTreeConverters.StandardSyntaxTreeConverter.Convert(syntax_tree_node root)
в PascalABCCompiler.SyntaxTreeConverters.SyntaxTreeConvertersController.Convert(syntax_tree_node root)
в PascalABCCompiler.Compiler.CompileUnit(unit_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. Переменная не инициализируются, при присваивании константе значения функции
Размещено в Без категории
Просмотров 1008 Комментарии 43
Всего комментариев 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.QuestionPointDesugarVisitor.visit(dot_question_node dqn)
    в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
    в PascalABCCompiler.SyntaxTree.BaseChangeVisitor.DefaultVisit(syntax_tree_node n)
    в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
    в PascalABCCompiler.SyntaxTree.BaseChangeVisitor.DefaultVisit(syntax_tree_node n)
    в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
    в PascalABCCompiler.SyntaxTree.BaseChangeVisitor.DefaultVisit(syntax_tree_node n)
    в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
    в PascalABCCompiler.SyntaxTree.BaseChangeVisitor.DefaultVisit(syntax_tree_node n)
    в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
    в PascalABCCompiler.SyntaxTree.BaseChangeVisitor.DefaultVisit(syntax_tree_node n)
    в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
    в PascalABCCompiler.SyntaxTreeConverters.StandardSyntaxTreeConverter.Convert(syntax_tree_node root)
    в PascalABCCompiler.SyntaxTreeConverters.SyntaxTreeConvertersController.Convert(syntax_tree_node root)
    в PascalABCCompiler.Compiler.CompileUnit(unit_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 Соколиный глаз вне форума
    Обновил(-а) Соколиный глаз 12.07.2018 в 10:30
  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 вне форума
    Обновил(-а) volvo 12.07.2018 в 15:23
  6. Старый комментарий
    Аватар для Соколиный глаз
    Я к .NET на данный момент претензий не имею. А вот к Windows... достаточно - тормозит жутко (не всегда, но частенько). А еще эти частые обновления...
    Запись от Соколиный глаз размещена 13.07.2018 в 19:37 Соколиный глаз вне форума
    Обновил(-а) Соколиный глаз 13.07.2018 в 19:43
  7. Старый комментарий
    Аватар для netBool
    Цитата:
    А вот к Windows... достаточно - тормозит жутко (не всегда, но частенько). А еще эти частые обновления...
    Обновления - это беда. Считаю, от них надо сразу отключаться на винде. За долгие годы работы, пришел к выводу, что прочный залог ее долгой и безглючной работы. Если что-то надо установить, лучше скачать отдельно и установить вручную
    Запись от netBool размещена 14.07.2018 в 11:54 netBool вне форума
  8. Старый комментарий
    Аватар для Rius
    Сколько лет сижу с обновлениями на винде - бед не знаю.
    А на линуксе обновления то ещё... То видеодрайвер заглючит и в логин скрин станет выкидывать, то ядро в панику ударится...
    Запись от Rius размещена 14.07.2018 в 12:22 Rius на форуме
  9. Старый комментарий
    Аватар для Sasha38
    Обновления можно отключить.
    Запись от 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 Соколиный глаз вне форума
    Обновил(-а) Соколиный глаз 14.07.2018 в 19:32
  12. Старый комментарий
    Аватар для Avazart
    Начнем с того что обновления не стоит отключать, ибо это грозит потерей безопасности из-за уязвимостей.
    Другое дело так эти обновления ставятся и чистится, и что происходит со временем с системой.

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

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

    Как по мне очень слабенькие статьи ни о чем.
    Запись от Avazart размещена 14.07.2018 в 20:05 Avazart на форуме
    Обновил(-а) Avazart 14.07.2018 в 20:11
  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 Соколиный глаз вне форума
    Обновил(-а) Соколиный глаз 14.07.2018 в 20:26
  19. Старый комментарий
    Аватар для Avazart
    Цитата:
    Пользователю не должно быть позволено писать всякий бред, только потому что есть оптимизация. Должна быть ошибка компиляции. Иначе что это за компилятор такой, который только потому что оптимизирует код, позволяет творить пользователю все что ему захочется? Код, который полностью корректен, должен проходить компиляцию, а затем а оптимизацию, а некорректный - нет.
    Ну это дурни писали. Зачем нужен программист если есть ИИ в виде компилятора?
    Должен ли компилятор облегчать работу программисту - да, должен ли полностью думать за него - нет.
    Запись от Avazart размещена 14.07.2018 в 20:24 Avazart на форуме
  20. Старый комментарий
    Аватар для Avazart
    Цитата:
    Использование идентификаторов, которые не существуют. Об этом должен говорить компилятор, но он этого не делает.
    Имеете ввиду a,b,c,d не объявлены?
    Запись от Avazart размещена 14.07.2018 в 20:27 Avazart на форуме
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru