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

C#.NStar

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

Студворк — интернет-сервис помощи студентам
Мой язык программирования развивается, в очередной раз меняя название. Пятое название после 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 мне ничего не мешает.
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.11.2020, 01:26
Ответы с готовыми решениями:

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


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

Или воспользуйтесь поиском по форуму:
471
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
429 / 178 / 41
Регистрация: 13.07.2017
Сообщений: 4,557
Записей в блоге: 14
07.10.2022, 15:48  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Usaga Посмотреть сообщение
Но сколько я дотнетчиков знаю, все используют или String.Format или интерполяцию.
Первое - только в университете, второе - на моей памяти один раз партией (самих $ несколько) из-за претензий DuplicateFinder, а так не пользуюсь.
0
Эксперт .NET
 Аватар для Usaga
14078 / 9295 / 1347
Регистрация: 21.01.2016
Сообщений: 34,895
07.10.2022, 15:56
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Первое - только в университете, второе - на моей памяти один раз партией (самих $ несколько) из-за претензий DuplicateFinder, а так не пользуюсь.
Не, ну к вам претензий никаких. И так видно, что у вас свой путь, через кровь, боль и слёзы.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
429 / 178 / 41
Регистрация: 13.07.2017
Сообщений: 4,557
Записей в блоге: 14
07.10.2022, 19:15  [ТС]
Билд второй (та же ссылка на EXE):
- Восстановлены полосы прокрутки в текстовых полях (включая поля только для чтения).
- Использование локальной переменной перед объявлением или внутри него выдает ошибку.
- Исправлено умножение числа int на переменную или функцию real, при возврате значения его тип теперь приводится к типу функции и фиксируется. При возврате значения из функции, представляющей собой всю программу, значение приводится к типу universal, что равнозначно отсутствию приведения.
- При попытке написать слишком большое число выдается ошибка.
- Исправлена ошибка, при которой написание выражения if (var = !(...)) приводило к исключению. Подобное выражение с константой теперь выдает предупреждение.
- Присвоение переменной самой себе вне объявления выдает предупреждение.
- Попытка выполнить вычитание, деление или остаток от деления между строками или строкой и числом или умножение строки на строку выдает предупреждение. Перемножение строки и числа повторяет эту строку n раз. Сложение строки и числа приводит число к строке с нижеследующей конкатенацией и ошибкой не является.
Добавлю, что сама по себе конструкция bool bool = ...; ошибкой не является и создает переменную с именем bool. Можно также написать string bool = ...;. А вот про попытку использовать эту переменную в ее же собственном объявлении - см. выше.
Прошу протестировать еще раз.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
07.10.2022, 22:05
Цитата Сообщение от Usaga Посмотреть сообщение
Поэтому полезность такой фигни спорна.
кстати они провели работу над ошибками, в F# (функциональный ЯП на .Net) уже так нельзя - сложить инт со строкой или флоат не получится.

Etyuhibosecyu, завтра обязательно потестирую, ваша ИДЕ кидает еще какие то ошибки, кроме синтаксических? Потому что для меня нулл-это вполне допустимое значение результата, а не ошибка.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
429 / 178 / 41
Регистрация: 13.07.2017
Сообщений: 4,557
Записей в блоге: 14
07.10.2022, 22:34  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
ваша ИДЕ кидает еще какие то ошибки, кроме синтаксических?
В = вместо == в условии или присвоении переменной самой себе синтаксически все корректно, но несмотря на это, моя программа сообщает об этом. Бывают ошибки выполнения, например, если написать (1, 2, 3).GetRange(3, 2). А какие вы имеете в виду?
0
Эксперт .NET
 Аватар для Usaga
14078 / 9295 / 1347
Регистрация: 21.01.2016
Сообщений: 34,895
08.10.2022, 07:56
Etyuhibosecyu, посмотрел я на это дело. И первое, что в глаза бросилось: а документация-то по языку и его базовой библиотеке классов где? Вот захотел я в консоль вывести что-нибудь, а Console.WriteLine конечно же не транслируется. И с вводом так же. Какие классы есть? Какие функции? Где можно на список типов посмотреть? Без документации выкладывать эту утилиту смысла нет особого.

Ещё, обратил внимание, что ваш транслятор видимо какие-то левые оптимизации делает вникуда:

Code
1
2
var f = 5 * (10 + 1);
return f.ToString(); // Error in line 2 at position 9: type "byte" does not contain member "ToString"
Почему транслятор решил использовать тип byte? Это какая-то попытка сэкономить на спичках? Локальные переменные один же чёрт на стеке находятся или в регистре процессора. В первом случае память уже выделена, да и размещаться переменная должна по адресу кратному 4 для эффективного доступа. Т.е. этот байт один чёрт будет расширен до 4 байт... А регистры процессора вообще всегда используются 32 или 64 бита... Т.е. смысла нет в таких "экономиях", ничего реально не экономится...
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
08.10.2022, 08:22
Usaga, да я еще вчера у него просил документацию, хотя бы типы данных посмотреть
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
429 / 178 / 41
Регистрация: 13.07.2017
Сообщений: 4,557
Записей в блоге: 14
08.10.2022, 09:57  [ТС]
Вот документация по моему языку. Список всех его конструкций. Не просто полный, а суперполный - содержит не только все то, что работает (то есть если конструкция существует, то она точно есть здесь), но даже кое-какие будущие конструкции. Жаль только, формат неудобочитаемый для человека. Но я поясню: в начале идет имя типа конструкций (типы, методы, конструкторы...), затем - их список. GetPrimitiveType - это полный тип (например, System.Collections.Generic.List<T> по аналогии с C# .NET), GetPrimitiveBlockStack - путь к типу без универсальных параметров (System.Collections.Generic.List). Некоторые из таких конструкций сокращены (например, IntType), думаю, по имени сокращения можно понять его назначение. В общем, кто хочет разобраться - разберется.
Вложения
Тип файла: rar Документация по языку C# .NStar.rar (4.0 Кб, 19 просмотров)
0
59 / 71 / 2
Регистрация: 04.12.2014
Сообщений: 176
08.10.2022, 13:06
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
C#
1
2
3
4
5
6
7
Constructor(bool bool)
 {
    if (bool)
    {
       a = 12;
    }
 }
это реальный пример?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
429 / 178 / 41
Регистрация: 13.07.2017
Сообщений: 4,557
Записей в блоге: 14
08.10.2022, 16:45  [ТС]
Добавлю по поводу вышенаписанного.
Цитата Сообщение от Usaga Посмотреть сообщение
Локальные переменные один же чёрт на стеке находятся или в регистре процессора.
В регистре они хранятся очень короткое время. А бо́льшую часть времени - в коллекциях, которые все основаны на массиве, а в массиве значения хранятся плотно. Единственная проблема - все переменные занимают на один бит больше, чем фактическое значение, из-за IsNull. Так что byte занимает в моем языке 9 бит, а совсем не 4 байта. Самые большие накладные расходы - на bool, который занимает 2 бита вместо 1.

Добавлено через 1 час 13 минут
Welemir1, вы собирались сегодня протестировать мой язык:
Цитата Сообщение от Welemir1 Посмотреть сообщение
Etyuhibosecyu, завтра обязательно потестирую, ваша ИДЕ кидает еще какие то ошибки, кроме синтаксических?
Сегодня уже вечер, ваше сообщение актуально?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
08.10.2022, 17:31
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
byte занимает в моем языке 9 бит, а совсем не 4 байта. Самые большие накладные расходы - на bool, который занимает 2 бита вместо 1.
как это имзерялось? есть дебаггер или профайлер?

C#
1
return x^x;
почему возвращает 0?

C#
1
2
int x=99;
return "1"+x+2.34;
почему возвращает 1101.34???

Вы и сейчас не понимаете зачем нужны тысячи тестов? на каждую функцию, на каждое действие. А вы получается толком не проверив, пытаетесь отладить на живых юзерах.


C#
1
2
int x=null;
return x*1;
вернет 0, ошибок нет, то есть под капотом нулл на 0 поменяет?

C#
1
return куегкт;
возвращает нулл, ошибок нет


У вас нет номеров строк в коде, если я там наваяю даже 100 строк, то как должен найти ошибку в 50 строке? Подсчитать строки? Посмотрите как другие ИДЕ работают, там кликом перебрасывает на нужное
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
429 / 178 / 41
Регистрация: 13.07.2017
Сообщений: 4,557
Записей в блоге: 14
08.10.2022, 18:39  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
почему возвращает 0?
Потому что ^ - это xor, и это не ошибка.
Цитата Сообщение от Welemir1 Посмотреть сообщение
почему возвращает 1101.34???
Потому что сложение имеет более высокий приоритет, чем конкатенация: "1" + (99 + 2.34), и это тоже не ошибка.
Цитата Сообщение от Welemir1 Посмотреть сообщение
вернет 0, ошибок нет, то есть под капотом нулл на 0 поменяет?
Цитата Сообщение от Welemir1 Посмотреть сообщение
возвращает нулл, ошибок нет
Это ошибки, буду исправлять.
Цитата Сообщение от Welemir1 Посмотреть сообщение
У вас нет номеров строк в коде, если я там наваяю даже 100 строк, то как должен найти ошибку в 50 строке? Подсчитать строки? Посмотрите как другие ИДЕ работают, там кликом перебрасывает на нужное
Согласен, сделаю.

Добавлено через 54 минуты
Welemir1, а можете написать просто набор тестовых программ, где-то так пару сотен штук, чтобы я мог сам запускать и исправлять ошибки, не ожидая каждый раз ответа на форуме? Вся загвоздка в их содержимом, ошибки я и сам смогу исправить (во всяком случае, надеюсь на это).

Добавлено через 6 минут
Welemir1, простите за вышесказанное, но просто у меня не хватает фантазии делать все эти тест-кейсы. У вас, как я вижу, хватает, почему бы не приложить усилия к языку будущего?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
08.10.2022, 19:00
Etyuhibosecyu, это не 5-минутное дело, к тому же это надо срау писать в вашем же яп и ложить рядом с кодом, чтобы прогонять весь набор тестов после любой правки и проверять что все верно пашет. Рекомендую почитать любую книгу по юнит-тестированию, в сишарпе кажется nUnit

я бы вообще не выводил на показ Яп не оттестировав его хорошенько.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
429 / 178 / 41
Регистрация: 13.07.2017
Сообщений: 4,557
Записей в блоге: 14
08.10.2022, 19:05  [ТС]
Билд третий (та же ссылка на EXE). Добавлено отображение номера строки и позиции. Жаль, но делать прыжок к какой-либо позиции - сложно и долго, для этого нужна версия, а не билд. Вышеперечисленные ошибки исправлены.

Добавлено через 3 минуты
Welemir1, ну тогда хоть сообщайте об ошибках не по четыре, а хотя бы по 10, чтобы мне было что исправлять.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
08.10.2022, 20:34
Etyuhibosecyu, это наоборот должно работать! Вы написав кучу тестов и не найдя изъяна должны выкладывать.

Не хватает проверок? -Пройдитесь по туториалу для новичков по сишарпу и весь код что там показан вводите в свою иде и проверяйте.

Далее берете свою спецификацию и идете по ней тоже проверяя все постулаты.
0
Эксперт .NET
 Аватар для Usaga
14078 / 9295 / 1347
Регистрация: 21.01.2016
Сообщений: 34,895
09.10.2022, 06:24
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Welemir1, а можете написать просто набор тестовых программ, где-то так пару сотен штук, чтобы я мог сам запускать и исправлять ошибки, не ожидая каждый раз ответа на форуме? Вся загвоздка в их содержимом, ошибки я и сам смогу исправить (во всяком случае, надеюсь на это).
Добавлено через 6 минут
Welemir1, простите за вышесказанное, но просто у меня не хватает фантазии делать все эти тест-кейсы. У вас, как я вижу, хватает, почему бы не приложить усилия к языку будущего?
Т.е. фантазии создавать новый ЯП вам хватает, а написать набор тестов уже нет? И почему пользователи должны вам тесты эти писать?

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
ну тогда хоть сообщайте об ошибках не по четыре, а хотя бы по 10, чтобы мне было что исправлять.
А ещё лучше - сами исправляйте, да?

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
чтобы я мог сам запускать и исправлять ошибки, не ожидая каждый раз ответа на форуме?
Для этого есть юнит-тесты.

Добавлено через 7 минут
Ну и остаётся открытым вопрос о документации. Её тупо нет. Только в слепую тыкаться, да у вас на форуме спрашивать что и как должно работать. Это не дело.

И почему транслятор сделан в виде графической утилиты? Почему нет нормальной консольной версии как у всех? Чтобы просто путь к файлу передать и оно его транслирует.
0
21 / 55 / 9
Регистрация: 29.09.2011
Сообщений: 615
09.10.2022, 23:50
Welemir1,
если программа у ВАС не работает, то проблема в ВАС, а не в программе. У Его Правительственных Званий всё работает. Вероятно Вы ставите неправильные значения и неправильные тесты проводите. Ищите другие, правильные, в которых всё будет работать.
1
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
10.10.2022, 10:51
_20_, хмм, есть в этом определенная логика)))
0
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
13.10.2022, 17:35
Etyuhibosecyu, А в чём проблема сделать вменяемый редактор для удобства тестирования? Есть готовые контролы для WF/WPF. например, FastColoredTextBox. Там и подсветка синтаксиса, и автодополнение(intellisense реализуете), и нумерация строк, и т.д.. Если не подходит, то свой написать
0
Эксперт .NET
 Аватар для Usaga
14078 / 9295 / 1347
Регистрация: 21.01.2016
Сообщений: 34,895
13.10.2022, 19:54
sldp, да не редактор тут нужен (их есть и так), а сам интерпретатор в нормальном виде. Тут самого языка ещё толком нет, чтобы озадачиваться подсветкой и автодополнениями.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru