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

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

NETSquirrel - идейное продолжение и обобщение PABCSystem на всю платформу NET. В данной теме будут обсуждаться вопросы, связанные напрямую с данной библиотекой.

Introdution.pptx (1014.4 KB) The library usage in PascalABC.NET.pptx (1.3 MB)

Документация располагается здесь.

Обучающие презентации также доступны и на официальном сайте проекта. Основной упор сделан на поддержку англоязычной аудитории, хотя и от русскоязычной не отказываюсь.

Скачать библиотеку можно по данной ссылке. Для отправки отзыва перейдите по данной ссылке.

Как создавать вопросы?

Убедительная просьба, перед заданием вопроса:

  • Убедитесь, что подобный вопрос ещё не задавался, осуществив поиск по данной теме.
  • Если поиск не дал результатов, попытайтесь поискать соответствующие примеры либо здесь, либо среди проектов в скачанном репозитории библиотеки.
Модули

Модули-дополнения можно скачать здесь. Использование модулей вне PascalABC.NET не рекомендуется.

Как компилировать программы и модули?

Перед компиляцией программ-примеров и модулей уберите следующий флажок:

Сниппеты

Вы можете использовать сниппеты, разработанные специально под NETSquirrel для ускорения написания кода. Для их использования наберите имя сниппета (они перечислены в виде списка) и нажмите Shift+Space.

Содержание
  1. Сравнение NETSquirrel и PABCSystem
  2. Методы расширения базовых типов
  3. Методы расширения последовательностей
  4. Методы расширения IList
  5. Методы расширения для матриц
  6. Утилитные методы для базовых типов
  7. Утилитные методы для создания массивов
  8. Утилитные методы для создания матриц
Замечание о производительности

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

Группы поддержки: VK, OK, Мой Мир и Facebook.

В случае проблем при обновлении Вы можете использовать одну из более старых версий PascalABC.NET.

В топике сказано: " - вопросы и ответы". Посему вопрос: А что все это дает? Или, иначе, для чего простому русскому программисту эта библиотека? Ведь у всего есть цена, не так ли? Какую цену заплатит пользователь и что он взамен получит? Ну, кроме картинки с белочкой?

А еще, почему упор именно на англоязычную аудиторию? Они умнее? Тупее? Или это просто попытка высунуться на рынке зарубежного софта?

Хороший вопрос. Сама идея создать библиотеку пошла из PABCSystem. Всё началось с желания “расширить” её функционал, не привлекая к этому делу разработчиков (у них и так забот хватает) и не модифицируя код самого модуля, чтобы этим функционалом удобно было пользоваться на многих .NET языках. (Проблема использования PABCSystem и других модулей PascalABC.NET на других .NET языках в том, что при этом видны ненужные детали реализации). Так что ответ такой: библиотека даёт аналогичные модулю PABCSystem возможности. Только вдобавок: добавляет свои (интерфейсы, прокси-типы). Пока в PABCSystem есть то, чего нет в моей библиотеки и на данный момент нельзя сказать, что она перекрывает функционал системного модуля, скорее дополняет. И в любом случае библиотека не соответствует стилю PascalABC.NET в том смысле, что в ней нет здесь принятых коротких методов. Поэтому я думаю, что в аспекте краткости библиотека проигрывает у PABCSystem.

Библиотека бесплатная. Если имеется ввиду другая цена, то, если я верно Вас понял, ценой будет +1 зависимость от библиотеки.

Я сейчас активно практикую английский язык. Упор на английскую аудиторию - это стимул мне как разработчику повышать навыки владения английском языком, чтобы свободно общаться с пользователями. Сами знаете, что много информации на английском, что значит, что это пойдёт мне на пользу.

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

Тут сложно не согласиться: отличный стимул. Вот только это еще и стимул для неанглоязычной аудитории держаться от такой затеи подальше. Не думали на этот счет? Обычно все же отечественные разработчики заботятся и о русском языке. Я представляю, насколько сократилось бы число пользователей того же 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.

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

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