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

C#.NStar

22.11.2020, 01:26. Показов 33849. Ответов 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
14349 / 9444 / 1359
Регистрация: 21.01.2016
Сообщений: 35,594
30.01.2025, 16:23
Студворк — интернет-сервис помощи студентам
Welemir1, решил помесить говнишко?)))
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,696
Записей в блоге: 29
30.01.2025, 16:24
Code
1
2
3
4
5
6
int Function F() 
{
return 100000000.123;
}
 
return 151 + F();
почему ошибка?

Почему в эотм же примере если сделать целое число 10 миллиардов то ошибка?

Добавлено через 20 секунд
Usaga, ага, напоминаю ему про тесты

Добавлено через 41 секунду
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
возвратом int из функции типа bool за несколько минут не исправить.
согласен, тут надо всю систему менять, раз типы не контролируются в ЯП
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,796
Записей в блоге: 14
30.01.2025, 16:26  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
почему ошибка?
Почему в эотм же примере если сделать целое число 10 миллиардов то ошибка?
Потому что это та же ошибка, что и выше, функция типа int не вернет ни real, ни long int (а 10 миллиардов - это long int, в int не влезет).
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,696
Записей в блоге: 29
30.01.2025, 16:30
значит в поле ошибок я должен получить информацию о том, что типы не верны.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,796
Записей в блоге: 14
30.01.2025, 16:32  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
значит в поле ошибок я должен получить информацию о том, что типы не верны.
Я же пишу, это не сделать за несколько минут, и вы вроде бы согласились со мной.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,696
Записей в блоге: 29
30.01.2025, 16:32
C#
1
2
3
4
5
int Function F() {
  return 0;
}
 
return F;
почему ошибка? я хочу не вызвать функцию, а вернуть ее
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,796
Записей в блоге: 14
30.01.2025, 16:34  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
почему ошибка? я хочу не вызвать функцию, а вернуть ее
Потому что делегаты в настоящее время не возвращаются, только как переменные.
0
Модератор
Эксперт Java
 Аватар для alecss131
2889 / 1395 / 412
Регистрация: 11.08.2017
Сообщений: 4,459
Записей в блоге: 2
30.01.2025, 21:44
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Потому что делегаты в настоящее время не возвращаются
Функции это ни разу не делегаты, это скорее именованные замыкания
Цитата Сообщение от Welemir1 Посмотреть сообщение
у тебя ЯП со слабой типизацией?
поддерживаю, лучше строгая/сильная типизация, меньше ошибок будет, хотя и сложнее писать код
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Я имел в виду функции, которые вообще не возвращают ничего, кроме null. Как void в некоторых языках.
null и void это разное совсем и если ничего не возвращает кроме null то зачем вообще чтото возвращать?
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Да, кортеж, уже появился. Но он автоматически преобразуется в список, запись у списка и кортежа одинаковая.
Понимаете разницу между кортежем и массивом/листом/списком? Массив может содержать переменное количество элементов одного типа, а кортеж строго заданное количество значений любых типов. И доступ к кортежу не по индексам как правило
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Здесь не .NET, а вот этот фреймворк.
То есть для запуска не надо ничего ставить из NET Runtime?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,796
Записей в блоге: 14
30.01.2025, 23:35  [ТС]
Билд четвертый. Доведена до рабочего состояния быстрая конкатенация строк. К сожалению, если добавить в строку несколько миллионов символов и вывести весь этот ужас, покажется, что в текстовом поле вывода пусто. Это баг в текстовом поле, а не в моем языке. Если выделить кусок текстового поля вывода, скопировать его и вставить в нормальный текстовый редактор, символы отобразятся. Добавлен контроль типов, транспайлер теперь выдает ошибку или предупреждение при попытке преобразовать в неправильный тип не только при присваивании, но и при вызове функции и при возврате из функции. К сожалению, теперь выдают ошибки функции с произвольным количеством параметров, такие как Max(), Mean() и Min(), пока не знаю, как исправить. Но несмотря на ошибки, все же возвращают результат. Функции теперь могут вернуть делегаты, но нельзя вернуть делегат из всей программы. Вместо кода из этого сообщения теперь работает такой:
Code
1
2
3
4
5
6
7
8
9
System.Func[int] Function F()
{
    int Function F2()
    {
        return 100;
    }
    return F2;
}
return F()();
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,796
Записей в блоге: 14
31.01.2025, 12:38  [ТС]
Цитата Сообщение от alecss131 Посмотреть сообщение
Функции это ни разу не делегаты, это скорее именованные замыкания
Согласен, что функция - не всегда делегат, но запись функции в переменную или возврат функции из функции возможны только через делегат.
Цитата Сообщение от alecss131 Посмотреть сообщение
null и void это разное совсем
Транспайлер переводит null Function ... в функцию типа void.
Цитата Сообщение от alecss131 Посмотреть сообщение
кортеж строго заданное количество значений любых типов.
Ну вот все эти типы и должны быть совместимы с типом списка.
Цитата Сообщение от alecss131 Посмотреть сообщение
То есть для запуска не надо ничего ставить из NET Runtime?
Не надо, все идет в комплекте.
0
Модератор
Эксперт Java
 Аватар для alecss131
2889 / 1395 / 412
Регистрация: 11.08.2017
Сообщений: 4,459
Записей в блоге: 2
31.01.2025, 12:43
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Ну вот все эти типы и должны быть совместимы с типом списка
В том то и дело что кортеж может хранить любые типы. Например
Swift
1
2
let d = (1, "n", 2.5)
print(d.0)
Тип у кортежа будет (Int, String, Double) и код выведет на экран 1, итерировать в цикле по кортежу нельзя
Хотя они и в шарпе есть такие же, только шарп я не знаю, а вот свифтом пользуюсь
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
31.01.2025, 21:44
Цитата Сообщение от alecss131 Посмотреть сообщение
Тип у кортежа будет (Int, String, Double) и код выведет на экран 1, итерировать в цикле по кортежу нельзя
Хотя они и в шарпе есть такие же, только шарп я не знаю, а вот свифтом пользуюсь
В шарпе всё также -- кортеж это упрощенная запись структуры, с возможностью быстро обратиться к элементу по имени, либо разобрать на составляющие
. И строго говоря я не шибко понимаю на кой с ним работать как со списком.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,796
Записей в блоге: 14
31.01.2025, 22:30  [ТС]
Wolfdp, а ссылка для кого? Для alecss131? Для меня это тривиально, пользуюсь не первый год.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
31.01.2025, 23:36
Etyuhibosecyu, ссылка для alecss131, т.к. расписывать деконструкцию влом (если вдруг её нет в JAVA или swift).

Вам же я хотел намекнуть что делать из кортежа ещё один список -- не особо полезно. Кортежи (по крайне мере в моей практике) используются для того чтобы упаковать несколько значений в одно, куда-то передать и потом там с ними работать. Технически они избавляют нас от необходимости постоянно объявлять новые классы/структуры. Деконструкция же упрощает "распаковку" на месте использования, например если мне нужно из метода вернуть два-три значения, которые потом используются по отдельности.

Можете конечно делать свою реализацию кортежей, со своей логикой, задумами и для решения каких-то иных задач.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,796
Записей в блоге: 14
31.01.2025, 23:47  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
Вам же я хотел намекнуть что делать из кортежа ещё один список -- не особо полезно.
Никто не делает еще один список, кортежи из разных значений тоже уже работают (частично). Но если все типы кортежа совместимы, почему бы не преобразовать его в список.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
01.02.2025, 01:28
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Но если все типы кортежа совместимы, почему бы не преобразовать его в список.
Можно пару примеров использования такой фичи? Просто если мне нужен список -- я использую список. Это даже логически более правильно, т.к. сразу понимаешь что это коллекция, а не представление какой-нибудь бизнес сущности. В тоже время кортеж -- уже некое отображение конкретного элемента, и разворачивать его в список... без понятия когда это может понадобится.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,796
Записей в блоге: 14
01.02.2025, 02:15  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
Можно пару примеров использования такой фичи? Просто если мне нужен список -- я использую список.
А как вы опишете, из каких элементов состоит этот список, если у вас одна конструкция для описания последовательности элементов - (a, b, c, ...)? Через N list.Add()? А так очень удобно - не нужны квадратные и другие "специальные" скобки, а также лишние операторы в стиле new[] { ... }.

Добавлено через 40 минут
Билд пятый. Заработали комментарии, причем трех типов - кроме стандартных от // до конца строки и от /* до */, также допускающие вложенность от /{ до }/. В комментариях, а также в verbatim-строках и "сырых" строках (но не в обычных!) правильно отображается место, в котором конструкция не завершена. К сожалению, есть ошибка, что если не закрыты комментарий или строка, после краха еще выдается одна ошибка.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
01.02.2025, 02:30
Etyuhibosecyu, я спрашивал у вас другое. У меня изначально кортеж. В каком случае мне нужно приводить его к списку?

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
А как вы опишете, из каких элементов состоит этот список, если у вас одна конструкция для описания последовательности элементов - (a, b, c, ...)? Через N list.Add()? А так очень удобно - не нужны квадратные и другие "специальные" скобки, а также лишние операторы в стиле new[] { ... }.
Я не догоняю. Вы предлагает для того чтобы не писать так List<string> vocaloids = ["Miku", "Rin", "Len", "Luka"]; делать из кортежей списки, чтобы можно было писать так? List<string> vocaloids = ("Miku", "Rin", "Len", "Luka");

Ещё такой фундаментальный и супер критичный вопрос -- у вас кортежи это ссылочный тип или значемый?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,796
Записей в блоге: 14
01.02.2025, 16:11  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
У меня изначально кортеж. В каком случае мне нужно приводить его к списку?
Если он уже был объявлен как кортеж, то маловероятно, а вот при объявлении списка он создается только из кортежа.
Цитата Сообщение от Wolfdp Посмотреть сообщение
Я не догоняю. Вы предлагает для того чтобы не писать так ... делать из кортежей списки, чтобы можно было писать так?
Да. Изначально такая конструкция была придумана для языка, в котором чтобы набрать квадратную скобку, нужно было переключать раскладку клавиатуры, а про кортежи я узнал намного позже, и еще позже в классическом C# появился такой короткий синтаксис объявления коллекции. Я, конечно, не думаю, что Microsoft у меня украла, наверное, еще много лет назад предложили, но я точно придумал независимо.
Цитата Сообщение от Wolfdp Посмотреть сообщение
Ещё такой фундаментальный и супер критичный вопрос -- у вас кортежи это ссылочный тип или значемый?
Они транспайлируются в кортежи на C#.NET, следовательно, такой же, как там.

Добавлено через 25 минут
Welemir1, не хотите протестировать исправления?

Добавлено через 1 час 4 минуты
Билд шестой. Исправлена ошибка в операторе pow=, транспайлер теперь выдает корректное предупреждение, если тип переменной не real, и корректно обрабатывает преобразование с потерей данных. Исправлена ошибка с выдачей ошибки после краха.

Добавлено через 2 часа 8 минут
Билд седьмой. Исправлена серьезная ошибка в цикле for (напоминаю, что он работает не так, как классический цикл for, а так, как классический цикл foreach). К сожалению, временно не работает var вместо явного типа в объявлении переменной для этого цикла, но это не в дополнение к предыдущим версиям, это и раньше не работало.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,696
Записей в блоге: 29
01.02.2025, 17:02
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
не хотите протестировать исправления?
нет, тестировать должен ты, я же сказал для ЯП нормальное количество тестов измеряется тысячами и сотнями тысяч. А ты даешь нам недоделки и давайте -тестируйте.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Новые блоги и статьи
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru