Форум программистов, компьютерный форум, киберфорум
Бета-тестирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 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. Показов 11990. Ответов 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
14726 / 9496 / 1362
Регистрация: 21.01.2016
Сообщений: 35,808
15.11.2022, 12:37
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Полностью библиотеку бенчмарками не покрывал, но некоторые проводил.
Так нужно было все методы покрыть. Иначе "optimized" в их названии - ложь.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Это почему же?
Потому, что создаёт промежуточные коллекции (из вашего описания следует), которые:
а) Занимают память
б) Нужно время, чтобы их "набить" данными
в) В случае с аггрегационными методами LINQ'а они вообще вникуда память расходуют

Это для вас не очевидно?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
15.11.2022, 12:52  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
а) Занимают память
Фильтровать, например, уже давно можно, не занимая лишнюю память. А если нужно создать новую коллекцию, то как же не занимать память? Можно сначала отфильтровать, а потом создавать коллекции.
Цитата Сообщение от Usaga Посмотреть сообщение
б) Нужно время, чтобы их "набить" данными
Это тривиальное утверждение, просто в классическом LINQ это время откладывается.
Цитата Сообщение от Usaga Посмотреть сообщение
в) В случае с аггрегационными методами LINQ'а они вообще вникуда память расходуют
Если вы о Progression, то его перегрузки вообще только для одного значения память расходуют. Вы бы посмотрели внимательнее, прежде чем делать такие громкие заявления, тем более, что код открыт, а с C# вы знакомы, в отличие от авторов предыдущих сообщений.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
15.11.2022, 20:15
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Только для C# она подключается легко. И, к слову, не только для C#, но еще и для Visual Basic .NET и F#. А для большинства остальных языков подключить существенно сложнее. Но возможно.
Это бессмысленное утверждение, т.к. библиотеку на любом языке можно подключить к любому другому, просто в некоторых случаях это будет не легко.
0
59 / 71 / 2
Регистрация: 04.12.2014
Сообщений: 176
16.11.2022, 00:33
как OptimizedLinq себя показывает при работе с IQueryable при больших объемах данных в запросах?
0
Эксперт .NET
 Аватар для Usaga
14726 / 9496 / 1362
Регистрация: 21.01.2016
Сообщений: 35,808
16.11.2022, 05:21
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Фильтровать, например, уже давно можно, не занимая лишнюю память. А если нужно создать новую коллекцию, то как же не занимать память? Можно сначала отфильтровать, а потом создавать коллекции.
Так у вас в документации сказано, что все ваши методы LINQ внутри создают коллекции типа List. А это противоречит тезису о том что "можно не занимать память". Исходный LINQ никакие лишние коллекции не создаёт. Потому он будет быстрее вашего варианта по всем направлениям.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Это тривиальное утверждение, просто в классическом LINQ это время откладывается.
В классическом LINQ это время не откладывается. Во многих случаях оно вообще никогда не наступает. Вы про методы Count, Min\Max, Avg не слышали? Да и сама цепочка методов LINQ может оканчиваться простым перечислением, когда никакая конечная коллекция не формируется. Для вас это новость, судя по всему.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Если вы о Progression, то его перегрузки вообще только для одного значения память расходуют. Вы бы посмотрели внимательнее, прежде чем делать такие громкие заявления, тем более, что код открыт, а с C# вы знакомы, в отличие от авторов предыдущих сообщений.
Я не знаю о каком Progression вы говорите. Я делаю заявления исходя из ваших собственных. А вы утверждаете, что сделали более производительный LINQ, но замеров не производили. Более того, вы упомянули, что ваш LINQ какие-то промежуточные коллекции создаёт, чего оригинальный не делает. А это противоречит вашему (заметьте, необоснованному!) заявлению о том, что ваш вариант быстрее.

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

Цитата Сообщение от Lethorn Посмотреть сообщение
как OptimizedLinq себя показывает при работе с IQueryable при больших объемах данных в запросах?
Он не проверял как оно себя ведёт с обычным Linq to Objects. А с IQueryable будет тупо безусловная материализация и перегон одних и тех же данных в памяти...

Добавлено через 12 минут
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Вы бы посмотрели внимательнее, прежде чем делать такие громкие заявления,
Открыл код OptimizedLinq.cs. Ладно, что там одни файл на два мегабайта. Я уже понял, что кроме как монолитные куски говная ваять вы иначе работать не можете физически. Бог с ним, лишь бы нормально работало. Но что я вижу почти в каждом ваше "оптимизированном" методе:

Первый попавшийся метод:
Кликните здесь для просмотра всего текста

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
34
35
36
37
38
39
40
41
    internal static bool AllEnumerable<TSource>(IEnumerable<TSource> source, Func<TSource, bool> function)
    {
        if (function == null)
            throw new ArgumentNullException(nameof(function));
        if (source is List<TSource> list)
        {
            int count = list._size;
            for (int i = 0; i < count; i++)
                if (!function(list._items[i]))
                    return false;
            return true;
        }
        else if (source is TSource[] array)
        {
            for (int i = 0; i < array.Length; i++)
                if (!function(array[i]))
                    return false;
            return true;
        }
        else if (source is G.IList<TSource> list2)
        {
            int count = list2.Count;
            for (int i = 0; i < count; i++)
                if (!function(list2[i]))
                    return false;
            return true;
        }
        else if (TryGetCountEasilyEnumerable(source, out int count))
        {
            int i = 0;
            foreach (TSource item in source)
            {
                if (!function(item))
                    return false;
                i++;
            }
            return true;
        }
        else
            return AllEnumerable(new List<TSource>(source), function);
    }


И что в конце:
C#
1
return AllEnumerable(new List<TSource>(source), function);
Это же адовая срань)))

Ну, может быть метод TryGetCountEasilyEnumerable будет отрабатывать и дело до этого не дойдёт? Посмотрим:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    internal static bool TryGetCountEasilyEnumerable<TSource>(IEnumerable<TSource> source, out int count)
    {
        if (source is ICollection<TSource> col)
        {
            count = col.Count;
            return true;
        }
        else if (source is IReadOnlyCollection<TSource> col2)
        {
            count = col2.Count;
            return true;
        }
        else if (source is string s)
        {
            count = s.Length;
            return true;
        }
        else
        {
            count = -1;
            return false;
        }
    }
Мда...

Знаете, бенчмарки тут не нужны. Я и без них понимаю, какое это дерьмо, а не оптимизации. Хотя и без кода было ясно по одному вашему описанию. Жаль только, что вы за годы работы с C# так и не научились думать что делаете...
0
Эксперт .NET
 Аватар для Usaga
14726 / 9496 / 1362
Регистрация: 21.01.2016
Сообщений: 35,808
16.11.2022, 05:23
Ну и в целом, чтобы понимать масштаб проблемы:
0
 Аватар для zorggish
94 / 92 / 18
Регистрация: 10.03.2017
Сообщений: 306
16.11.2022, 09:40
Ссылка на патреон не работает
0
Эксперт .NET
 Аватар для Usaga
14726 / 9496 / 1362
Регистрация: 21.01.2016
Сообщений: 35,808
16.11.2022, 09:48
zorggish, а что с ней не так может быть?)))

https://patreon.com/https://www.patreon.com/Red_Star_Soft

Вроде бы всё правильно и нормально, как и в коде его библиотеки))
1
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
16.11.2022, 10:16
Etyuhibosecyu, а это что?
C#
1
2
3
4
5
6
7
8
    internal const int HashPrime = 101;
    internal const int MaxPrimeArrayLength = 0x7FEFFFFD;
    internal static readonly int[] primes = {
            3, 7, 11, 17, 23, 29, 37, 47, 59, 71, 89, 107, 131, 163, 197, 239, 293, 353, 431, 521, 631, 761, 919,
            1103, 1327, 1597, 1931, 2333, 2801, 3371, 4049, 4861, 5839, 7013, 8419, 10103, 12143, 14591,
            17519, 21023, 25229, 30293, 36353, 43627, 52361, 62851, 75431, 90523, 108631, 130363, 156437,
            187751, 225307, 270371, 324449, 389357, 467237, 560689, 672827, 807403, 968897, 1162687, 1395263,
            1674319, 2009191, 2411033, 2893249, 3471899, 4166287, 4999559, 5999471, 7199369};
