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

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

Запись от Volobuev Ilya размещена 11.07.2018 в 18:28
Обновил(-а) Volobuev Ilya 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. Переменная не инициализируются, при присваивании константе значения функции
Размещено в Без категории
Просмотров 623 Комментарии 36
Всего комментариев 36
Комментарии
  1. Старый комментарий
    Аватар для Usaga
    Цитата:
    придется искать причину почему программа не компилируется
    Эту причину до вас должен доносить сам компилятор описывая, что ему не понравилось. А из статьи я так и не понял, чем же плох данный диалект. "Вот кусок кода, он не компилируется. Не используйте PascalABC.NET".
    Запись от Usaga размещена 12.07.2018 в 09:34 Usaga вне форума
  2. Старый комментарий
    Аватар для Volobuev Ilya
    Компилятор зачастую не доносит причины ошибки компиляции, выдавая что-то вроде:
    Цитата:
    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.
    Разве нормально? Компилятор должен помогать программисту в написании кода, а не мешать ему.
    Запись от Volobuev Ilya размещена 12.07.2018 в 10:28 Volobuev Ilya вне форума
    Обновил(-а) Volobuev Ilya 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. Старый комментарий
    Аватар для Volobuev Ilya
    Я к .NET на данный момент претензий не имею. А вот к Windows... достаточно - тормозит жутко (не всегда, но частенько). А еще эти частые обновления...
    Запись от Volobuev Ilya размещена 13.07.2018 в 19:37 Volobuev Ilya вне форума
    Обновил(-а) Volobuev Ilya 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. Старый комментарий
    Аватар для Дмитрий2008
    Цитата:
    Сообщение от Volobuev Ilya Просмотреть комментарий
    Компилятор должен помогать программисту в написании кода, а не мешать ему.
    Выход один - для начала перепишите компилятор. К тому же, на сегодняшний день есть много других сред разработки ПО. Тот же Delphi например. Хотя и там куча проблем -

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

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

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