Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/192: Рейтинг темы: голосов - 192, средняя оценка - 4.85
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22

Библиотека NETSquirrel для .NET и .NET Core

19.09.2019, 16:06. Показов 36708. Ответов 39

Студворк — интернет-сервис помощи студентам
NETSquirrel - идейное продолжение и обобщение PABCSystem на платформы NET и NETCore. Её цель: сделать переход на другие .NET языки с PascalABC.NET и обратно наиболее безболезненным. Для PascalABC.NET сделан отдельный модуль NETSquirrelExtensions, адаптирующий в некоторой степени библиотеку под стиль PascalABC.NET.

Главная идея, заложенная в библиотеку - расширить привычный функционал модуля PABCSystem (точнее, его часть, поскольку PABCSystem также занимается системными задачами) до уровня всей платформы .NET (.NET Framework/.NET Core). NETSquirrel - продолжение начатого разработчиками PascalABC.NET модуля со своими добавлениями. Это позволит обеспечить наиболее безболезненный переход с PascalABC.NET на C# или другие .NET языки или в обратном направлении. Новое, что внесла библиотека - это:
1. Множество интерфейсов, для написания коллекций и их immutable версий.
2. Новые утилитные методы, например, для чтения кортежей, массивов и матриц с возможностью одновременной обработки ошибок при неверном вводе.
3. Методы расширения для вывода и изменения кортежей, массивов, матриц и последовательностей.
Библиотека широко использует паттерн null object, при реализации которого при неверных входных данных не бросается исключение, а возвращается объект-пустышка указанного типа.
4. Прокси-типы, которые позволяют указать как программист хочет чтобы пользователь видел некоторую коллекцию в отладчике Visual Studio или Rider.

Поддерживается как англоязычная, так и русскоязычная аудитория. Для ошибок в презентациях и на сайте созданы отдельные репозитории на GitHub.

Примеры кода:
Pascal
1
2
3
4
5
6
7
8
{$reference NETSquirrel.dll}
uses NETSquirrelExtensions;
uses NETSquirrel.Utils;
 
begin
  var matrix := MatricesUtils.GenerateMatrix(10, 10, (i, j) -> (i, j), 1, 1);
  (matrix / ((0, 9, 2), (0, 9, 2))).PrintAsMatrix(); // своеобразные срезы
end.
Pascal
1
2
3
4
5
6
{$reference NETSquirrel.dll}
uses NETSquirrelExtensions;
 
begin
  (VRec(1, 2) = VRec(1, 2)).PrintLine(); // размерные кортежи
end.
Кликните здесь для просмотра всего текста
Поддержка англоязычной аудитории обусловлена стимулом изучать английский и практиковать себя в нём.


Замечания и предложения по улучшению библиотеки - приветствуются.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.09.2019, 16:06
Ответы с готовыми решениями:

Установится ли PascalABC.NET на систему, где установлен только .NET 4.6.1?
Привет всем. Вопрос, собственно, озвучен выше. Конкретнее: есть компьютер со свежеустановленной Win10 x64, на которой присутствует...

Модуль для PascalABC.NET
Здравствуйте уважаемые форумчане, возник вопрос почему не работает модуль. Вот модуль unit Sockets; #reference 'System.dll' ...

Есть ли PascalABC.NET для Mac OS X?
Есть ли PascalABC.NET для Mac OS X?