0
 Аватар для zorggish
94 / 92 / 18
Регистрация: 10.03.2017
Сообщений: 306
16.11.2022, 10:26
Ммм... ситуация приобретает всё более пикантный характер
Лица до 18 лет могут не выдержать такое?)
Миниатюры
Corlib .NStar (Pre-Pre-Alpha) 0.05. Теперь отдельно от нелюбимого многими языка!  
1
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,698
Записей в блоге: 29
16.11.2022, 10:54
zorggish, Usaga, спасибо, вы сделали мой день, хохотнул от души Судя по 18+ Коля пошел во все тяжкие)))

Рядовой, как что? простые числа хранит, чтобы сказать что его библиотека их быстро вычисляет.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
16.11.2022, 11:35
Цитата Сообщение от zorggish Посмотреть сообщение
Ммм... ситуация приобретает всё более пикантный характер
Лица до 18 лет могут не выдержать такое?)
Все правильно, люди с неокрепшей психикой не должны видеть такую шизу
Добро пожаловать на сайт компании Red-Star-Soft! Это вам не какие-нибудь хеллоуворлдщики из Нижнего Тагила, а серьезная компания, хоть пока что и не такая дутая, как мелкомягкие, но к тому катящаяся. Наша киллер-фича - это свобода, честность и упоротое непринятие копитализма. 90% нашего профита, оставшегося после отжатия этой страной и копиталистами, пойдет на благие цели. И да, мы понимаем корни хейта в нашем направлении - это жлобство копиталистов, которым много денег не бывает, а конкуренты жгут им крышу, ну а с равными биться им западло, вот они и отрываются по полной на таких как мы.
И кто мы то? Ты здесь один

Добавлено через 2 минуты
Но вообще, там в описании каждый следующий абзац шизее предыдущего
0
Эксперт .NET
 Аватар для Usaga
14726 / 9496 / 1362
Регистрация: 21.01.2016
Сообщений: 35,808
16.11.2022, 12:10
Цитата Сообщение от Катафалк Посмотреть сообщение
И кто мы то? Ты здесь один
К "мы" он приписал форумчан, которые ему активно помогают в его изысканиях. Он их даже на страничке упомянул.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
16.11.2022, 12:35  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Так у вас в документации сказано, что все ваши методы LINQ внутри создают коллекции типа List. А это противоречит тезису о том что "можно не занимать память".
Фильтровать можно методом самого списка FilterInPlace(). Это не LINQ, но у Microsoft его тоже нет. А благодаря тому, что предыдущий метод возвращает список, его почти всегда можно применить.
Цитата Сообщение от Usaga Посмотреть сообщение
А вы утверждаете, что сделали более производительный LINQ, но замеров не производили.
Комплексный замер с использованием множества методов:
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);
Console.WriteLine("Hello World!");
var list = OptimizedLinq.Fill(x => random.Next(0, 65536), 10000000);
Stopwatch sw = Stopwatch.StartNew();
var a = E.ToDictionary(E.Where(E.GroupBy(E.Zip(E.Skip(list, 1), E.Skip(list, 2), (x, y) => ((ulong)(uint)x << 32) + (uint)y), x => x), x => E.Count(x) >= 2), x => x.Key, col => E.ToList(E.OrderBy(col, x => (uint)x)));
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
sw.Restart();
var b = list.AsSpan(1).Combine(list.AsSpan(2), (x, y) => ((ulong)(uint)x << 32) + (uint)y).Group(new EComparer<ulong>((x, y) => x == y, x => (int)(x >> 32) ^ (int)x)).FilterInPlace(x => x.Length >= 2).ToDictionary(x => x.Key, col => col.Sort());
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Console.WriteLine(OptimizedLinq.Equals(a, b, (x, y) => x.Key == y.Key && OptimizedLinq.Equals(x.Value, y.Value, (x, y) => x == y)));
Замер в Release. Результат:

