Многострочные строковые литералы '''
В PascalABC.NET появились Multiline строковые литералы, которые недавно появились в таких языках как C# 11, Delphi 12, Java 22.
Строки с открывающими и закрывающими кавычками не должны содержать непробельных символов.
Во всех строках игнорируется отступ, равный отступу последней строки.
#новое
В PascalABC.NET появились Multiline строковые литералы, которые недавно появились в таких языках как C# 11, Delphi 12, Java 22.
Строки с открывающими и закрывающими кавычками не должны содержать непробельных символов.
Во всех строках игнорируется отступ, равный отступу последней строки.
#новое
Модуль WPF - парсинг оконных элементов из XAML-строки
В модуле WPF появилась возможность создавать оконные элементы, загружая их из XAML-строки. XAML-строку удобно задавать, используя синтаксис многострочных строковых литералов.
Чтобы затем воспользоваться дочерними элементами в программе, необходимо сопоставить их переменным и затем привязать обработчики.
На скриншоте - программа, иллюстрирующая создание StackPanel с двумя оконными элементами, сопоставление дочерним элементам переменных программы и затем привязка обработчика, меняющего текст в TextBlockе в зависимости от текста в TextBox.
#новое
В модуле WPF появилась возможность создавать оконные элементы, загружая их из XAML-строки. XAML-строку удобно задавать, используя синтаксис многострочных строковых литералов.
Чтобы затем воспользоваться дочерними элементами в программе, необходимо сопоставить их переменным и затем привязать обработчики.
На скриншоте - программа, иллюстрирующая создание StackPanel с двумя оконными элементами, сопоставление дочерним элементам переменных программы и затем привязка обработчика, меняющего текст в TextBlockе в зависимости от текста в TextBox.
#новое
Новый метод строк ToLines
В стандартной библиотеке появился новый метод строк ToLines, разбивающий многострочную строку на отдельные строки
Это удобно также при считывании файла как отдельной строки:
#новое
В стандартной библиотеке появился новый метод строк ToLines, разбивающий многострочную строку на отдельные строки
Это удобно также при считывании файла как отдельной строки:
ReadAllText('a.txt').ToLines
#новое
Оптимизировано множественное присваивание
Закончена работа по оптимизации множественного присваивания. Один из результатов можно видеть на скриншоте: данная программа ускорена примерно в 2 раза.
Нетрудно проверить, что аналогичная программа, написанная на C#, работает в 2 раза медленнее.
Это - основной результат выпускной работы бакалавра направления ФИИТ мехмата ЮФУ Филонова Александра: https://pascalabc.net/downloads/Diploms/Opt_Tuple_Assignment_Filonov.pdf
#новое
Закончена работа по оптимизации множественного присваивания. Один из результатов можно видеть на скриншоте: данная программа ускорена примерно в 2 раза.
Нетрудно проверить, что аналогичная программа, написанная на C#, работает в 2 раза медленнее.
Это - основной результат выпускной работы бакалавра направления ФИИТ мехмата ЮФУ Филонова Александра: https://pascalabc.net/downloads/Diploms/Opt_Tuple_Assignment_Filonov.pdf
#новое
Изменения, связанные со словарями
Готовимся к версии 3.10.
Из Kotlinа перекочевал ряд методов, конструкций и операций со словарями.
Вывод:
#новое
Готовимся к версии 3.10.
Из Kotlinа перекочевал ряд методов, конструкций и операций со словарями.
begin
// Новая операция 1 to 2 - синоним KV(1,2)
var d := Dict('cat' to 'кошка', 'dog' to 'собака');
// Новая функция Pair - синоним KV
var d0 := Dict(Pair('cat', 'кот'), Pair('camel', 'верблюд'));
// Более сложная структура
var dd := Dict('Иванов' to |5, 3, 3|, 'Петров' to |4, 4|);
// Копия словаря
var d1 := Dict(d);
// Инициализация массивами ключей и значений
var d2 := Dict(|11, 22|, |333, 444|);
// Обновление значений и добавление новых
d.Update(d0);
// То же
d += d0;
// Слияние словарей
var d3 := d + Dict('world' to 'мир', 'cloud' to 'облако');
Println(d3);
// Вычитание пар с данными ключами
d3 -= Seq('cat', 'camel');
Println(d3);
d3 := d3 - 'world';
Println(d3);
end.
Вывод:
{(cat,кот),(dog,собака),(camel,верблюд),(world,мир),(cloud,облако)}
{(dog,собака),(world,мир),(cloud,облако)}
{(dog,собака),(cloud,облако)}
#новое
Внешние функции Zip и Cartesian
В стандартной библиотеке реализованы внешние функции Zip и Cartesian с количеством последовательностей от 2 до 5 и необязательной функцией проекции
#новое
В стандартной библиотеке реализованы внешние функции Zip и Cartesian с количеством последовательностей от 2 до 5 и необязательной функцией проекции
#новое
Обновлённый модуль Turtle
Обновлён школьный модуль Turtle для Исполнителя Черепаха.
Для знакомства с возможностями можно скачать новую версию и запустить указанную программу.
Обязательно понажимайте Пробел - меняется отображение координат.
Если программа будет тормозить при перерисовке, уменьшите количество итераций в цикле.
Принимаются предложения и сообщения о багах.
#новое
Обновлён школьный модуль Turtle для Исполнителя Черепаха.
uses Turtle;
begin
SetWidth(1.4);
SetColor(Colors.Blue);
//ToPoint(3,0);
Down;
loop 4000 do
begin
//Circle(0.1);
Forw(0.3);
Turn(Random(-120,120));
//Sleep(1);
end;
end.
Для знакомства с возможностями можно скачать новую версию и запустить указанную программу.
Обязательно понажимайте Пробел - меняется отображение координат.
Если программа будет тормозить при перерисовке, уменьшите количество итераций в цикле.
Принимаются предложения и сообщения о багах.
#новое
Функция SetOf
В PascalABC.NET появилась функция SetOf для создания множества.
Она возвращает множество HashSet, но это может измениться.
Функция SetOf введена для обучения начинающих.
На скриншоте - программа вычисления симметрический разности двух множеств.
#новое
В PascalABC.NET появилась функция SetOf для создания множества.
Она возвращает множество HashSet, но это может измениться.
Функция SetOf введена для обучения начинающих.
На скриншоте - программа вычисления симметрический разности двух множеств.
#новое
Преобразование в вещественное, имеющее другой разделитель целой и дробной части
Реализован ряд дополнительных параметров для преобразования строк в вещественные с другим разделителем целой и дробной части
Можно также вызвать глобальную процедуру SetDecimalSeparator(','), которая будет влиять на все последующие преобразования
#новое
Реализован ряд дополнительных параметров для преобразования строк в вещественные с другим разделителем целой и дробной части
Можно также вызвать глобальную процедуру SetDecimalSeparator(','), которая будет влиять на все последующие преобразования
#новое
Визуализация массива точек в Turtle
В модуле Turtle появилась функция визуализации массива точек DrawPoints. В качестве параметров можно передавать либо массив точек, либо массивы абсцисс и ординат точек.
Вот программа, визуализирующая первый тестовый набор точек с двумя кластерами. На скриншоте видно, что к сожалению границы кластера не целочисленные.
#новое
#ЕГЭ
В модуле Turtle появилась функция визуализации массива точек DrawPoints. В качестве параметров можно передавать либо массив точек, либо массивы абсцисс и ординат точек.
Вот программа, визуализирующая первый тестовый набор точек с двумя кластерами. На скриншоте видно, что к сожалению границы кластера не целочисленные.
uses Turtle;
begin
Window.Title := 'Кластеризация';
var a := ReadLines('demo_2025_27_А.txt').Skip(1).JoinToString.ToReals(',').ToArray;
var xx := a[::2];
var yy := a[1::2];
DrawPoints(xx,yy);
end.
#новое
#ЕГЭ
Библиотека MathNet.Numerics.dll
Библиотека математических вычислений MathNet.Numerics.dll интегрирована в инсталлятор PascalABC.NET.
На скриншоте - генерация набора чисел, подчиненного нормальному распределению
#новое
Библиотека математических вычислений MathNet.Numerics.dll интегрирована в инсталлятор PascalABC.NET.
На скриншоте - генерация набора чисел, подчиненного нормальному распределению
#новое
Автоклассы и их предки
В PascalABC.NET стало возможно наследовать автоклассы от классов без полей. Это можно использовать в ряде сценариев.
#новое
В PascalABC.NET стало возможно наследовать автоклассы от классов без полей. Это можно использовать в ряде сценариев.
#новое
Новый модуль Coords
Модуль Coords предназначен для отображения графических элементов с масштабированием. Он позволяет отображать различные графические примитивы без анимации - при масштабировании мышью все примитивы заново "проигрываются" с новым масштабом.
Необходимо скачать новую версию.
На основе модуля Coords написан модуль Turtle.
#новое
Модуль Coords предназначен для отображения графических элементов с масштабированием. Он позволяет отображать различные графические примитивы без анимации - при масштабировании мышью все примитивы заново "проигрываются" с новым масштабом.
Необходимо скачать новую версию.
uses Coords;
function RandomPoint: Point := Pnt(Random(-13,13),Random(-10,10));
begin
DrawPoints(ArrGen(10,i -> RandomPoint),PointRadius := 4);
DrawPoints(ArrGen(10,i -> RandomPoint),PointRadius := 6);
DrawPoint(2,3,Colors.Red);
DrawCircle(1,1,1,Colors.LightBlue);
DrawRectangle(3,2,2,1);
DrawText(3,2,'Hello');
DrawTextUnscaled(0,0,'Текст не масштабируется', Size := 20, Color := Colors.Red);
DrawText(-4,7,'Текст масштабируется', FontName := 'Courier New', Size := 34);
end.
На основе модуля Coords написан модуль Turtle.
#новое
🆕 Новый метод Window.SaveToClipboard
В GraphWPF появился метод Window.SaveToClipboard сохранения содержимого окна в буфер обмена.
Теперь можно легко сохранять содержимое окна прямо в буфер обмена всего одной строкой кода! Это отличное решение для быстрого обмена информацией, создания скриншотов или копирования данных для дальнейшего использования.
🔧 Пример использования:
✨ Что это дает?
✦ Удобство в разработке: быстрое сохранение визуальных данных.
✦ Интеграция с другими приложениями: копируйте данные напрямую и вставляйте в любые другие программы.
✦ Экономия времени: больше не нужно использовать сторонние инструменты для захвата экранов.
Пробуйте новый метод и делитесь своими впечатлениями! 🚀
#новое
В GraphWPF появился метод Window.SaveToClipboard сохранения содержимого окна в буфер обмена.
Теперь можно легко сохранять содержимое окна прямо в буфер обмена всего одной строкой кода! Это отличное решение для быстрого обмена информацией, создания скриншотов или копирования данных для дальнейшего использования.
🔧 Пример использования:
uses GraphWPF;
begin
Circle(200,200,100,Colors.LightBlue);
Window.SaveToClipboard;
end.
✨ Что это дает?
✦ Удобство в разработке: быстрое сохранение визуальных данных.
✦ Интеграция с другими приложениями: копируйте данные напрямую и вставляйте в любые другие программы.
✦ Экономия времени: больше не нужно использовать сторонние инструменты для захвата экранов.
Пробуйте новый метод и делитесь своими впечатлениями! 🚀
#новое
Новые множества
В PascalABC.NET обновлена реализация встроенных множеств set of T, просуществовавшая 17 лет. За это время в PascalABC.NET внесено огромное количество улучшений: появились обобщенные классы, перегрузка операций, методы расширения, реализация интерфейсов, последовательности. Именно благодаря этим средствам реализация новых множеств стала возможной.
В результате новые множества значительно ускорены, приближаясь по эффективности к HashSet<T>.
На скриншоте - программа, которая работает в старой версии примерно в 1000 медленнее.
Обновите Паскаль - скачайте новую версию!
#PascalABC #новое
В PascalABC.NET обновлена реализация встроенных множеств set of T, просуществовавшая 17 лет. За это время в PascalABC.NET внесено огромное количество улучшений: появились обобщенные классы, перегрузка операций, методы расширения, реализация интерфейсов, последовательности. Именно благодаря этим средствам реализация новых множеств стала возможной.
В результате новые множества значительно ускорены, приближаясь по эффективности к HashSet<T>.
На скриншоте - программа, которая работает в старой версии примерно в 1000 медленнее.
Обновите Паскаль - скачайте новую версию!
#PascalABC #новое
begin
var s: set of integer;
var n := 10000000;
for var i:=1 to n do
s += [i];
Print(MillisecondsDelta);
end.
Нововведения в модуде Coords
В модуле Coords появились функции Distance, Middle и многое другое.
Скачайте новую версию!
#новое
В модуле Coords появились функции Distance, Middle и многое другое.
uses Coords;
begin
Globals.PointRadius := 2.3;
Globals.LineWidth := 1.0;
var p1 := Pnt(2,3);
var p2 := Pnt(-4,7.3);
var p3 := Pnt(-5,-3);
DrawPoint(p1);
DrawPoint(p2);
DrawPoint(p3);
DrawText(p1,'A', Align := Alignment.LeftBottom, Size := 18);
DrawText(p2,'B', Align := Alignment.LeftBottom, Size := 18);
DrawText(p3,'C', Align := Alignment.RightTop, Size := 18);
DrawLine(p1,p2);
DrawLine(p1,p3);
DrawLine(p2,p3);
DrawText(Middle(p1,p2), p1.Distance(p2).ToString(2), Align := Alignment.Center, BackgroundColor := Colors.LightBlue);
DrawText(Middle(p2,p3), p2.Distance(p3).ToString(2), Align := Alignment.Center,
BackgroundColor := Colors.White, BorderWidth := 0.5);
DrawText(Middle(p1,p3), p1.Distance(p3).ToString(2), Align := Alignment.Center, BackgroundColor := Colors.LightGreen);
end.
Скачайте новую версию!
#новое
Множества в PascalABC.NET уже никогда не будут прежними
Начиная с версии 3.10.2 выражения вида [1,2,3] в PascalABC.NET трактуется по умолчанию как массив.
Данное поведение реализовано в последних версиях Delphi, что абсолютно правильно: использовать распространенную запись [1,2,3] для редко используемых встроенных множеств - расточительство!
Встроенные множества в PascalABC.NET остаются, но для их использования следует использовать переменные с явным объявлением типа. Таким образом, весь код на старом Паскале будет работать.
На скриншоте показано, в каких ситуациях запись в [...] трактуется как массив, а в каких - как множество.
Старый синтаксис литеральных массивов |1,2,3| сохранится, но объявляется устаревшим.
#новое
Начиная с версии 3.10.2 выражения вида [1,2,3] в PascalABC.NET трактуется по умолчанию как массив.
Данное поведение реализовано в последних версиях Delphi, что абсолютно правильно: использовать распространенную запись [1,2,3] для редко используемых встроенных множеств - расточительство!
Встроенные множества в PascalABC.NET остаются, но для их использования следует использовать переменные с явным объявлением типа. Таким образом, весь код на старом Паскале будет работать.
На скриншоте показано, в каких ситуациях запись в [...] трактуется как массив, а в каких - как множество.
Старый синтаксис литеральных массивов |1,2,3| сохранится, но объявляется устаревшим.
#новое
Learn PascalABC.NET in Y minutes
На вики-странице Learn PascalABC.NET in Y minutes впервые представлены все ключевые возможности PascalABC.NET, отражающие 17 лет его эволюции.
📌 Важнейшие разделы:
🔹 Структуры данных: кортежи, диапазоны, строки, массивы, списки, словари, множества, записи и классы.
🔹 Современные языковые средства: автовыведение типа, внутриблочные описания, циклы loop и foreach, цикл for с шагом, интерполяция строк, многострочные строки, параметры по умолчанию и именованные аргументы.
🔹 Современные операции:
🔹 Новые литеральные массивы
🔹 Лямбда-выражения и функциональные переменные: гибкость функционального подхода.
🔹 Последовательности: мощный инструмент для работы с данными, включая LINQ.
🔹 Поддержка разных парадигм: процедурное, функциональное, обобщенное и объектно-ориентированное программирование.
🔹 Полная интеграция со стандартной библиотекой .NET.
📖 Этот документ — уникальное собрание возможностей, отражающих эволюцию и современность PascalABC.NET.
🎖 Специальная благодарность @ulysses4ever за идею создания данного документа.
#PascalABCNET #новое
На вики-странице Learn PascalABC.NET in Y minutes впервые представлены все ключевые возможности PascalABC.NET, отражающие 17 лет его эволюции.
📌 Важнейшие разделы:
🔹 Структуры данных: кортежи, диапазоны, строки, массивы, списки, словари, множества, записи и классы.
🔹 Современные языковые средства: автовыведение типа, внутриблочные описания, циклы loop и foreach, цикл for с шагом, интерполяция строк, многострочные строки, параметры по умолчанию и именованные аргументы.
🔹 Современные операции:
in
, срезы, индексация с конца. to
для создания пар "ключ-значение" — лаконичные инструменты для работы с данными.🔹 Новые литеральные массивы
[1,2,3]
.🔹 Лямбда-выражения и функциональные переменные: гибкость функционального подхода.
🔹 Последовательности: мощный инструмент для работы с данными, включая LINQ.
🔹 Поддержка разных парадигм: процедурное, функциональное, обобщенное и объектно-ориентированное программирование.
🔹 Полная интеграция со стандартной библиотекой .NET.
📖 Этот документ — уникальное собрание возможностей, отражающих эволюцию и современность PascalABC.NET.
🎖 Специальная благодарность @ulysses4ever за идею создания данного документа.
#PascalABCNET #новое
PascalABC.NET материалы
Learn PascalABC.NET in Y minutes
Эта страница написана в формате сайта Learn X in Y minutes где X = PascalABC.NET. PascalABC.NET — это элегантный и типобезопасный компилируемый язык программирования...
faststring - новый тип в PascalABC.NET 3.10.3
На самом деле faststring - это просто синоним StringBuilder с немного дополненной функциональностью (методами Replace и IndexOf и операцией in)
Однако faststring работает действительно быстро: в примере на скрине, предложенном @tpehep33, метод PascalABC.NET опережает аналогичную функцию Python, написанную на C++, в 2 раза.
#новое
На самом деле faststring - это просто синоним StringBuilder с немного дополненной функциональностью (методами Replace и IndexOf и операцией in)
Однако faststring работает действительно быстро: в примере на скрине, предложенном @tpehep33, метод PascalABC.NET опережает аналогичную функцию Python, написанную на C++, в 2 раза.
// 6.0 sec PascalABC.NET vs 11.4 sec Python
begin
var mx := 0;
for var n := 4 to 9999 do
begin
var s: faststring := '4' + '1' * n;
while ('411' in s) or ('1111' in s) do
s.Replace('411', '14', 1)
.Replace('1111', '1', 1);
mx := max(mx, s.ToString.Sum(d -> d.todigit));
end;
print(mx, Milliseconds / 1000);
end.
#новое
Инициализатор пустой коллекции []
В 3.10.3 появился инициализатор [] любой коллекции. Он заменяет собой вызов конструктора по умолчанию.
Особенно удобно использовать [] для передачи в качестве параметра - тип формального параметра уже указан при описании, а при вызове в параметрах мы всего лишь указываем [].
#новое
В 3.10.3 появился инициализатор [] любой коллекции. Он заменяет собой вызов конструктора по умолчанию.
Особенно удобно использовать [] для передачи в качестве параметра - тип формального параметра уже указан при описании, а при вызове в параметрах мы всего лишь указываем [].
procedure ppp(s: sequence of integer; a: array of integer; lst: List<(real,real)>;
d: Dictionary<string,integer>; hs: HashSet<integer>; ss: SortedSet<integer>);
begin end;
begin
var old: set of integer := [];
var s: sequence of integer := [];
var a: array of integer := [];
var lst: List<(real,real)> := [];
var d: Dictionary<string,integer> := [];
var st: Stack<string> := [];
var q: Queue<string> := [];
var hs: HashSet<integer> := [];
var ss: SortedSet<integer> := [];
ppp([],[],[],[],[],[]);
var aa: array of array of integer := [[1],[],[2,3]];
end.
#новое