PascalABC.NET: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Miks2012 (обсуждение | вклад) |
Нет описания правки |
||
(не показаны 373 промежуточные версии, сделанные более чем 100 участниками) | |||
Строка 1: | Строка 1: | ||
{{Карточка языка программирования |
{{Карточка языка программирования |
||
| name = PascalABC |
| name = PascalABC.NET |
||
| class = [[компилятор]] |
| class = [[компилятор]] |
||
| semantics = [[Императивное программирование|императивная]] |
| semantics = [[Императивное программирование|императивная]] |
||
| paradigm = [[Мультипарадигменный язык программирования|мультипарадигменный]]: [[Структурное программирование|структурное]], [[Объектно-ориентированное программирование|объектно-ориентированное]], [[обобщённое программирование|обобщённое]], [[процедурное программирование]], [[функциональное программирование]] |
| paradigm = [[Мультипарадигменный язык программирования|мультипарадигменный]]: [[Структурное программирование|структурное]], [[Объектно-ориентированное программирование|объектно-ориентированное]], [[обобщённое программирование|обобщённое]], [[процедурное программирование]], [[функциональное программирование]] |
||
| year = |
| year = 2007 |
||
| designer = PascalABC.NET Compiler Team |
|||
| designer = [[Михалкович, Станислав Станиславович|С. С. Михалкович]], А. В. Ткачук, И. В. Бондарев, С. О. Иванов |
|||
| latest_release_version |
| latest_release_version = 3.10.0 сборка 3546 |
||
| latest_release_date |
| latest_release_date = 21.09.2024 |
||
<!-- | latest_preview_version = 1.6.0.417 |
|||
| latest_preview_date = 17.10.10--> |
|||
| typing = [[Статическая типизация|статическая]] |
| typing = [[Статическая типизация|статическая]] |
||
| implementations = PascalABC.NET |
| implementations = PascalABC.NET, <br />Pascal ABC (поддержка прекращена) |
||
| dialects = |
| dialects = |
||
| license |
| license = [[LGPL]] |
||
| influenced_by = [[Паскаль (язык программирования)|Паскаль]], [[Delphi (язык программирования)|Delphi]], [[C Sharp|C#]] |
| influenced_by = [[Паскаль (язык программирования)|Паскаль]], [[Delphi (язык программирования)|Delphi]], [[C Sharp|C#]], [[Python]], [[Kotlin]] |
||
| influenced = |
| influenced = |
||
| website |
| website = https://www.pascalabc.net |
||
| платформа = .NET CLR (WinXP и старше), Mono (Linux, MacOS) |
|||
}} |
}} |
||
'''PascalABC.NET''' |
'''PascalABC.NET''' — язык программирования [[Паскаль (язык программирования)|Паскаль]] нового поколения, включающий классический Паскаль, большинство возможностей языка [[Delphi (язык программирования)|Delphi]], а также ряд собственных расширений. Он реализован на платформе [[.NET Framework|Microsoft.NET]] и содержит все современные языковые средства: внутриблочные описания, автоопределение типа, [[Кортеж (информатика)|кортежи]], срезы, [[Класс (программирование)|классы]], [[перегрузка операторов|перегрузку операций]], [[Интерфейс (объектно-ориентированное программирование)|интерфейсы]], [[Обработка исключений|обработку исключений]], [[обобщённое программирование|обобщенные классы и подпрограммы]], [[Лямбда-выражение|лямбда-выражения]], средства [[Параллельное программирование|параллельного программирования]]. |
||
PascalABC.NET позиционируется разработчиками как язык программирования для сферы образования и научных исследований |
|||
== Предыстория. ''Pascal ABC'' == |
|||
Система создавалась на [[Факультет математики, механики и компьютерных наук ЮФУ|факультете математики, механики и компьютерных наук ЮФУ]] как учебная среда программирования (автор — [[доцент]] С. С. Михалкович). |
|||
PascalABC.NET является мультипарадигменным языком: на нём можно программировать в [[структурное программирование|структурном]], [[объектно-ориентированное программирование|объектно-ориентированном]] и [[функциональное программирование|функциональном]] стилях. |
|||
Система представляла из себя фактически [[интерпретатор]] языка программирования |
|||
[[Паскаль (язык программирования)|Паскаль]] с интегрированной оболочкой. |
|||
Язык, в основном, соответствовал входному языку [[Object Pascal]]. Некоторые возможности, например, записи с вариантами, опускались «как бесполезные». |
|||
Система ''Pascal ABC'' разрабатывалась в среде [[Delphi]] для [[операционная система|операционных систем]], использующих [[Win32 API]]. <!-- что означает в этом ориссе слово широкое? |
|||
При широком использовании системы невозможность создать исполняемый файл программы стала вызывать нарекания.--> |
|||
PascalABC.NET — это также простая и мощная интегрированная среда разработки, поддерживающая технологию [[IntelliSense]], содержащая средства автоформатирования, встроенный отладчик и встроенный дизайнер форм, функционирующая на [[Windows]] и [[Linux]] Кроме того, консольный компилятор PascalABC.NET функционирует на [[MacOS]] под [[Mono]]. |
|||
Несмотря на неполную реализацию языка, система стала удачной заменой уже давно устаревшей системе [[Turbo Pascal]] в первоначальном обучении [[Программирование|программированию]]. Уже с версии 2 ''Pascal ABC'' стал надёжной средой программирования для начинающих, имеющей практически полную реализацию [[Pascal]]. Система широко использовалась на [[Факультет математики, механики и компьютерных наук ЮФУ|мехмате ЮФУ]] как для обучения студентов, так и в работе Детской компьютерной школы мехмата ЮФУ<ref name=autogenerated1>[http://sunschool.mmcs.sfedu.ru/8-stranitsy-na-sajte/5-pabc Система программирования Pascal ABC]</ref>. Её использование также отмечалось в ряде средних школ [[Ростов-на-Дону|Ростова-на-Дону]]. Благодаря созданию сайта системы ''Pascal ABC'' её использование существенно расширилось, система стала известна за пределами [[Ростов-на-Дону|Ростова-на-Дону]], как учебную систему её использовали во многих регионах [[Содружество Независимых Государств|СНГ]]. В каталоге Soft@[[Mail.ru]] программа ''Pascal ABC'' в 2006 году признавалась программой недели<ref>[http://soft.mail.ru/program_week_archive.php Программы недели -> программирование]</ref>. |
|||
== История развития == |
|||
Система ''Pascal ABC'' с сентября [[2007 год]]а не развивается и не поддерживается, однако её страница<ref name=autogenerated1 /> продолжает функционировать и с этой страницы можно загрузить ''Pascal ABC'' версии 3.0.1. |
|||
В 2003 году на факультете математики, механики и компьютерных наук [[Южный федеральный университет|ЮФУ]] была создана учебная среда программирования Pascal ABC. Система представляла собой интегрированную оболочку со встроенным [[интерпретатор]]ом языка программирования Паскаль, близкого к языку Delphi. Несмотря на неполную реализацию языка, она стала удачной заменой устаревшей системе [[Turbo Pascal]] в первоначальном обучении программированию. Как учебную систему её использовали во многих регионах [[Содружество Независимых Государств|СНГ]]. |
|||
== ''PascalABC.NET'' == |
|||
{{External media |
{{External media |
||
|align = right |
|align = right |
||
|image1 = [http://pascalabc.net/pabcnet/screenshots2010/sc1c.png Внешний вид программы.] |
|image1 = [http://pascalabc.net/pabcnet/screenshots2010/sc1c.png Внешний вид программы.] |
||
}} |
}} |
||
=== История развития === |
|||
В [[2005]]—[[2006]] система была полностью переработана: изменён язык реализации — на [[C Sharp|C#]], и изменена её архитектура — на полноценный компилятор языка [[Delphi (язык программирования)|Delphi]] с расширениями, связанными с платформой [[Microsoft.NET|.NET]]. Новая система получила название ''PascalABC.NET''. |
|||
В июне [[2009 год]]а появилась стабильная версия 1.2 (1.2.0.325) ''PascalABC.NET''. |
|||
В [[2005]]—[[2006 год]]ах система была полностью переработана: изменена её архитектура — на полноценный компилятор языка, близкого к [[Delphi (язык программирования)|Delphi]], с расширениями, связанными с платформой [[Microsoft.NET|.NET]]. Новая система получила название ''PascalABC.NET''. В июне [[2009 год]]а появилась первая стабильная версия ''PascalABC.NET'' 1.2. |
|||
Консольный компилятор PascalABC.NET функционирует на [[Linux]] и [[MacOS]] под [[Mono]], однако среда разработки не является кроссплатформенной. |
|||
В сентябре [[2009]] г. появилась веб-среда разработки WDE, не требующая установки PascalABC.NET на локальный компьютер и позволяющая запускать программы на PascalABC.NET непосредственно из окна браузера. Веб-среда разработки была закрыта в октябре 2017 года. |
|||
В [[2007]]—[[2008]] годах был зафиксирован интерес к системе ''PascalABC.NET'' из Болгарии {{Нет АИ|25|11|2012}} и других стран. |
|||
В августе [[2011]] г. осуществлен переход на [[.NET Framework#.NET Framework 4.0|.NET 4.0]] (версия 1.8). |
|||
В сентябре [[2009]] г. появилась веб-среда разработки<ref>[http://pascalabc.net/WDE/ PascalABC.Net web development environment (WDE)<!-- Заголовок добавлен ботом -->]</ref>, позволяющая запускать программы на PascalABC.NET непосредственно из окна браузера. Для зарегистрированных пользователей доступен личный файловый архив программ с возможностью навигации. В августе [[2010]] г. в WDE появилась возможность создавать простые графические приложения<ref>[http://pascalabc.net/obuchenie-programmirovaniiu/modul-grafiki-dlya-wde Модуль графики для WDE - Система программирования PascalABC.NET<!-- Заголовок добавлен ботом -->]</ref>. |
|||
В феврале [[2013]] г. вышла версия PascalABC.NET 2.0 с дизайнером форм и поддержкой проектов. |
|||
В августе [[2011]] г. осуществлен переход на [[.NET Framework#.NET Framework_4.0|.NET 4.0]] (версия 1.8). В январе [[2012]] г. веб-среда разработки WDE также была переведена на [[.NET Framework#.NET Framework_4.0|.NET 4.0]]. |
|||
15 мая [[2013]] г. вышла версия 2.1 с ''английской локализацией'' интерфейса и сообщений об ошибках. |
|||
С мая [[2012]] г. в веб-среду разработки добавлена поддержка компиляторов [[C Sharp|C#]], VB.NET, Iron Python и F#, в связи с чем она была переименована в '''ProgrammingABC.NET WDE'''. |
|||
15 февраля [[2014]] г. вышла версия PascalABC.NET 2.2. Многократно ускорено обращение к символам строки на запись. |
|||
28 августа 2015 г. вышла версия PascalABC.NET 3.0. PascalABC.NET стал свободным и распространяется под лицензией LGPLv3. |
|||
=== Особенности языка === |
|||
12 февраля 2016 г. вышла версия PascalABC.NET 3.1. Появились кортежи и срезы, значительно обновлена стандартная библиотека. |
|||
29 августа 2016 г. вышла версия PascalABC.NET 3.2. Появились операторы '''yield''' и '''yield sequence''', обновлена стандартная библиотека. |
|||
30 августа 2017 г. вышла версия PascalABC.NET 3.3. Появились стандартные модули '''GraphWPF''' и '''Graph3D''' (для Windows Vista и выше), упрощенный цикл '''loop,''' операция безопасного среза, кортежное присваивание, поддержка Nullable-типов. Добавлена украинская локализация интерфейса и сообщений об ошибках. |
|||
11 февраля 2018 г. вышла версия PascalABC.NET 3.3.5. Добавлен стандартный модуль '''NumLibABC''' (учебная библиотека численных методов), реализованы форматные строки и операция возведения в степень. В полную версию дистрибутива (для Windows Vista и выше) интегрирована .NET 4.7.1, для Windows XP оставлен дистрибутив с .NET 4.0. |
|||
25 мая 2018 г. вышла версия PascalABC.NET 3.4. Реализовано некоторое подмножество '''Pattern Matching''', расширенный оператор '''is'''. |
|||
1 сентября 2018 г. вышла версия PascalABC.NET 3.4.2. Реализованы расширенные свойства, расширенные индексные свойства и автосвойства, добавлен модуль '''WPFObjects''' как замена устаревшему ABCObjects. |
|||
25 мая 2019 г. вышла версия PascalABC.NET 3.5. В '''Pattern Matching''' добавлена возможность сопоставления со списками, кортежами и константами. |
|||
16 января 2020 г. вышла версия PascalABC.NET 3.6.0. Реализована операция <code>..</code>, возвращающая <code>IntRange</code> или <code>CharRange</code> в зависимости от контекста, а также условная операция: <code>'''var''' min := '''if''' a < b '''then''' a '''else''' b;</code> |
|||
7 мая 2020 г. вышла версия PascalABC.NET 3.6.3. Реализована операция доступа по индексу с конца <code>a[^1]</code> для массивов, списков и строк. Реализована возможность использовать срезы в левой части оператора присваивания: <code> a[:2] := a[3:5]</code>. Значительно ускорен перенаправленный ввод |
|||
8 августа 2020 г. вышла версия PascalABC.NET 3.7. Реализованы распаковка последовательности в переменные, массивы-значения в виде <code>|1,3,5,7,9|</code>, запись программ без внешнего <code>begin-end</code> с использованием <code>##</code> (<code>## Print(2*2)</code>) |
|||
7 марта 2021 г. вышла версия PascalABC.NET 3.8. Реализованы расширенный оператор <code>foreach</code> (<code>'''foreach var''' (x,y) '''in''' a</code>), литералы для <code>BigInteger</code> в виде <code>1bi</code>, срезы многомерных массивов в виде <code>m[:,:]</code>, <code>m[^1,:]</code>, лямбда-выражения с распаковкой параметров (<code>s.Where(\(name,age) -> age >= 18)</code>). |
|||
24 августа 2021 г. вышла версия PascalABC.NET 3.8.1. Реализован атрибут [Cache] для кеширования результатов функции, полноценная директива {$zerobasedstrings}, стандартный модуль PlotWPF. |
|||
9 марта 2022 г. вышла версия PascalABC.NET 3.8.3. Реализованы конструкции <code>'''for var''' i:=1 '''to''' 6 '''step''' 2 '''do'''</code> и <code>'''foreach var''' x '''in''' a '''index''' i '''do'''</code> |
|||
10 июля 2023 г. вышла версия PascalABC.NET 3.9.0. Реализована ковариантность параметров обобщенных типов, именованные аргументы. Реализована Linux-версия IDE. Добавлен стандартный модуль LightPT легковесной автоматической проверки заданий. |
|||
== Особенности языка == |
|||
=== Расширения языка Паскаль === |
|||
* Операторы <code>+= -= *= /=</code> |
* Операторы <code>+= -= *= /=</code> |
||
* Операция <code>**</code> для возведения в степень |
|||
* Внутриблочные описания переменных |
* Внутриблочные описания переменных |
||
* Описание переменных в заголовке цикла <code>'''for'''</code> |
* Описание переменных в заголовке цикла <code>'''for'''</code> |
||
* Инициализация переменной при |
* Инициализация переменной при описании (<code>'''var''' n: integer := 10;</code>) |
||
* Автоопределение типа переменной при инициализации (<code>'''var''' x := 1;</code>) |
* Автоопределение типа переменной при инициализации (<code>'''var''' x := 1;</code>) |
||
* Цикл <code>'''[[foreach]]'''</code> |
* Цикл <code>'''[[foreach]]'''</code> |
||
* Упрощенный цикл <code>'''loop'''</code> |
|||
* [[Подпрограмма|Подпрограммы]] с переменным числом параметров |
* [[Подпрограмма|Подпрограммы]] с переменным числом параметров |
||
* [[Множество (тип данных)|Множества]] <code>'''set'''</code> на базе произвольных типов (<code>'''set of''' integer</code>) |
* [[Множество (тип данных)|Множества]] <code>'''set'''</code> на базе произвольных типов (<code>'''set of''' integer</code>) |
||
* <code>'''case'''</code> по строкам |
|||
* Методы в [[Структура (программирование)|записях]] |
* Методы в [[Структура (программирование)|записях]] |
||
* Возможность определять методы как внутри, так и вне интерфейса класса или записи |
|||
* Наряду со стандартным, упрощённый синтаксис [[Модуль_(программирование)|модулей]] |
|||
* Наряду со стандартным, упрощённый синтаксис [[Модуль (программирование)|модулей]] |
|||
* Структурная эквивалентность типов для динамических [[Индексный_массив|массивов]], [[Указатель_(тип_данных)|указателей]], [[Множество_(тип_данных)|множеств]] и [[Паскаль_(язык_программирования)#Процедурный_тип|процедурных типов]] |
|||
* Операция <code>'''new'''</code> для вызова конструктора |
|||
* Двумерные динамические массивы |
|||
* Все типы — [[Класс (программирование)|классы]] |
|||
* Инициализаторы полей классов и записей |
* Инициализаторы полей классов и записей |
||
* Операция <code>'''new'''</code> для вызова [[Конструктор_(программирование)|конструктора]] |
|||
* Возможность определять методы как внутри, так и вне интерфейса класса |
|||
* Перегрузка операций |
* Перегрузка операций |
||
* Автоклассы |
|||
* Интерфейсы в стиле [[.NET Framework|.NET]] |
|||
* Безымянные классы |
|||
* Лямбда-выражения |
|||
* Тип функции в стиле <code>T->T</code> |
|||
* Тип кортежа в стиле <code>(T1,T2)</code> |
|||
* Тип последовательности <code>'''sequence of''' T</code> |
|||
* Кортежное присваивание <code>(a,b) := (b,a)</code> |
|||
* Срезы <code>a[from:to:step]</code> и безопасные срезы <code>a?[from:to:step]</code> для массивов, списков и строк |
|||
* Многомерные срезы <code>a[:,:10]</code> |
|||
* Операторы <code>'''yield'''</code> и <code>'''yield sequence'''</code> для генерации последовательностей |
|||
* Оператор <code>'''match''' ... '''with'''</code> сопоставления с образцом |
|||
* Расширенная операция <code>'''is'''</code> |
|||
* Расширенные свойства, автосвойства |
|||
* Интерполяция строк |
|||
* Индексация с конца: <code>a[^1] := 777;</code> |
|||
* Диапазоны <code>..</code> и цикл по диапазону: <code>'''foreach var''' i '''in''' 1..10 '''do''' Print(i);</code> |
|||
* Цикл <code>'''for'''</code> с шагом: <code>'''for var''' i:=1 '''to''' 10 '''step''' 2 '''do''' Print(i);</code> |
|||
* Цикл <code>'''foreach'''</code> с индексом: <code>'''foreach var''' x '''in''' Arr(1,3,5) '''index''' i '''do''' Println(i,x);</code> |
|||
* Распаковка параметров лямбда-выражений <code>\(x,y) -> x + y</code> |
|||
* Частичная поддержка директив [[OpenMP]] |
|||
* Ковариантность параметров обобщенных типов |
|||
* Именованные аргументы |
|||
=== Особенности языка, связанные с платформой .NET === |
|||
* Все типы — наследники класса Object |
|||
* Стандартный тип BigInteger |
|||
* Форматные строки |
|||
* Многомерные [[Динамический массив|динамические массивы]] |
|||
* Интерфейсы [[.NET Framework|.NET]] |
|||
* Подключение пространств имен [[.NET Framework|.NET]] в разделе <code>'''uses'''</code> |
* Подключение пространств имен [[.NET Framework|.NET]] в разделе <code>'''uses'''</code> |
||
* [[Обобщённое программирование|Обобщённые]] классы, интерфейсы, подпрограммы и процедурные переменные |
* [[Обобщённое программирование|Обобщённые]] классы, интерфейсы, подпрограммы и процедурные переменные |
||
* Автоматическая [[сборка мусора (программирование)|сборка мусора]] для объектов |
|||
* Статические конструкторы |
|||
* Автоматическая [[сборка мусора]] для объектов |
|||
* Атрибуты |
* Атрибуты |
||
* Методы расширения |
* [[Метод расширения|Методы расширения]] |
||
* Лямбда-функции |
|||
* Поддержка директив [[OpenMP]] |
|||
* Поддержка неуправляемого кода через '''external''' |
* Поддержка неуправляемого кода через '''external''' |
||
* Типы <code>type?</code>, допускающие значение <code>nil</code> (синоним <code>Nullable<T></code>) |
|||
=== Программирование в функциональном стиле === |
|||
=== Стандартные модули === |
|||
Функции в PascalABC.NET являются [[Объект первого класса|объектами первого класса]] - их можно присваивать переменным, передавать как параметры и возвращать из других функций. Тип функции задается в виде T -> Res, переменной такого типа может быть присвоена [[анонимная функция]]:<syntaxhighlight lang="delphi"> |
|||
Поскольку в PascalABC.NET можно пользоваться всеми библиотеками платформы [[.NET Framework|.NET]], то стандартные модули ориентированы исключительно на обучение: |
|||
var f: real -> real := x -> x*x; |
|||
* Модуль растровой графики GraphABC |
|||
</syntaxhighlight>Ниже демонстрируется пример [[Композиция функций|суперпозиции]] двух функций:<syntaxhighlight lang="delphi"> |
|||
* Модуль векторной графики ABCObjects |
|||
function Super<T,T1,T2>(f: T1 -> T2; g: T -> T1): T -> T2 := x -> f(g(x)); |
|||
* Модуль Arrays для ввода-вывода-заполнения одномерных и двумерных динамических массивов |
|||
* Модуль Collections, содержащий упрощенные классы коллекций |
|||
* Модуль MPI - обертка над MPI-функциями |
|||
* Модули исполнителей Робот и Чертёжник (школьная информатика) |
|||
var f: real -> real := x -> x*x; |
|||
=== Примеры программ === |
|||
var fg := Super(f,Sin); |
|||
==== Пример 1. Использование методов расширения для программирования в функциональном стиле ==== |
|||
var gf := Super(Sin,f); |
|||
<source lang=pascal> |
|||
uses Arrays; |
|||
Print(fg(2)); |
|||
var a: array of integer := (1,3,5,7,9,11,13,15,17,19); |
|||
Print(gf(2)); |
|||
</syntaxhighlight>Операция суперпозиции определена над функциями в стандартной библиотеке:<syntaxhighlight lang="delphi"> |
|||
var f: real -> real := x -> x*x; |
|||
Print((f*Cos)(2)); |
|||
Print((Cos*f)(2)); |
|||
</syntaxhighlight>В книге "How To Program Effectively In Delphi"<ref>{{Книга|автор=Kevin R. Bond|заглавие=How to Program Effectively in Delphi for AS/A Level Computer Science|год=2021|часть=Chapter 44. Anonymous methods|издательство=Educational Computing Services Ltd|страниц=1200}}</ref> и в одноимённом цикле видео<ref name=":0">{{Cite web|lang=en|url=https://www.youtube.com/watch?v=RBlg-ItyyTA&t=377s|title=How to Program Effectively in Delphi. Lesson 44. Part 1|author=Kevin Bond|access-date=2023-04-04|archive-date=2023-04-04|archive-url=https://web.archive.org/web/20230404133136/https://www.youtube.com/watch?v=RBlg-ItyyTA&t=377s|deadlink=no}}</ref> программист и специалист в области преподавания компьютерных наук доктор Кевин Бонд<ref>{{Cite web|lang=en|url=https://www.educational-computing.com/DelphiBook/KRBsBriefBiography.pdf|title=Brief biography Dr Kevin R Bond|website=Educational Computing Services Ltd|access-date=2023-04-04|archive-date=2023-04-04|archive-url=https://web.archive.org/web/20230404131810/https://www.educational-computing.com/DelphiBook/KRBsBriefBiography.pdf|deadlink=no}}</ref> отмечает мощные функциональные возможности PascalABC.NET, отсутствующие в Delphi. В качестве примера подробно рассматривается<ref name=":0" /><ref>{{Cite web|lang=en|url=https://www.youtube.com/watch?v=OmregYuqLU8&t=1640s|title=Delphi Boot Camp 2022 - Delphi and functional programming using anonymous methods|access-date=2023-04-04|archive-date=2023-04-04|archive-url=https://web.archive.org/web/20230404133135/https://www.youtube.com/watch?v=OmregYuqLU8&t=1640s|deadlink=no}}</ref> [[Частичное применение|частичное применение функции]]:<syntaxhighlight lang="delphi"> |
|||
var f: real -> real -> real := x -> y -> x + y; |
|||
Print(f(2)(3)); |
|||
</syntaxhighlight> |
|||
== Стандартные модули == |
|||
Поскольку в PascalABC.NET можно пользоваться всеми библиотеками платформы [[.NET Framework|.NET]], стандартные модули немногочисленны и ориентированы на обучение: |
|||
* Модуль растровой графики '''GraphWPF''' |
|||
* Модуль растровой графики '''[[GraphABC]]''' ''(для [[Linux]])'' |
|||
* Модуль 3D графики и анимации '''Graph3D''' ''(на основе свободной библиотеки Helix Toolkit)'' |
|||
* Модуль векторной графики '''WPFObjects''' |
|||
* Модуль векторной графики '''ABCObjects''' ''(устаревший)'' |
|||
* Модуль '''FormsABC''' для создания графических интерфейсов ''(на базе технологии [[Windows Forms]])'' |
|||
* Модуль '''NumLibABC''' ''(библиотека численных методов)'' |
|||
* Модуль '''PlotWPF''' для визуализации данных |
|||
* Модули исполнителей '''Робот''' и '''Чертёжник''' ''(школьная информатика)'' |
|||
* Модуль электронного задачника '''[http://ptaskbook.com/ Programming Taskbook]''' ''(базовая версия)'' |
|||
== Примеры программ == |
|||
=== Пример 1. Поменять местами первую и вторую половины массива === |
|||
<syntaxhighlight lang="delphi"> |
|||
begin |
begin |
||
var a := ArrGen(10, i->2*i+1); |
|||
a.Writeln; |
|||
a.Println; |
|||
// Поменять местами первую и вторую половины массива с четным количеством элементов |
|||
Assert(a.Length mod 2 = 0); |
Assert(a.Length mod 2 = 0); |
||
var n := a.Length div 2; |
var n := a.Length div 2; |
||
a := a[n:] + a[:n]; |
|||
a.Skip(n).Concat(a.Take(n)).ToArray().Writeln; |
|||
a.Println; |
|||
end. |
|||
</syntaxhighlight> |
|||
=== Пример 2. 100! === |
|||
<source lang="pascal"> |
|||
begin |
|||
var P := 1bi; |
|||
for var i := 1 to 100 do |
|||
P := P * i; |
|||
Println(P); |
|||
end. |
end. |
||
</source> |
</source> |
||
=== Пример 3. Вывести все числа Фибоначчи, меньшие 1000 === |
|||
<source lang= |
<source lang="delphi"> |
||
begin |
|||
uses System.Numerics; |
|||
SeqWhile(1, 1, (x, y) -> x + y, x -> x < 1000).Print; |
|||
end. |
|||
</source> |
|||
=== Пример 4. Нахождение наибольшего общего делителя двух чисел === |
|||
<source lang="delphi"> |
|||
begin |
begin |
||
var |
var (a, b) := ReadInteger2; |
||
while b <> 0 do |
|||
(a, b) := (b, a mod b); |
|||
var НОД := Abs(a); |
|||
НОД.Print; |
|||
end. |
end. |
||
</source> |
</source> |
||
=== Пример 5. Частотный словарь слов в файле === |
|||
==== Пример 3. Параллельное умножение матриц с использованием директив OpenMP==== |
|||
<source lang= |
<source lang="delphi"> |
||
begin |
|||
uses Arrays; |
|||
var D := new Dictionary<string, integer>; |
|||
foreach var s in ReadLines('words.txt') do |
|||
procedure Mult(a,b,c: array [,] of real; n: integer); |
|||
foreach var word in s.ToWords do |
|||
D[word] := D.Get(word) + 1; |
|||
D.PrintLines; |
|||
end. |
|||
</source> |
|||
=== Пример 5а. Частотный словарь слов в файле. Решение в функциональном стиле === |
|||
<source lang="delphi"> |
|||
begin |
|||
ReadLines('words.txt').SelectMany(s -> s.ToWords).GroupBy(v -> v).ToDictionary(x -> x.Key, x -> x.Count).PrintLines; |
|||
end. |
|||
</source> |
|||
=== Пример 6. Максимальные значения в столбцах матрицы === |
|||
<source lang="delphi"> |
|||
begin |
|||
var (M, N) := (4, 5); |
|||
var A := MatrRandom(M, N); |
|||
A.Println; |
|||
A.Cols.Select(col -> col.Max).Println; |
|||
end. |
|||
</source> |
|||
=== Пример 7. Параллельное умножение матриц с использованием директив OpenMP === |
|||
<source lang="delphi"> |
|||
procedure Mult(a, b, c: array [,] of real; n: integer); |
|||
begin |
begin |
||
{$omp parallel for} |
{$omp parallel for} |
||
for var i:=0 to n-1 do |
for var i := 0 to n - 1 do |
||
for var j:=0 to n-1 do |
for var j := 0 to n - 1 do |
||
begin |
begin |
||
var cc := 0.0; |
var cc := 0.0; |
||
for var l:=0 to n-1 do |
for var l := 0 to n - 1 do |
||
cc += a[i,l]*b[l,j]; |
cc += a[i, l] * b[l, j]; |
||
c[i,j] := cc; |
c[i, j] := cc; |
||
end; |
end; |
||
end; |
end; |
||
const |
const N = 1000; |
||
begin |
begin |
||
var |
var A := MatrRandomReal(N, N, 1, 1.1); |
||
var |
var B := MatrRandomReal(N, N, 1, 1.1); |
||
var |
var C := new real[N, N]; |
||
Mult(A, B, C, N); |
|||
Writeln(MillisecondsDelta / 1000); |
|||
Mult(a,b,c,n); |
|||
writeln((Milliseconds-d)/1000); |
|||
end. |
end. |
||
</source> |
</source> |
||
== Лицензия == |
== Лицензия == |
||
''PascalABC.NET'' (начиная с версии 3.0) является свободным программным обеспечением, распространяемым под [http://pascalabc.net/12-stranitsy-na-sajte/38-litsenzionnoe-soglashenie-na-sistemu-programmirovaniya-pascalabc-net лицензией LGPLv3]. |
|||
== Аудит исходного кода == |
|||
В 2017<ref>{{Cite web|lang=ru-RU|url=https://pvs-studio.ru/ru/blog/posts/csharp/0492/|title=Проверяем проект PascalABC.NET с помощью плагинов для SonarQube: SonarC# и PVS-Studio|website=PVS-Studio|date=2017-03-29|access-date=2023-04-04|archive-date=2023-04-04|archive-url=https://web.archive.org/web/20230404142202/https://pvs-studio.ru/ru/blog/posts/csharp/0492/|deadlink=no}}</ref> и 2022<ref>{{Cite web|lang=ru-RU|url=https://habr.com/ru/companies/pvs-studio/articles/647649/|title=PascalABC.NET, повторная проверка|website=Хабр|date=2022-01-25|access-date=2023-04-04|archive-date=2023-04-04|archive-url=https://web.archive.org/web/20230404143702/https://habr.com/ru/companies/pvs-studio/articles/647649/|deadlink=no}}</ref> годах был проведён независимый аудит [https://github.com/pascalabcnet/pascalabcnet публичного репозитория исходного кода PascalABC.NET] при помощи статического анализатора [[PVS-Studio]]. По результатам проверок сформированы списки потенциально опасных ситуаций в коде, требующих дополнительного анализа со стороны разработчиков. Также отмечено, что общее качество кода можно улучшить. Для этого необходимо устранить дублирования кода, избыточные проверки, а также более аккуратно проводить рефакторинг. |
|||
== Примечания == |
== Примечания == |
||
Строка 157: | Строка 277: | ||
== Ссылки == |
== Ссылки == |
||
* [ |
* [https://pascalabc.net/ Сайт проекта «Система программирования ''PascalABC.NET''»] |
||
* [https://github.com/pascalabcnet/pascalabcnet Публичный репозиторий исходного кода языка на Github] |
|||
* [http://pascalabc.mmcs.rsu.ru/downloads/pabcnethelp/PABC_Help_Web.html Описание языка ''PascalABC.NET''] |
|||
* [https://pascalabc.net/downloads/pabcnethelp/index.htm Описание языка ''PascalABC.NET''] |
|||
* [https://t.me/pascalabc_official Официальный телеграм-канал ''PascalABC.NET''] |
|||
* [http://www.ptaskbook.com/ Электронный задачник по программированию ''Programming Taskbook''] |
* [http://www.ptaskbook.com/ Электронный задачник по программированию ''Programming Taskbook''] |
||
* [https://forum.mmcs.sfedu.ru/c/pascalabcnet Форум PascalABC.NET] |
|||
* [http://RVGames.de/ RVGames.de]{{ref-ru}} — Цифровая книга "Занимательные уроки с паскалем, или PascalABC.NET для начинающих" |
|||
* [https://stepik.org/course/91781/promo Курс "PascalABC.NET: современный код"] на Stepik |
|||
* [http://progopedia.ru/implementation/pascalabcnet/ статья ''PascalABC.NET''] в [[Прогопедия|Прогопедии]] — энциклопедии языков программирования{{ref-ru}} |
|||
* [http://sunschool.mmcs.sfedu.ru/8-stranitsy-na-sajte/5-pabc ''PascalABC'' на сайте Воскресной компьютерной школы] |
|||
== Литература == |
== Литература == |
||
Строка 204: | Строка 325: | ||
}} |
}} |
||
* {{книга|автор= |
* {{книга|автор=Михалкович С.С., Абрамян М.Э.|часть =|заглавие =Основы программирования на языке PascalABC.NET. Скалярные типы данных, управляющие операторы, знакомство с массивами, процедуры и функции, работа с графикой|оригинал =|ссылка =|ответственный=|издание=|место =[[Ростов-на-Дону]]|издательство =Изд-во Южного федерального университета|год = 2017|страницы=|страниц = 246|isbn = 978-5-9275-2493-8|isbn2=}} |
||
* {{книга |
* {{книга |
||
|автор = |
|автор = Долинер Л.И. |
||
|часть = |
|||
|заглавие = Практикум по программированию на языке Паскаль: Массивы, строки, файлы, рекурсия, указатели |
|||
|заглавие = Основы программирования в среде PascalABC.NET |
|||
|место = [[Ростов-на-Дону]] |
|||
|оригинал = |
|||
|издательство = ООО «ЦВВР» |
|||
|ссылка = https://elibrary.ru/item.asp?id=30660502 |
|||
|год = 2004 |
|||
|ответственный = |
|||
|страниц = 187 |
|||
| |
|издание = |
||
|место = Екатеринбург |
|||
|издательство = Изд-во «Уральский федеральный университет» |
|||
|год = [[2014]] |
|||
|том = |
|||
|страницы = |
|||
|страниц = 128 |
|||
|серия = |
|||
|isbn = 978-5-7996-1260-3 |
|||
|тираж = |
|||
}} |
|||
* {{книга |
|||
|автор = Осипов А.В. |
|||
|часть = |
|||
|заглавие = PascalABC.NET: Введение в современное программирование |
|||
|оригинал = |
|||
|ссылка = http://pascalabc.net/modernprogramming |
|||
|ответственный = |
|||
|издание = |
|||
|место = Ростов-на-Дону |
|||
|издательство = Интернет-издание |
|||
|год = [[2019]] |
|||
|том = |
|||
|страницы = |
|||
|страниц = 572 |
|||
|серия = |
|||
|isbn = |
|||
|тираж = |
|тираж = |
||
}} |
}} |
||
* {{книга |
* {{книга |
||
|автор = |
|автор = Осипов А.В. |
||
|часть = |
|||
|заглавие = Занимательные уроки с паскалем, или PascalABC.NET для начинающих |
|||
|заглавие = PascalABC.NET: выбор школьника. Часть 1. |
|||
|ссылка = http://RVGames.de |
|||
|оригинал = |
|||
|издательство = Я + R |
|||
|ссылка = http://pascalabc.net/modernprogramming |
|||
|год = 2012 |
|||
|ответственный = |
|||
|страниц = 698 |
|||
|издание = |
|||
|место = Ростов-на-Дону |
|||
|издательство = Изд-во Южного федерального университета |
|||
|год = [[2020]] |
|||
|том = |
|||
|страницы = |
|||
|страниц = 152 |
|||
|серия = |
|||
|isbn = |
|||
|тираж = 150 |
|||
}} |
}} |
||
{{IDE}} |
{{IDE}} |
||
{{DotNET}} |
{{DotNET}} |
||
{{Pascal}} |
|||
[[Категория: |
[[Категория:Языки программирования семейства Паскаля]] |
||
[[Категория:Компиляторы |
[[Категория:Компиляторы Паскаля]] |
||
[[Категория: |
[[Категория:Компиляторы языка Object Pascal]] |
||
[[Категория:Object Pascal]] |
|||
[[Категория:Интегрированные среды разработки]] |
[[Категория:Интегрированные среды разработки]] |
||
[[Категория:Языки программирования платформы .NET]] |
[[Категория:Языки программирования платформы .NET]] |
||
[[Категория:Свободные компиляторы и интерпретаторы]] |
Текущая версия от 14:27, 3 ноября 2024
PascalABC.NET | |
---|---|
Семантика | императивная |
Класс языка | мультипарадигменный: структурное, объектно-ориентированное, обобщённое, процедурное программирование, функциональное программирование |
Тип исполнения | компилятор |
Появился в | 2007 |
Автор | PascalABC.NET Compiler Team |
Расширение файлов |
.pas |
Выпуск | 3.10.0 сборка 3546 (21.09.2024) |
Система типов | статическая |
Основные реализации |
PascalABC.NET, Pascal ABC (поддержка прекращена) |
Испытал влияние | Паскаль, Delphi, C#, Python, Kotlin |
Лицензия | LGPL |
Сайт | pascalabc.net |
Платформа | .NET CLR (WinXP и старше), Mono (Linux, MacOS) |
Медиафайлы на Викискладе |
PascalABC.NET — язык программирования Паскаль нового поколения, включающий классический Паскаль, большинство возможностей языка Delphi, а также ряд собственных расширений. Он реализован на платформе Microsoft.NET и содержит все современные языковые средства: внутриблочные описания, автоопределение типа, кортежи, срезы, классы, перегрузку операций, интерфейсы, обработку исключений, обобщенные классы и подпрограммы, лямбда-выражения, средства параллельного программирования.
PascalABC.NET позиционируется разработчиками как язык программирования для сферы образования и научных исследований
PascalABC.NET является мультипарадигменным языком: на нём можно программировать в структурном, объектно-ориентированном и функциональном стилях.
PascalABC.NET — это также простая и мощная интегрированная среда разработки, поддерживающая технологию IntelliSense, содержащая средства автоформатирования, встроенный отладчик и встроенный дизайнер форм, функционирующая на Windows и Linux Кроме того, консольный компилятор PascalABC.NET функционирует на MacOS под Mono.
История развития
[править | править код]В 2003 году на факультете математики, механики и компьютерных наук ЮФУ была создана учебная среда программирования Pascal ABC. Система представляла собой интегрированную оболочку со встроенным интерпретатором языка программирования Паскаль, близкого к языку Delphi. Несмотря на неполную реализацию языка, она стала удачной заменой устаревшей системе Turbo Pascal в первоначальном обучении программированию. Как учебную систему её использовали во многих регионах СНГ.
В 2005—2006 годах система была полностью переработана: изменена её архитектура — на полноценный компилятор языка, близкого к Delphi, с расширениями, связанными с платформой .NET. Новая система получила название PascalABC.NET. В июне 2009 года появилась первая стабильная версия PascalABC.NET 1.2.
В сентябре 2009 г. появилась веб-среда разработки WDE, не требующая установки PascalABC.NET на локальный компьютер и позволяющая запускать программы на PascalABC.NET непосредственно из окна браузера. Веб-среда разработки была закрыта в октябре 2017 года.
В августе 2011 г. осуществлен переход на .NET 4.0 (версия 1.8).
В феврале 2013 г. вышла версия PascalABC.NET 2.0 с дизайнером форм и поддержкой проектов.
15 мая 2013 г. вышла версия 2.1 с английской локализацией интерфейса и сообщений об ошибках.
15 февраля 2014 г. вышла версия PascalABC.NET 2.2. Многократно ускорено обращение к символам строки на запись.
28 августа 2015 г. вышла версия PascalABC.NET 3.0. PascalABC.NET стал свободным и распространяется под лицензией LGPLv3.
12 февраля 2016 г. вышла версия PascalABC.NET 3.1. Появились кортежи и срезы, значительно обновлена стандартная библиотека.
29 августа 2016 г. вышла версия PascalABC.NET 3.2. Появились операторы yield и yield sequence, обновлена стандартная библиотека.
30 августа 2017 г. вышла версия PascalABC.NET 3.3. Появились стандартные модули GraphWPF и Graph3D (для Windows Vista и выше), упрощенный цикл loop, операция безопасного среза, кортежное присваивание, поддержка Nullable-типов. Добавлена украинская локализация интерфейса и сообщений об ошибках.
11 февраля 2018 г. вышла версия PascalABC.NET 3.3.5. Добавлен стандартный модуль NumLibABC (учебная библиотека численных методов), реализованы форматные строки и операция возведения в степень. В полную версию дистрибутива (для Windows Vista и выше) интегрирована .NET 4.7.1, для Windows XP оставлен дистрибутив с .NET 4.0.
25 мая 2018 г. вышла версия PascalABC.NET 3.4. Реализовано некоторое подмножество Pattern Matching, расширенный оператор is.
1 сентября 2018 г. вышла версия PascalABC.NET 3.4.2. Реализованы расширенные свойства, расширенные индексные свойства и автосвойства, добавлен модуль WPFObjects как замена устаревшему ABCObjects.
25 мая 2019 г. вышла версия PascalABC.NET 3.5. В Pattern Matching добавлена возможность сопоставления со списками, кортежами и константами.
16 января 2020 г. вышла версия PascalABC.NET 3.6.0. Реализована операция ..
, возвращающая IntRange
или CharRange
в зависимости от контекста, а также условная операция: var min := if a < b then a else b;
7 мая 2020 г. вышла версия PascalABC.NET 3.6.3. Реализована операция доступа по индексу с конца a[^1]
для массивов, списков и строк. Реализована возможность использовать срезы в левой части оператора присваивания: a[:2] := a[3:5]
. Значительно ускорен перенаправленный ввод
8 августа 2020 г. вышла версия PascalABC.NET 3.7. Реализованы распаковка последовательности в переменные, массивы-значения в виде |1,3,5,7,9|
, запись программ без внешнего begin-end
с использованием ##
(## Print(2*2)
)
7 марта 2021 г. вышла версия PascalABC.NET 3.8. Реализованы расширенный оператор foreach
(foreach var (x,y) in a
), литералы для BigInteger
в виде 1bi
, срезы многомерных массивов в виде m[:,:]
, m[^1,:]
, лямбда-выражения с распаковкой параметров (s.Where(\(name,age) -> age >= 18)
).
24 августа 2021 г. вышла версия PascalABC.NET 3.8.1. Реализован атрибут [Cache] для кеширования результатов функции, полноценная директива {$zerobasedstrings}, стандартный модуль PlotWPF.
9 марта 2022 г. вышла версия PascalABC.NET 3.8.3. Реализованы конструкции for var i:=1 to 6 step 2 do
и foreach var x in a index i do
10 июля 2023 г. вышла версия PascalABC.NET 3.9.0. Реализована ковариантность параметров обобщенных типов, именованные аргументы. Реализована Linux-версия IDE. Добавлен стандартный модуль LightPT легковесной автоматической проверки заданий.
Особенности языка
[править | править код]Расширения языка Паскаль
[править | править код]- Операторы
+= -= *= /=
- Операция
**
для возведения в степень - Внутриблочные описания переменных
- Описание переменных в заголовке цикла
for
- Инициализация переменной при описании (
var n: integer := 10;
) - Автоопределение типа переменной при инициализации (
var x := 1;
) - Цикл
foreach
- Упрощенный цикл
loop
- Подпрограммы с переменным числом параметров
- Множества
set
на базе произвольных типов (set of integer
) case
по строкам- Методы в записях
- Возможность определять методы как внутри, так и вне интерфейса класса или записи
- Наряду со стандартным, упрощённый синтаксис модулей
- Операция
new
для вызова конструктора - Инициализаторы полей классов и записей
- Перегрузка операций
- Автоклассы
- Безымянные классы
- Лямбда-выражения
- Тип функции в стиле
T->T
- Тип кортежа в стиле
(T1,T2)
- Тип последовательности
sequence of T
- Кортежное присваивание
(a,b) := (b,a)
- Срезы
a[from:to:step]
и безопасные срезыa?[from:to:step]
для массивов, списков и строк - Многомерные срезы
a[:,:10]
- Операторы
yield
иyield sequence
для генерации последовательностей - Оператор
match ... with
сопоставления с образцом - Расширенная операция
is
- Расширенные свойства, автосвойства
- Интерполяция строк
- Индексация с конца:
a[^1] := 777;
- Диапазоны
..
и цикл по диапазону:foreach var i in 1..10 do Print(i);
- Цикл
for
с шагом:for var i:=1 to 10 step 2 do Print(i);
- Цикл
foreach
с индексом:foreach var x in Arr(1,3,5) index i do Println(i,x);
- Распаковка параметров лямбда-выражений
\(x,y) -> x + y
- Частичная поддержка директив OpenMP
- Ковариантность параметров обобщенных типов
- Именованные аргументы
Особенности языка, связанные с платформой .NET
[править | править код]- Все типы — наследники класса Object
- Стандартный тип BigInteger
- Форматные строки
- Многомерные динамические массивы
- Интерфейсы .NET
- Подключение пространств имен .NET в разделе
uses
- Обобщённые классы, интерфейсы, подпрограммы и процедурные переменные
- Автоматическая сборка мусора для объектов
- Атрибуты
- Методы расширения
- Поддержка неуправляемого кода через external
- Типы
type?
, допускающие значениеnil
(синонимNullable<T>
)
Программирование в функциональном стиле
[править | править код]Функции в PascalABC.NET являются объектами первого класса - их можно присваивать переменным, передавать как параметры и возвращать из других функций. Тип функции задается в виде T -> Res, переменной такого типа может быть присвоена анонимная функция:
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));
В книге "How To Program Effectively In Delphi"[1] и в одноимённом цикле видео[2] программист и специалист в области преподавания компьютерных наук доктор Кевин Бонд[3] отмечает мощные функциональные возможности PascalABC.NET, отсутствующие в Delphi. В качестве примера подробно рассматривается[2][4] частичное применение функции:
var f: real -> real -> real := x -> y -> x + y;
Print(f(2)(3));
Стандартные модули
[править | править код]Поскольку в PascalABC.NET можно пользоваться всеми библиотеками платформы .NET, стандартные модули немногочисленны и ориентированы на обучение:
- Модуль растровой графики GraphWPF
- Модуль растровой графики GraphABC (для Linux)
- Модуль 3D графики и анимации Graph3D (на основе свободной библиотеки Helix Toolkit)
- Модуль векторной графики WPFObjects
- Модуль векторной графики ABCObjects (устаревший)
- Модуль FormsABC для создания графических интерфейсов (на базе технологии Windows Forms)
- Модуль NumLibABC (библиотека численных методов)
- Модуль PlotWPF для визуализации данных
- Модули исполнителей Робот и Чертёжник (школьная информатика)
- Модуль электронного задачника Programming Taskbook (базовая версия)
Примеры программ
[править | править код]Пример 1. Поменять местами первую и вторую половины массива
[править | править код]begin
var a := ArrGen(10, i->2*i+1);
a.Println;
Assert(a.Length mod 2 = 0);
var n := a.Length div 2;
a := a[n:] + a[:n];
a.Println;
end.
Пример 2. 100!
[править | править код]begin
var P := 1bi;
for var i := 1 to 100 do
P := P * i;
Println(P);
end.
Пример 3. Вывести все числа Фибоначчи, меньшие 1000
[править | править код]begin
SeqWhile(1, 1, (x, y) -> x + y, x -> x < 1000).Print;
end.
Пример 4. Нахождение наибольшего общего делителя двух чисел
[править | править код]begin
var (a, b) := ReadInteger2;
while b <> 0 do
(a, b) := (b, a mod b);
var НОД := Abs(a);
НОД.Print;
end.
Пример 5. Частотный словарь слов в файле
[править | править код]begin
var D := new Dictionary<string, integer>;
foreach var s in ReadLines('words.txt') do
foreach var word in s.ToWords do
D[word] := D.Get(word) + 1;
D.PrintLines;
end.
Пример 5а. Частотный словарь слов в файле. Решение в функциональном стиле
[править | править код]begin
ReadLines('words.txt').SelectMany(s -> s.ToWords).GroupBy(v -> v).ToDictionary(x -> x.Key, x -> x.Count).PrintLines;
end.
Пример 6. Максимальные значения в столбцах матрицы
[править | править код]begin
var (M, N) := (4, 5);
var A := MatrRandom(M, N);
A.Println;
A.Cols.Select(col -> col.Max).Println;
end.
Пример 7. Параллельное умножение матриц с использованием директив OpenMP
[править | править код]procedure Mult(a, b, c: array [,] of real; n: integer);
begin
{$omp parallel for}
for var i := 0 to n - 1 do
for var j := 0 to n - 1 do
begin
var cc := 0.0;
for var l := 0 to n - 1 do
cc += a[i, l] * b[l, j];
c[i, j] := cc;
end;
end;
const N = 1000;
begin
var A := MatrRandomReal(N, N, 1, 1.1);
var B := MatrRandomReal(N, N, 1, 1.1);
var C := new real[N, N];
Mult(A, B, C, N);
Writeln(MillisecondsDelta / 1000);
end.
Лицензия
[править | править код]PascalABC.NET (начиная с версии 3.0) является свободным программным обеспечением, распространяемым под лицензией LGPLv3.
Аудит исходного кода
[править | править код]В 2017[5] и 2022[6] годах был проведён независимый аудит публичного репозитория исходного кода PascalABC.NET при помощи статического анализатора PVS-Studio. По результатам проверок сформированы списки потенциально опасных ситуаций в коде, требующих дополнительного анализа со стороны разработчиков. Также отмечено, что общее качество кода можно улучшить. Для этого необходимо устранить дублирования кода, избыточные проверки, а также более аккуратно проводить рефакторинг.
Примечания
[править | править код]- ↑ Kevin R. Bond. Chapter 44. Anonymous methods // How to Program Effectively in Delphi for AS/A Level Computer Science. — Educational Computing Services Ltd, 2021. — 1200 с.
- ↑ 1 2 Kevin Bond. How to Program Effectively in Delphi. Lesson 44. Part 1 (англ.). Дата обращения: 4 апреля 2023. Архивировано 4 апреля 2023 года.
- ↑ Brief biography Dr Kevin R Bond (англ.). Educational Computing Services Ltd. Дата обращения: 4 апреля 2023. Архивировано 4 апреля 2023 года.
- ↑ Delphi Boot Camp 2022 - Delphi and functional programming using anonymous methods (англ.). Дата обращения: 4 апреля 2023. Архивировано 4 апреля 2023 года.
- ↑ Проверяем проект PascalABC.NET с помощью плагинов для SonarQube: SonarC# и PVS-Studio . PVS-Studio (29 марта 2017). Дата обращения: 4 апреля 2023. Архивировано 4 апреля 2023 года.
- ↑ PascalABC.NET, повторная проверка . Хабр (25 января 2022). Дата обращения: 4 апреля 2023. Архивировано 4 апреля 2023 года.
Ссылки
[править | править код]- Сайт проекта «Система программирования PascalABC.NET»
- Публичный репозиторий исходного кода языка на Github
- Описание языка PascalABC.NET
- Официальный телеграм-канал PascalABC.NET
- Электронный задачник по программированию Programming Taskbook
- Форум PascalABC.NET
- Курс "PascalABC.NET: современный код" на Stepik
Литература
[править | править код]- Михалкович С.С. Учебная система программирования PascalABC // Научно-методическая конференция «Современные информационные технологии в образовании: Южный Федеральный округ» 13—14 мая 2004 / Крукиер Л.А., Муратова Г.В.. — Ростов-на-Дону: ЮГИНФО РГУ, 2004. — С. 156—158. — 252 с. — 200 экз.
- Михалкович С.С. Учебная система программирования PascalABC: опыт разработки и использования // Вторая международная научно-практическая конференция «Современные информационные технологии и ИТ-образование»: Сборник трудов. — М., 2006. — С. 394—399.
- Водолазов Н.Н., Михалкович С.С., Ткачук А.В. Опыт разработки учебного языка программирования для платформы .NET // Научно-методическая конференция «Современные информационные технологии в образовании: Южный Федеральный округ» 26—29 апреля 2007 / Крукиер Л.А., Муратова Г.В.. — Ростов-на-Дону: Изд-во «ЦВВР», 2007. — С. 71—73. — 312 с. — 250 экз. — ISBN 978-5-94153-146-2.
- Михалкович С.С., Абрамян М.Э. Основы программирования на языке PascalABC.NET. Скалярные типы данных, управляющие операторы, знакомство с массивами, процедуры и функции, работа с графикой. — Ростов-на-Дону: Изд-во Южного федерального университета, 2017. — 246 с. — ISBN 978-5-9275-2493-8.
- Долинер Л.И. Основы программирования в среде PascalABC.NET. — Екатеринбург: Изд-во «Уральский федеральный университет», 2014. — 128 с. — ISBN 978-5-7996-1260-3.
- Осипов А.В. PascalABC.NET: Введение в современное программирование. — Ростов-на-Дону: Интернет-издание, 2019. — 572 с.
- Осипов А.В. PascalABC.NET: выбор школьника. Часть 1.. — Ростов-на-Дону: Изд-во Южного федерального университета, 2020. — 152 с. — 150 экз.