Форум программистов, компьютерный форум, киберфорум
Бета-тестирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.81/43: Рейтинг темы: голосов - 43, средняя оценка - 4.81
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14

Corlib .NStar (Pre-Pre-Alpha) 0.05. Теперь отдельно от нелюбимого многими языка!

15.11.2022, 02:13. Показов 11976. Ответов 194
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помню, кто-то писал о функциях C# .NStar примерно следующее (неточная цитата): "все это или уже есть в языке, просто вы не в курсе, или лечится подключением библиотеки или банальным написанием функции". Тогда я отреагировал на это высказывание отрицательно, но теперь подумал и решил, что новичкам, может быть, и пригодится язык с богатым фреймворком и низким порогом вхождения, но новички - очень ограниченный круг охвата, а большинству людей трудно переучиваться, поэтому неплохо было бы подключить библиотеку и не изучать новый язык. Так появился проект Corlib .NStar - новая библиотека, объединяющая BigCollections и стандартную библиотеку C# .NStar. Ее можно подключить практически к любому не эзотерическому/игрушечному языку и не слишком упрощенному конструктору, вот только желательно было бы протестировать на предмет доступности функций в неуправляемых языках - есть подозрение, что они "прячутся", хотя я навесил на них DllExport. Изменений много, подробнее читайте на нашей новой странице GitHub. Некоторые изменения из стандартной библиотеки C# .NStar в разработке, например, замена. А некоторые вряд ли когда-то будут доступны вне C# .NStar по объективным причинам, как, например, escape-последовательности \! и \q. Так что библиотека явно менее функциональна, чем полноценный язык. Но не намного. Тестируйте, дорогу осиливает идущий!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.11.2022, 02:13
Ответы с готовыми решениями:

Как вытащить все данные между тегами <pre></pre>
Добрый вечер! Ребята, как получить текст с страницы? Сама страница: &lt;html&gt;&lt;head&gt;&lt;link rel=&quot;stylesheet&quot;...

Вставка тега <pre></pre> в файлы директории
Здравствуйте, форумчане! Не подскажете как можно средствами php вставить тег &lt;pre&gt;&lt;/pre&gt; во все текстовые файлы в директории...

Pre-alpha Season Unreal Tournament
Качаю последнюю версию, которая уже в разработке, потому что 3 для меня не актуальна - накувыркался с ботами с тройки достаточно, в онлайне...

194
Эксперт .NET
 Аватар для Usaga
14724 / 9494 / 1362
Регистрация: 21.01.2016
Сообщений: 35,790
17.11.2022, 15:53
Студворк — интернет-сервис помощи студентам
Etyuhibosecyu, я сейчас дома ваш проект смог собрать (пришлось ставить С++). И внимательно посмотрел "бенчмарк", который вы выше привели...

Там сравнивается тёплое с мягким. Как обычно у вас это бывает.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var a = list
    .Skip(1)
    .Zip(list.Skip(2), (x, y) => (Item1: x, Item2: y))
    .Where(x => Math.Abs(x.Item1 - x.Item2) < 4096)
    .Average(x => Math.Abs(x.Item1 - x.Item2));
 
sw.Stop();
 
Console.WriteLine(sw.ElapsedMilliseconds);
 
sw.Restart();
 
var b = list
    .AsSpan(1)
    .Combine(list.AsSpan(2), (x, y) => (Item1: x, Item2: y))
    .FilterInPlace(x => Math.Abs(x.Item1 - x.Item2) < 4096)
    .Mean(x => Math.Abs(x.Item1 - x.Item2));
 
sw.Stop();
Второй блок кода - это не LINQ и не работа с IEnumerable. Это полностью ваши собственные коллекции, которые под капотом оперируют массивами завёрнутыми в Span'ы.

Если не поняли, то это фуфло, а не замер. И даже близко не LINQ.

Добавлено через 1 минуту
И кто вас такую дичь учил писать?

C#
1
var a = E.Average(E.Where(E.Zip(E.Skip(list, 1), E.Skip(list, 2), (x, y) => (Item1: x, Item2: y)), x => Math.Abs(x.Item1 - x.Item2) < 4096), x => Math.Abs(x.Item1 - x.Item2));
Это вы специально усложняете всё по максимуму?
0
Эксперт .NET
 Аватар для Usaga
14724 / 9494 / 1362
Регистрация: 21.01.2016
Сообщений: 35,790
17.11.2022, 15:57
Etyuhibosecyu, стоит отбросить ваши костыли и всё становится на свои мест:

C#
1
var list = OptimizedLinq.Fill(x => random.Next(0, 65536), 100000000).ToArray();
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
var random = new Random(1234567890);
 
Console.WriteLine("Hello World!");
 
var list = OptimizedLinq.Fill(x => random.Next(0, 65536), 100000000).ToArray();
 
var sw = Stopwatch.StartNew();
 
var a = E.Average(E.Where(E.Zip(E.Skip(list, 1), E.Skip(list, 2), (x, y) => (Item1: x, Item2: y)), x => Math.Abs(x.Item1 - x.Item2) < 4096), x => Math.Abs(x.Item1 - x.Item2));
 
//var a = Elist
//    .Skip(1)
//    .Zip(list.Skip(2), (x, y) => (Item1: x, Item2: y))
//    .Where(x => Math.Abs(x.Item1 - x.Item2) < 4096)
//    .Average(x => Math.Abs(x.Item1 - x.Item2));
 
sw.Stop();
 
Console.WriteLine(sw.ElapsedMilliseconds);
 
sw.Restart();
 
var b = list
    .AsSpan(1)
    .Combine(list.AsSpan(2), (x, y) => (Item1: x, Item2: y))
    .FilterInPlace(x => Math.Abs(x.Item1 - x.Item2) < 4096)
    .Mean(x => Math.Abs(x.Item1 - x.Item2));
 
sw.Stop();
 
Console.WriteLine(sw.ElapsedMilliseconds);
 
Console.WriteLine(a == b);


0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18359 / 14289 / 5370
Регистрация: 17.03.2014
Сообщений: 28,968
Записей в блоге: 1
17.11.2022, 15:57
Etyuhibosecyu, 1) слабое оправдание
2) Замена на Corlib.NStar.List не сильно помогает. Код работает быстрее, но память продолжает жрать. Теперь правда хотя бы 80 Мб, а не 3 Гб как раньше.
Code
1
2
3
4
| Method |     Mean |   Error |  StdDev |     Gen0 |     Gen1 |     Gen2 |  Allocated |
|------- |---------:|--------:|--------:|---------:|---------:|---------:|-----------:|
|   Linq | 313.5 ms | 1.22 ms | 1.14 ms |        - |        - |        - |      488 B |
|    New | 154.7 ms | 0.35 ms | 0.33 ms | 500.0000 | 500.0000 | 500.0000 | 80000368 B |
P.S. Usaga, правильные вещи вам говорит, а вы не слушаете.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
17.11.2022, 15:57  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Второй блок кода - это не LINQ и не работа с IEnumerable. Это полностью ваши собственные коллекции, которые под капотом оперируют массивами завёрнутыми в Span'ы.
Если не поняли, то это фуфло, а не замер. И даже близко не LINQ.
Это работа с Corlib.NStar.List, а не с IEnumerable. Не знаю, как вы представляете себе понятие "не LINQ" (я представляю LINQ как набор экстентов, вызываемых для любого IEnumerable, а не для конкретной коллекции, и мои методы этому определению соответствуют), но факт, что методы классического LINQ и мои возвращают одно и то же, а значит, это не сравнение теплого с мягким.
0
Эксперт .NET
 Аватар для Usaga
14724 / 9494 / 1362
Регистрация: 21.01.2016
Сообщений: 35,790
17.11.2022, 16:01
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Это работа с Corlib.NStar.List, а не с IEnumerable. Не знаю, как вы представляете себе понятие "не LINQ" (я представляю LINQ как набор экстентов, вызываемых для любого IEnumerable, а не для конкретной коллекции, и мои методы этому определению соответствуют), но факт, что методы классического LINQ и мои возвращают одно и то же, а значит, это не сравнение теплого с мягким.
Это именно сравнение тёплого с мягким. Ваши навороты работают не с IEnumerable, а только с вашими собственными коллекциями. Это не оптимизация LINQ. Это ваши собственные методы работы с вашими собственными коллекциями.

Причём заметьте, LINQ с вашим вариантом листа работает в три раза хуже, чем с оригинальным. Получается, что это не ваши "оптимизированные методы LINQ" быстрее оригинального LINQ'а, это ваши коллекции настолько кривые, что с ними в три раза хуже работается.

А если взять исходную коллекцию, то работа с ней чистого LINQ'а быстрее ваших наработок.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
17.11.2022, 16:06  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
пришлось ставить С++
С C++ тут такое дело, что я сделал на нем сортировку, но не могу ее подключить к проекту на C#. Про DllImport (и LibraryImport) знаю, но подключать нечего - нативная библиотека не создается, выходной каталог пуст. Не поможете, тем более что полный код у вас есть?

Добавлено через 1 минуту
Цитата Сообщение от Usaga Посмотреть сообщение
Ваши навороты работают не с IEnumerable, а только с вашими собственными коллекциями.
Они работают с IEnumerable, посмотрите на их сигнатуры. Просто именно AsSpan() работает с "чужой" коллекцией медленно, и это тоже исключение, как выше с Count().
0
Эксперт .NET
 Аватар для Usaga
14724 / 9494 / 1362
Регистрация: 21.01.2016
Сообщений: 35,790
17.11.2022, 16:06
Etyuhibosecyu, более того, если использовать чистый итератор IEnumerable, без всяких массивов подкопотных, то ваши оптимизации жидко сливают оригинальному LINQ:

C#
1
var list = E.Select(OptimizedLinq.Fill(x => random.Next(0, 65536), 100000000), x => x);
0
Эксперт .NET
 Аватар для Usaga
14724 / 9494 / 1362
Регистрация: 21.01.2016
Сообщений: 35,790
17.11.2022, 16:08
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Они работают с IEnumerable, посмотрите на их сигнатуры. Просто именно AsSpan() работает с "чужой" коллекцией медленно, и это тоже исключение, как выше с Count().
Они у вас работают с вашими типами, а не с IEnumerable. Вы под капотом активно кастите к своим листам и используете их особенности:

C#
1
collection is List<TList> list
Это всё не LINQ никакой.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
17.11.2022, 16:09  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
то ваши оптимизации жидко сливают оригинальному LINQ:
Еще раз: это только для AsSpan(), как исключение, так как он неявно преобразует в Corlib.NStar.List.
0
Эксперт .NET
 Аватар для Usaga
14724 / 9494 / 1362
Регистрация: 21.01.2016
Сообщений: 35,790
17.11.2022, 16:11
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Еще раз: это только для AsSpan(), как исключение, так как он неявно преобразует в Corlib.NStar.List.
Так какого чёрта, тогда, вы сравниваете свои коллекции и LINQ? Это и есть тёплое и мягкое. Вы возвращаете свой вариант List'а, используете его методы, дальше у вас под капотом активно идёт каст к этому типу и работа с его внутренним массивом. Тут даже не пахнет LINQ'ом никаким.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
17.11.2022, 16:11  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Это всё не LINQ никакой.
Еще раз: что такое с моей точки зрения LINQ, см. #64. И мои методы под это определение подходят и возвращают то же самое. А что такое с ВАШЕЙ точки зрения LINQ, я не знаю, просветите.
0
Эксперт .NET
 Аватар для Usaga
14724 / 9494 / 1362
Регистрация: 21.01.2016
Сообщений: 35,790
17.11.2022, 16:16
Я выше, вон, отбросил вашу коллекцию и проверил на нормальном массиве и на чистом итераторе. Оригинальный LINQ тупо быстрее вашего оптимизированного. Вот и всё.

Добавлено через 1 минуту
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Еще раз: что такое с моей точки зрения LINQ, см. #64. И мои методы под это определение подходят и возвращают то же самое. А что такое с ВАШЕЙ точки зрения LINQ, я не знаю, просветите.
LINQ - набор методов для работы с IEnumerable. Ваши методы, не смотря на то, что расширяют IEnumerable, заточены на ваши листы. И эти методы работают ХУЖЕ, чем чистый LINQ. Пруфы выше.

Добавлено через 2 минуты
Идиотизм ситуации в том, что ваши замеры показали не превосходство ваших методов над LINQ, а то, что LINQ с вашими коллекциями работает в три раза хуже. Ваши же навороты, работают от почти также (чуть медленее), до в два раза медленее.

