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

C#.NStar

22.11.2020, 01:26. Показов 36233. Ответов 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
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
04.11.2025, 18:59  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Royal_X Посмотреть сообщение
Если не только для себя, то нужно спрашивать мнения других - делай опросы как Илон Маск, за что проголосуют люди, именно это и реализуй.
Я спрашиваю мнения, но окончательное решение, что делать, а что нет, все равно принимаю я. А удовлетворить всех в любом случае невозможно, вы же знаете.

Добавлено через 2 минуты
Royal_X, возможно, это звучит грубо, но любой творец, если будет принимать все идеи, получится ералаш. Как в басне: "и Нил, и дуб, и огород...".
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6312 / 3035 / 1053
Регистрация: 01.06.2021
Сообщений: 11,544
04.11.2025, 19:10
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Как в басне: "и Нил, и дуб, и огород...".
но желуди ты, конечно, добавил)

Etyuhibosecyu, ну что ж. Я выполнил твою просьбу, взглянул на твою программу. Но как тестировать, если с синтаксисом не знаком? Полез в документацию, но не захотел читать то, что там написано.
Но на код я взглянул, в общем это и есть обертка) правда, поставляется она вместе с лексером, парсером... и с современным интерфейсом на авалонии.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
04.11.2025, 19:32  [ТС]
Цитата Сообщение от Royal_X Посмотреть сообщение
Но как тестировать, если с синтаксисом не знаком?
Я вроде как привел рабочие примеры кода?

Добавлено через 4 минуты
Цитата Сообщение от Royal_X Посмотреть сообщение
Полез в документацию, но не захотел читать то, что там написано.
А что мешает пролистнуть текст для чайников и перейти сразу к конструкциям?

Добавлено через 5 минут
Royal_X, в третьем билде даже такой код работает...
Code
1
2
3
4
var x = 5.1;
typename T = typeof(x);
T y = 8;
return typeof(y);
Добавлено через 9 минут
Welemir1, я вас вижу! Вы раньше тестировали, сейчас вас очень не хватает...
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
04.11.2025, 19:40
Цитата Сообщение от Royal_X Посмотреть сообщение
делай опросы как Илон Маск, за что проголосуют люди, именно то и реализуй.
Подход не всегда верный. Есть мнение что если бы Форд спросил что хотят люди, они бы пожелали более быстрых лошадей, а не дешёвые авто.

Другой вопрос что нужно видеть перспективу у новшества, а не просто выдать что-то иное. Например я вижу этот кусок кода

Code
1
2
3
4
var x = 5.1;
typename T = typeof(x);
T y = 8;
return typeof(y);
Смахивает на дженерик, который вырвали из метода/класса и засунули прям в код. А теперь банальный вопрос -- что это решает? Я в коде указываю что у меня есть переменная, которая повторяет тип переменной x. Отлично, когда мне это может понадобится?

1. я хочу записать копию переменной x. В том же C# для этого существует var, который выполняет ровно такую же задачу.

2. я хочу записать иное значение того же типа, что и x, скажем чтобы в дальнейшем заменить при выполнении какого-то условия. Для того чтобы записать, справа нужно указать такой же тип, что и x, т.е. я всё ещё связан строгим указанием конкретного типа и мне от этого дженерика ни холодно, ни гарячо.

Т.е. фича языка есть, а смысла в ней нет.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
04.11.2025, 19:44  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
Для того чтобы записать, справа нужно указать такой же тип, что и x, т.е. я всё ещё связан строгим указанием конкретного типа и мне от этого дженерика ни холодно, ни гарячо.
А если тип x не известен?
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
04.11.2025, 20:16
А если тип x не известен?
Он не может быть неизвестен, иначе мы не будем знать как с ним работать. В определённый момент мы должны указать этот тип. Для дженериков тип -- передаваемо значение. Точнее для методов с дженериками это по сути как доп аргумент, а когда речь идет про классы, то компилятор по сути "по шаблону" создает отдельный тип данных (из-за чего работают всякие приколы со static). Т.е. верхний код должен указать что допустим T = int.

У вас же выходит что мы просто в коде указываем T = int, и дальше используем это как обычно значение. Мой пример с var наверное не самый удачный, но есть другая ассоциация прям один-в-один -- alias. Т.е. ровно тот же эффект будет, если я просто вверху укажу using T System.Int32;

Но повторюсь -- смысл всего этого? Какой реальный кейс использования такого кода? Те же alias не используют чтобы указать тип, который будут быстро менять в случае чего, потому что в любом случае придется перелопачивать код.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6312 / 3035 / 1053
Регистрация: 01.06.2021
Сообщений: 11,544
04.11.2025, 20:18
Wolfdp, а в остальных случаях ты увидел смысл? Вот как эксперт С#, скажи, пожалуйста, нужен ли вообще такой язык?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
04.11.2025, 20:50  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
Он не может быть неизвестен, иначе мы не будем знать как с ним работать.
Допустим, нужно что-то сделать с массивом чисел. Тип чисел неизвестен - int, double, BigInteger и т. д. Известно, что эти числа можно сравнивать (больше-меньше), складывать, умножать и т. д. И в какой-то момент нужно сделать операцию над двумя числами (например, умножение) и записать в массив результат операции как число того же типа (который неизвестен). Как быть в такой ситуации без рекурсивного типа? Все равно нужно рефлексию "поднимать", разве нет?

Добавлено через 15 минут
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Все равно нужно рефлексию "поднимать", разве нет?
В новых версиях C# сделали интерфейс INumber. Хорошо, нужно не перемножить числа, а, например, вычислить кубический корень (округленный до ближайшего для целых). Для INumber эта операция не определена. Как ее произвести и получить число того же типа без рефлексии?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,696
Записей в блоге: 29
04.11.2025, 21:07
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
я вас вижу!
так я захожу только поудивляться на мир... То есть язык не быстрее сишарпа, не короче его, не читаемей, про доку и комьюнити я даже не говорю. Тогда зачем, по-русски или с каким то акцентом спрашиваю -зачем? ведь этот яп и тебе не нужен, ты на нем ничего не пишешь, с чего на нем будут писать другие? да и как если нельзя создавать несколько модулей, нет поддержки иде, нет код-стайла, чего не хватись -нет.

Вот для чего этот язык? на нем можно cli-приложения писать? так покажи, напиши
веб на нем? напиши сайтик, покажи как сервер сделать
что на нем можно написать нужное программистам?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
04.11.2025, 21:13  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
То есть язык не быстрее сишарпа
Иногда быстрее:
C#
1
2
3
string s = "";
for (int i = 0; i < 100000; i++)
    s += "A"; // Вместо "A" можно читать из файла или что угодно другое...
Code
1
2
3
string s = "";
for (int i in Chain(1, 100000))
    s += "A";
Цитата Сообщение от Welemir1 Посмотреть сообщение
не короче его, не читаемей
C#
1
List<List<List<(int, int, int)>>>
Code
1
list(3) int[3]
Цитата Сообщение от Welemir1 Посмотреть сообщение
про доку и комьюнити я даже не говорю
CLICK
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
04.11.2025, 21:19
Цитата Сообщение от Royal_X Посмотреть сообщение
а в остальных случаях ты увидел смысл?
Я сильно не копал. Помниться там ещё какие-то уникальные кортержи, которые одновременно и массивы. Смахивает на попытку сразу усидеть на всех стульях, нахватавшись приколов из C#, C++, phyton и наверное ещё откуда-то.

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

Цитата Сообщение от Royal_X Посмотреть сообщение
Вот как эксперт С#, скажи, пожалуйста, нужен ли вообще такой язык?
Без IDE, либ, фреймворков, комьюнити? Даже если предположим что появится документация, и всё будет работать -- скорее нет. По крайне мере я не увидел что такого полезного можно делать на этом языке, чего нельзя на C#.

Как быть в такой ситуации без рекурсивного типа? Все равно нужно рефлексию "поднимать", разве нет?
Вы не поняли про что я говорю. Возьмём самое простое -- динамический список. Есть код, который декларирует Add/Remove/Select. Этот код инкапсулирован в класс. При использовании я ОБЯЗАН УКАЗАТЬ ФАКТИЧЕСКИЙ ТИП, например это int. Т.е. этот T = int далее будет для инкапсулированного кода применятся повсюду.

Теперь смотрите как это работает в C#
- в инкапсулированом методе/классе я работаю с неким T. Он может быть уточнён, например что реализует INumber и можно выполнять арифметические операции. Я нигде в реализации метода/класса не указываю фактическое значение T, могу только уточнить его свойства.
- вызывающий код уже обязан чётко указать с каким типом работаем. Это позволяет написать единую логику для схожих объектов, начиная с object.

Смотрим ваш пример:
- я в коде сразу должен указать что T = int. Когда вы пишете что "x имеет неизвестный тип", это вообще как? dynamic? Или всё же где-то выше есть объявление int x, и тип всё таки известен?

P.S. замечу что конкретно ваш пример с списком и арифметическими операциями решается через INumber, а не рефлексию.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
04.11.2025, 21:21  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
Без IDE, либ, фреймворков, комьюнити? Даже если предположим что появится документация, и всё будет работать -- скорее нет.
Фреймворк и документация есть.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
04.11.2025, 21:35
List<List<List<(int, int, int)>>>
Плохой пример проблемы C#. Я бы даже сказал несуществующей.

1. Неименованный кортеж? Я себе такое только я лямдах позволяю, где типы априори не нужно указывать. То ещё приключение потом вспоминать что означает Item1. Причём ваш пример ещё и касается сокращения для случая, когда все элементы кортежа имеют один и тот же тип, что далеко не всегда так.

2. Тройной вложенный лист -- это реально что-то часто требующееся? Нет, бывает, но гораздо чаще встречал либо N-мерный массив, либо N-мерный зубчастый массив.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
04.11.2025, 21:39  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
Нет, бывает, но гораздо чаще встречал либо N-мерный массив, либо N-мерный зубчастый массив.
Вместо N-мерного "прямоугольного" массива и есть сингулярный кортеж (такой, как в примере выше - ((int[3])[3])[3]). Вместо зубчатого - список делает все то же самое, только лучше.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
04.11.2025, 21:40
Под фрейворком я подразумевал например asp.net core или WPF. Т.е. какая-то комплексная технология для типичной задачи.

Касаемо документации неправильно выразился: "если появится доработанная документация". То что сейчас это очень куцая документация. Я просто отталкивался от того что уже есть: некий компилятор и некая документация. Представим что они доведены до совершенства. Без IDE, либ, фреймворков (или хз как назвать это правильно) -- это не взлетит.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
04.11.2025, 21:42  [ТС]
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
такой, как в примере выше
И к элементам сингулярного кортежа даже можно обращаться так же, как и к элементам массива...
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6312 / 3035 / 1053
Регистрация: 01.06.2021
Сообщений: 11,544
04.11.2025, 21:44
Цитата Сообщение от Wolfdp Посмотреть сообщение
Без IDE, либ, фреймворков (или хз как назвать это правильно) -- это не взлетит.
язык D это всё имеет, но тоже чёт не взлетел (хотя, объективно говоря, это очень хороший язык), потому что нужно иметь огромные деньги на промоутерство языка. Microsoft годами тратил деньги на продвижение C# (его даже стандартизировали), Google и InteliJIDEA годами продвигали Kotlin и тоже вложили немало денег.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
04.11.2025, 22:03
Цитата Сообщение от Royal_X Посмотреть сообщение
язык D это всё имеет, но тоже чёт не взлетел
Ну как бы "да", наличие всего этого не гарантирует успех языка. Я скорее про то что сам по себе язык нафиг не кому не нужен, это только база, к которой должно идти кучу дополнительных вещей, без которых написание программы резко усложняется. Сейчас вот документацию нужно скормить нейронке, иначе народу сложнее будет искать (а классический поиск по доке резко уступает нейронкам).

Окей, даже если пофантазировать что всё это появится в будущем: я не вижу каких-то киллер-фич. Может если сравнивать с временами .net 2.0 и есть прикольные вещи, но сейчас уже готовится релиз C# 14, за всё это время он очень сильно продвинулся. Тут хотя бы догнать этот уровень, не то чтобы превзойти.

Etyuhibosecyu, общая рекомендация: идём от проблемы к решению, а не наоборот. Вы пока показуете технологию, и не указываете какую проблему она решает.

С теми же кортежами -- толку что я могу обратиться как к массиву? Чем val[0] отличается от val.Item1 в плане "угадай что там храниться?" Я хочу видеть явное имя хранящегося значения, например item.UserId. Так я сразу пойму с чем работаю, а не мотать по коду "а чего там записывалось вообще". Если мне понадобиться тупо массив значений, у меня уже есть массив. Зачем мне что-то другое?
0
Эксперт .NET
 Аватар для Usaga
14367 / 9468 / 1360
Регистрация: 21.01.2016
Сообщений: 35,719
04.11.2025, 22:05
Цитата Сообщение от Wolfdp Посмотреть сообщение
Без IDE, либ, фреймворков (или хз как назвать это правильно) -- это не взлетит.
Ещё пакетный менеджер нужен. Я не думаю, что Коля о таком даже подумал.

Цитата Сообщение от Royal_X Посмотреть сообщение
Вот как эксперт С#, скажи, пожалуйста, нужен ли вообще такой язык?
Он нужен только самому Николаю. И то не для работы, а чтобы набивать его синтаксис вычурными решениями, не такими как у всех. Практической пользы у этого языка нет. Да и не язык это в полном смысле слова. Транслятор в GUI морде. Что есть "транслятор" или "компилятор" и зачем это нужно Николай до сих пор не понимает...
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6312 / 3035 / 1053
Регистрация: 01.06.2021
Сообщений: 11,544
04.11.2025, 23:06
Etyuhibosecyu, правильно ли я понимаю, что ты планируешь выпустить свое приложение под другие платформы тоже (Linux, macOS), учитывая, что ты использовал Avalonia UI?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Новые блоги и статьи
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
Сукцессия 20. Война автоботов. Делаем ставки. Лёд против "пш-пш!".
anaschu 11.07.2026
Битва ИИ в ризосфере: Как мы скрестили жесткие ОДУ, закон Фика и «подземный шантаж» Уважаемые коллеги! Хочу поделиться уникальным опытом ведения междисциплинарной компьютерной разработки. Прямо. . .
Сукцессия 19. Какие выводы я сделал из модели? Часть 2.Внутримикоризный стехиометрический буфер и хроно-дискретные зоны экспансии
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования
Сукцессия 18. Какие выводы я сделал из войны грибов с деревьями? Часть 1- рассказ и немного про термины
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования Система ОДУ описывает динамику изменения массы различных компонентов системы во времени. Ключевой. . .
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru