В PascalABC никак, а в PascalABC.Net используя .Net:
##
procedure p1;
begin
var c := 0;
System.Threading.Thread.Create(()->
while true do
begin
Console.SetCursorPosition(0,0);
Console.CursorVisible := false;
Writeln(c);
Sleep(16);
end).Start;
while true do
begin
Sleep(100); // типа работа
c += 1;
end;
end;
p1;
Создавать изнутри другой процедуры не обязательно, но этим я хотел показать - новый поток использует локальную переменную процедуры. Те кто боятся новых возможностей, вроде лямбд, такие плюшки никогда иметь не будут.
Конечно, лямбды это чистый синтаксический сахар. Но как бы вы сделали это во FreePascal, создавая новую пользовательскую структуру на как минимум 20 строк, или добавив 1 строчку глобального состояния в программу? Устаревшие стили часто провоцируют плохие привычки. То же самое, но более спорно, с описанием свалки переменных в начале программы.
А это уже низкоуровневая возможность, которая имеет смысл только в соответственно низкоуровневых языках, так же как и прямое управление указателями. PascalABC.Net таковым не является.
И, кстати, немного оффтоп, но до того как вы упомянули - использование такой фичи я видел только в одной игре в стиле ретро, где основная механика - написание ботов на ассемблеро-подобном языке. В современных кодах, ни на C++, ни на ассемблере, на практике я такого не встречал.
Я так подозреваю, это потому что если нужен запуск одного и того же участка кода несколько параллельных раз - надо использовать или что то типа omp (его современный аналог под .Net - System.Threading.Tasks.Parallel
), или сразу идти на GPU. Во всех остальных случаях - лучше начать пустую копию процесса, передав задание или через аргументы коммандной строки, или через пайпы. И всё это доступно через .Net .
Если вы не знали что фичи вроде лямбд присутствуют во многих современных языках - вы сильно отстали от жизни. А именно на такие фичи делается упор в данном языке.
И напротив - алгоритмическое мышление однозначно критически важное в программировании. Но довольно маленький процент обучающихся будет по жизни зарабатывать написанием драйверов, поэтому обучать надо и использованию абстрактных концептов, включая современные практики ООП.
Обучение на старых диалектах паскаля приводит к зазубривание бойлерплейта вроде сортировки массивов, вместо того чтоб один раз разобраться и далее использовать 1 строчку - массив.Sort;
, сосредотачиваясь на более сложных конструкциях.
Звучит только как непривычка к благам человечества. Конечно, всегда можно для вызова каждой функции лезть в документацию. Но если уметь пользоваться подсказками анализатора кода - написание кода становится быстрее и менее муторно.