Практика показывает, что мои методы, как минимум, не медленнее классических. На самом деле, был еще первый замер, он показал еще бо́льшую разницу, но там в финале первой реализации была моя версия ToList(), поэтому я посчитал замер недействительным. Но не думаю, что вся разница именно в ToList().
Цитата Сообщение от Usaga Посмотреть сообщение
Это же адовая срань)))
Это же прошлое)))
А если серьезно, то в методах, где count не используется, но происходит полный перебор, код, создающий новый список, уже удален. Спасибо за замечание, оно было уместно, и я его исправил.
Цитата Сообщение от Usaga Посмотреть сообщение
Мда...
C#
1
2
3
4
5
6
7
8
9
var s = new string('a', 1000000000);
Stopwatch sw = Stopwatch.StartNew();
var a = E.Count(s);
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
sw.Restart();
var b = s.Count();
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
(Начало как выше.)

Мой метод быстрее в ПЯТЬСОТ ПЯТЬДЕСЯТ РАЗ!!!
На остальной поток флуда ответить нечего.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
16.11.2022, 12:36  [ТС]
Черт побери, засветил все пути к моим проектам...
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
16.11.2022, 12:46
Цитата Сообщение от Welemir1 Посмотреть сообщение
как что? простые числа хранит, чтобы сказать что его библиотека их быстро вычисляет.
этот список ничего общего с простыми числами не имеет)
Разве что это простые числа по-этюгибоски
0
фрилансер
 Аватар для Алексей1153
6499 / 5730 / 1133
Регистрация: 11.10.2019
Сообщений: 15,325
16.11.2022, 15:13
Etyuhibosecyu, папка "мои документы" - это всё равно, что корзина Меняй локацию. Например, D:\MyVSProjects\......
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,698
Записей в блоге: 29
16.11.2022, 16:48
Рядовой, нет, пара простых чисел таки есть, название меня подкосило, думал реально все простые.

Etyuhibosecyu, я в сишарпе не секу, а то может быть покритиковал. Давай с другой стороны: а чего же создатели сишарпа и линку не сделали методы лучше, если простой Коля, может сделать в 500 раз быстрее?
Копиталисты, про которых вы выше пишете идиоты?
Или вы гений?
просто по коду что выше выложен, можно засомневаться в гениальности.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
16.11.2022, 16:56  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
Копиталисты, про которых вы выше пишете идиоты?
Про "копиталистов" писал Линдалан, а не я. Если он придет, у него и спрашивайте, но он на форуме редко бывает.
Цитата Сообщение от Welemir1 Посмотреть сообщение
если простой Коля, может сделать в 500 раз быстрее?
Это только один метод, Usaga же указал на TryGetCountEasily(), а Count() напрямую его вызывает. В 500 раз быстрее потому, что у меня все сводится к нескольким проверкам, а классический LINQ делает полный перебор. Но этот случай - исключение, большинство методов на несколько процентов быстрее.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
16.11.2022, 17:18  [ТС]
В Corlib.NStar добавлен еще один оптимизированный класс - ParallelHashSet<T>! Подробнее читайте на GitHub, ссылка в шапке. Такой бенчмарк:
C#
1
2
3
4
5
6
7
8
9
10
11
12
Random random = new(1234567890);
Console.WriteLine("Hello World!");
var list = OptimizedLinq.Fill(x => random.Next(0, 65536), 100000000);
Stopwatch sw = Stopwatch.StartNew();
var a = new G.HashSet<int>(list);
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
sw.Restart();
var b = new ParallelHashSet<int>(list);
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Console.WriteLine(b.SetEquals(a));
- в Release на 4 потоках показал прирост скорости до 32%:

На ваших мощных компьютерах, наверное, будет еще быстрее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.11.2022, 17:18

Вывести ответ сервера в <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>
Скажите, в чём отличие между этими тегами?


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
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 реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru