Болталка PascalABC.NET

Возьмите и добавьте, это опенсорс-проект.

Возьмите и добавьте, это опенсорс-проект.

У меня нет прав на коммиты в публичный репозиторий. А если я добавлю это в свой форк, то ситуацию с несовместимостью это не исправит.

Кроме того, я вообще не имею опыта в программировании под .NET и не хочу в нём копаться.

PabcN я собираюсь использовать только в той части, которая совместима с нормальным паскалем, поскольку я считаю, что писать код, работающий только с одним компилятором — это дурной тон и в общем случае признак крайне низкой квалификации программиста. Это примерно как на C консольные программы писать, так что собираются только в Microsoft Visual Studio 2020. Собственно для этого мне PabcN и нужен, что бы не завязывать свой код на фичи, уникальные для Free Pascal.

Понятно, вопросы школьной информатики рассматривать бесполезно. Думать Вы можете все, что угодно, а реальность такова, что учитель обязан использовать то ПО, которое стоит на компьютерах в классе. Почему FPC в школах надо “днем с огнем искать” - это не мне вопрос, тем более это не моя забота. Чем раньше этот сорняк на ниве обучения окончательно выкорчуют, тем лучше будет. Школа языкам программирования не учит, у нее другая задача - учить составлять алгоритмы и записывать их неким удобным для записи и понимания образом. В свое время Н.Вирт для целей обучения алгоритмам специально разработал язык, который назвал Паскаль. Напоминаю, что реализация появилась намного позднее языка, а до тех пор Н.Вирт использовал Паскаль именно для публикации алгоритмов, как прежде Algol-60. Подобным образам и PascalАВС.NЕТ создавался в первую очередь как язык, позволяющий сделать обучение более комфортным. Попутно были достигнуты и иные цели. И глупо было бы при этом давать какое-то его убогое подмножество. Собственно, об этом сто раз уже писалось, чего повторяться.

Т.е. если в Алгол-60 или Fortran-II добавить какую-то отсутвовавшую в них возможность, они перестанут быть устаревшими?

После установки системы PascalАВС.NЕТ появляется папка с примерами, посмотрите по пути \Samples\NETLibraries\System.Parallel

Это по-Вашему. Но есть и другие мнения. В частности, те из школьников, что в этом году сдавали ЕГЭ, как и учителя - те, что познакомились с LINQ в один голос пишут восторженные отзывы. LINQ - современная технология и говорить, что она не нужна - по меньшей мере, недальновидность. Снимок Это пост выпускника, у которого в школе информатики вообще не было. Выучился сам на PascalАВС.NЕТ за полгода. Естественно, это не один отзыв.

Да, лет двадцать лет назад они примерно так и делались. Но, к примеру, в .NET такой код писать - это как на минном поле. Вам уже пытались объяснить, но либо Вы не понимаете, как в .NET работает сборщик мусора, либо “Ваньку валяете”.

Да, но только однократно. Создавать структуры данных и писать методы/процедуры для манипулирования этими структурами для каждой задачи - бред горячечного больного. Отсюда необходимость иметь стандартные библиотеки. Научившись работать с ними в одном .NET-языке, можно затем использовать полученные умения в других, например в C#.

Если о Паскале - это вообще не довод. В язык добавили новую возможность - и Вы критикуете его за то, что она новая и в старых диалектах ее нет?

В качестве примера. Вот задание из демоверсии к ЕГЭ-2021: Снимок А вот возможное решение, которое школьник напишет за минуту и не думая:

## uses School;
(49bi ** 7 + 7bi ** 21 - 7).ToBase(7).CountOf('6').Print // 13 - ответ

Очень жду от Вас решение на FPC и примерное количество времени, которое уйдет на написание и отладку…

1 лайк

Совет: просто забудьте про PascalАВС.NЕТ. Скажите вслух 256 раз: “нет его, нет!”. А потом сожгите над системным блоком своего компьютера конcкий волос. И спокойно продолжайте писать на FPC.

В качестве примера. Вот задание из демоверсии к ЕГЭ-2021: Очень жду от Вас решение на FPC и примерное количество времени, которое уйдет на написание и отладку…

Для начала, давайте определимся. Мне нужно максимально быстро получить ответ? Я сделаю это так:

$ bc <<< 'obase=7;49^7+7^21-7' | tr -cd '6' | wc -c
13

Примерно две минуты на написание и отладку. Из них большая часть — перечитывание задания и сверка каждой цифры по два раза.

Или мне нужно решить эту задачу именно как задачу? В таком случае я буду использовать мозги, а не компьютер. Для начала, замечаем что числа в основании степеней — это 7 и 49, то есть степени семёрки и пользуясь этим, переводим: 7^14+7^21-7 = [1 (7 нулей) 1 (14 нулей)] - 10 (в семеричной системе). Далее, мысленно вычитаем в столбик и замечаем, что каждый из четырнадцати нулей превратится в 6, кроме последнего, а значит шестёрок будет 13.

вот возможное решение, которое школьник напишет за минуту и не думая:

На экзамене школьник вообще-то должен именно думать. То есть решить эту задачу он должен без компьютера (или с компьютером, но только в качестве средством показа текста задания).

Это как на контрольной в третьем классе с заданиями на действия в столбик разрешить брать с собой калькулятор. Школьник-то может быть решит за минуту все задания, не думая, но то, ради чего собственно и проводилась контрольная: оценить, освоил ли он собственно действия в столбик — не получится.

Цель этой задачи какая — выяснить, понимает ли школьник смысл позиционных систем счисления. При использовании готового метода ToBase(7) или obase=7 — эта цель достигнута не будет.

Что интересно, если школьник осилит это решить на нормальном паскале или любом другом языке, не используя библиотечные функции для перевода между систем счисления — то вот это как раз докажет, что он системы счисления понимает. Только вот в этом случае гораздо быстрее и проще решить эту задачу не в лоб, а чуток подумав.

В язык добавили новую возможность - и Вы критикуете его за то, что она новая и в старых диалектах ее нет?

Для обучения информатике избыток возможностей вреден, а не полезен, что вы, кстати, удачно доказали примером из ЕГЭ.

Да, но только однократно. Создавать структуры данных и писать методы/процедуры для манипулирования этими структурами для каждой задачи - бред горячечного больного.

Нужно сохранить свою имплементацию этих структур данных в модуль и использовать именно свой модуль в каждой программе. Естественно, писать каждый раз заново — это неправильно.

Научившись работать с ними в одном … языке, можно затем использовать полученные умения в других.

Повод научиться подключать библиотеки, написанные на одном языке к программам на другом языке. Это общее умение гораздо нужнее частного знания библиотеки .NET, которое совершенно бесполезно при программировании на других языках, типа например Scheme или Haskell.

Но, к примеру, в .NET такой код писать - это как на минном поле.

Ну в таком случае, .NET плохо подходит для изучения программирования.

но либо Вы не понимаете, как в .NET работает сборщик мусора

Я выше открытым текстом писал, что на .NET я не писал и не собираюсь. И как разботает сборщик мусора я не понимаю. Всё что я про него знаю я прочитал в странице справки pABCn на тему указателей. А единственное что там написано, это что он автоматически освобождает память, если на неё нет активных указателей.

Т.е. если в Алгол-60 или Fortran-II добавить какую-то отсутвовавшую в них возможность, они перестанут быть устаревшими?

Алгол устарел не из-за недостатка возможностей, а как раз таки из-за их избытка. В итоге он в своё время оказался неюзабельным, так как тогдашние компьютеры не могли это позволить, а потом, когда компьютеры стали на всё это способны, этот самый алгол просто переизобрели под новыми именами, вместо того что бы воскрешать старый.

те, что познакомились с LINQ в один голос пишут восторженные отзывы. LINQ - современная технология и говорить, что она не нужна

Я говорил, что она не нужна в паскале, поскольку она является для него чужеродной. Для функционального программирования есть нормальные уже существующие языки, упомянутые мной выше.

1 лайк

Не пойдет. Вы - на месте школьника, изучавшего только FPC. И все. Принимается только работающий код на FPC. Остальное - болтовня.

Да, А если есть - оставляет за собой право переместить участок занятой памяти в другое место. Но указтели он править не будет при этом.

1 лайк

Возможно, в “вашем любимом Паскале” LINQ иметь и не нужно. Потому что упомянутый Паскаль сегодня фактически мертв, ведь для обучения он малопригоден, являясь балластом при изучении современных концепций и технологий, а в “промышленном программировании” Паскаль практически не используется. Но вот отсылать с LINQ к функциональным языкам не стоило бы: с ним можно работать и в языках с более привычными парадигмами. Даже к С++ написаны библиотеки для реализации LINQ.

Да, с этим никто и не спорит. Кроме, видимо, ФИПИ и МинОбра. Потому что задачи из ЕГЭ думать как раз и не заставляют. Они заставляют или использовать один из готовых шаблонов для решения класса конкретных задач, или использовать брутфорс на компьютере. В любом случае, если школьник получает возможность свое решение проверить - это отлично, а не должно подвергаться гонениям.

Вы не школьник, знаете наверняка больше - осильте, пожалуйста, на своем любимом FPC в его стандартной поставке.

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

Давайте в обсуждении считать PascalABC.NET не версией Паскаля, а новым языком. Это на самом деле так. И так нам будет проще всё это обсуждать.

Вы будете учить школьников старому паскалю и указателям (если вы конечно учите школьников), мы будем учить их по-новому. Все будут счастливы. И профессия программиста не пострадает, поскольку любой вменяемый программист понимает, что если это - новый язык, то его надо вначале изучить. Ну или не изучать и не писать на нем.

4 лайка

И где такие учителя? А кто тогда проверяет работы ОГЭ и ЕГЭ на разных языках? И как они такие закостенелые перешли массово на Python, а не PascalABC.NET не смотря на ваши потуги (ведь это проще)?

Большинство так и сделало. А жаль…

Уже никто не проверяет.

Как по мне, не жалко терять ЦА, которая ни во что ставит достоинства твоего продукта, а переубеждение гиков почти всегда напрасная потеря времени. Касательно школьников — тут информационный барьер, почти никто не знает на что на самом деле способен PascalABC.NET.

ОГЭ проверяют…

Теперь учителя вздохнут и начнут углубляться в дебри языка который преподают…

Без справки так и не узнают…

А книги устаревают.

1 лайк

Вы не школьник, знаете наверняка больше - осильте, пожалуйста, на своем любимом FPC в его стандартной поставке.

Но зачем?! Я же сказал, что эту задачу правильней всего решать вообще без компьютера. Ну если уж вы так настаиваете…

Program count_base_digits;

Uses
	BaseUnix;
	
Const
	shell_path = '/bin/sh'#0;
	shell_opts = '-c'#0;
	shell_cmdl = 'bc <<< "obase=7;49^7+7^21-7" | tr -cd 6 | wc -c'#0;
	
Var
	status: Integer;
	argv: array[0..2] of pchar;

Begin
	argv[0]:= @shell_path[1];
	argv[1]:= @shell_opts[1];
	argv[2]:= @shell_cmdl[1];
	status := FpExecv(@shell_path[1], @argv);
	if (status <> 0) then
		WriteLn(stderr, 'Error: ', status);
End.

Если ваш тезис в том, что написать такой код дольше, чем тот код на pABCn (при условии знания нужных методов заранее), то это и так было понятно. Но вот что вы хотели этим доказать — не ясно.

Не согласен. Если бы это был новый язык, то и назывался бы он не PascalSomething, а например P# или Oxygene. А раз в имени есть слово Pascal, значит язык должен быть совместим с паскалем.

Вы будете учить школьников старому паскалю и указателям (если вы конечно учите школьников),

Вот пример. Если бы вы действительно верили тому что пишете, вы бы написали “паскалю”, а не “старому паскалю”. А раз вы говорите “старый”, значит предполагается, что есть и “новый”. Но “новый паскаль” — это всё равно паскаль.

Для этого нужно минимум иметь персональное хранилище модулей и вообще уметь их оформлять.

Да, надо! И вот именно это гораздо важнее для начинающего программиста, чем использование всяких фишек .Net, которые потом нигде не пригодятся, кроме этого .Net.

Кроме, видимо, ФИПИ и МинОбра. Потому что задачи из ЕГЭ думать как раз и не заставляют. Они заставляют или использовать один из готовых шаблонов для решения класса конкретных задач, или использовать брутфорс на компьютере.

Вообще-то нет. Вот как я например решаю задачи из ЕГЭ по информатике, не зная ни одного готового шаблона? Дело не в ЕГЭ как таковом, а в том, что на него учеников натаскивают, вместо того что бы прививать глубокое понимание необходимых для него концепций. И если учеников учат запускать “калькулятор” (встроенный в pABCn), что бы получить готовый ответ, вместо того, что бы подумать — не вижу ничего в этом хорошего. Из задачи отчётливо видно, что её составители не предполагали использование калькуляторов.

В любом случае, если школьник получает возможность свое решение проверить - это отлично, а не должно подвергаться гонениям.

При подготовке к экзамену — да, эта возможность полезна, но, как видим, пихать это в компилятор паскаля совершенно незачем, поскольку это имеется в стандартной поставке современной операционной системы.

Да, А если есть - оставляет за собой право переместить участок занятой памяти в другое место. Но указтели он править не будет при этом.

Так это же дырища размером с Марс. Вам нужно или как-то костылить возможность создания области памяти, которая гарантированно не будет перемешиваться и разрешать указатели только на неё, или сделать так что бы код с указателями не компилировался без специальной директивы типа {$mode UnsafeBrokenPointersDoNotUse}

2048 — игру с такими правилами хоть на PDP-7 можно было бы написать, но появилась она сравнительно недавно.

Не только дольше. Как считаете, какой процент школьников Ваш код сможет понять, не говоря о том, чтобы такое написать? Пока что в школах все же больше Windows используюется, чем клоны *nix, так что Ваш пример, увы, массовым не является. Это первое. И второе - в Вашем решении FPC используется фактически как оболочка, просто создавая некую видимость своего использования. А предлагалось иное - показать как реализовать решение задачи средствами FPC в его стандартной поставке. А так - устроить внешний вызов - с таким же успехом можно загрузить Photoshop какой-нибудь и объявить, что FPC работает с растровой графикой.

2 лайка

Как считаете, какой процент школьников Ваш код сможет понять, не говоря о том, чтобы такое написать?

Ещё раз и медленно: школьнику эту задачу не следует решать с помощью компьютера. А проверить себя, после решения её нормальным способом, будет проще всего на калькуляторе.

А предлагалось иное - показать как реализовать решение задачи средствами FPC в его стандартной поставке.

Вы мне предложили забить микроскопом гвоздь. Я привязал к микроскопу молоток. Теперь вы говорите “нет, забейте гвоздь именно самим микроскопом”.

Вначале я хочу получить ответ на вопрос: какая мне будет польза, если я это сделаю? Цель-то какая?

Вот репетиторы по информатике в один голос говорят, что следует именно на компьютере и приводят варианты решения. Но Ваше мнение, конечно, важнее, да? Не гвоздь я предложил забить Вам, а показать, как школьник в условиях экзамена, когда важно сэкономить каждую минуту, может использовать компьютер и быстро получить надежный результат, если у него там FPC. Потому что на Пайтоне он это решит именно так, одной-двумя строками, а если в Паскале не будет аналогичного средства, учебные заведения отвернутся от него и вот тогда язык действительно умрет. Сейчас PascalАВС.NЕТ успешно конкурирует с Пайтоном. Вы предлагаете ограничиться FPC? Ну поинтересуйтесь, что о нем говорят учителя и дети.

Я мог бы точно так же взять любую другую задачу из ЕГЭ и точно так же Вы бы развели демагогию про “это надо головой”, “это нужно самому”, “это нужно на FPC решать” и прочее.

2 лайка

Что считать стандартной поставкой? Ядро ОС считать? А без него FPC не запустится. А если ядро считать, значит можно считать и утилиты, входящие в базовую поставку ОС, в том числе shell и bc.

uses
	math;
var
	expr: int64;
	dig6: int64;
begin
	expr := 49 ** 7 + 7 ** 21 - 7;
	dig6 := 0;
	while expr > 0 do begin
		if expr mod 7 = 6 then
			inc(dig6);  
		expr := expr div 7;
	end;
	writeln(dig6); 
end.

Ну, пожалуйста. Только смысл? Всё равно в уме/на бумаге подобные задачи решить проще, чем написать код, что на FPC, что на ABC, что на Python. Вы это никак не опровергли.

На ЕГЭ по информатике среды программирования даются школьникам именно для решения задач, где программирование предусмотрено заданием, а таких там 2-4 штуки, где-то в конце. Это те, где надо прочитать текствые файлы и подобные.

Стандартная поставка ОС - то, что будет в ней после ее установки.с дистрибутива. Стандартная поставка FPC - все, что будет в нем после инсталляции.

А что тут опровергать? Код сам за себя скажет.

## uses School;
ToBase(49bi ** 7 + 7bi ** 21 - 7, 7).CountOf('6').Print

Если человек утверждает, что решать задачу в уме/на бумаге для школьника быстрее, чем набрать пару строк приведенного выше кода - он совершенно не представляет себе нынешних школьников. Да и не только школьников. К тому же, такое решение - гарантия того, что ответ верный. В отличие от того, что он там вручную нарешает…

Это домыслы Ваши. Компьютер дается на период всего экзамена и как им будет пользоваться школьник - его личное дело. Об этом ясно и открыто говорили представители ФИПИ.

Стандартная поставка ОС - то, что будет в ней после ее установки.с дистрибутива. Стандартная поставка FPC - все, что будет в нем после инсталляции.

Но в FPC ничего не будет если его пытаться установить на компьютер без ОС. Вы просто не сможете его установить. Следовательно, всё что есть в стандартной поставке ОС, плюс зависимости самого FPC входит в ожидаемые после установки компоненты. То есть, использовать в коде компоненты системы, входящие в её стандартную поставку (включая, но не ограничиваясь, bc, wc и tr) — можно.

А что тут опровергать? Код сам за себя скажет.

Я этот код уже видел. Ничего он не говорит. В школе преподают именно сам язык Паскаль как таковой. А этот код написан не на паскале. В нём собственно ничего общего с языком Паскаль нету, даже слов begin и end.

чем набрать пару строк приведенного выше кода

Чтобы его набрать, нужно быть экспертом ABC как такового. Вот вы, как постоянный посетитель этого форума и автор книг по ABC, такое набрать можете, а средний школьник — не сможет.

Это домыслы Ваши. Компьютер дается на период всего экзамена и как им будет пользоваться школьник - его личное дело. Об этом ясно и открыто говорили представители ФИПИ.

Одно никак не противоречит другому. Компьютер даётся именно для решения нескольких конкретных задач ближе к концу экзамена. Но использовать его для решения и остальных задач тоже — не запрещено. Просто бессмысленно, поскольку в уме проще.