PascalABC.NET официальный канал
1.84K subscribers
625 photos
2 videos
9 files
429 links
Официальный канал языка и системы программирования PascalABC.NET
Download Telegram
PascalABC.NET + .NET 10: SearchValues

Продолжаем знакомиться с возможностями современного .NET.

Метод IndexOfAny существовал и раньше. Новая идея здесь — SearchValues<T>.

Он позволяет один раз подготовить и оптимизировать набор значений, а затем использовать его во множестве поисков.
uses System.Buffers;

begin
var chars := SearchValues.Create(
'abcdefghijklmnopqrstuvwxyz0123456789'.ToCharArray
);

var texts := [
'***PascalABC.NET',
'---compiler',
'...12345',
'___algorithm'
];

foreach var text in texts do
begin
var p := text.AsSpan.IndexOfAny(chars);
Println(text,p);
end;
end.

Здесь набор букв и цифр создаётся только один раз:
var chars := SearchValues.Create(...);

А затем тот же SearchValues используется для поиска в разных строках.

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

Поэтому SearchValues особенно полезен, когда:
• один и тот же набор символов используется много раз;
• набор достаточно большой;
• нужно быстро обрабатывать большие объёмы текста.

Например, при разборе текста, лексическом анализе, поиске разделителей, проверке допустимых символов и обработке протоколов.

Идея простая:
обычный IndexOfAny — нашли один раз;
SearchValues — один раз подготовили набор → много раз быстро ищем.
❤9
🔹 Куда развивается PascalABC.NET

PascalABC.NET продолжает активно развиваться — и речь уже не только о новых конструкциях языка.

Сейчас основные направления связаны с переходом на современную платформу .NET и развитием всей инфраструктуры системы программирования:
— компилятор для .NET 10;
— расширение PascalABC.NET для Visual Studio Code;
— новый SDK PascalABC.NET;
— поддержка NuGet-пакетов;
— режимы работы с одним файлом, проектом и рабочим пространством;
— развитие библиотек и совместимости с современной .NET.

Часть этих задач уже реализована, часть находится в работе, а некоторые направления только исследуются.

Основные планы собраны на отдельной странице:

👉 Roadmap PascalABC.NET
https://pascalabc.net/roadmap/
❤9🔥1
Функции над функциями с помощью лямбда-выражений

Прошло меньше полутора месяцев с начала программирования на первом курсе направления ФИИТ — а мы уже можем писать такие вещи.

Возьмём полином четвёртой степени с двумя максимумами и определим оператор численного дифференцирования:
uses PlotWPF;

function D(f: real -> real; h: real := 1e-5): real -> real :=
x -> (f(x + h) - f(x - h)) / (2 * h);

function D2(f: real -> real): real -> real :=
D(D(f));

begin
var f: real -> real := x -> -x*x*x*x/4 + 2*x*x;

var c := new LineGraphWPF(-3,3,f);
c.AddLineGraph(-3,3,D(f));
c.AddLineGraph(-3,3,D2(f));

c.Graph[0].Color := Colors.Red;
c.Graph[1].Color := Colors.Green; // f'
c.Graph[2].Color := Colors.Blue; // f''
end.

На графике:
🔴 f — исходная функция
🟢 D(f) — первая производная
🔵 D2(f) — вторая производная

Самое интересное здесь — даже не графики, а две строчки:
function D(f: real -> real; h: real := 1e-5): real -> real :=
x -> (f(x + h) - f(x - h)) / (2 * h);

function D2(f: real -> real): real -> real :=
D(D(f));

D получает функцию и возвращает функцию.

А вторая производная определяется почти как в математике:
D2(f) = D(D(f))

Это возможно потому, что в PascalABC.NET процедуры и функции — объекты первого класса: их можно передавать в другие функции, хранить в переменных и возвращать как результат.

И лямбда-выражения позволяют записывать всё это очень компактно.
👍4🔥2
PascalABC.NET + .NET 10: DateOnly и TimeOnly

Продолжаем знакомиться с типами современного .NET.

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

Для этого в .NET есть отдельные типы:
DateOnly — только дата;
TimeOnly — только время суток.
begin
var d := new System.DateOnly(2026,9,24);

Println(d);
Println(d.AddDays(100));
end.

Результат, например при русской локали:
24.09.2026
02.01.2027

DateOnly хранит только год, месяц и день.
Это удобно для дат рождения, календарных дат, сроков, расписаний — везде, где часы, минуты и часовой пояс вообще не нужны.
begin
var t := new System.TimeOnly(14,30);

Println(t);
Println(t.AddHours(2.5));
end.

Результат:
14:30
17:00

TimeOnly хранит только время суток — часы, минуты, секунды и более точные доли секунды.

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

Главное преимущество этих типов — точная модель данных.

Если программе нужна только дата, используем DateOnly.
Если нужно только время — TimeOnly.
Если нужны и дата, и время вместе — DateTime.

Меньше лишней информации — меньше возможностей случайно ошибиться в логике программы.
❤5👍1
Media is too big
VIEW IN TELEGRAM
Как написать сортировку вставками в PascalABC.NET 4.0 😎

Эй, PascalABC.NET, напиши-ка сортировку вставками для читателей нашего канала :)

И смотри не подсказывай!

Tab, Tab, Tab, Enter, Tab, F9.

Спасибо! 🚀
😁4🔥2
NuGet в PascalABC.NET. Часть 1: SQLite без сервера

В PascalABC.NET с компилятором .NET 10 теперь можно подключать библиотеки из NuGet прямо в тексте программы — без ручного скачивания DLL и настройки ссылок на библиотеки.

Начнём с SQLite — полноценной базы данных, которой не нужен отдельный сервер.

Программа выведет 42. Причём вычисление выполнит не PascalABC.NET, а настоящий движок SQLite! В этом примере база данных существует только в оперативной памяти.

Как это работает?
Директива {$package Microsoft.Data.Sqlite 10.0.13} указывает имя и версию NuGet-пакета. При первой компиляции PascalABC.NET автоматически загрузит пакет вместе с необходимыми зависимостями. Всё сохраняется в общем кеше NuGet, поэтому повторно скачивать те же библиотеки не потребуется.

Где это работает?
В оболочке PascalABC.NET с компилятором .NET 10 и в расширении PascalABC.NET для VS Code при использовании того же компилятора. В режиме .NET Framework директива {$package} не поддерживается.

Это первая публикация серии о NuGet. Дальше покажем, как находить интересные пакеты и использовать их в PascalABC.NET — от работы с датами до численных расчётов и машинного обучения.
{$package Microsoft.Data.Sqlite 10.0.13}
uses Microsoft.Data.Sqlite;

begin
var connection := new SqliteConnection('Data Source=:memory:');
connection.Open;

var command := connection.CreateCommand;
command.CommandText := 'select 40 + 2';
Println(command.ExecuteScalar);

command.Dispose;
connection.Dispose;
end.
👍4🔥4
PascalABC.NET на .NET 10: Avalonia + ScottPlot

Ещё один пример работы с NuGet-пакетами в новой версии PascalABC.NET на платформе .NET 10.

В программе используются две крупные библиотеки:
Avalonia — современный кроссплатформенный фреймворк для создания графических приложений под Windows, Linux и macOS.
ScottPlot — высокопроизводительная библиотека научной визуализации для .NET. Позволяет строить интерактивные графики, диаграммы, гистограммы, тепловые карты и визуализировать большие массивы данных.

Особенность примера — сложная система транзитивных зависимостей, в том числе нативных библиотек для графического рендеринга.

Программа создаёт полноценное оконное приложение Avalonia со встроенным компонентом ScottPlot и строит график зависимости y = x².

Этот пример демонстрирует не просто подключение NuGet-пакетов, а совместную работу крупных библиотек .NET со сложными управляемыми и нативными зависимостями в PascalABC.NET на .NET 10.

Полный код программы на PascalABC.NET:
{$package Avalonia.Desktop 12.1.4}
{$package ScottPlot.Avalonia 5.1.59}

uses Avalonia, Avalonia.Controls, ScottPlot.Avalonia;

procedure AppMain(app: Application; args: array of string);
begin
var x := [1.0,2.0,3.0,4.0,5.0];
var y := [1.0,4.0,9.0,16.0,25.0];

var p := new AvaPlot;
p.Plot.Add.Scatter(x,y);

var w := new Window;
w.Title := 'ScottPlot + PascalABC.NET';
w.Width := 1000;
w.Height := 650;
w.Content := p;

w.Show;
app.Run(w);
end;

begin
AppBuilder.Configure&<Application>
.UsePlatformDetect
.Start(AppMain,new string[0]);
end.
👍3
Ошибки в ML для неверных имен столбцов

В DataFrameABC при указании неверного имени столбца теперь предлагается вероятное близкое имя - как в production - коде.
👍8
PascalABC.NET с NET 10 в Alt Linux Образование

Версия - прототип работает. Впереди - тесты
🔥3❤1
Вышло обновление PascalABC.NET для Visual Studio Code — версия 0.6.0

В новой версии расширения появилось несколько важных возможностей:
🔹 Навигация по коду — переход к определению процедур и функций по F12, а также поиск их реализаций. Для библиотек .NET доступны объявления на Pascal.
🔹 Поддержка NuGet — поиск и подключение пакетов с выбором версии для .NET 10.
🔹 Улучшенная компиляция — теперь учитываются несохранённые изменения в открытых соседних модулях.
🔹 Информация о компиляции — индикатор прогресса и подробные сообщения в панели Output.
🔹 Обновлённый компилятор PascalABC.NET 4.1.

Расширение работает в Windows, Linux и macOS, поддерживает IntelliSense, подсказки по типам, диагностику ошибок, компиляцию и запуск программ.

📥 Скачать версию 0.6.0 и ознакомиться с инструкцией:
https://pascalabc.net/vscode/
❤6
Задания на LINQ для учеников воскресной компьютерной школы мехмата ЮФУ

Готовлю новые задания для школьников на завтра.

Обожаю эту тему. То, для чего создавался PascalABC.NET: обучение современному программированию.

uses ABCDatabases;

begin
var pupils := ЗаполнитьМассивУчеников;
var av := pupils.Average(p -> p.Рост);
pupils.Where(p -> p.Рост > av).Select(p -> (p.Фамилия, p.Рост)).PrintLines;
end.


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

С автоматической проверкой.

Всё как мы любим.

Интересное здесь еще конечно то, что используется специализированный учебный модуль ABCDatabases и "волшебная" функция ЗаполнитьМассивУчеников

Без них и без автопроверки всё бы было значительно сложнее для преподавателя - как такое проверить? А с ними - красота - задание разрабатывается и тестируется за три минуты!
👍1