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

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

Запись от Соколиный глаз размещена 11.07.2018 в 18:28. Обновил(-а) mik-a-el 01.08.2025 в 10:29
Показов 4177 Комментарии 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. Старый комментарий
    [QUOTE=Avazart;bt18585]С С++. Сейчас пишу главным образом на С++ и Python.

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

    Т.е низкоуровневое программирование это немного нечто другое.[/QUOTE]
    Касаемо С++ - мечтаю начать вот с этой книги - [url]https://www.labirint.ru/books/500180/[/url]

    Но лучше вот с этих -

    [url]https://www.labirint.ru/books/470658/[/url]
    [url]https://www.labirint.ru/books/594364/[/url]

    По Ассемблеру была шикарная дружелюбная книга - [url]https://www.labirint.ru/books/23511/[/url]

    И для разработки ПО контроллеров тоже - [url]https://www.labirint.ru/books/300259/[/url]

    Всё равно я очень старый, для того чтобы стать профи.
    Запись от Дмитрий2008 размещена 22.07.2018 в 22:19 Дмитрий2008 вне форума
  2. Старый комментарий
    Аватар для Avazart
    Я бы начинал с более известных авторов.

    Липпман "Язык программирования С++ Базовый курс", 5-е изд. - 2014
    Прата С. "Язык программирования C++. Лекции и упражнения" 6-е изд. - 2012

    https://www.cyberforum.ru/blog... g1078.html

    Но во много зависит от того что собираетесь писать, что делать.
    Одно дело С для контроллеров, другое дело современный С++.
    Запись от Avazart размещена 22.07.2018 в 22:46 Avazart вне форума
  3. Старый комментарий
    [QUOTE=Avazart;bt18587]Я бы начинал с более известных авторов.

    Липпман "Язык программирования С++ Базовый курс", 5-е изд. - 2014
    Прата С. "Язык программирования C++. Лекции и упражнения" 6-е изд. - 2012

    [url]https://www.cyberforum.ru/blogs/131347/blog1078.html[/url]

    Но во много зависит от того что собираетесь писать, что делать.
    Одно дело С для контроллеров, другое дело современный С++.[/QUOTE]
    Благодарю. Книжки возможно ещё остались в продаже.

    Особенно по такой нереальной цене (только если подарите) -

    [url]https://www.labirint.ru/books/512910/[/url]
    [url]https://www.labirint.ru/books/512980/[/url]

    Честно говоря, хотел писать несложные игры.
    Запись от Дмитрий2008 размещена 22.07.2018 в 23:49 Дмитрий2008 вне форума
 
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru