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

C#.NStar

22.11.2020, 01:26. Показов 36082. Ответов 523
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
С чего всё началось
Мой язык программирования развивается, в очередной раз меняя название. Пятое название после C↑ᶜC, C#++, C with stations и временного Unnamed2 имеет вид "C# .NStar". Это название не вызывает никаких ассоциаций со стрелками, с "симбиозом плюсов и шарпа", со "станционным программированием", а вызывает единственную - то, что этот язык - прямое продолжение C#. Теперь вы убедились, что этот язык - не пустая болтовня, одна версия уже увидела свет, поэтому надеюсь, что очередная презентация возможностей C# .NStar хоть и подвергнется критике, но не приведет ни к чему плохому. Вот что уже работает:
1. Пространства имен.
2. Ошибки списком строк - теперь отображение n ошибок не займет время, пропорциональное n2, и вообще я по максимуму убрал конкатенацию строк в цикле, что является экстремально важным признаком качества языка.
3. Списки - не только возврат списка, но и переменные списочных типов.
4. Индексы - последний и самый сложный из перечисленных пунктов. Такой код успешно работает:
Code
1
2
list(3) int a = (((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)));
return a[1, 2, 3];
Но для того, чтобы выложить версию, этого мало. Это просто презентация.
А вот несколько будущих возможностей:
1. Оператор switch с лямбда-выражением. Это невероятно мощная конструкция! Позволит убрать очень много дублирования в условиях. Вот два примера:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if (task.StartsWith("Class "))
{
    return Action1(task.Substring("Class ".Length));
}
else if (task.StartsWith("Interface "))
{
    return Action2(task.Substring("Interface ".Length));
}
else if (task.StartsWith("Function "))
{
    return Action3(task.Substring("Function ".Length));
}
else if (task.StartsWith("Extent "))
{
    return Action4(task.Substring("Extent ".Length));
}
...
Code
1
2
3
4
5
6
7
8
return x => task == x + string s switch
{
    "Class " => Action1(s);
    "Interface " => Action2(s);
    "Function " => Action3(s);
    "Extent " => Action4(s);
    ...
};
Прошу обратить особое внимание на огромную мощь этой конструкции и написать, хотели бы вы ею воспользоваться или нет, и если нет, то почему.
2. Способ задания словаря будет отличаться от способа задания двумерного списка: ключ и значение будут разделяться оператором ":", а если словарь состоит из единственного элемента, доступного по всем ключам - достаточно указать один этот элемент. Пример:
Code
1
2
Dictionary[string, int] dic1 = ("Съешь": 1, "же": 2, "ещё": 3, "этих": 4, "мягких": 5, "французских": 6, "булок": 7, "да": 8, "выпей": 9, "чаю": 10, _: 0);
Dictionary[string, int] dic2 = -12345;
3. Оператор ![], позволяющий сменить внутренний тип коллекции без смены внешнего типа. Это позволит создать аналог LINQ нового поколения - Jaretorant, в котором не надо завершать каждое выражение функциями ToArray() или ToList(). Только посмотрите:
Code
1
2
3
4
() int oldList;
() real newList = oldList.TransformEach(x => 1r / x);
LinkedList[int] oldList2;
LinkedList[real] newList2 = oldList2.TransformEach(x => 1r / x);
А сама конструкция TransformEach записывается таким способом:
Code
1
2
3
4
5
6
7
8
9
10
Dictionary[(typename TSource, typename TCollection : IEnumerable[TSource], typename TDest), TCollection![TDest] Extent(TCollection source, Func[TDest, TSource] Transformator)] =
{
    TCollection![TDest] output = new TDest[source.Count()];
    int i = 0;
    for (TSource elem in source)
    {
        output[i++] = Transformator(elem);
    }
    return output;
}
P. S. Недавно я наткнулся на список торговых знаков Microsoft. Оказывается, там написано, что нельзя искажать, модифицировать или комбинировать с любыми словами, символами, изображениями или другими видами информации любые из этих торговых знаков. Но самих знаков немного: само слово "Microsoft", Windows, MSN, Bing, Skype, Microsoft Edge и еще один или два. C# там нет! Поэтому создать язык с названием C# .NStar мне ничего не мешает.


 Комментарий модератора 
Update от 09.02.2026


ПОБЕДА!!! C#.NStar достиг версии (Alpha RC) 0.9! Это первое приложение от Red-Star-Soft, когда-либо достигавшее подобной версии! (Фреймворк - это не приложение.) Теперь, надеюсь, я перестал быть "профессиональным недоделывателем"? И, надеюсь, я получу тест?
1. Работа с файлами.
2. При техническом крахе сохраняется лог во временную папку.
3. Потоки. Причем нет этого ужасного разбиения на две воюющих стороны - синхронные и асинхронные - переключение контекста происходит автоматически.
4. "Швейцарский нож" (оператор is, сопоставление шаблонов). Пока что реализованы семь шаблонов: константа, тип, тип с объявлением переменной, var с объявлением переменной, шаблон сравнения (больше/меньше), пустой шаблон (_) и составной шаблон - несколько шаблонов, объединенных операторами and, or, not. Есть одна замеченная, но не исправленная ошибка, что попытка применить шаблон сравнения не к числу вызывает технический крах. Возможно, в будущем исправлю.
5. Сокращенный оператор for - можно написать так:
Code
1
2
3
4
for (i in collection)
{
    ...
}
- или так:
Code
1
2
3
4
for (i in a..b)
{
    ...
}
6. Сокращенные константы - если есть ключевое слово const, необзательно писать var или тем более полный тип.
7. Записи (Record - с прописной буквы). В отличие от C#.NET, это по терминологии Мартина чистые структуры данных, имеющие свойства, совпадащие по именам и типам с параметрами, конструктор из эих параметров и стандартные методы Equals и GetHashCode и неспособные иметь другие методы и свойства.
8. Структуры (Struct - с прописной буквы).
9. Прототип полиморфизма в виде словарей от рекурсивного типа к классу, одним из следующих способов (ключевое слово Class в случае полиморфизма обязтельно брать в скобки):
Code
1
2
3
4
const [typename T, (Class)] ClassName = new(
{
    ...
});
Code
1
2
3
4
const ClassName = new [typename T, (Class)](
{
    ...
});
Code
1
2
3
4
const var ClassName = new [typename T, (Class)](
{
    ...
});
Code
1
2
3
4
const [typename T, (Class)] ClassName = new [typename T, (Class)](
{
    ...
});
Code
1
2
3
4
const [typename T : BaseType, (Class : BaseType2)] ClassName = new(
{
    ...
});
Code
1
2
3
4
const ClassName = new [typename T : BaseType, (Class : BaseType2)](
{
    ...
});
Code
1
2
3
4
const var ClassName = new [typename T : BaseType, (Class : BaseType2)](
{
    ...
});
Code
1
2
3
4
const [typename T : BaseType, (Class : BaseType2)] ClassName = new [typename T : BaseType, (Class : BaseType2)](
{
    ...
});
Словари от чисел, строк или других типов, кроме typename, пока лучше даже не пытаться создавать - они не работают!
10. Обработка исключений:
Code
1
2
3
4
5
6
7
8
try
{
    ...
}
catch (ExceptionType var) if (condition) // if, а не when
{
    ...
}
В текущей версии доступен базовый набор исключений: Exception, ArgumentException (включает в себя ArgumentNullException и ArgumentOutOfRangeException, хотя явно указать их нельзя), IndexOutOfRangeException, InvalidOperationException, NullReferenceException и IOException.
11. И самое невероятное - ПАКЕТНЫЙ МЕНЕДЖЕР!!! Вы можете подключить любой пакет, доступный в публичном репозитории NuGet - достаточно зайти в настройки и указать его имя.
Рабочие примеры кода на C#.NStar, в дополнение к предыдущим версиям:
Code
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
using System;
using System.Threading;
Class MyClass
{
    Constructor()
    {
    }
    int Function Sync()
    {
        var x = MyClass2.MyFunc(5);
        return x;
    }
    Task[int] Function Async1()
    {
        var x = MyClass2.MyFunc(5);
        return x;
    }
    Task[int] Function Async2(int n)
    {
        return n * n;
    }
}
 
static Class MyClass2
{
    Func[Task[int], int] MyFunc = new MyClass().Async2;
}
 
return new MyClass().Async1();
Code
1
2
3
object item = "Welcome!";
if (item is string text)
    return text;
Code
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
abstract Class BaseStack
{
    required typename T { get, init };
    
    abstract T Function Peek();
    abstract T Function Pop();
    abstract null Function Push(T item);
}
 
const [typename T, (Class : BaseStack[T])] Stack = new(
{
    private () T list = new(32);
 
    T Function Peek()
    {
        return list[^1];
    }
 
    T Function Pop
    {
        return list.GetAndRemove(list.Length - 1);
    }
 
    null Function Push(T item)
    {
        list.Add(item);
    }
});
 
BaseStack[int] intStack = new Stack[int]();
intStack.Push(5);
intStack.Push(10);
var x = (intStack.Pop(), intStack.Peek());
BaseStack[string] stringStack = new Stack[string]();
stringStack.Push("A");
stringStack.Push("B");
var y = (stringStack.Pop(), stringStack.Peek());
return (x, y);
Code
1
2
3
4
5
6
() int list = new();
for (i in Chain(0, 10)) while (i * i % 20 < 10)
{
    list.Add(i);
}
return list;
Code
1
2
3
4
5
6
int n = 0;
for (i in 1..1000)
{
    n++;
}
return n;
Code
1
2
3
Record Pair(string Name, int Value);
Pair pair = new("Status", 100);
return pair;
Code
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
const [typename T : IComparable[T], (Class)] Repository = new(
{
    private () T items = new();
 
    null Function Add(T item)
    {
        items.Add(item);
    }
 
    T Function GetMax()
    {
        if (items.Length == 0)
            return null;
        return Max(items);
    }
});
 
Class Product : IComparable[Product]
{
    int Id;
    int Function CompareTo(Product product)
    {
        return Id.CompareTo(product.Id);
    }
}
 
var repo = new Repository[Product]();
repo.Add(new Product[1]());
repo.Add(new Product[5]());
return repo.GetMax().Id;
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
using System.IO;
try
{
    () int list = (1, 2, 3);
    return list.IndexOf(1, 5);
}
catch (ex) if (ex is not ArgumentException)
{
    return 1;
}
catch (ex)
{
    return "" + ex.Message;
}
return 2;
P. S. Можно также скачать из облаков, ссылка на странице версии.
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.11.2020, 01:26
Ответы с готовыми решениями:

Мелкомягкие мыслят местами точно как и я или следят за моим компьютером и крадут идеи, записанные на нем для C# .NStar?
Кто знает? Вот неполная цитата из файла, созданного в феврале этого года: А тут оказывается, что...

Стал ли .NStar в меньшей степени "сборной солянкой"?
sau, это тема для вас! Хотя обоснованные, не содержащие трёпа и троллинга мнения других...


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

Или воспользуйтесь поиском по форуму:
523
Эксперт .NET
 Аватар для Usaga
14364 / 9465 / 1360
Регистрация: 21.01.2016
Сообщений: 35,692
11.02.2025, 08:03
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Welemir1 Посмотреть сообщение
вот те и раз... то есть булин занимает 1 бит, но структура в которой он хранится гораздо больше? или как? если я сниму дамп памяти и потом создам 8 булинов то память увеличится ровно на 1 байт?
Что-то мне подсказывает, что эта его шняга так же экономит память, как его "linq" ускоренный "быстрее" был, чем обычный.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,696
Записей в блоге: 29
11.02.2025, 08:22
Usaga, я в этом просто уверен, но наивно надеюсь и Колю отрезвить.

У Николая, как и у самородка pgb есть одна общая черта: когда они что-то делают такое, что лидеры индустрии не сделали, они не останавливаются критически осмотреться на предмет того, что неверно считают, неверно измеряют, не на то смотрят, не знают чего то. Они просто сразу начинают орать о совем таланте и достижениях.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
11.02.2025, 09:01
Цитата Сообщение от Welemir1 Посмотреть сообщение
Usaga, я в этом просто уверен, но наивно надеюсь и Колю отрезвить.
Я сильно сомневаюсь, что это возможно, но процесс всё равно весёлый
0
Эксперт .NET
 Аватар для Usaga
14364 / 9465 / 1360
Регистрация: 21.01.2016
Сообщений: 35,692
11.02.2025, 09:16
Цитата Сообщение от Welemir1 Посмотреть сообщение
Они просто сразу начинают орать о совем таланте и достижениях.
Ну так. Если другие не орут, то сам начинай орать)
0
11.02.2025, 16:53

Не по теме:

У меня тут возникло стойкое ощущение, что Etyuhibosecyu считает, что "низкоуровневый" - это плохо, отсюда "ультра высокоуровневость" и попытки внести что-то "новое" по типу кортежеоориентированности.

0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
11.02.2025, 16:57  [ТС]
Цитата Сообщение от -_human_- Посмотреть сообщение
Etyuhibosecyu считает, что "низкоуровневый" - это плохо
Не то что плохо, просто у низкоуровневых языков своя область применения - ОС, драйвера и т. д. А для прикладных программ - ультра-высокоуровневые языки. А вы считаете иначе?
0
78 / 73 / 19
Регистрация: 18.05.2021
Сообщений: 290
11.02.2025, 17:05
Etyuhibosecyu, просто низкоуровневые - когда нужно контролировать каждый бит, максимально оптимизировать проект, и по своей сути - это начальный этап развития ЯП. Функции, а затем классы были введены для упрощения и повышения комфортности написания кода, что всегда будет вызывать минусы - меньшую производительность и эффективность работы с памятью. Они фундаментально меняют подход к программированию, что позволяет выделять процедурный подход и ООП. Вы позиционируете свой язык как нечто важное и новое. Но за все темы Вы так ни разу и не ответили, что же в нем есть такого, что делает его разработку и существование осмысленным? Пока ничего нового (ну совсем ничего, кроме небольших синтаксических нюансов) не замечено.
0
42 / 45 / 6
Регистрация: 21.10.2022
Сообщений: 619
Записей в блоге: 2
11.02.2025, 17:11
к тому же в ультро-высокоуровневом языке заявлять, что булин занимает 1 бит. как преимущество это странно.
1
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
19.02.2025, 07:05
Etyuhibosecyu, тут на другом форуме вопрос появился. Человек хочет числа из 100млн знаков перемножать. Как думаешь, твоя либа для больших чисел справится?

Вот тебе возможность затестить твою либу в реальных условиях.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
19.02.2025, 10:34  [ТС]
Цитата Сообщение от Катафалк Посмотреть сообщение
Как думаешь, твоя либа для больших чисел справится?
Не знаю про Питон или Си (так как на втором нет классов, не знаю, пойдет ли там Mpir), но на C#
C#
1
2
3
4
5
6
7
8
Random random = new();
var bytes = new byte[40000000];
random.NextBytes(bytes);
var a = new MpzT(bytes, -1);
var bytes2 = new byte[40000000];
random.NextBytes(bytes2);
var b = new MpzT(bytes2, -1);
var c = a * b;
Менее чем полминуты. Но это не моя библиотека, я только слегка изменил ее.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
23.06.2025, 00:59  [ТС]
Вышла новая ревизия того самого C#.NStar! Собственно, в преамбулу добавить больше нечего. Вот что изменилось:
- Язык теперь соответствует своему названию, используя, собственно, .NStar, кроме неподдерживаемых конструкций (long long и использующие его конструкции, интерфейсы, лямбды, обобщенные методы (не типы)) и EasyEval (для этого есть ExecuteString()). (Открою секрет: фактически, RedStarLinq не работает, только коллекции (чтобы прочитать текст, выделите его).) Кто знает, может быть, когда-нибудь C#.NStar станет основным языком для фреймворка .NStar...
- Добавлено наследование классов, все еще ограниченное. Одно из ограничений заключается в том, что нужно объявлять производный класс НИЖЕ базового в коде (обычно, как я понимаю, программисты делают наоборот), причем нарушение этого правила приводит к неопределенному поведению: может случиться что угодно, включая ничего (корректную работу). В том числе возможен крах без четкого сообщения на одной из следующих строк.
- Добавлены автоматические прыжки к местоположению ошибки. При двойном клике по сообщению об ошибке окно кода прокручивается в ошибочную зону, при следующем клике по собственно окну кода текстовый курсор автоматически устанавливается на начало ошибочной ветки синтаксического дерева.
- Добавлены виртуальные, абстрактные, переопределяемые и скрываемые методы, но правила их задания - как в Java: любой метод, объявленный в классе (не локальная функция), автоматически становится виртуальным, а метод с тем же именем и той же сигнатурой в подклассе - переопределенным, ключевых слов virtual и override нет. Если в подклассе есть метод с тем же именем и типами параметров, но имеющий существенные отличия в чем-то другом (например, в модификаторе доступа или возвращаемом типе), переопределить его нельзя, и при отсутствии ключевого слова new транспайлер выдает предупреждение.

Рабочие примеры кода на C#.NStar, кроме перечисленных в прошлых темах:
Code
1
2
3
4
5
using System.Collections;
NList[int] list = new NList[int](3, 1, 2, 3);
list.Add(4);
list.Add((5, 6, 7));
return list.IndexOf(2, 2);
Code
1
2
3
4
5
6
7
8
9
10
11
using System.Collections;
            
Class MyClass : ListHashSet[string]
{
}
var hs = new MyClass();
hs.Add("1");
hs.Add("2");
hs.Add("3");
hs.Add("2");
return hs;
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System.Collections;
            
Class MyClass : ListHashSet[string]
{
}
MyClass Function F()
{
    var hs = new MyClass();
    hs.Add("1");
    hs.Add("2");
    hs.Add("3");
    hs.Add("2");
    return hs;
}
return F().RemoveAt(2);
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Class MyClass
{
    int a = 5;
    real b = 3.14159;
    string c = "A";
}
 
Class MyClass2 : MyClass
{
    Constructor(bool bool)
    {
        if (bool)
            a = 12;
    }
}
MyClass2 a1 = new MyClass2();
MyClass2 a2 = new MyClass2(8, 2.71828, "$");
MyClass2 a3 = new MyClass2(8, 2.71828);
MyClass2 a4 = new MyClass2(true);
return (a1, a2, a3, a4);
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Class MyClass
{
    int a = 5;
    real b = 3.14159;
}
 
Class MyClass2 : MyClass
{
    string c = "A";
 
    Constructor(bool bool)
    {
        if (bool)
            a = 12;
    }
}
MyClass2 a1 = new MyClass2();
MyClass2 a2 = new MyClass2(8, 2.71828, "$");
MyClass2 a3 = new MyClass2(8, 2.71828);
MyClass2 a4 = new MyClass2(true);
return (a1, a2, a3, a4);
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Class Person
{
    closed string name;
    closed int age;
 
    string Function GetName()
    {
        return name;
    }
 
    int Function GetAge()
    {
        return age;
    }
}
 
 Person person = new Person("Alice", 30);
 return (person.GetName(), person.GetAge());
Важно! Вопросы в стиле - для чего язык нужен, чем лучше существующих, почему не сделать просто библиотеку, зачем переизобретать колесо и т. д. - уже обсуждались много раз и будут игнорироваться. Тема для теста, а не для хождения по кругу.
0
Супер-модератор
Эксперт JSЭксперт HTML/CSSЭксперт PHP
 Аватар для gogolik
3961 / 2124 / 833
Регистрация: 13.03.2010
Сообщений: 6,974
23.06.2025, 01:06
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
кроме перечисленных в прошлых темах
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Вопросы в стиле ... уже обсуждались много раз и будут игнорироваться.
Так может нужно всё держать в одной теме, а не создавать кучу однотипных? Или вообще завести блог и писать о своём поделии там?

Предлагаю вам выбрать - или вести обсуждение в одной теме (объединить все предыдущие темы в одну, например, или закрыть их и вести обсуждение в этой), или писать всё в блог как душе угодно.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
23.06.2025, 01:09  [ТС]
Цитата Сообщение от gogolik Посмотреть сообщение
Так может нужно всё держать в одной теме, а не создавать кучу однотипных? Или вообще завести блог и писать о своём поделии там?
Вообще-то одна версия - одна тема. Я не виноват, что некоторые пользователи приходят во все темы с одними и теми же бессмысленными вопросами.
0
Супер-модератор
Эксперт JSЭксперт HTML/CSSЭксперт PHP
 Аватар для gogolik
3961 / 2124 / 833
Регистрация: 13.03.2010
Сообщений: 6,974
23.06.2025, 01:12
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Вообще-то одна версия - одна тема.
Вообще-то, по правилам форума, один вопрос - одна тема. Обсуждения вашего поделия можно спокойно считать одним вопросом. Выбирайте: или объединяемся в одну тему, или уезжаем в блог.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
23.06.2025, 01:15  [ТС]
Цитата Сообщение от gogolik Посмотреть сообщение
Выбирайте: или объединяемся в одну тему, или уезжаем в блог.
Ладно, объединяйте, пусть называется просто "C#.NStar". Вот только как настоящие тестеры узнают об обновлениях? Должны будут читать всю тему?
0
Супер-модератор
Эксперт JSЭксперт HTML/CSSЭксперт PHP
 Аватар для gogolik
3961 / 2124 / 833
Регистрация: 13.03.2010
Сообщений: 6,974
23.06.2025, 01:20
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Должны будут читать всю тему?
Достаточно прочитать последние сообщения.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
23.06.2025, 01:49  [ТС]
Цитата Сообщение от gogolik Посмотреть сообщение
Достаточно прочитать последние сообщения.
Тогда я готов к объединению.

Добавлено через 27 минут
gogolik, а можете почистить пустую болтовню, оставить по одной копии каждого вопроса? А то объединенная тема очень уж длинная.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
24.06.2025, 23:08

Не по теме:

Цитата Сообщение от gogolik Посмотреть сообщение
Вообще-то, по правилам форума, один вопрос - одна тема. Обсуждения вашего поделия можно спокойно считать одним вопросом.
ИМХО, технически можно выделать отдельные вопросы в разработке, но тут нужно сооблюдать тонкую грань дабы не превращать форум в заменитель Jira. Причём чем больше тем, тем больше шансов что всё это будет взаимосвязано и перемешано, что несколько выходит за функционал форума.

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



Etyuhibosecyu,
Как общая рекомендация от мимокрокодила: стоило хотя бы один и тот же вопрос держать в одной теме, а не плодить новые. Из последнего:
  • вначале создаете тему Может ли быть спагетти-код не на основе goto?
  • далее через время вы выпускаете изменения, и вместо того чтобы отписать в старой теме, где есть контекст и люди которые что-то вам советовали и смотрели код -- новая тема Стал ли .NStar в меньшей степени "сборной солянкой"?.
  • при этом в последней теме нет подробного списка "а что собственно изменилось". Два скрина и одно предложение не дает понимание что меняли, зачем и на что обращать внимание в первую очередь.

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

Так же вы очень часто создаете "что-то там работает плохо, гляньте пожалуйста". Раз, два, три и это беглым взглядом по вашим темам на первой пейдже из списка. Проблема таже: нужно вникать в большую часть вашего проекта, что занимает ну очень много времени.

Возможно таки стоит завести какой-нибудь AzureDevops|Jira|GitLab, а на форуме ограничится темой "мой проект" и в этой теме изредка отписывать о процессе в таком духе:
- вышел новый релиз. Страница с подробностями "тык". На странице перечень добавленных классов/модулей и их методы.
- ищутся добровольцы на помощь. Страница с проблемными задачами "тык".

Через время вы сами для себя организуете и систематизируете информацию, что значительно упростит работу на долгую перспективу.
1
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,696
Записей в блоге: 29
25.06.2025, 08:15
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
ListHashSet
а можно подробнее об этой структуре данных? в чем ее плюсы, зачем создана? каковы ее отличия по скорости и затратам памяти с простым хешсетом?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
25.06.2025, 11:04  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
а можно подробнее об этой структуре данных? в чем ее плюсы, зачем создана? каковы ее отличия по скорости и затратам памяти с простым хешсетом?
См. здесь, Ctrl+F и "ListH" уже найдет нужное место.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Новые блоги и статьи
Сезонность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru