У официального канала PascalABC.NET появилось зеркало в MAX:
https://max.ru/channel_pabc_official
Оба канала заработают полным ходом с сентября.
Появилась также группа для обсуждения в MAX вот с такой красивой пригласительной ссылкой
https://max.ru/join/D28ks-E4Olzc7BN7mVlAqhNr-NXbgijzaRnGNQ9FXZQ
Она также полноценно заработает с сентября. Кому удобнее обсуждать в MAX - присоединяйтесь!
Между тем, нашим основным каналом остается Телеграм.
https://max.ru/channel_pabc_official
Оба канала заработают полным ходом с сентября.
Появилась также группа для обсуждения в MAX вот с такой красивой пригласительной ссылкой
https://max.ru/join/D28ks-E4Olzc7BN7mVlAqhNr-NXbgijzaRnGNQ9FXZQ
Она также полноценно заработает с сентября. Кому удобнее обсуждать в MAX - присоединяйтесь!
Между тем, нашим основным каналом остается Телеграм.
MAX
PascalABC.NET Официальный канал
Официальный канал системы программирования PascalABC.NET
Канал в Телеграм: https://t.me/pascalabc_official
Канал в Телеграм: https://t.me/pascalabc_official
💩19❤3🔥1
🎓 С Днём знаний!
Поздравляем всех подписчиков канала PascalABC․NET с началом нового учебного года! К 1 сентября у PascalABC․NET сразу несколько важных обновлений.
Новый сайт pascalabc.net.
Современный дизайн, новая структура и удобный доступ к материалам о системе, документации и обучении.
Заходите, смотрите и делитесь впечатлениями в комментариях!
PascalABC․NET 4.0.
● В новой версии появилась собственная библиотека ML PascalABC․NET для машинного обучения — без внешних зависимостей. Теперь задачи анализа данных и классического машинного обучения можно решать средствами самого PascalABC․NET.
● Ещё одно важное обновление — компилятор для .NET 10.0.
С 1 сентября! Успешного и интересного учебного года!
Поздравляем всех подписчиков канала PascalABC․NET с началом нового учебного года! К 1 сентября у PascalABC․NET сразу несколько важных обновлений.
Новый сайт pascalabc.net.
Современный дизайн, новая структура и удобный доступ к материалам о системе, документации и обучении.
Заходите, смотрите и делитесь впечатлениями в комментариях!
PascalABC․NET 4.0.
● В новой версии появилась собственная библиотека ML PascalABC․NET для машинного обучения — без внешних зависимостей. Теперь задачи анализа данных и классического машинного обучения можно решать средствами самого PascalABC․NET.
● Ещё одно важное обновление — компилятор для .NET 10.0.
С 1 сентября! Успешного и интересного учебного года!
❤21🔥4👍1
🎓 ML PascalABC․NET — машинное обучение без внешних зависимостей
Одно из главных нововведений PascalABC.NET 4.0 — новая библиотека ML PascalABC․NET.
Это уже не набор отдельных учебных алгоритмов, а целостная библиотека для анализа данных и классического машинного обучения.
В ней есть всё необходимое для полного ML-процесса:
● работа с табличными данными (
● подготовка признаков: пропуски, кодирование категорий, масштабирование
● классификация и регрессия: Logistic Regression, kNN, Decision Tree, Random Forest, Gradient Boosting
● кластеризация: KMeans и DBSCAN
● метрики, разбиение выборок и кросс-валидация
● ML-конвейеры для объединения подготовки данных и моделей
● встроенные датасеты для обучения и экспериментов
API библиотеки построен вокруг привычной современной схемы
И принципиальный момент — никаких внешних зависимостей.
Мы подготовили отдельный сайт с документацией, обучающими материалами и примерами:
ML PascalABC.NET — документация и обучение
Если вы хотите познакомиться с машинным обучением на PascalABC․NET, теперь для этого есть полноценная среда — от загрузки и подготовки данных до обучения модели и оценки её качества.
Одно из главных нововведений PascalABC.NET 4.0 — новая библиотека ML PascalABC․NET.
Это уже не набор отдельных учебных алгоритмов, а целостная библиотека для анализа данных и классического машинного обучения.
В ней есть всё необходимое для полного ML-процесса:
● работа с табличными данными (
DataFrame), статистика и визуализация● подготовка признаков: пропуски, кодирование категорий, масштабирование
● классификация и регрессия: Logistic Regression, kNN, Decision Tree, Random Forest, Gradient Boosting
● кластеризация: KMeans и DBSCAN
● метрики, разбиение выборок и кросс-валидация
● ML-конвейеры для объединения подготовки данных и моделей
● встроенные датасеты для обучения и экспериментов
API библиотеки построен вокруг привычной современной схемы
Fit / Transform / Predict. По организации работы и удобству программирования ML PascalABC.NET следует подходам scikit-learn, оставаясь при этом нативной библиотекой PascalABC․NET.И принципиальный момент — никаких внешних зависимостей.
DataFrame, линейная алгебра, модели, препроцессинг, метрики и валидация реализованы непосредственно в экосистеме PascalABC․NET.Мы подготовили отдельный сайт с документацией, обучающими материалами и примерами:
ML PascalABC.NET — документация и обучение
Если вы хотите познакомиться с машинным обучением на PascalABC․NET, теперь для этого есть полноценная среда — от загрузки и подготовки данных до обучения модели и оценки её качества.
🔥16❤🔥1👍1
🚀 Предварительная версия PascalABC․NET 4.0.1 уже доступна
На странице скачивания PascalABC․NET появился новый раздел — «Предварительная версия». Сейчас в нём доступна PascalABC․NET 4.0.1 Beta. Именно эта версия будет постепенно накапливать новые возможности и последние исправления.
По мере готовности она станет основной версией PascalABC․NET, а пока её можно использовать для знакомства с нововведениями и тестирования.
Сейчас доступны:
— StandardPack 4.0.1 Beta
— консольный компилятор 4.0.1 Beta для .NET 10
— список изменений в 4.0.1
Скачать предварительную версию:
https://pascalabc.net/ssyilki-dlya-skachivaniya/
На странице скачивания PascalABC․NET появился новый раздел — «Предварительная версия». Сейчас в нём доступна PascalABC․NET 4.0.1 Beta. Именно эта версия будет постепенно накапливать новые возможности и последние исправления.
По мере готовности она станет основной версией PascalABC․NET, а пока её можно использовать для знакомства с нововведениями и тестирования.
Сейчас доступны:
— StandardPack 4.0.1 Beta
— консольный компилятор 4.0.1 Beta для .NET 10
— список изменений в 4.0.1
Скачать предварительную версию:
https://pascalabc.net/ssyilki-dlya-skachivaniya/
❤9👍1
PascalABC․NET + VS Code + .NET 10
В PascalABC․NET 4.0 появился официальный плагин для Visual Studio Code.
https://pascalabc.net/vscode/
Он поддерживает:
◉ компиляцию и запуск программ;
◉ IntelliSense;
◉ диагностику ошибок;
◉ подсказки типов и параметров;
◉ .NET Framework 4.8 и .NET 10.
С .NET 10 PascalABC․NET можно использовать в VS Code на Windows, Linux и macOS.
На скриншоте — PascalABC․NET в VS Code с работающим IntelliSense и запуском программы под .NET 10.
В PascalABC․NET 4.0 появился официальный плагин для Visual Studio Code.
https://pascalabc.net/vscode/
Он поддерживает:
◉ компиляцию и запуск программ;
◉ IntelliSense;
◉ диагностику ошибок;
◉ подсказки типов и параметров;
◉ .NET Framework 4.8 и .NET 10.
С .NET 10 PascalABC․NET можно использовать в VS Code на Windows, Linux и macOS.
На скриншоте — PascalABC․NET в VS Code с работающим IntelliSense и запуском программы под .NET 10.
👍13🔥7❤🔥3❤3
Расширение PascalABC.NET для VS Code на Mac — работает! 🍎
Доступна версия 0.5.1 расширения PascalABC.NET для Visual Studio Code.
На macOS уже работают:
✅ запуск программ
✅ подсветка синтаксиса
✅ IntelliSense — автодополнение и информация о символах
Скачать расширение можно здесь:
https://pascalabc.net/vscode/
Доступна версия 0.5.1 расширения PascalABC.NET для Visual Studio Code.
На macOS уже работают:
✅ запуск программ
✅ подсветка синтаксиса
✅ IntelliSense — автодополнение и информация о символах
Скачать расширение можно здесь:
https://pascalabc.net/vscode/
❤8👏3👍1
RayTracer, поправленный ИИ
Давний пример, публиковался здесь.
Попросил ИИ его ускорить. Ускорил в 10 раз
https://gist.github.com/miks1965/592a9ee7a812cafa89dde0440b8ee9a3
Сейчас эта сцена рендерится за 0.3 сек.
Чтож, спасибо, Claude!
Давний пример, публиковался здесь.
Попросил ИИ его ускорить. Ускорил в 10 раз
https://gist.github.com/miks1965/592a9ee7a812cafa89dde0440b8ee9a3
Сейчас эта сцена рендерится за 0.3 сек.
Чтож, спасибо, Claude!
🔥12❤2👍1
Спаниели или бульдоги? 🐶
Поговорим о машинном обучении в PascalABC.NET и о том, почему это круто.
Возьмём простую учебную задачу. У нас есть вес и высота собак двух пород. Обучим логистическую регрессию и посмотрим, как она разделит бульдогов и спаниелей.
Несколько строк — и перед нами настоящий алгоритм машинного обучения: загрузка данных, подготовка признаков, обучение модели и визуализация найденной границы между классами.
И всё это — на PascalABC.NET.
Для обучения это особенно интересно: можно сначала разобраться, что такое признаки, классы, обучение модели и разделяющая граница, а уже потом переходить к более сложным моделям и инструментам.
Поговорим о машинном обучении в PascalABC.NET и о том, почему это круто.
Возьмём простую учебную задачу. У нас есть вес и высота собак двух пород. Обучим логистическую регрессию и посмотрим, как она разделит бульдогов и спаниелей.
uses MLABC, PlotML;
begin
var df := DataFrame.FromCsv('dogs.csv');
var X := df.ToMatrix(['Вес', 'ВысотаВХолке']);
var target := df.EncodeTarget('Порода');
var model := new LogisticRegression;
model.Fit(X, target.Labels);
Plot.Points(
df['Вес'].FloatValues,
df['ВысотаВХолке'].FloatValues,
target.Labels,
classNames := target.ClassNames
);
var (A, B, C) := model.DecisionBoundary.Coefficients;
Plot.Line(A, B, C);
Plot.SetLabels(
'Разделяющая прямая для двух пород',
'Вес, кг',
'Высота в холке, см'
);
end.
Несколько строк — и перед нами настоящий алгоритм машинного обучения: загрузка данных, подготовка признаков, обучение модели и визуализация найденной границы между классами.
И всё это — на PascalABC.NET.
Для обучения это особенно интересно: можно сначала разобраться, что такое признаки, классы, обучение модели и разделяющая граница, а уже потом переходить к более сложным моделям и инструментам.
❤4👍1
Трехмерная движущаяся 3D-сцена
По мотивам
https://habr.com/ru/articles/815653/?ysclid=mufywzozbj234491077
Ну не 256 байт а 860
Но всё равно интересно )
По мотивам
https://habr.com/ru/articles/815653/?ysclid=mufywzozbj234491077
Ну не 256 байт а 860
##
uses GraphABC;
SetWindowSize(396,240);
LockDrawing;
var t := 9.0;
repeat
t += 1;
for var i := 5999 downto 0 do
begin
var a := i mod 99/50-1;
var s := 1-i/4000;
var b := s;
var x := t;
var y := 1.0;
var z := 1;
var d := 1.0;
while z<99 do
begin
z += 1;
var h := 0;
if (z>32) and (x.Trunc mod 99>27) then
h := (x.Trunc div 9 xor z div 8)*8 mod 46;
if y>=6-h then
begin
s := (x.Trunc and y.Trunc and z) mod 3/z;
if d<1 then break;
a := 1;
b := 1;
d := z/99
end;
x += a;
y -= b
end;
var c := (255*(d*z/99-s)).Round.Clamp(0,255);
Brush.Color := RGB(c,c,c);
FillRectangle(i mod 99*4,i div 99*4,
i mod 99*4+4,i div 99*4+4)
end;
Redraw
until False
Но всё равно интересно )
🔥9👍2❤1
.NET 10 в PascalABC.NET:
Переход PascalABC.NET на .NET 10 открывает доступ ко многим современным возможностям платформы. Начинаем показывать их на небольших примерах.
Одна из них —
Результат:
При изменении
То есть
Это особенно полезно там, где важны производительность и минимизация лишних выделений памяти.
Продолжим знакомство с возможностями современного .NET в следующих постах.
#NET10
Span<T>Переход PascalABC.NET на .NET 10 открывает доступ ко многим современным возможностям платформы. Начинаем показывать их на небольших примерах.
Одна из них —
Span<T>: тип для эффективной работы с непрерывным участком памяти без копирования данных.begin
var a := [10,20,30,40,50];
var s := new System.Span<integer>(a,1,3);
s[1] := 333;
a.Println
end.
Результат:
10 20 333 40 50
Span<integer> s представляет три элемента массива a, начиная с индекса 1:20 30 40
При изменении
s[1] меняется непосредственно соответствующий элемент исходного массива.То есть
Span<T> позволяет работать с частью массива без создания нового массива и копирования элементов.Это особенно полезно там, где важны производительность и минимизация лишних выделений памяти.
Продолжим знакомство с возможностями современного .NET в следующих постах.
#NET10
👍8🏆6🔥2
🔹 PascalABC.NET + .NET 10: очередь с приоритетами
Продолжаем знакомиться с возможностями современного .NET, которые становятся доступны в PascalABC.NET после перехода на .NET 10.
Сегодня —
Обычная очередь работает по принципу «первым пришёл — первым вышел». В очереди с приоритетами порядок определяется не временем добавления, а приоритетом элемента.
Результат:
У
Поэтому здесь сначала извлекается
Очереди с приоритетами используются во многих алгоритмах: например, при поиске кратчайших путей, планировании задач и обработке событий.
И всё это — стандартная библиотека современного .NET.
Продолжаем знакомиться с возможностями современного .NET, которые становятся доступны в PascalABC.NET после перехода на .NET 10.
Сегодня —
PriorityQueue<TElement,TPriority> из System.Collections.Generic.Обычная очередь работает по принципу «первым пришёл — первым вышел». В очереди с приоритетами порядок определяется не временем добавления, а приоритетом элемента.
uses System.Collections.Generic;
begin
var q := new PriorityQueue<string,integer>;
q.Enqueue('low',10);
q.Enqueue('high',1);
q.Enqueue('middle',5);
while q.Count > 0 do
Println(q.Dequeue);
end.
Результат:
high
middle
low
У
PriorityQueue каждый элемент хранится вместе со своим приоритетом. При вызове Dequeue первым извлекается элемент с наименьшим значением приоритета.Поэтому здесь сначала извлекается
'high' с приоритетом 1, затем 'middle' с приоритетом 5 и только потом 'low' с приоритетом 10.Очереди с приоритетами используются во многих алгоритмах: например, при поиске кратчайших путей, планировании задач и обработке событий.
И всё это — стандартная библиотека современного .NET.
👍9🔥1
PascalABC.NET + .NET 10:
Продолжаем знакомиться с возможностями современного .NET.
создали один раз → читаем очень много раз.
После создания
Зато .NET может оптимизировать его внутреннюю структуру именно под быстрый поиск.
В характерных сценариях чтение из
Но есть обратная сторона: создание такого словаря может быть примерно в 10 раз медленнее.
Поэтому
🔹данные формируются один раз;
🔹затем почти не меняются;
🔹поиск выполняется тысячи, миллионы и больше раз.
Типичные примеры — таблицы соответствий, конфигурация, справочники, маршрутизация, метаданные, кеши неизменяемых данных.
То есть идея простая:
FrozenDictionaryПродолжаем знакомиться с возможностями современного .NET.
FrozenDictionary<TKey,TValue> — специальный словарь для сценария:создали один раз → читаем очень много раз.
uses System.Collections.Frozen;
begin
var d := Dict(
'one' to 1,
'two' to 2,
'three' to 3
);
var fd := FrozenDictionary.ToFrozenDictionary(d);
Println(fd['two']);
end.
После создания
FrozenDictionary уже нельзя изменять: добавлять и удалять элементы не получится.Зато .NET может оптимизировать его внутреннюю структуру именно под быстрый поиск.
В характерных сценариях чтение из
FrozenDictionary может работать примерно в 2 раза быстрее, чем из обычного Dictionary.Но есть обратная сторона: создание такого словаря может быть примерно в 10 раз медленнее.
Поэтому
FrozenDictionary имеет смысл не тогда, когда словарь постоянно меняется, а когда:🔹данные формируются один раз;
🔹затем почти не меняются;
🔹поиск выполняется тысячи, миллионы и больше раз.
Типичные примеры — таблицы соответствий, конфигурация, справочники, маршрутизация, метаданные, кеши неизменяемых данных.
То есть идея простая:
Dictionary — универсальный словарь.FrozenDictionary — словарь, оптимизированный для очень частого чтения.👍8🔥2
🔹 PascalABC.NET + .NET 10:
Продолжаем знакомство с «замороженными» коллекциями .NET.
После
Зачем такое ограничение?
Чтобы .NET мог один раз проанализировать элементы множества и подобрать внутреннюю структуру, оптимизированную для последующих поисков.
В зависимости от данных
Но за это приходится платить при создании: построение
Поэтому
создали один раз → проверяем наличие элементов очень много раз.
Например:
• набор ключевых слов;
• разрешённые или запрещённые значения;
• расширения файлов;
• имена команд;
• коды и идентификаторы;
• любые справочные множества, которые после запуска программы не меняются.
FrozenSetПродолжаем знакомство с «замороженными» коллекциями .NET.
После
FrozenDictionary — его родственник FrozenSet<T>.uses System.Collections.Frozen;
begin
var s := HSet('Pascal','C#','Python');
var fs: FrozenSet<string> := s.ToFrozenSet();
Println(fs.Contains('Pascal'));
end.
FrozenSet похож на обычный HashSet, но после создания его содержимое уже нельзя изменять.Зачем такое ограничение?
Чтобы .NET мог один раз проанализировать элементы множества и подобрать внутреннюю структуру, оптимизированную для последующих поисков.
В зависимости от данных
Contains у FrozenSet может работать примерно в 2–6 раз быстрее, чем у обычного HashSet.Но за это приходится платить при создании: построение
FrozenSet может быть в несколько раз медленнее — в отдельных тестах примерно в 8–9 раз.Поэтому
FrozenSet рассчитан на тот же сценарий:создали один раз → проверяем наличие элементов очень много раз.
Например:
• набор ключевых слов;
• разрешённые или запрещённые значения;
• расширения файлов;
• имена команд;
• коды и идентификаторы;
• любые справочные множества, которые после запуска программы не меняются.
HashSet — если множество нужно изменять.FrozenSet — если его нужно один раз сформировать и затем очень быстро выполнять Contains.❤6👍2
PascalABC.NET + .NET 10:
Продолжаем знакомиться с возможностями современного .NET.
Метод
Он позволяет один раз подготовить и оптимизировать набор значений, а затем использовать его во множестве поисков.
Здесь набор букв и цифр создаётся только один раз:
А затем тот же
Внутри .NET может выбрать для такого набора специальное представление и использовать оптимизированные алгоритмы, включая SIMD-векторизацию.
Поэтому
• один и тот же набор символов используется много раз;
• набор достаточно большой;
• нужно быстро обрабатывать большие объёмы текста.
Например, при разборе текста, лексическом анализе, поиске разделителей, проверке допустимых символов и обработке протоколов.
Идея простая:
обычный
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/
PascalABC.NET продолжает активно развиваться — и речь уже не только о новых конструкциях языка.
Сейчас основные направления связаны с переходом на современную платформу .NET и развитием всей инфраструктуры системы программирования:
— компилятор для .NET 10;
— расширение PascalABC.NET для Visual Studio Code;
— новый SDK PascalABC.NET;
— поддержка NuGet-пакетов;
— режимы работы с одним файлом, проектом и рабочим пространством;
— развитие библиотек и совместимости с современной .NET.
Часть этих задач уже реализована, часть находится в работе, а некоторые направления только исследуются.
Основные планы собраны на отдельной странице:
👉 Roadmap PascalABC.NET
https://pascalabc.net/roadmap/
❤9🔥1
Функции над функциями с помощью лямбда-выражений
Прошло меньше полутора месяцев с начала программирования на первом курсе направления ФИИТ — а мы уже можем писать такие вещи.
Возьмём полином четвёртой степени с двумя максимумами и определим оператор численного дифференцирования:
На графике:
🔴
🟢
🔵
Самое интересное здесь — даже не графики, а две строчки:
А вторая производная определяется почти как в математике:
Это возможно потому, что в PascalABC.NET процедуры и функции — объекты первого класса: их можно передавать в другие функции, хранить в переменных и возвращать как результат.
И лямбда-выражения позволяют записывать всё это очень компактно.
Прошло меньше полутора месяцев с начала программирования на первом курсе направления ФИИТ — а мы уже можем писать такие вещи.
Возьмём полином четвёртой степени с двумя максимумами и определим оператор численного дифференцирования:
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:
Продолжаем знакомиться с типами современного .NET.
Раньше для работы с датой или временем часто приходилось использовать
Для этого в .NET есть отдельные типы:
Результат, например при русской локали:
Это удобно для дат рождения, календарных дат, сроков, расписаний — везде, где часы, минуты и часовой пояс вообще не нужны.
Результат:
Например, его удобно использовать для времени начала занятия, открытия магазина, отправления поезда или ежедневного расписания.
Главное преимущество этих типов — точная модель данных.
Если программе нужна только дата, используем
Если нужно только время —
Если нужны и дата, и время вместе —
Меньше лишней информации — меньше возможностей случайно ошибиться в логике программы.
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.
Спасибо! 🚀
Эй, 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 — от работы с датами до численных расчётов и машинного обучения.
В 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:
Ещё один пример работы с 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