Т.е. вы не оптимизировали ничего, вы сделали хреновые коллекции с которыми LINQ работает хуже, чем с родными))))
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
17.11.2022, 16:22  [ТС]
С нормальным массивом я уже исправил:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
global using System;
global using System.IO;
global using System.Net.Http;
global using System.Threading;
global using System.Threading.Tasks;
global using E = System.Linq.Enumerable;
global using G = System.Collections.Generic;
using Corlib.NStar;
using System.Diagnostics;
 
// See https://aka.ms/new-console-template for more information
Random random = new(1234567890);
var list = OptimizedLinq.Fill(x => random.Next(0, 65536), 100000000).ToArray();
 
Stopwatch sw = Stopwatch.StartNew();
var a = E.Average(E.Where(E.Zip(E.Skip(list, 1), E.Skip(list, 2), (x, y) => (Item1: x, Item2: y)), x => Math.Abs(x.Item1 - x.Item2) < 4096), x => Math.Abs(x.Item1 - x.Item2));
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
sw.Restart();
var b = list.AsSpan(1).Combine(list.AsSpan(2), (x, y) => (Item1: x, Item2: y)).FilterInPlace(x => Math.Abs(x.Item1 - x.Item2) < 4096).Mean(x => Math.Abs(x.Item1 - x.Item2));
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Console.WriteLine(a == b);

С чистым итератором проблема именно в AsSpan(). Попробуйте другой метод и посмотрите на результат.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
17.11.2022, 16:25  [ТС]
Usaga, к слову, я и количество созданий нового списка сократил больше, чем в три раза:

В некоторых редких методах возможны ошибки, но они и раньше не были исключены.
0
Эксперт .NET
 Аватар для Usaga
14724 / 9494 / 1362
Регистрация: 21.01.2016
Сообщений: 35,790
17.11.2022, 16:37
Etyuhibosecyu, хорошо, конечно, но все ваши оптимизации свелись к героической борьбе с вашим же кривым кодом. И конечный результат - почти тоже самое, что было до вас, а местами и того хуже.

Добавлено через 1 минуту
Перефразирую: вы оптимизировали тормоза, которые сами же и привнесли. Крутая оптимизация, блин)
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
17.11.2022, 16:45  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Перефразирую: вы оптимизировали тормоза, которые сами же и привнесли. Крутая оптимизация, блин)
Тормоза были в РЕДКИХ случаях. А в БОЛЬШИНСТВЕ случаев все работало быстро.
0
Эксперт .NET
 Аватар для Usaga
14724 / 9494 / 1362
Регистрация: 21.01.2016
Сообщений: 35,790
17.11.2022, 16:46
Etyuhibosecyu, я простой пример выше привел. Простой и распространенный: работа с массивом и итератором. И ваша поделка слила. Что еще нужно?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
17.11.2022, 16:47  [ТС]
Usaga, еще нужно то, что на ParallelHashSet<T> вы так и не посмотрели.
0
Эксперт .NET
 Аватар для Usaga
14724 / 9494 / 1362
Регистрация: 21.01.2016
Сообщений: 35,790
17.11.2022, 16:58
Etyuhibosecyu, а стоит? Я там не увижу тоже самое, что я каждый раз вижу?)
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
17.11.2022, 16:59  [ТС]
Usaga, а попробуйте! Просто для интереса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.11.2022, 16:59

Вывести ответ сервера в <pre></pre>
Добрый день! Подскажите, пожалуйста, как мне в примере ниже сделать так, чтобы значение data выводилось не с помощью alert, а выводилось в...

Hash Function Efficiency v0.1 pre-Alpha (May 11th, 2017)
Вот код, для наглядности (cyberforum.ru - не сохраняет оригинал кода! может не компилироваться) комментарии не удалял... #include...

перенос и <pre>
столкнулся с такой проблемой - если текст выводить с помощью &lt;pre&gt; то если например текст вводился через &lt;textarea&gt; без энтэров то...

Тэг PRE
Всем привет, есть довольно таки специфический вопрос, хоть я и знаю, что к тэгу pre мало какие стили можно применить, но все - таки может...

Отличие <pre> от <p>
Скажите, в чём отличие между этими тегами?


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru