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

В данном случае “цена” - это усилия, которые будут затрачены на освоение и преодоление возможных багов. Интересует, насколько это будет уравновешено преимуществами от использования библиотеки.

Тут сложно не согласиться: отличный стимул. Вот только это еще и стимул для неанглоязычной аудитории держаться от такой затеи подальше. Не думали на этот счет? Обычно все же отечественные разработчики заботятся и о русском языке. Я представляю, насколько сократилось бы число пользователей того же PascalАВС.NЕТ, если исключить из Справки и сообщений русский язык…

1 лайк

Я постарался структурировать библиотеку так, чтобы не было нужды запоминать все методы и классы в ней. То есть, чтобы требовалось запомнить лишь принципы ее построения и дальше её использование не представляло бы труда. На счёт багов - они есть в любом среднем или большом проекте (может, даже в маленьком, но вероятность ниже). Я стараюсь тестировать библиотеку, особенно перед выпуском нового релиза. Но, следить за каждой мелочью в таком большом объеме кода сложно. Исправлять ошибки - однозначно буду. На счёт уравновешено - смотря какие у Вас цели. Если Вам нужны возможности, подобные PABCSystem - полагаю, что перевешивать будут преимущества библиотеки, нежели количество ошибок в ней. :slight_smile:

Вы правы. Со временем постараюсь сделать и русскоязычные версии презентаций и остального материала для этой библиотеки. Как раз к выпуску релиза.

1 лайк

Введение.pptx (1016.4 KB) Использование библиотеки в PascalABC.NET.pptx (1.3 MB)

Выложил две презентации на русском языке, описывающие библиотеку, также и здесь. Есть предложения по их улучшению?

По этой ссылке доступны две презентации, которые на самом деле одна и та же, причем кадр №9 показывает два наложенных друг на друга фрейма и непонятно, о чем он.

1 лайк

Исправлено.

Согласен с тем, что при предварительном просмотре презентации это трудно понять. Вот как он выглядит при просмотре презентации (запускал из PowerPoint):

Был выбор между: выделить отдельный слайд под большой по сравнению с нижним код или сделать кнопку, по нажатию на которую появлялся бы полный код. Разумеется, можно сделать упрощённые презентации, чтобы не было проблем при отображении в таких сервисах как Google.

Расширения для базовых типов (NETSquirrel / PABCSystem):

  1. 1.IsBetween(0, 3) = 1.InRange(0, 3)
  2. 0.To(10) = 0.To(10)
  3. 10.DownTo(0) = 10.DownTo(0)
  4. 9.ToThis() = 10.Times() Отличие: ToThis генерирует последовательность от первого до последнего числа включительно, в отличиии от Times, в котором последнее число не включается в последовательность.
  5. 0.Stepped(2) = 0.Step(2)
  6. 0.Print() = 0.Print()
  7. 0.PrintLine() = 0.Println()
  8. int64(0).Print() = int64(0).Print()
  9. int64(0).PrintLine() = int64(0).Println()
  10. 0.2.Print() = 0.2.Print()
  11. 0.2.PrintLine() = 0.2.Println()
  12. 'a'.Print() = 'a'.Print()
  13. 'a'.PrintLine() = 'a'.Println()
  14. true.Print() = true.Print()
  15. true.PrintLine() = true.Println()

Сравнивался исключительно пересекающийся функционал. Цель: облегчить переход с PABCSystem на NETSquirrel и обратно.

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

Будут .ToWords, .JoinIntoString?

Расширения для последовательностей (NETSquirrel / PABCSystem):

  1. Seq(4, 9).Numerate() = Seq(4, 9).Numerate()
  2. Seq(4, 9).OrderBy() = Seq(4, 9).Sorted()
  3. Seq(4, 9).OrderByDescending() = Seq(4, 9).SortedDescending()
  4. Seq(3, 2).MinBy(x -> 10 - x) = Seq(3, 2).MinBy(x -> 10 - x)
  5. Seq(3, 2).MaxBy(x -> 10 - x) = Seq(3, 2).MaxBy(x -> 10 - x)
  6. Seq(3, 2).Cartesian(Seq(1, 4)) = Seq(3, 2).Cartesian(Seq(1, 4))
  7. Arr(4, 9).Shuffle() = Arr(4, 9).Shuffle()
  8. Seq(4, 9).Print(', ') = Seq(4, 9).Print(', ')
  9. Seq(4, 9).PrintLine(', ') = Seq(4, 9).Println(', ')

Сравнивался исключительно пересекающийся функционал. Цель: облегчить переход с PABCSystem на NETSquirrel и обратно.

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

В NETSquirrel - да. Только, возможно, с другими именами. Но, об этом будет сказано в постах сравнения NETSquirrel и PABCSystem.

1 лайк

Пусть, мы имеем следующий массив:

var x := 1.To(10).ToArray();

