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
заявление
цикл 10 do
Write ( '*' ) ;
• for
петля с шагом
для var i := от 1 до 20, шаг 2 do
Print ( i ) ;
• foreach
цикл с индексом
foreach var c in Arr ( 'a' .. 'z' ) index я делаю
, если я mod 2 = 0 , то
Print ( c ) ;
• a..b
диапазоны
( 1 .. 10 ) . Линии печати
• краткий синтаксис определения функции
функция Sum ( a , b : вещественный ) := a + b ;
• реализация метода может быть помещена внутри определения класса
тип Point = класс
x , y : реальный ;
процедура Выход ;
начать
печать ( x , y ) ;
конец ;
конец ;
• sequence of T
тип как абстракция массивов, списков и наборов
var seq : последовательность целых чисел := Arr ( 1 .. 10 ) ;
след . Печатьln ;
последовательность := Lst ( 11 .. 100 ) ; след . Печатьln ;
seq := HSet ( 1 .. 20 ) ; след . Печатьln ;
var a := ArrGen ( 10 , я -> я * я ) ;
• автоклассы — классы с автоматически сгенерированным конструктором.
тип Point = автоматический класс
x , y : реальный ;
конец ;
var p := новая точка ( 2 , 5 ) ;
• срезы одномерных и многомерных массивов
var m : массив [ , ] целых чисел := MatrGen ( 3 , 4 , ( i , j ) -> i + j + 1 ) ;
Println ( м ) ; // [[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] : анонимную функцию Переменной такого типа можно присвоить
## // означает, что основная программа будет написана без включения начала и конца
var f : Real -> Real := x -> x * x ;
Вот пример суперпозиции двух функций:
##
функция Super < T , T1 , T2 > ( f : T1 -> T2 ; g : T -> T1 ) : T -> T2 := x -> f ( g ( x ) ) ;
var f : реальный -> реальный := x -> x * x ;
вар fg := Супер ( f , Sin ) ;
вар гф := Супер ( Грех , ж ) ;
Распечатать ( фг ( 2 )) ;
Распечатать ( gf ( 2 )) ;
Операция суперпозиции определена в стандартной библиотеке:
##
var f : real -> real := x -> x * x ;
Распечатать (( f * Cos )( 2 )) ;
Распечатать (( 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 [ править ]
начать
var ( a , b ) := ReadInteger2 ; // считываем входные данные в кортеж из двух переменных
var sum := 0 ; // тип автовывода
для var i := от a до b do
sum += i * i ;
Print ( $ 'Sum = {sum}' ) //
окончание интерполяции строки .
Процедурный стиль [ править ]
функция SumSquares ( a , b : целое число ) : целое число ;
начать
Результат := 0 ;
для var i := от a до b do
Result += i * i
end ;
начать
var ( a , b ) := ReadInteger2 ;
Print ( $ 'Sum = {SumSquares(a,b)}' )
end .
Функциональный стиль [ править ]
В этом решении используются методы расширения .NET для последовательностей и диапазон, специфичный для PascalABC.NET. (a..b)
.
начать
var ( a , b ) := ReadInteger2 ;
( а .. б ) . Сумма ( х -> х * х ) . Печать // цепочка методов с лямбда-выражениями
end .
Объектно-ориентированный стиль [ править ]
Это решение демонстрирует стиль определения коротких функций, специфичный для PascalABC.NET.
тип Алгоритмы = класс
статическая функция SumSquares ( a , b : целое число ) := ( a .. b ) . Сумма ( х -> х * х ) ;
статическая функция SumCubes ( a , b : целое число ) := ( a .. b ) . Сумма ( х -> х * х * х ) ;
конец ;
начать
var ( a , b ) := ReadInteger2 ;
Println ( $ 'Squares sum = {Algorithms.SumSquares(a,b)}' ) ;
Println ( $ 'Cubes sum = {Algorithms.SumCubes(a,b)}' )
end .
Близко к обычному стилю C# [ править ]
Можно писать программы без использования стандартной библиотеки PascalABC.NET. Все стандартные классы и методы .NET Framework можно использовать напрямую.
использует систему ; // использование системного пространства имен .NET
start
var arr := Console . ЧитатьЛайн . Split (
новый символ []( '' ) ,
StringSplitOptions . RemoveEmptyEntries
) ;
var ( a , b ) := ( целое число . Разбор ( arr [ 0 ]) , целое число . Разбор ( arr [ 1 ])) ;
вар сумма := 0 ;
для var i := от a до b do
sum += i * i ;
Консоль . 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 .
- ^ Перейти обратно: а б Поляков Константин. «Доклады на конференциях и семинарах» (на русском языке).
- ^ Перейти обратно: а б с д Богданов, Алексей (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).
- ^ Перейти обратно: а б Дженжер, В.О.; Денисова, Л.В. (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.
- ^ «Практика в Паскале» . YouTube . 21 января 2020 г.
- ^ «Менгеналь ПаскальABC.NET» . Архивировано из оригинала 10 августа 2022 года . Проверено 8 апреля 2023 г.
- ^ «УЧЕБНИК ПАСКАЛЬ И ДЕЛЬФИ» . YouTube . 12 июня 2022 г.
- ^ «PascalABC.NET. Что нового» . PascalABC.NET (на русском языке) . Проверено 9 апреля 2023 г.
- ^ Embarcadero Technologies (21 ноября 2018 г.). «Посмотрите, что нового в RAD Studio 10.3» . YouTube .
- ^ «Справка по 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» . YouTube . Проверено 4 апреля 2023 г.
- ^ «Delphi Boot Camp 2022 — Delphi и функциональное программирование с использованием анонимных методов» . YouTube . Проверено 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 г.). «Первый спор о языке программирования: окончательное решение» . YouTube . ДжетБрэйнс.
- ^ Поляков, Константин (24 августа 2021 г.). «Новые возможности в PascalABC.NET» (на русском языке).
- ^ Михалкович, Станислав (22 ноября 2021 г.). «Сравнение Python и PascalABC.NET» . YouTube .
- ^ 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
- Бесплатные интегрированные среды разработки