39
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
20.09.2019, 13:47  [ТС]
Краткий FAQ по некоторым возможностям модулей и библиотеки, разработанный специально для PascalABC.NET (для C# версии - презентации). Цель: быстро ввести пользователя в курс дела.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
22.09.2019, 13:48  [ТС]
Краткий FAQ по некоторым возможностям модуля PABCSystem, разработанный специально для C#.

Имеются предложения по дополнению данного FAQ? Я пока не решил, что включать в раздел Уровень: Сложный.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
23.09.2019, 11:50  [ТС]
Выпуск NETSquirrel 0.0.13 [Night build] запланирован на сегодня.

Добавлено через 4 часа 58 минут
NETSquirrel 0.0.13 [Night build] загружена в раздел Releases на GitHub.

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

Пример кода к пункту 1:
Pascal
1
2
3
4
5
6
7
8
9
10
{$reference NETSquirrel.dll}
uses NETSquirrel;
uses NETSquirrel.Utils;
uses GeneralExtensions;
 
begin
  var prompts := ArrayOf('first', 'second', 'third', 'fourth', 'fifth');
  ArraysUtils.ReadBoolArray(5, (i: integer) -> $'{prompts[i]}:').PrintLine();
  MatricesUtils.ReadBoolMatrix(5, 5, (i, j) -> $'{prompts[i]}, {prompts[j]}:').PrintAsMatrix();
end.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
25.09.2019, 11:52  [ТС]
Добавлены расширения для System.Numerics:

Pascal
1
2
3
4
5
6
7
8
9
10
{$reference NETSquirrel.dll}
uses NumericsExtensions;
uses GeneralExtensions;
 
begin
  var prompts := ArrayOf('first', 'second', 'third');
  ReadVector3();
  ReadMatrix3x2('Элемент {0}, {1}:');
  ReadMatrix3x2((i, j) -> $'{prompts[i]}, {prompts[j]}:');
end.
Добавлено через 3 часа 42 минуты
Вы можете использовать форму обратной связи для оценки качества выполненной работы, а также предложений по улучшению библиотеки.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
25.09.2019, 18:58  [ТС]
В данный момент библиотека NETSquirrel 0.0.13 включает следующий функционал:
- интерфейсы коллекций (immutable их версии включены) для стандартизации кода
- прокси-типы для указания отладчикам Rider и Visual Studio формата отображения коллекций как обобщённых, так и необобщённых
- методы для чтения и генерации кортежей, массивов и матриц с возможностью обработки ошибок и указания форматных строк при вводе строкой, либо лямбда функцией
- расширения для модификации кортежей, массивов и матриц с возможностью игнорирования ошибочных входных данных (значения null), паттерн null-object
- типы делегатов
- срезы массивов и матриц
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
27.09.2019, 21:19  [ТС]
Опубликован FAQ по работе с базовыми типами.

Добавлено через 5 часов 7 минут
- Опубликован FAQ по работе с модулем GeneralExtensions.
- Опубликован FAQ по работе с модулем TuplesExtensions.

Добавлено через 2 часа 6 минут
Выпуск NETSquirrel 0.0.17 запланирован на понедельник.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
30.09.2019, 12:38  [ТС]
Опубликована NETSquirrel 0.0.17 [Night build].

Изменения:
- Улучшена обработка ошибок по всему проекту
- Расширения IndexMin, IndexMax, IndexMinOrDefault, IndexMaxOrDefault для IEnumerable<T>
- Возможность указывать BindingFlags в AutoPrint/AutoPrintLine/AutoPrintLines

Пример кода:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{$reference NETSquirrel.dll}
uses System.Reflection;
 
type
  Some = class
  public
    a: integer;
  
  private
    b, c: integer;
  end;
 
begin
  (new Some()).AutoPrintLine(BindingFlags.NonPublic or BindingFlags.Instance, ', ');
end.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
01.10.2019, 09:24  [ТС]
Библиотека NETSquirrel для .NET и .NET Core - формат вывода индексаторов

Добавлено через 1 час 21 минуту
Группы поддержки: VK, OK, Мой мир.
0
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
01.10.2019, 11:22
а как в linux пользоваться этой библиотекой?
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
01.10.2019, 13:05  [ТС]
Joy, библиотека распространяется в двух версиях (в архиве в разделе Releases при скачивании получаете сразу обе) - под NETCore 2.2 и под NET 4.5. Под Linux - Вам нужна первая версия.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
03.10.2019, 21:20  [ТС]
Создана группа, посвящённая данной библиотеке. В ней будут проводиться различные опросы, таким образом, это исключит необходимость создавать многочисленные темы в разделе PascalABC.NET по NETSquirrel.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
05.10.2019, 18:47  [ТС]
Опубликована NETSquirrel 0.0.17.2 [Night build].

Изменения:
- Улучшен AutoPrint.
- AutoPrint переименован в DebugPrint (обратная совместимость сохранена).
- Методы GenerateArray и GenerateMatrix, занимающиеся генерацией массивов и матриц с возможностью ссылки на остальные элементы создаваемого массива или матрицы.

Генерация массива, который заполнен числами Фибоначчи:
Pascal
1
2
3
4
5
6
7
8
9
10
11
{$reference NETSquirrel.dll} 
uses NETSquirrel.Utils;
 
begin
  ArraysUtils.GenerateArray&<integer>(10, (a, i) -> begin
    case i of
      0, 1: Result := 1;
      else Result := a[i - 1] + a[i - 2];
    end;
  end).PrintLine();
end.
Аналогично - для матриц:
Pascal
1
2
3
4
5
6
7
8
9
10
11
{$reference NETSquirrel.dll} 
uses NETSquirrel.Utils;
 
begin
  MatricesUtils.GenerateMatrix&<integer>(10, 10, (a, i, j) -> begin
    case j of
      0, 1: Result := 1;
      else Result := a[i, j - 1] + a[i, j - 2];
    end;
  end).PrintAsMatrix();
end.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
07.10.2019, 15:14  [ТС]
К проекту присоединился новый тестировщик. Желающих помочь проекту могу включить в одну или несколько из данных команд (за исключением Maintainers). Главное, чтобы новые участники проекта могли:
- Работать с Rider/Visual Studio.
- Работать с Git и GitHub.
- Желали помочь проекту.
Обращаться по данным вопросам Вы можете ко мне через официальную группу поддержки, либо по другим удобным Вам каналам связи.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
08.10.2019, 12:58  [ТС]
Вся документация с данного момента будет располагаться здесь. Версия на русском языке также разрабатывается.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
11.10.2019, 20:20  [ТС]
Забавное совпадение:
Squirrel (с англ. — «белка») — интерпретируемый язык программирования, разработанный специально для использования в качестве скриптового языка в приложениях реального времени, таких как компьютерные игры. Является свободно распространяемым, с открытыми исходными текстами.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
13.10.2019, 17:24  [ТС]
В данный момент ведётся активная разработка документации по версии NETSquirrel 0.0.17.2.

В двух примерах ниже из документации показано как использовать лямбда-выражения для задания форматной строки-подсказки при вводе элементов массива и обработки ошибок при вводе:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using NETSquirrel.Extensions;
using NETSquirrel.Utils;
 
namespace Test
{
    internal static class Program
    {
        private static void Main(string[] args)
        {
            ArraysUtils.ReadBoolArray(10, e => e.Message.PrintLine(), "item {0} = ").PrintLine();
            ArraysUtils.ReadBoolArray(10, e => e.Message.PrintLine(),
                i => $"{new[] { "even", "odd" }[i % 2]} item = ").PrintLine();
        }
    }
}
Pascal
1
2
3
4
5
6
7
8
9
{$reference NETSquirrel.dll}
uses NETSquirrel.Utils;
uses NETSquirrel;
 
begin
  ArraysUtils.ReadBoolArray(10, procedure(e) -> e.Message.PrintLine(), 'item {0} = ').PrintLine();
  ArraysUtils.ReadBoolArray(10, procedure(e) -> e.Message.PrintLine(),
    i -> string.Format('{0} item = ', (new string[] ('even', 'odd'))[i mod 2])).PrintLine();
end.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
13.10.2019, 19:05  [ТС]
Цветной ввод матрицы:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
{$reference NETSquirrel.dll}
uses NETSquirrel.Utils;
uses System;
 
begin
  Console.ForegroundColor := ConsoleColor.White;
  MatricesUtils.ReadIntMatrix(10, 10, procedure(e) -> e.Message.SetForegroundColor(ConsoleColor.Red).PrintLine(),
    (i, j) -> begin
      Console.ForegroundColor := ConsoleColor(3 + (i + j) mod 2);
      Result := 'item ({0}, {1}) = ';
    end, true).SetForegroundColor(ConsoleColor.White).PrintAsMatrix();
end.
Миниатюры
Библиотека NETSquirrel для .NET и .NET Core  
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
13.10.2019, 19:14  [ТС]
Создана дискуссия, посвящённая ошибкам документации NETSquirrel.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
16.10.2019, 15:29  [ТС]
Начато обсуждение системы сохранения предыдущих значений параметров методов в NETSquirrel.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.10.2019, 15:29
Помогаю со студенческими работами здесь

Персонаж для игры на PascalABC.NET
Здравствуйте. Я программирую игру на PascalABC.NET и я столкнулся с такой проблемой. Смысл игры в том, что космический корабль уничтожает...

Процедура GetMem для PascalABC.NET
Долго долго курил страницы форума, изучал динамические списки. Когда код для программы уже практически собрался в единое целое решил...

Редактор форм для PascalABC.NET
Существуют ли редакторы форм для PascalABC.NET, а то в PascalABC был свой. Добавлено через 41 минуту А я узнал Файл&gt;Новый...

Исправить код для PascalABC.net
как минимум, первое место которое ему не нравиться это как я обьявляю тип объект const size=10; type pvec=^vec; ...

Полезные коды для PascalABC.NET
В этой теме размещаются полезные исходники программ, различные процедуры и функции, а так же готовые решения на часто задаваемые вопросы,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru