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

C#.NStar

22.11.2020, 01:26. Показов 36060. Ответов 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, 23:07  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Royal_X Посмотреть сообщение
правильно ли я понимаю, что ты планируешь выпустить свое приложение под другие платформы тоже (Linux, macOS), учитывая, что ты использовал Avalonia UI?
Linux - да, MacOS - не знаю, соберется ли на Windows-хосте.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6296 / 3018 / 1053
Регистрация: 01.06.2021
Сообщений: 11,448
04.11.2025, 23:16
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
MacOS - не знаю, соберется ли на Windows-хосте.
ИИ говорит, что можно

Code
1
2
3
4
5
dotnet new avalonia.app -n MyMacApp
# Для Intel Mac (x64)
dotnet publish -c Release -r osx-x64 --self-contained true
# Для Apple Silicon (arm64)
dotnet publish -c Release -r osx-arm64 --self-contained true
--self-contained true чтобы не ставить .Net на маке
0
Эксперт .NET
 Аватар для Usaga
14364 / 9465 / 1360
Регистрация: 21.01.2016
Сообщений: 35,689
04.11.2025, 23:20
Royal_X, осталось ещё объяснить Коле разницу между IDE и SDK
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
07.11.2025, 00:57  [ТС]
Билд четвертый. Добавлен прототип GUI-фреймворка, позволяющего показать новое окно и добавить в него элементы управления. На этом фреймворке теперь можно написать примитивный вариант трех в ряд, что я и сделал, код прилагается. Есть только баг, что иногда появляется комбо, которое, вместо того, чтобы удаляться, остается на месте, и иногда удалить его бывает не просто, обмен местами двух фишек внутри комбо не работает, нужно с какой-то четвертой. Отображается уведомление о конце:

(Играл где-то до 80 очков, дальше терпения искать совпадения не хватило, включил автокликер с брутфорсом.) Теперь, надеюсь, я получу тестирование как языка, так и приложения?
Вложения
Тип файла: txt Три в ряд на C#.NStar.txt (8.0 Кб, 14 просмотров)
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
07.11.2025, 08:46

Не по теме:

Code
1
2
3
       buttons[selectedI = i, selectedJ = j].Resources["ButtonBackgroundPointerOver".ToString()]
           = buttons[selectedI = i, selectedJ = j].Background
           = new SolidColorBrush(new Color(255, 255, 255, 0));
Лол... хотели извернуться с сокращением кода, но в итоге задублировали из-за того что не понимали что выполниться первым? Из зачем для строки вызвать ToString()? И так по коду много чего "забавного". Я бы для демонстрации уже заморочился оформить код по человечески.



Глянул писанину: если убрать рядовые отличия аля list() Button, то обычный C#.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
07.11.2025, 11:29  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
Из зачем для строки вызвать ToString()?
Да, я тоже об этом подумал, надо бы ToUnsafeString().
Цитата Сообщение от Wolfdp Посмотреть сообщение
Глянул писанину: если убрать рядовые отличия аля list() Button, то обычный C#.
Не понял, это похвала или наоборот?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
07.11.2025, 11:54  [ТС]
Билд пятый. Исправлена ошибка с ToString() для строки, вот исправленный код.
Вложения
Тип файла: txt Три в ряд на C#.NStar.txt (8.1 Кб, 8 просмотров)
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
07.11.2025, 12:46
Да, я тоже об этом подумал, надо бы ToUnsafeString().
Надо обычную константу, но вообще пох -- там кроме этого настолько... "накоджено", что можно смело забить. Потому что исправлять нужно чуть ли не всё, начиная от нейминга и заканчивая лютым дублирование кода.

Не понял, это похвала или наоборот?
Скажем так:
- то что совпадает ок, тут как бы вещи, которые унифицированы и обкатаны не то что в C#, а во многих других языка
- ваши отличия выглядят местами очень странно

Например for (var i in Range(1, 10)) -- доку глянуть не получилось (ваш сайт не грузит), но если вы убрали классический for, то это конечно сильно. Очень часто нужно задать специфический шаг, сразу для нескольких значений и условия выхода тоже могут быть оригинальные. А тут прям лютое перечисление, ещё и не упрощено на максимум, а через доп-метод. Короче хз, у меня больше вопросов глядя на это, чем ответов. Если бы было что-то в духе readout(var i from 1 to 10) -- я бы ещё понял такой сахар. А так -- не очень.

Лист объявляется с указанием типа через пробел, а вот словарь уже в квадратных скобках. Т.е. нет никакой унификации. Не смертельно, но не ясно что у вас там с дженериками тогда.

Сам словарь и элементы словаря разграничиваются круглыми скобками. Не уверен что хорошее решение, т.к. круглые скобки в первую очередь воспринимаются как вызов метода, а не описание какого-то блока (в нашем случае коллекции словаря). Если бы круглыми скобками например разграничивались только (key, value), то ещё можно было бы сказать "тут просто иначе" и не парится.

loop -- это тупо антипатерн while(true). ИМХО это вообще не стоит добавлять в язык, дабы не провоцировать говнокод.

---------------------------------------

А теперь главный вопрос -- что ваш код делает такого, чего не делает C#? Пока на вид ничего, а то что делает иначе, явно делает хуже. Т.е. он не решает никаких проблем, только добавляет новые.
1
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
07.11.2025, 13:17  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
но если вы убрали классический for, то это конечно сильно. Очень часто нужно задать специфический шаг, сразу для нескольких значений и условия выхода тоже могут быть оригинальные.
На специфический шаг можно умножить, а если нужно что-то более сложное, есть while. Еще в перспективе планируется такое:
Code
1
2
3
4
for (var x in ...) while (condition)
{
    ...
}
Цитата Сообщение от Wolfdp Посмотреть сообщение
Лист объявляется с указанием типа через пробел, а вот словарь уже в квадратных скобках.
Это специально, список - это примитивный тип, он такой уникальный, а коллекции в квадратных скобках.
Цитата Сообщение от Wolfdp Посмотреть сообщение
Сам словарь и элементы словаря разграничиваются круглыми скобками.
Это создание словаря из списка, который, в свою очередь, неявно преобразуется из кортежа.
Цитата Сообщение от Wolfdp Посмотреть сообщение
круглые скобки в первую очередь воспринимаются как вызов метода, а не описание какого-то блока (в нашем случае коллекции словаря).
Согласно принципу Оккама: не стоит плодить лишние сущности. Лишний тип скобок - это лишняя сущность. От угловых, например, я в своем языке отказался полностью. К слову, к "классическому" циклу for это тоже относится, там целая куча лишних сущностей.
Цитата Сообщение от Wolfdp Посмотреть сообщение
loop -- это тупо антипатерн while(true). ИМХО это вообще не стоит добавлять в язык, дабы не провоцировать говнокод.
Почему?

Добавлено через 17 минут
Цитата Сообщение от Wolfdp Посмотреть сообщение
А теперь главный вопрос -- что ваш код делает такого, чего не делает C#?

Не по теме:

Мой язык и есть улучшенная версия C#...


Вы же понимаете, что это находящаяся в разработке заготовка языка, а не релизная версия? Понимаете же?
0
Модератор
Эксперт Java
 Аватар для alecss131
2892 / 1398 / 412
Регистрация: 11.08.2017
Сообщений: 4,476
Записей в блоге: 2
07.11.2025, 13:27
Цитата Сообщение от Wolfdp Посмотреть сообщение
убрали классический for
В некоторых языках это сделано и все ОК. Например в Swift нету обычного for, а так же инкремента/декремента.
Цитата Сообщение от Wolfdp Посмотреть сообщение
Очень часто нужно задать специфический шаг, сразу для нескольких значений и условия выхода тоже могут быть оригинальные.
Там для этого есть решения, для первого вот такое stride(from:through:by:), а для второго реализовано вот это
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Еще в перспективе планируется такое
То есть сделать цикл от 10 до 0 с шагом -2 пока квадрат числа больше 5 будет выглядеть вот так
Swift
1
2
3
for i in stride(from: 10, through: 0, by: -2) where i * i > 5 {
    print(i)
}
Вывод будет 10, 8, 6, 4
Можно поменять задание от 0 до 10 с шагом 1 пока квадрат меньше 10
Swift
1
2
3
for i in 0...10 where i * i < 10 {
    print(i)
}
Вывод будет 0, 1, 2, 3

Цитата Сообщение от Wolfdp Посмотреть сообщение
круглые скобки в первую очередь воспринимаются как вызов метода, а не описание какого-то блока (в нашем случае коллекции словаря)
Как по мне в кортеже вполне себе
Swift
1
let a: (Int, Int, String) = (2, 50, "Ok")
0
Супер-модератор
Эксперт JSЭксперт HTML/CSSЭксперт PHP
 Аватар для gogolik
3961 / 2124 / 833
Регистрация: 13.03.2010
Сообщений: 6,974
07.11.2025, 13:29
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Вы же понимаете, что это находящаяся в разработке заготовка языка, а не релизная версия?
Etyuhibosecyu, мне кажется, что вам нужно присвоить звание "профессиональный недоделыватель". Одни заготовки, альфы, пре альфы и прочая шелуха, которая не несёт смысловой нагрузки и пользы. ИМХО, если и показывать "продукт", то уже относительно готовый, а не оправдываться на любой чих "ну это же заготовка/альфа".
1
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
07.11.2025, 13:33  [ТС]
gogolik, разве это запрещено? Мне кажется, готовые продукты на форум не выкладывают, для этого есть большой сайт с крутым доменом и т. д., а форум как раз для заготовок.
0
Супер-модератор
Эксперт JSЭксперт HTML/CSSЭксперт PHP
 Аватар для gogolik
3961 / 2124 / 833
Регистрация: 13.03.2010
Сообщений: 6,974
07.11.2025, 13:35
Etyuhibosecyu, нет, не запрещено. Просто вы берётесь за всё подряд и ничего не доделываете. И всегда нелепейшие отмазки лепите.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6296 / 3018 / 1053
Регистрация: 01.06.2021
Сообщений: 11,448
07.11.2025, 14:23
Etyuhibosecyu, поиграл я в твою игру.

Но я напомню, что ты писал

Но если это что-то маленькое и простое, как три в ряд, то вы потратите больше времени на освоение движка, чем на написание такой игры на C#.NStar
Ты со своей игрой не смог меня переубедить, что это действительно так, по следующим причинам:

- слишком много кода для такого прототипа игры. За такое количество строк, я написал бы даже на С++ / WinAPI, например, на GDI+. И получилось бы в разы красивее. А если бы использовать игровой движок, то код был бы в разы меньше. Ты же рекламируешь C#.NStar как более удобный, чем C#, дескать с большим количеством сахара. Но либо просто ты не умеешь лаконично писать код на своем языке, либо язык все-таки не позволяет.

- у тебя получилась кое-какая посредственная игра. Конечно, ты называешь ее заготовком, сам понимая, что до игры не дотягивает и никто бы не стал играть в нее. Глаза кровоточат, играя в эту игру, поскольку нет даже анимации исчезновения ячеек. Но ведь, ты же писал, что " вы потратите больше времени на освоение движка, чем на написание такой игры на C#.NStar". Т.е. "такой" означает, что ты должен был создать игру, которая и по уровню визуалов не хуже игры, созданной на игровом движке. Вот поэтому, ты не смог переубедить меня, что я должен отказаться, допустим, от Godot, Unity и делать игру на C#.NStar. Ведь, на движке получится игра в разы красивее и с меньшим количеством кода.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
07.11.2025, 14:46  [ТС]
Цитата Сообщение от Royal_X Посмотреть сообщение
Т.е. "такой" означает, что ты должен был создать игру, которая и по уровню визуалов не хуже игры, созданной на игровом движке. Вот поэтому, ты не смог переубедить меня, что я должен отказаться, допустим, от Godot, Unity и делать игру на C#.NStar. Ведь, на движке получится игра в разы красивее и с меньшим количеством кода.
Никто не сомневается, что на игровом движке игра красивее и короче. Но - для того, кто этот движок знает. А для новичка - освоить движок сложнее, чем освоить C#.NStar, потому что в движке больше "фич", которые нужно помнить. Кроме того, на движке три в ряд будет весить практически столько же, сколько пустой проект, а пустой проект весит сотни мегабайт. Скачивать сотни мегабайт, чтобы поиграть в три в ряд? И смысл?
Цитата Сообщение от Royal_X Посмотреть сообщение
Ты же рекламируешь C#.NStar как более удобный, чем C#, дескать с большим количеством сахара.
Какой может быть сахар с GUI? Все равно свойства элемента управления надо прописывать. Хотя, тут больше всего кода занимает подсчет совпадений, тут вопрос скорее не в количестве сахара, и не в умении лаконично писать код на своем языке, а в умении лаконично считать, выстроены ли три фишки в ряд, на любом языке. Вот этого вот я не умею.

Добавлено через 2 минуты
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Вот этого вот я не умею.
Можно, конечно, тупо пройти в цикле брутфорсом, но, мне кажется, это не лучшее решение.
0
Модератор
Эксперт Java
 Аватар для alecss131
2892 / 1398 / 412
Регистрация: 11.08.2017
Сообщений: 4,476
Записей в блоге: 2
07.11.2025, 14:58
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Какой может быть сахар с GUI?
Например декларативный подход
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
07.11.2025, 15:03  [ТС]
Цитата Сообщение от alecss131 Посмотреть сообщение
Например декларативный подход
Можно подробнее, или ссылку? (Именно про декларативный подход в GUI, в целом про декларативное программирование я более-менее имею представление).
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6296 / 3018 / 1053
Регистрация: 01.06.2021
Сообщений: 11,448
07.11.2025, 15:18
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Кроме того, на движке три в ряд будет весить практически столько же, сколько пустой проект, а пустой проект весит сотни мегабайт. Скачивать сотни мегабайт, чтобы поиграть в три в ряд? И смысл?
Ну это если какой-то извращенец-чикатила захочет создать три в ряд на UE. Понимаю, что для тебя варианта использовать другой движок, кроме UE, не существует. Но, если что, Godot занимает на диске всего 155 МБ, хотя когда ты его скачиваешь, то он в архиве и занимает 73 МБ. Столько же занимают сорцы в архиве. Из сорцов можно компилировать как движок, так и шаблоны для экспорта. Шаблон для экспорта под винду занимает 63 МБ. Размер же проекта всего несколько мегабайт + размер игровых ресурсов. А сама игра тоже выйдет почти такого же размера, что сам и шаблон. Ну и где "сотни мегабайт"?
Игра на Unity тоже будет весить до 100 МБ, хотя там для получения движка придется скачивать гигабайты. Но поскольку ты писал "сотни мегабайт" про готовую игру, то и юнька подходит.

Цитата Сообщение от Royal_X Посмотреть сообщение
За такое количество строк, я написал бы даже на С++ / WinAPI, например, на GDI+. И получилось бы в разы красивее.
а тут я бы уложился даже в несколько десятков килобайт) (с учетом, что VC redist у конечного пользователя установлен). Например, мой сапер весит 32 КБ.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,829
Записей в блоге: 14
07.11.2025, 15:42  [ТС]
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Можно подробнее, или ссылку?
Нашел в Яндексе, оказывается, это просто язык разметки, такой как XML или XAML. Ну я не знаю, как прилепить его к транспайлеру, чтобы все не сломалось. Мне кажется, такое решение будет слишком "хрупким".

Добавлено через 21 минуту
Royal_X, Wolfdp, а посоветуйте: если транспайлер упал, стоит ли делать не просто "the execution failed because of internal error", а выдавать наружу внутренности программы в виде ex.Message? Или лучше пусть новички даже и не пытаются гадать, что же зашифровано в этой внутренней ошибке? Или сделать и так, и так на выбор?
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6296 / 3018 / 1053
Регистрация: 01.06.2021
Сообщений: 11,448
07.11.2025, 15:44
Etyuhibosecyu, можно записать лог при краше.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Новые блоги и статьи
Сам себя обучал 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
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru