PascalABC.NET имеет базовую совместимость с Turbo Pascal, что должно было позволить портировать старые программы с меньшим трудом. Однако, благодаря этому, сложилась тенденция, использовать PascalABC.NET только в стиле Turbo Pascal и игнорировать современные конструкции. Тут я хочу коротко изложить основные отличия и показать правильное использование этого диалекта.
Стандартные функции для ввода и вывода
Не самое важное отличие, однако это пригодится нам для дальнейшего сравнения.
В Turbo Pascal для ввода и вывода используются процедуры read[ln]
и write[ln]
соответственно.
var
a, b: integer;
begin
write('a=');
readln(a);
write('b=');
readln(b);
writeln('сумма ', a, ' и ', b, ' равна ', a+b);
end.
PascalABC.NET предлагает использовать для ввода функции с явным указанием типа данных. Они не просто меняют значение указанной переменной, а возвращают считаное значение.
write('a=');
a:= ReadlnInteger;
Аналогичные функции есть для остальных типов (real, string, etc). Более того, эти функции могут выводить приглашение для ввода самостоятельно.
a:= ReadReal('a =');
Для вывода используется подпрограмма Print[ln]
, которая автоматически разделяет переданные параметры пробелами. Таким образом, можно убрать из команды вывода лишние пробелы.
В результате программа приобретает такой вид:
var
a, b: integer;
begin
a:= ReadlnInteger('a =');
b:= ReadlnInteger('b =');
Println('сумма', a, 'и', b, 'равна', a+b);
end.
Локальные переменные
В Turbo Pascal переменные объявляются перед основной программой или перед телом подпрограммы. Например для решения квадратного уравнения может потребоваться такой набор переменных
var
a, b, c, d, x1, x2: real; // коэффициенты, дискриминант, корни
count: integer; // кол-во найденных корней
В результате образуется нагромождение переменных с избыточной областью видимости. По коду сложно понять в какой момент начинает использоваться та или иная переменная. Сложно определить используется ли переменная только в основной программе или к ней обращаются и подпрограммы. Сложнее определить назначение этой переменной.
В PascalABC.NET переменные могут объявляться прямо в коде. Делать это нужно как можно ближе к месту первого использования переменной.
Посмотрим на примере программы, складывающей числа.
begin
var a: integer; // объявляем
a:= ReadlnInteger('a ='); // инициализируем
var b: integer;
b:= ReadlnInteger('b =');
println('сумма', a, 'и', b, 'равна', a+b);
end.
Объявление переменной можно совместить с инициализацией.
begin
var a: integer:= ReadlnInteger('a =');
var b: integer:= ReadlnInteger('b =');
println('сумма', a, 'и', b, 'равна', a+b);
end.
Более того, компилятор понимает, что мы инициализируем переменную значением типа integer
и тип можно не указывать явно. Работает автовыведение типов.
begin
var a:= ReadlnInteger; // a: integer
var b:= 24.5; // b: real
println('сумма', a, 'и', b, 'равна', a+b);
end.
Всё это применимо и к циклу for
for var i:= 0 to 10 do ;
Динамические массивы
В Turbo Pascal используются статические массивы, основная проблема которых -- необходимость указывать размер массива ещё на этапе создания программы. В результате массивы зачастую создаются "с запасом". Вместо этого PascalABC.NET предлагает использовать динамические массивы.
begin
var n:= ReadLnInteger('Введите размер массива:');
var arr: array of integer;
arr:= new integer[n];
var arr2:= new integer[n]; // автовывод типа
end.
Такие массивы индексируются с ноля.
Помимо стандартного заполнения массива по индексам существует ряд других методов.
begin
var x:= 1;
// заполнение известными значениями
var arr:= |1, 10, 43, x|;
// чтение 10 значений из консоли
var arr2:= ReadArrInteger(10);
end.
Свойства и расширения типов
Каждый стандартный тип данных имеет достаточно большое количество свойств и методов расширения. Это элементы, доступные по точечной нотации.
Пример для integer
begin
var x:= 2;
var f:= x.IsEven; // чётное ли число
var f2:= x.Divs(4); // делится ли на 4
x.Print; // вывод в консоль
end.
Пример для динамических массивов:
begin
var arr:= |1, 31, 40, 4, 1|;
arr.Sort; // сортировка
var len:= arr.Length; // получение размера
var max:= arr.Max; // получение максимального
var count:= arr.CountOf(1); // кол-во указанного элемента
end.
Многие из этих расширений для массивов относятся к LINQ, но это достаточно обширная тема.
Благодаря этому код на PascalABC.NET может выглядеть как цепочка методов. Например эта программа находит количество двоек в записи считанного числа
begin
ReadlnInteger.ToString.CountOf('2').Print;
end.
Кстати .Print[ln]
можно использовать для всех базовых типов. Это особенно удобно в длинных выражениях.
Кортежи
Кортежи используются для хранение нескольких значений в одной переменной. Это может быть полезно, когда значения тесно связанны друг с другом. Например координаты точки.
begin
var point: (integer, integer);
point:= (1, 2);
print(point.Item1, point.Item2);
end.
В стандартной библиотеке есть функции, считывающие из консоли несколько значений сразу и возвращающих кортеж
begin
var point1:= ReadInteger2;
print(point1.Item1, point1.Item2);
var point2:= ReadReal2;
print(point2.Item1, point2.Item2);
end.
Кортеж можно распаковать в отдельные переменные
begin
var point:= (1, 4, 2);
var x, y, z: integer;
(x, y, z):= point;
Print(y); // 4
end.
И наконец, объявление переменных можно совместить с распаковкой
begin
var point:= (1, 4, 2);
var (x, y, z):= point;
Print(y); // 4
end.
Заключение
Актуальность статьи вызвана скорее недостатком проработанной информации по данному языку, чем сложностью материала.
Конечно я затронул лишь малую часть отличий языка. Однако я постарался передать основные идеологические моменты программирования на PascalABC.NET.
Пишите современный код!
Комментарии (39)
ShashkovS
28.12.2023 11:04Ох уж эти ценители стюардессЕсли серьёзно, то когда-то давно ~25 лет назад Pascal был моим вторым языком программирования после года с basiс и каким-то учебником. И тогда мне требовалось полгода, чтобы на Pascal сделать что-то интересное и красивое.
Может быть, PascalABC и вправду чем-то хорош как учебный язык. Но я как преподаватель не хочу связываться с подобными учебными языками: ученики может и поймут какие-то концепции лучше, но в большинстве своём никогда в своей жизни ни для какой своей потребности им не воспользуются. То есть обучение пройдёт только ради обучения.Ahuromazdie
28.12.2023 11:04+2А Вы уверены что то с чем вы связались сейчас (кстати с чем? может раст?) - завтра будет кому-то нужно?
ShashkovS
28.12.2023 11:04+1В моём случае речь о питоне.
Так что завтра — точно. Через пять лет — не факт, но это и не важно: если 5 лет не пользоваться языком, то всё забудется.
Ну, то есть одна из моих личных мысленных KPI при обучении программированию: доля школьников, которые в пределах года после обучения смогли решить какую-то свою задачу при помощи программирования.alan008
28.12.2023 11:04+2Ценность Питона слегка преувеличена (в глобальном смысле для мира программирования). Для low-level лучше уж учить C++, а для High Level - Kotlin или C#.
ShashkovS
28.12.2023 11:04+1У питона, безусловно, есть свои проблемы.
Но в смысле универсального доступа к "достижениям человечества" у питона немного альтернатив. У Kotlin и C# есть свои ниши, не вполне универсальные.ИМХО, у обучения C++ как первому языку программирования должна быть какая-то внятная мотивация. Условно, если хочется школьником взять всеросс по информатике, то от C++ не уйдёшь. Плюсы — сложный язык с очень сложным взаимодействием с библиотеками.
vadimr
28.12.2023 11:04+1Я думаю, что для решения своей задачи можно применить любой известный язык. А в коммерческом программировании любой из современных языков теперешним школьникам, скорее всего, не пригодится. Цель обучения в школе – правильно поставить мозги, а не надеяться на непосредственную применимость материала.
Питон – неплохой язык для начального обучения, но не надо испытывать слишком много иллюзий.
larasage
28.12.2023 11:04+2Ну вот через N лет после окончания ВУЗа (на кафедре основной язык - паскаль=>Delphi) потребовалось "для себя" быстро написать десктоп-программку. Выбрал Lazarus.
SamuraiDev Автор
28.12.2023 11:04+1PascalABC.NET вполне можно применять как рабочий инструмент, если адекватно оценивать какое место он занимает в экосистеме .NET
vadimr
28.12.2023 11:04-2Классический и турбо паскаль был хорош для обучения своими маленькими размерами, позволявшими изучить за год язык целиком. А тут уж напихали всякого добра из C++/C# и stdlib, так что объём материала стал очень большой, и тогда непонятно, почему бы сразу не изучить C++.
Учебному языку не нужен синтаксический сахар. А в качестве профессионального языка паскаль, к сожалению, давно умер.
alan008
28.12.2023 11:04+2Да не умер он, живёт :) В desktop windows корпоративных приложениях.
Вот новая версия в ноябре вышла:
https://www.embarcadero.com/en/products/rad-studio/whats-new-in-12-athens
LordDarklight
28.12.2023 11:04Скорее мёртв чем жив как и VB6 - используется в основном только для поддержки старого ПО.
А RAD Studio это не только Pascal но и C++ (а от Pascal for .NET они уже давно отказались)
Но тут всё скорее на компонентную базу завязано, идущую в комплекте со студией (и в первую очередь визуальных для баз данных; ибо тут всё давно устарело - нет никакого WPF, Avalonia UI, Jetpack Compose, Swift UI и вообще с кроссплатформенностью GUI тут всё не очень хорошо - хоть она и официально есть; плохо всё и с кастомизацией GUI )
nik_vr
28.12.2023 11:04+4в качестве профессионального языка паскаль, к сожалению, давно умер.
Расскажите это Кристиану Гислеру. И авторам других популярных программ, которые до сих пор пишутся на диалектах Паскаля.
vadimr
28.12.2023 11:04-2Чего мне рассказывать, я, может, ещё побольше Гислера на паскале написал (ну точно сопоставимо). Но на данный момент это не востребованный рынком навык. Причуда кодировщика. Не первый и не последний основной язык в моей карьере.
miksmiks
28.12.2023 11:04+1Интересно, а в каком смысле язык программирования рассматривается как профессиональный язык. Есть много разных профессий, и многие используют программирование. Значит ли, что они делают это непрофессионально?
Вот допустим - научный работник. Профессионал - очевидно. Написал вычислительную программу на языке программирования. Это - непрофессиональное применение языка?vadimr
28.12.2023 11:04+2Я под профессиональным применением понимаю ориентацию на действующий рынок труда.
Научный работник ориентирован на рынок труда программистов? Очевидно, нет.
Я вот профессионально программирую, а на работу езжу на своей машине. Становится она от этого ориентированной на профессиональный труд водителя? Очевидно, нет. Плохая у меня машина для профессионального водительского применения, производительность/стоимость неважная. Но мне нравится, потому что удобная. Так и тут.
miksmiks
28.12.2023 11:04Тут вот какая проблема. Сейчас в качестве учебного языка программирования в школе предлагается как раз язык Питон, напичканный синтаксическим сахаром.
Еще одна проблема - это то, что многие профессиональные программисты различают только два вида программирования: учебное и профессиональное. А мир гораздо богаче.vadimr
28.12.2023 11:04Я лично не считаю питон идеальным языком для обучения программированию. Хотя у него есть много плюсов в этом качестве, например, динамическая типизация, сборка мусора, интерпретатор и прочие облегчающие жизнь вещи.
Я б, например, лисп использовал для обучения, причём лисп-1, где нет разницы между обычным и функциональным значением символа. Но и лого тоже выглядит неплохо, хотя его синтаксис и переусложнён для его семантики.
miksmiks
28.12.2023 11:04Как я уже говорил, в школе совсем недавно новым ФГОСом запретили преподавать на всех языках кроме Python, C++, C# и Java. Поскольку на трех последних трудно себе представить обучение программированию в массовой школе, то остаётся собственно Питон. И еще остался Паскаль в непрофильных классах.
miksmiks
28.12.2023 11:04+3Статья слабая на мой взгляд. Если уж писать о PascalABC.NET на Хабре, то можно было бы более выразительные примеры привести. Которые есть и на сайте в примерах PascalABC.NET и в Телеграм-канале, и на канале youtube.
Мы когда создавали PascalABC.NET 15 лет назад, то конечно Паскаль был очень популярен в обучении. Но уже тот Паскаль устаревал катастрофически. Уже даже школьники не хотели на нем писать.
Поэтому вначале за основу был взят C# как один из лучших языков сегодня по языковым концепциям. Собственно, PascalABC.NET всегда - в каждый момент времени рассматривался как язык для обучения современному программированию.
И да - он не про использование в энтерпрайз приложениях - он - про лучшие языковые концепции и библиотечные функции современных языков.
По статье - я бы рекомендовал автору лучше её оформить - везде имена функций писать с большой буквы и не делать такие ужасные отступы между колом и основным текстом (не знаю, можно ли это на Хабре).
По факту: мы про обучение знаем всё, поэтому можем с уверенностью сказать, что старые представления об обучении программированию сейчас мало годятся. Мы сталкиваемся с профессионалами, которые говорят - этому сложно учить, надо школьников учить в красивых средах с красивыми окошками. Но - нет, мир обучения программированию драматически изменился за эти годы, как и мир ИТ. Школьники абсолютно свободно понимают лямбды - и быстрее чем профессиональный программист. Цепочки методов в стиле Arr(1..10).Where(x -> x.IsOdd).Select(x -> x * x).Print воспринимаются абсолютно свободно и сочетаются с алгоритмическим кодом в разных пропорциях. Совершенно естественно воспринимается использование словарей в задачах. Некоторые преподаватели, готовящие школьников к ЕГЭ, активно используют весь этот LINQ для сокращения кода на компьютерном экзамене - тут я не всегда с ними согласен - краткость - далеко не всегда хорошо.
Тут еще нужно понимать, что PascalABC.NET плохо понимается многими, причем по-разному. Кто-то видит в нем игрушечный учебный язык для базового обучения младшеклассников, и тогда применение всех этих автоклассов, кортежей и перегрузки операций раздражает со словами "понапихали". Кто то видит в нем чистый язык Паскаль и раздражается любым новым конструкциям - в том числе автовыводу типов, описанию переменных внутри блока и попытке вообще отказаться от begin-end.
PascalABC.NET - это конечно процентов на 30 - классический Паскаль, всё остальное - концепции современных языков программирования. По-существу, это - новый язык, и с этим трудно смириться.
Но правы те. кто пишет, что время его уходит. Сейчас в российских школах с упорством, достойным лучшего применения, пытаются вычеркнуть Паскаль и перейти на Питон. Действительно, Питон при всех его недостатках лучше старого Паскаля - так уж точно. Но как писали здесь - имеет свои родовые травмы. Мешающие кстати говоря обучению. Но - питонизация школьного образования - необратимый процесс :) А ценность Питона, как уже писали здесь, "слегка преувеличена".
В отношении обучения мне нравится Котлин - несомненно - компактный выразительный код во многих случаях, и по языковым концепциям очень хорош. Но до школ вряд ли дойдёт. Школы вообще умудрились ограничить в последнем их ФГОС список допустимых языков, на которых можно учить.
nik_vr
28.12.2023 11:04+2Начал писать свокй коммент по этой теме, и понял, что в формат комментария не укладываюсь.
Так что ловите мнение школьного учителя информатики по вопросу выбора языка (и про ситуацию с изучением информатики в школах - в целом): https://habr.com/ru/articles/783900/
miksmiks
28.12.2023 11:04+1Ох ты, крутая статья, хорошо структурированная и написанная на одном дыхании.
Да, с проблемами школьной информатики знаком - озвучивали их многие школьные учителя.
Здесь ей-богу проблема выбора языка программирования отходит на второй план - тут бы учебник нормальный и ФГОС бы тоже нормальный.
ЕГЭ по информатике у нас в ВУЗе тоже достаточно мало значит. Основная масса детей, которые готовились только к ЕГЭ, сдавали его на Питоне "не приходя в сознание" и сразу его забыли после сдачи. Переучивать с этой методики изучения языка программирования для сдачи ЕГЭ приходится с кровью.
qw1
28.12.2023 11:04-1a:= ReadReal('a =');
Это выдаёт игрушечный язык, заточенный под чисто учебные задачи. В проде это ни разу не пригодится.
SamuraiDev Автор
28.12.2023 11:04Странный вывод. По такому же принципу можно сказать, что такой код в проде тоже не пригодится и тогда вообще все Паскали "игрушечные"
var a: real; write('a= '); read(a);
По факту, это удобное средство для совсем небольших утилит и для тестовых целей. Не вижу в этом ничего плохого
qw1
28.12.2023 11:04Я хочу сказать, что смешивать ввод и вывод в одной функции это шорткат чисто для студенческих лаб, где такой паттерн встречается постоянно. А приучать юных программистов к таким функциям - плохой стиль. Лучше сразу выстраивать правильные абстракции и разделять мух от котлет.
miksmiks
28.12.2023 11:04Это прямо конечно выдаёт игрушечный язык:
a = input("Введите a:")
Повсюду - игрушечные языки ))
В проде - не нужно - не пользуемся
SamuraiDev Автор
28.12.2023 11:04По изначальному комментарию было сложно понять к чему именно претензия
Понимать разницу ввода и вывода безусловно необходимо, но я не вижу проблемы в смешении в простых случаях, если понимаешь что делаешь. Не такой уж это и редкий случай, когда чёткое разделение избыточно
А приучать юных программистов к таким функциям - плохой стиль
Если Вы тут видите какой-то сугубо преподавательский момент, то ничего не могу сказать. Как я писал выше в комментариях, вопросы обучения меня мало волнуют
miksmiks
28.12.2023 11:04Паттерн "приглашение к вводу" и затем ввод собственно очень распространен у школьников и как верно заметили - у студентов. В простых программах.
Но прошу заметить - это тоже прод. Только это - прод для школьников. У них - свой прод. И свои паттерны. Относиться к ним с ненавистью - зачем? Это реально помогает повторяющиеся куски кода писать коротко.
Что же касается студентов, то мы с ними пишем так:
uses NUnitABC; uses MyFuncs; const eps = 1e-10; [Test, Combinatorial] procedure Test4([Values(1,3,5,7)] a: real; [RangeAttribute(1,200)] b: real); begin Assert.AreEqual(Hypot(a, b), Sqrt(a * a + b * b), eps); end; begin end.
Затем - запуск модульных тестов из IDE. И вводить ничего не надо.
LordDarklight
Когда-то был Delphi.NET и Prism Oxygene - но всё это быстро померло - ибо нахрен никому оказалось не нужно. Хотя у меня книжка Delphi.NET Ксавье Пачеко (отличная книга) до сих пор лежит на столе (правда в виде подставки для монитора) - тогда много возникало .NET редакций разные ЯП - сейчас, по сути они все мертвы - выжил только оригинал C# - и я, считаю, что это печально! C# слишком много унаследовал от C++ того, что мне не нравится - но C# хороший ЯП, хоть в последнее время не всем нравилось как бурно он развивался! Но отсутствие в среде .NET у него конкурентов - это не хорошо, как я считаю - слишком уж монополизированной получается разработка под .NET - в целом, очень хорошей платформы!
Вот у JVM есть некоторые альтернативы в лице Scala, Kotlin и некоторых менее известных ЯП. И это хорошо.
Когда сдох Delphi.NET я очень грустил, и хотел делать уже свою версию - но потом понял, что это тоже будет труп. Хотя для обучения программированию в школах Pascal на платформе .NET был бы не плох. Но.... есть же Python - вроде бы ещё лучше для школьников (которые переходят с более "примитивных" графических ЯП для детей). Так что в чём потребность в PascalABC.NET мне не ясна вовсе. Особенно когда есть Kotlin с похожим и более лаконичный синтаксисом (Rust не рассматриваю - это другая область).
Вот лично я делаю Kotlin для платформы .NET - и считаю, что потребность в таком диалекте может быть не на много ниже чем в Native Kotlin - небольшая, но свою нишу найдёт - выехав на популярности Kotlin и широких возможностях платформы .NET
А уж если разрабатывать новые ЯП - то это уже должно быть что-то революционное, удобное и надёжное - лучше, чем есть среди основных ЯП TOP10
Что до текстового ЯП для школьников средних классов - то Pascal, на мой взгляд, тут уже устарел как учебный язык - но действительно хорошей альтернативы ему я не видел - всё-таки даже Python и Kotlin тут больше для старшеклассников и студентов годятся. Но и PascalABC.NET будет для них слишком сложен и коряв, а главное - для младших и средних классов нужна очень красивая и затягивающая мультимедийная оболочка и умная среда разработки - вот об этом нужно думать в первую очередь.
Ну и тут можно спорить "о первенстве курицы и яйца" (хотя кто знает, тот знает, что яйцо классе пернатых было первым) - но лично моё мнение в нынешних реалиях обучение программированию надо начинать ЯП без строгой типизации - и не грузить детей особенностями устройства памяти - это вполне можно оставить до старших классов или даже до ВУЗов. И без этих знаний можно вполне успешно программировать, а грузить этим мозг детей не гуманно - наоборот лучше потом более серьёзно этому всему обучать, когда мозги уже готовы будут это всё воспринимать с уклоном в оптимизацию!
GospodinKolhoznik
А чем Го не альтернатива Паскаля для школьников? Очень похожие языки.
LordDarklight
Мерзкий язык - для обучения не годится - хуже чем Python. Простите за резкость - от синтаксиса GoLang меня воротит - но это субъективное мнение - нелаконичный и необтёсанный он. Как минимум я плохо перевариваю ЯП где форматирование текста не имеет свободной формы! И, думаю, детям это тоже будет очень неудобно! Как и путаница в присваиваниях "=" и ":=", а уж проблема проверки на nil - меня вообще выворачивает!
GospodinKolhoznik
Однако же в подмножестве языка в рамках школьной программы (т.е. если не изучать горутины, дженерики, интерфейсы и функции высшего порядка) он похож на Паскаль и все отличия лишь в некоторых особенностях синтаксиса.
А Паскаль отличный язык для обучения - явное определение переменных, строгая типизация, никаких классов и объектов (что для школы плюс, а не минус). Но Паскаль уже почти нигде не используется и странно учить детей умирающему языку, а Го современный и востребованный язык. Поэтому он мне кажется интересным вариантом.
А так все языки имеют свои недостатки и уродства от которых воротит. Даже не знаю, есть ли язык, который не имеет недостатков в моих глазах? Ну разве что Coq. Вот Coq совершенный идеал, вообще не могу придраться ни к чему! Ну разве что один недостаток - учить детей в школах Coq было бы абсолютным безумием.
SamuraiDev Автор
Ну как же, если только что были описаны некоторые методы расширений и свойства, ещё и LINQ затронут совсем чуть-чуть. И всё это в примитивных типах. Единственное, что на начальных этапах в этом разбираться совсем не обязательно
miksmiks
Ну, это мнение конечно. Вы наверное имеете в виду динамическую типизацию.
Я вот напротив считаю, что начинать сколько-нибудь последовательно учить программированию лучше с языков со статической типизацией, в которых компилятор тебе не даст писать многие неправильные программы.
Wan-Derer
Как насчёт JavaScript для обучения? Ц-подобный синтаксис и основные конструкции, что позволяет в дальнейшем как развиваться во фронте, так и перекатиться в бэк или мобилки. Язык популярный, информации по нему прорва, всегда есть кого спросить.
Но, наверно, придётся разработать какую-то особую школьную IDE.
LordDarklight
Kotlin лучше продуман, чем JavaScript, у которого тоже косяки в дизайне есть, и его сложно изучать в отрыве от других технологий. И с практической стороны далее Kotlin более универсален - т.к. компилируется в разные платформы. Но я, всё-таки, считаю Kotlin сложноватым для обучения в школе (разве что в старших классах, если школьники уже освоили более простой ЯП, а вот какой - это ещё та дилемма - тут лучше применять ЯП без строгой типизации - но это лишь моё мнение; и без кучи неочевидных нюансов синтаксиса и выполнения кода).
Но это не значит, что JavaScript изучать не надо - это очень мощный и популярный ЯП, просто не годится он для обучения в школьной программе.
В своё время для этой цели Turbo pascal как и Basic были хороши - но те время уже прошли - и сейчас нужно искать более удачное решение - даже Python сейчаc лучше подойдёт чем эти старички или JavaScript. Но и Python не без недостатков :-(
Кстати в старших школьных классах на Kotlin, C#, Python, Lua - можно даже попытаться проводить обучение в игровой форме (в более младших классах тоже можно так - но на других ЯП и платформах) - т.е. заинтересовать детей разработкой или доработкой игр на каких-то готовых игровых движках (сам эти увлекался, правда уже в студенческие годы, хотя и сейчас не брезгую иногда поковырять игровые алгоритмы). Конечно, навряд ли в рамках школьной программы - но на факультативных занятиях можно. В рамках школьной программы я бы всё-таки в старших классах давал бы основы работы с СУБД - т.е. в первую очередь ANSI SQL (он не такой уж сложный в своё базисе) и, с учётом того, что какое-то программирование уже должно к старших классам уже быть освоено - написание визуальных программ для СУБД - ну вот так мне преподавали в старших классах информатику, и так я уже сам успел немного преподавать информатику в старших классах - так что я знаю о чём говорю! В ходу тогда был Delphi - и его визуальная компонентная база была очень легка в использовании! Но сейчас я бы Delphi уже не стал рекомендовать - мир изменился и в ходу уже другие подходы в разработке приложений, но не скажу, что этот процесс стал проще (хотя и усложнился не сильно если изучать с нуля, но вот переучиваться со старых подходов тяжеловато) - уверен, что в будущем это всё снова изменится и упростится ещё сильнее, чем было раньше (но визуальное программирование в том виде уже уйдёт в прошлое)!
Кроме СУБД в старших классах можно попробовать и в WEB дизайн или вооще во Frontend в целом выстраивать школьную программу. И так делают сейчас - но это опять же, скорее факультатив - слишком сложный стек для школьников, но очень востребованный - но осилят не все. Хотя если сосредоточится на дизайне без (или почти без) программирования - т.е. на только HTML/XAML + стили - то что-то можно делать, вот только без программированию тут далеко не уедешь - а начнёшь тащить программный код - и всё станет слишком сложно для детей! Если что Kotlin'овский Jetpack Compose - тоже сложная штука для школы.
SamuraiDev Автор
Вопросы образования меня мало волнуют, так что отвечу только по поводу ниши PascalABC.NET в экосистеме .NET
Попутно отмечу, что C# не единственный представитель .NET. В последнее время наблюдаю рост популярности F# например. В энтерпрайз его тащат не часто, но опенсорс и какие-то локальные вещи на нём вполне себе живы
И так, PascalABC.NET(pabc) для меня это в первую очередь инструмент, которым очень легко собрать кучу имеющихся в .NET библиотек (как стандартных, так и внешних) и собрать какое-то клиентское приложение, будь то CLI тулза или desktop-приложение. Как правило, это получается намного лаконичнее и читабельнее, чем на том же C#. Все компоненты приложения, которые можно вынести в библиотеку и где-то переиспользовать -- лучше писать на C# и подключать к pabc
Система модулей привносит в .NET иной подход к работе с компонентами программы. При чём модуль в ряде случаев тоже можно переиспользовать между проектами и он является неким легковесным аналогом dll
В вопросах генерации CIL pabc иногда разрешает больше, чем C#. Взять те же именованные индексаторы
Мультипарадигменный подход позволяет не перегружать код лишними абстракциями там, где это не требуется. Актуально для скриптовых, тестовых и небольших приложений
Ряд небольших фишек, облегчающих написание кода. Некритично, но довольно неприятно, когда встречаешь их отсутствие в других языках
Таким образом, pabc в среде .NET это не про объёмные библиотечные проекты, это про легкоподдерживаемые клиентские программы
same_one
Есть, например, Оберон, он не устарел.