Расширения для IList<T> (NETSquirrel / PABCSystem):

  1. x.Slice((0, 9, 2)) = x.Slice(0, 2, 5) Отличие: в NETSquirrel срез задаётся через диапазон и шаг прохода по нему; в PABCSystem - через первый индекс диапазона, шаг и количество элементов среза.

Сравнивался исключительно пересекающийся функционал. Цель: облегчить переход с PABCSystem на NETSquirrel и обратно.

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

Пусть, мы имеем следующую матрицу:

var x := MatrGen(10, 10, (i, j) -> (i, j));

Расширения для матриц (NETSquirrel / PABCSystem):

  1. x.GetColumn(1) = x.Col(1)
  2. x.GetRow(1) = x.Row(1)
  3. x.SwapColumns(0, 1) = x.SwapCols(0, 1)
  4. x.SwapRows(0, 1) = x.SwapRows(0, 1)
  5. x.PrintAsMatrix() = x.Println(6) Отличие: PrintAsMatrix автоматически выравнивает элементы матрицы по столбцам, в то время как, Println использует указанную ширину столбца.

Сравнивался исключительно пересекающийся функционал. Цель: облегчить переход с PABCSystem на NETSquirrel и обратно.

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

Утилитные методы для создания массивов (NETSquirrel / PABCSystem):

  1. ArraysUtils.GenerateArray(10, i -> i, 1) = ArrGen(10, i -> i, 1)
  2. ArraysUtils.GenerateArray(10, 1, x -> x + 2) = ArrGen(10, 1, x -> x + 2)
  3. ArraysUtils.CreateRandomIntArray(10, 0, 10) = ArrRandomInteger(10, 0, 10)
  4. ArraysUtils.CreateRandomFloatArray(10, 0, 5.5) = ArrRandomReal(10, 0, 5.5)
  5. ArraysUtils.CreateFilledArray(10, 2) = ArrFill(10, 2)
  6. ArraysUtils.ReadIntArray(10) = ReadArrInteger(10)
  7. ArraysUtils.ReadDoubleArray(10) = ReadArrReal(10)
  8. ArraysUtils.ReadStringArray(10) = ReadArrString(10)

Сравнивался исключительно пересекающийся функционал. Цель: облегчить переход с PABCSystem на NETSquirrel и обратно.

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

Утилитные методы для базовых типов (NETSquirrel / PABCSystem):

  1. BaseTypesUtils.Swap(x, y) = Swap(x, y)
  2. BaseTypesUtils.ReadBool('Enter:') = ReadBoolean('Enter:')
  3. BaseTypesUtils.ReadInt('Enter:') = ReadInteger('Enter:')
  4. BaseTypesUtils.ReadDouble('Enter:') = ReadReal('Enter:')
  5. BaseTypesUtils.ReadChar('Enter:') = ReadChar('Enter:')
  6. BaseTypesUtils.ReadString('Enter:') = ReadString('Enter:')

Сравнивался исключительно пересекающийся функционал. Цель: облегчить переход с PABCSystem на NETSquirrel и обратно.

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

Утилитные методы для создания матриц (NETSquirrel / PABCSystem):

  1. MatricesUtils.GenerateMatrix(10, 10, (i, j) -> (i, j)) = ArrGen(10, 10, (i, j) -> (i, j))
  2. MatricesUtils.CreateRandomIntMatrix(10, 10, 0, 10) = MatrRandomInteger(10, 10, 0, 10)
  3. MatricesUtils.CreateRandomFloatMatrix(10, 10, 0, 5.5) = MatrRandomReal(10, 10, 0, 5.5)
  4. MatricesUtils.CreateFilledMatrix(10, 10, 2) = MatrFill(10, 10, 2)
  5. MatricesUtils.ReadIntMatrix(10, 10) = ReadMatrInteger(10, 10)
  6. MatricesUtils.ReadDoubleMatrix(10, 10) = ReadMatrReal(10, 10)

Сравнивался исключительно пересекающийся функционал. Цель: облегчить переход с PABCSystem на NETSquirrel и обратно.

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

ValueTuplesExtensions.pas (2.2 KB)

Модуль-обёртка, расширяющий функционал для размерных кортежей. Пример использования:

{$reference NETMouse for NET.dll}
uses ValueTuplesExtensions;

begin
  (VRec(1, 2) + 3).Print(); // (1, 2, 3)
end.

Адаптирован под стиль модуля PABCSystem.

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

Может размерных?))

Может. :slight_smile: Исправлено.

Полагаю, существенно интереснее увидеть отличия от PascalABC.NЕТ, потому что именно они позволят судить о смысле использования этой библиотеки. Потому что схожесть - а зачем она? Если это библиотека, зачем в ней дублировать то, что уже есть, только с другими именами? Чтобы объем языка вдвое расширить?

2 лайка

Может, есть пожелания что в него добавить?

Невозможно с этим не согласиться. Можно будет сделать отдельные посты, посвящённые этому. Только, следует провести сравнение в обе стороны: чтобы показать плюсы и минусы как и библиотеки, так и PABCSystem. Так, по крайней мере, будет справедливо.