PascalABC.NET
![]() | |
Парадигма | Мультипарадигмальность : процедурная , функциональная , объектно-ориентированная , универсальная. |
---|---|
Разработано | Команда компиляторов PascalABC.NET |
Впервые появился | 2007 г |
Стабильная версия | 3.8.3.3255
/ 4 апреля 2023 г |
Дисциплина набора текста | Статический , частично выведенный |
Язык реализации | PascalABC.NET |
ТЫ | Кросс-платформенный |
Лицензия | LGPLv3 |
Расширения имен файлов | .нет |
Веб-сайт | паскалабк |
Под влиянием | |
Delphi , Паскаль , Oxygene , C# , Python , Котлин , Хаскелл |
PascalABC.NET — это высокого уровня, общего назначения язык программирования поддерживающий множество парадигм. PascalABC.NET основан на Delphi , Object Pascal но также имеет влияние C# , Python , Kotlin и Haskell . Он распространяется как в виде инструмента командной строки для Windows ( .NET framework), Linux и MacOS (Mono), так и с интегрированной средой разработки для Windows и Linux, включающей интерактивный отладчик, IntelliSense систему , дизайнер форм , шаблоны кода и код. автоформатирование.
PascalABC.NET реализован для платформы .NET Framework, поэтому он совместим со всеми библиотеками .NET и использует все функции Common Language Runtime , такие как сбор мусора , обработка исключений и дженерики . Некоторые конструкции языка, например кортежи, последовательности и лямбды, основаны на обычных типах .NET. PascalABC.NET идеологически близок к Oxygene , но в отличие от него обеспечивает высокую совместимость с Delphi .
История PascalABC.NET [ править ]
PascalABC.NET был разработан группой энтузиастов Института математики, механики и информатики в Ростове-на-Дону, Россия. [1] В 2003 году доцентом Станиславом Михалковичем был реализован предшественник современного PascalABC.NET, названный Pascal ABC, для использования в обучении школьников вместо Turbo Pascal , который устарел и был несовместим с современными операционными системами, но все еще использовался в образовательных целях. . Pascal ABC был реализован как интерпретируемый язык программирования , что привело к значительному снижению производительности. Спустя четыре года он был полностью переписан студентами Иваном Бондаревым, Александром Ткачуком и Сергеем Ивановым как компилируемый язык программирования для платформы .NET. В 2009 году PascalABC.NET начал активно использоваться для обучения старшеклассников. К 2015 году количество пользователей языка значительно увеличилось. Его начали активно использовать по всей России в школах и на олимпиадах по программированию, превосходя Free Pascal . С тех пор разработчики PascalABC.NET поставили перед собой цель активно внедрять в язык современные функции. В том же году PascalABC.NET стал проектом с открытым исходным кодом, распространяемым под лицензией Меньшая стандартная общественная лицензия GNU (LGPLv3). [2] [3]
В 2017 году [4] и 2022 год, [5] независимый аудит публичного репозитория PascalABC.NET проведен . По результатам статической проверки были перечислены потенциально опасные фрагменты кода, требующие дополнительного анализа со стороны разработчиков. Также было отмечено, что общее качество кода можно улучшить. Для этого следует исключить дублирование кода и избыточные проверки, а рефакторинг проводить более тщательно.
Использование в школе и высшем образовании [ править ]
Созданный для образования, PascalABC.NET остается самым распространенным языком программирования в российских школах и одним из рекомендуемых языков для сдачи Единого государственного экзамена по информатике. [6] [7] [8] В Южном федеральном университете он используется как первый язык при обучении студентов по специальности «Информатика», а также при обучении детей в одной из крупнейших компьютерных школ России. [9] PascalABC.NET широко используется в качестве базового языка программирования в педагогических вузах для подготовки преподавателей информатики. [10] [11] [12] [13] Он также служит инструментом для научных вычислений. [14] [15] PascalABC.NET также встроен в ряд систем проверки, используемых для соревнований по программированию. [16] [17]
В 2020 году, во время карантина из-за COVID-19 и периода домашнего обучения, веб-сайт PascalABC.NET занял 3-е место. р-д в рейтинге трафика Яндекса в категории «Программирование», а количество скачиваний установочного комплекта превысило 10 000 в день. [18]
Хотя ядро сообщества PascalABC.NET находится в России, этот язык известен и в других странах, таких как Беларусь, [19] Румыния, [20] Индонезия, [21] Алжир. [22]
Синтаксис языка [ править ]
Различия между Delphi и PascalABC.NET [ править ]
Новые возможности [ править ]
• loop
заявление
loop 10 do
Write('*');
• for
петля с шагом
for var i:=1 to 20 step 2 do
Print(i);
• foreach
цикл с индексом
foreach var c in Arr('a'..'z') index i do
if i mod 2 = 0 then
Print(c);
• a..b
диапазоны
(1..10).Printlines
• краткий синтаксис определения функции
function Sum(a,b: real) := a + b;
• реализация метода может быть помещена внутри определения класса
type Point = class
x,y: real;
procedure Output;
begin
Print(x,y);
end;
end;
• sequence of T
тип как абстракция массивов, списков и наборов
var seq: sequence of integer := Arr(1..10);
seq.Println;
seq := Lst(11..100); seq.Println;
seq := HSet(1..20); seq.Println;
var a := ArrGen(10,i -> i*i);
• автоклассы — классы с автоматически сгенерированным конструктором.
type Point = auto class
x,y: real;
end;
var p := new Point(2,5);
• срезы одномерных и многомерных массивов
var m: array [,] of integer := MatrGen(3,4, (i,j) -> i+j+1);
Println(m); // [[1,2,3,4],[2,3,4,5],[3,4,5,6]]
Println(m[:2,1:3]); // [[2,3],[3,4]]
Некоторые другие функции, такие как встроенные объявления переменных, вывод типов и for
оператор с объявлением переменной являются стандартными в текущей версии Delphi. Однако PascalABC.NET впервые ввел эти функции в 2007 году. [23] а в Delphi они были реализованы в 2018 году. [24] [25]
Измененные функции [ править ]
- струны в
case
заявления - наборы на основе произвольного типа:
set of string
- конструкторы можно вызывать с помощью
new T(...)
синтаксис - введите методы расширения вместо помощников класса
- модули могут быть определены в упрощенной форме (без
interface
иimplementation
разделы)
Не реализованные функции [ править ]
- записи с вариантными частями
- открытые массивы
- определения вложенных классов
- встроенный ассемблерный код
Функциональные особенности стиля [ править ]
В PascalABC.NET функции являются объектами первого класса . Их можно присваивать переменным, передавать в качестве параметров и возвращать из других функций. Тип функции задается в виде T -> Res
. [26] : анонимную функцию Переменной такого типа можно присвоить
## // denotes that the main program will be written without enclosing begin-end
var f: real -> real := x -> x*x;
Вот пример суперпозиции двух функций:
##
function Super<T,T1,T2>(f: T1 -> T2; g: T -> T1): T -> T2 := x -> f(g(x));
var f: real -> real := x -> x*x;
var fg := Super(f,Sin);
var gf := Super(Sin,f);
Print(fg(2));
Print(gf(2));
Операция суперпозиции определена в стандартной библиотеке:
##
var f: real -> real := x -> x*x;
Print((f*Cos)(2));
Print((Cos*f)(2));
В книге «Как эффективно программировать на Delphi» [27] и в соответствующих видеоуроках, [28] [29] Доктор Кевин Бонд, программист и специалист по преподаванию информатики, [30] отмечает, что PascalABC.NET обладает мощными возможностями функционального программирования, которых нет в Delphi. В качестве примера частичное применение функции : демонстрируется
begin
var f: integer -> integer -> integer := x -> y -> x + y;
Writeln(f(2)(6));
end.
Примеры кода [ править ]
PascalABC.NET — это мультипарадигмальный язык программирования. Это позволяет использовать различные стили кодирования от олдскульного Паскаля до функционального и объектно-ориентированного программирования. Одну и ту же задачу можно решить в разных стилях следующим образом: [31]
Обычный стиль PascalABC.NET [ править ]
begin
var (a,b) := ReadInteger2; // read input into tuple of two variables
var sum := 0; // type auto-inference
for var i:=a to b do
sum += i*i;
Print($'Sum = {sum}') // string interpolation
end.
Процедурный стиль [ править ]
function SumSquares(a,b: integer): integer;
begin
Result := 0;
for var i := a to b do
Result += i * i
end;
begin
var (a,b) := ReadInteger2;
Print($'Sum = {SumSquares(a,b)}')
end.
Функциональный стиль [ править ]
В этом решении используются методы расширения .NET для последовательностей и диапазон, специфичный для PascalABC.NET. (a..b)
.
begin
var (a,b) := ReadInteger2;
(a..b).Sum(x -> x*x).Print // method chaining with lambda expressions
end.
Объектно-ориентированный стиль [ править ]
Это решение демонстрирует стиль определения коротких функций, специфичный для PascalABC.NET.
type Algorithms = class
static function SumSquares(a,b: integer) := (a..b).Sum(x -> x*x);
static function SumCubes(a,b: integer) := (a..b).Sum(x -> x*x*x);
end;
begin
var (a,b) := ReadInteger2;
Println($'Squares sum = {Algorithms.SumSquares(a,b)}');
Println($'Cubes sum = {Algorithms.SumCubes(a,b)}')
end.
Близок к обычному стилю C# [ править ]
Можно писать программы без использования стандартной библиотеки PascalABC.NET. Все стандартные классы и методы .NET Framework можно использовать напрямую.
uses System; // using .NET System namespace
begin
var arr := Console.ReadLine.Split(
new char[](' '),
StringSplitOptions.RemoveEmptyEntries
);
var (a,b) := (integer.Parse(arr[0]),integer.Parse(arr[1]));
var sum := 0;
for var i:=a to b do
sum += i*i;
Console.WriteLine($'Sum = {sum}')
end.
Критика [ править ]
Хотя PascalABC.NET активно используется для обучения учителей, [7] [10] [32] [33] некоторые члены преподавательского сообщества игнорируют разницу между исторически использовавшимся Turbo Pascal и PascalABC.NET, критикуя некий неуказанный язык «Паскаль» за то, что он далек от современного программирования, слишком многословен и недостаточно прост, чтобы его можно было использовать в качестве первого языка программирования. [34] [35] Они считают Python лучшей отправной точкой, поскольку он более краток и практически применим. Их оппоненты, в том числе сами разработчики PascalABC.NET, утверждают, что ставить знак равенства между классическим Pascal и PascalABC.NET неверно, поскольку последний содержит множество современных мультипарадигмальных возможностей, в том числе из Python. [8] [36] [37] PascalABC.NET позволяет учащимся писать такие же краткие и выразительные программы, как Python, [38] и действует как «мост к производственному программированию», применяя концепцию статической типизации. [8] PascalABC.NET также является компилируемым языком, что облегчает изучение программирования, поскольку все семантические ошибки обнаруживаются во время компиляции, а не происходят непредсказуемо во время выполнения. [8] [39]
Ссылки [ править ]
- ^ Osipov, Alexander V. (2019). PascalABC.NET: Vvedenie v sovremennoe programmirovanie [PascalABC.NET: Introduction to Modern Programming] (in Russian). Rostov-on-Don, Russia. p. 28.
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка ) - ^ «Подкаст «Витая пара, №389»» . Подкаст «Витая пара» (на русском языке). 30 марта 2021 г.
- ^ Bondarev, Ivan V.; Belyakova, Yulia V.; Mikhalkovich, Stanislav S. (24 April 2013). "PascalABC.NET programming system: 10 years of development" (PDF) . PascalABC.NET . Retrieved 9 April 2023 .
- ^ «Анализ PascalABC.NET с помощью плагинов SonarQube: SonarC# и PVS-Studio» . ПВС-Студия . 29 марта 2017 г.
- ^ «Перепроверка PascalABC.NET» . Середина . 11 февраля 2022 г.
- ^ "Metodicheskie rekomendacii po podgotovke i provedeniyu edinogo gosudarstvennogo ekzamena po informatike i IKT v komp'yuternoj forme v gorode Moskve v 2021 godu [Guidelines for the preparation and conduct of the unified state exam in computer science and ICT in the city of Moscow in 2021]" (PDF) (in Russian). Departament obrazovaniya i nauki goroda Moskvy [Department of Education and Science of Moscow]. p. 110. Archived from the original (PDF) on 28 January 2022 . Retrieved 5 April 2023 .
- ^ Jump up to: Перейти обратно: а б Поляков Константин. «Доклады на конференциях и семинарах» (на русском языке).
- ^ Jump up to: Перейти обратно: а б с д Богданов, Алексей (4 октября 2022 г.). «PascalABC.Net или Python/C#/C++» . Ютуб (на русском языке) . Проверено 5 апреля 2023 г.
- ^ Popova, Ekaterina (6 September 2022). "Kak v Rostove gumanitarii uspeshno obuchayutsya IT-special'nostyam [How humanitarians successfully study IT specialties in Rostov]" . Komsomolskaya Pravda (in Russian).
- ^ Jump up to: Перейти обратно: а б Дженжер, В.О.; Денисова, Л.В. (2019). «Математическая анимация в компьютерном моделировании в школе» . Информатика в школе (на русском языке) (6): 51–54. дои : 10.32517/2221-1993-2019-18-6-51-54 . S2CID 203704481 .
- ^ Дженжер, В.О.; Денисова, Л.В. (2021). «Реализация кода Хэмминга на PascalABC.NET при изучении теоретических основ информатики» . Информатика в школе . 1 (9): 29–38. дои : 10.32517/2221-1993-2021-20-9-27-36 . S2CID 245473319 .
- ^ Дженжер, В.О.; Денисова, Л.В. (2020). «Научная графика в PascalABC.NET: построение графиков функций в прямоугольной декартовой системе координат» . Информатика в школе (на русском языке) (1): 31–39. дои : 10.32517/2221-1993-2020-19-1-31-39 . S2CID 215844807 .
- ^ Кулабухов, С.Ю. (2021). «Математическое моделирование на уроках информатики с использованием численного решения дифференциальных уравнений» . Информатика в школе (на русском языке) (2): 14–21. дои : 10.32517/2221-1993-2021-20-2-14-21 . S2CID 235541530 .
- ^ Хазиева, RT; Иванов, доктор медицинских наук (2020). «Выбор оптимальных параметров устройства для генерации постоянного магнитного поля» . Энергетика: исследования, оборудование, технологии (на русском языке). 22 (6): 176–187. дои : 10.30724/1998-9903-2020-22-6-176-187 . S2CID 233658494 .
- ^ Лукьянов О.Е.; Золотов, Д.В. (2021). «Методическое обеспечение подготовки конструкторов и операторов БПЛА» . ВЕСТНИК Самарского университета. Аэрокосмическая промышленность и машиностроение (на русском языке). 20 (1): 14–28. дои : 10.18287/2541-7533-2021-20-1-14-28 . S2CID 236617894 .
- ^ «Олимпиадная система ACMP» . Архивировано из оригинала 27 марта 2023 года . Проверено 5 апреля 2023 г.
- ^ «Список составителей конкурсов Яндекса» . Конкурс Яндекс . Архивировано из оригинала 14 марта 2023 года . Проверено 5 апреля 2023 г.
- ^ Kubysheva, Olga (17 April 2020). "PascalABC.NET: Sajt sistemy programmirovaniya, razrabatyvaemoj na mekhmate YUFU, podnyalsya v rejtinge YAndeksa na tret'e mesto [PascalABC.NET: Site of programming system developed at SFedU MMCS faculty climbed up to the third place in Yandex ranking]" . Komsomol'skaya pravda (in Russian).
- ^ Kutysh, Aleksandr Z. (2018). "Razrabotka soderzhaniya vzaimosvyazannogo obucheniya budushchih uchitelej informatiki tekhnologiyam programmirovaniya [Development of interconnected training content for future computer science teachers in programming]" (PDF) . Pedagogical Science and Education (in Russian) (3): 44–52.
- ^ «Практика в Паскале» . Ютуб . 21 января 2020 г.
- ^ «Менгеналь ПаскальABC.NET» . Архивировано из оригинала 10 августа 2022 года . Проверено 8 апреля 2023 г.
- ^ «УЧЕБНИК ПАСКАЛЬ И ДЕЛЬФИ» . Ютуб . 12 июня 2022 г.
- ^ «PascalABC.NET. Что нового» . PascalABC.NET (на русском языке) . Проверено 9 апреля 2023 г.
- ^ Embarcadero Technologies (21 ноября 2018 г.). «Посмотрите, что нового в RAD Studio 10.3» . Ютуб .
- ^ «Справка по RAD Studio 10.3 Rio. Что нового» . Эмбаркадеро. Wiki-документация по продукту . Проверено 9 апреля 2023 г.
- ^ Osipov, Alexander V. (2019). PascalABC.NET: Vvedenie v sovremennoe programmirovanie [PascalABC.NET: Introduction to Modern Programming] (in Russian). Rostov-on-Don, Russia. pp. 116–120.
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка ) - ^ Кевин Р. Бонд (2021). «Глава 44. Анонимные методы». Как эффективно программировать на Delphi для компьютерных наук уровня AS/A . Educational Computing Services Ltd. ISBN компании 9780992753603 .
- ^ Кевин Бонд. «Как эффективно программировать на Delphi. Урок 44. Часть 1» . Ютуб . Проверено 4 апреля 2023 г.
- ^ «Delphi Boot Camp 2022 — Delphi и функциональное программирование с использованием анонимных методов» . Ютуб . Проверено 4 апреля 2023 г.
- ^ «Краткая биография доктора Кевина Р. Бонда» (PDF) . ООО «Образовательные вычислительные услуги» .
- ^ «Стили программирования PascalABC.NET» . Проверено 9 апреля 2023 г.
- ^ Дженжер, В.О.; Денисова, Л.В. (2022). «Динамические массивы и списки в PascalABC.NET» . Информатика в школе (на русском языке) (1): 67–80. дои : 10.32517/2221-1993-2022-21-1-67-80 . S2CID 249662060 .
- ^ "Nauchno-metodicheskaya konferenciya «Ispol'zovanie sistemy programmirovaniya PascalABC.NET v obuchenii programmirovaniyu» (29-30 marta 2023 g.) [Scientific and methodical conference "Using PascalABC.NET programming system in teaching programming" (March 29-30, 2023)]" . Institute of Mathematics, Mechanics, and Computer Science (in Russian) . Retrieved 10 April 2023 .
- ^ Панова, ИВ; Коливник, А.А. (2020). «Методические аспекты преподавания программирования на Python в школьном курсе информатики». Информатика в школе (на русском языке) (6): 47–50. дои : 10.32517/2221-1993-2020-19-6-47-50 . S2CID 225133880 .
- ^ «Что не так с современным преподаванием информатики» . Хабр (на русском). 28 мая 2021 г. Проверено 8 апреля 2023 г.
- ^ Брагилевский, Виталий (14 апреля 2020 г.). «Первый спор о языке программирования: окончательное решение» . Ютуб . ДжетБрэйнс.
- ^ Поляков, Константин (24 августа 2021 г.). «Новые возможности в PascalABC.NET» (на русском языке).
- ^ Михалкович, Станислав (22 ноября 2021 г.). «Сравнение Python и PascalABC.NET» . Ютуб .
- ^ Osipov, Alexander V. (2020). PascalABC.NET: vybor shkol'nika. CHast' 1. [PascalABC.NET: Schoolchildren's Choice. Part 1] (in Russian) (2nd ed.). Southern Federal University. pp. 16–19.
Внешние ссылки [ править ]
- Объектно-ориентированные языки программирования
- Языки программирования на основе классов
- Языки программирования .NET
- Компиляторы Паскаля (языка программирования)
- Семейство языков программирования Паскаль
- Образовательные языки программирования
- Статически типизированные языки программирования
- Интегрированные среды разработки Linux
- Бесплатные интегрированные среды разработки