Расширение 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
Вышло обновление 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/
В новой версии расширения появилось несколько важных возможностей:
🔹 Навигация по коду — переход к определению процедур и функций по 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: обучение современному программированию.
В примере - комбинированное использование запросов: вначале вычисление среднего по некоторому полю, потом фильтрация всех, кто выше среднего с проекцией на необходимые поля.
С автоматической проверкой.
Всё как мы любим.
Интересное здесь еще конечно то, что используется специализированный учебный модуль ABCDatabases и "волшебная" функция ЗаполнитьМассивУчеников
Без них и без автопроверки всё бы было значительно сложнее для преподавателя - как такое проверить? А с ними - красота - задание разрабатывается и тестируется за три минуты!
Готовлю новые задания для школьников на завтра.
Обожаю эту тему. То, для чего создавался 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