NETSquirrel - вопросы и ответы

Я не сказал, что будет серьёзные проблемы.

В случае использования самого System.Collections.IEnumerable возможен boxing. Но, я не думаю, что это слишком большая проблема, в частности из-за того, что данная потребность не слишком велика, на мой взгляд. В предыдущем своём посте внёс уточнение.

Но, в любом случае, пока плюсов больше, минусы мелкие и их перекрывают плюсы. Поэтому, склоняюсь (и изначально склонялся) ввести данный функционал.

Тема на Cybeforum переехала в раздел по .NET. Тема в разделе PascalABC.NET больше не поддерживается. Однако, в случае вопросов по использованию библиотеки в данном языке, я буду отвечать на них.

А разве еще кто-то читает киберфорум?

Да. Количество просмотров постепенно растёт… Хотя, хотелось, чтобы росло быстрей, но для этого, очевидно, надо и лучше стараться, чтобы не только красивая “реклама” библиотеки была, но и внутри она была нормальной (сейчас она неплоха, но как её автору мне этого недостаточно).

А, в этом смысле… Так а какая разница, Print(…) всё равно принимает object, боксинг там всегда был. Да и он не может не_боксить, потому что для записей там внутри вызываются только .GetType и .ToString . Поэтому если не боксить при входе - боксить будет потом хотя бы 2 раза для вызова этих функции.

В NETSquirrel нет такого Print, который принимает object, на данный момент. У некоторого множества типов явно прописаны отдельные методы расширения Print.

Но для типа из шаблона - экстеншнметод Print не вызвать без match, который не сильно то лучше боксинга.

1 лайк

Пока Print имеется для:

  • базовых типов в понимании C#
  • последовательностей IEnumerable<T>
  • KeyValuePair<TKey, TValue>
  • IntPtr, UIntPtr
  • StringBuilder
  • System.ValueTuple<...>

Универсальный Print не создавался для избежания лишних boxing, а также для чёткого ограничения множества стандартных в контексте библиотеки типов. Для универсального вывода есть DebugPrint, но он просто выводит значения свойств и полей объекта. Пока нет аналога Print из PABCSystem.

Возможное решение: PrintAsArray, который выводит массив и возвращает его. Если будет реализовано именно так, то это будет подобным тому, как сделано в отношении матриц - PrintAsMatrix:

var x := ArraysUtils.GenerateArray(10, i -> i ** 2).PrintLineAsArray(); // Тип x - array of integer.

Минус - длина кода, по сравнению с возможным аналогом на PABCSystem. В C# можно было бы сократить через using static, но на счёт PascalABC.NET мне неизвестно имеется ли аналогичная фишка или нет (посему призываю @Admin, @ibond, @RAlex, @Sun_Serega, @Kotov).

Ну, фича подобная таки отсутствует.

1 лайк

Доступен pre-release NETSquirrel 0.0.25 [Night build].

Минимальные требования:

  • NETCore: 2.2
  • NET: 4.5

Улучшения:

Пример:

C#
using NETSquirrel.Extensions;
using NETSquirrel.Utils;

namespace Test
{
    internal static class Program
    {
        private static void Main(string[] args)
        {
            ArraysUtils.CreateRandomIntArray(10, -10, 11).PrintLine().Abs().PrintLine();
        }
    }
}
Visual Basic.NET
Imports NETSquirrel.Extensions
Imports NETSquirrel.Utils

Module Module1
    Sub Main()
        ArraysUtils.CreateRandomIntArray(10, -10, 11).PrintLine().Abs().PrintLine()
    End Sub
End Module
Managed C++
#include "pch.h"
using namespace NETSquirrel::Utils;
using namespace NETSquirrel::Extensions;

using namespace System;

template<typename T>
using Ptr = System::Collections::Generic::IEnumerable<T>^;

using Ut = ArraysUtils;
using Ex = IEnumerableExtensions;

int main(array<System::String ^> ^args)
{
    auto x = Ut::CreateRandomIntArray(10, -10, 11);
    Ex::PrintLine((Ptr<int>)x, ", ");
    Ex::PrintLine(Ex::Abs(x), ", ");
    return 0;
}
PascalABC.NET
{$reference NETSquirrel.dll}
uses NETSquirrel;
uses NETSquirrel.Utils;

begin
  ArraysUtils.CreateRandomIntArray(10, -10, 11).PrintLine().Abs().PrintLine();
end.

Вывод:

9 1 -5 -4 -7 10 -10 1 -9 4
9 1 5 4 7 10 10 1 9 4

Перейти к содержанию

@Sun_Serega/@Kotov , можете перенести в Болталку все сообщения выше данного?

Как ни странно, но темы переносить я могу, а вот отдельные сообщения нет…

В таком случае призываю @Admin.

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

Перейти к содержанию

Начата публикация решений задач на NETSquirrel:

Перейти к содержанию

Интересно бы посмотреть соотношение производительности с аналогичным кодом РАВС.

1 лайк

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

Да, можно сделать отдельный раздел на GitHub, например, посвящённый сравнению производительности данных “вещей”. Например, можно сравнить скорость работы методов вывода различных случайных матриц случайного размера (аналогичное для массивов и кортежей).

Доступен для использования NETSquirrel 0.0.25 [Night build].

Перейти к содержанию

Репозитории модулей для PascalABC.NET и сниппетов сделаны readonly (предварительно перепроверены).

Поддержка данной темы прекращена. Желания и предложения, которые ещё не были выполнены будут реализованы (в частности, вопрос по поводу сравнения производительности). Всем спасибо, кто принял участие в беседе по NETSquirrel.