|
Труд вопреки насмешкам
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
C#.NStar22.11.2020, 01:26. Показов 41016. Ответов 523
Метки нет (Все метки)
С чего всё началось
Мой язык программирования развивается, в очередной раз меняя название. Пятое название после C↑ᶜC, C#++, C with stations и временного Unnamed2 имеет вид "C# .NStar". Это название не вызывает никаких ассоциаций со стрелками, с "симбиозом плюсов и шарпа", со "станционным программированием", а вызывает единственную - то, что этот язык - прямое продолжение C#. Теперь вы убедились, что этот язык - не пустая болтовня, одна версия уже увидела свет, поэтому надеюсь, что очередная презентация возможностей C# .NStar хоть и подвергнется критике, но не приведет ни к чему плохому. Вот что уже работает:
1. Пространства имен. 2. Ошибки списком строк - теперь отображение n ошибок не займет время, пропорциональное n2, и вообще я по максимуму убрал конкатенацию строк в цикле, что является экстремально важным признаком качества языка. 3. Списки - не только возврат списка, но и переменные списочных типов. 4. Индексы - последний и самый сложный из перечисленных пунктов. Такой код успешно работает:
А вот несколько будущих возможностей: 1. Оператор switch с лямбда-выражением. Это невероятно мощная конструкция! Позволит убрать очень много дублирования в условиях. Вот два примера:
2. Способ задания словаря будет отличаться от способа задания двумерного списка: ключ и значение будут разделяться оператором " :", а если словарь состоит из единственного элемента, доступного по всем ключам - достаточно указать один этот элемент. Пример:
ПОБЕДА!!! C#.NStar достиг версии (Alpha RC) 0.9! Это первое приложение от Red-Star-Soft, когда-либо достигавшее подобной версии! (Фреймворк - это не приложение.) Теперь, надеюсь, я перестал быть "профессиональным недоделывателем"? И, надеюсь, я получу тест? 1. Работа с файлами. 2. При техническом крахе сохраняется лог во временную папку. 3. Потоки. Причем нет этого ужасного разбиения на две воюющих стороны - синхронные и асинхронные - переключение контекста происходит автоматически. 4. "Швейцарский нож" (оператор is, сопоставление шаблонов). Пока что реализованы семь шаблонов: константа, тип, тип с объявлением переменной, var с объявлением переменной, шаблон сравнения (больше/меньше), пустой шаблон (_) и составной шаблон - несколько шаблонов, объединенных операторами and, or, not. Есть одна замеченная, но не исправленная ошибка, что попытка применить шаблон сравнения не к числу вызывает технический крах. Возможно, в будущем исправлю. 5. Сокращенный оператор for - можно написать так:
7. Записи (Record - с прописной буквы). В отличие от C#.NET, это по терминологии Мартина чистые структуры данных, имеющие свойства, совпадащие по именам и типам с параметрами, конструктор из эих параметров и стандартные методы Equals и GetHashCode и неспособные иметь другие методы и свойства. 8. Структуры (Struct - с прописной буквы). 9. Прототип полиморфизма в виде словарей от рекурсивного типа к классу, одним из следующих способов (ключевое слово Class в случае полиморфизма обязтельно брать в скобки):
10. Обработка исключений:
11. И самое невероятное - ПАКЕТНЫЙ МЕНЕДЖЕР!!! Вы можете подключить любой пакет, доступный в публичном репозитории NuGet - достаточно зайти в настройки и указать его имя. Рабочие примеры кода на C#.NStar, в дополнение к предыдущим версиям:
1
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 22.11.2020, 01:26 | |
|
Ответы с готовыми решениями:
523
Мелкомягкие мыслят местами точно как и я или следят за моим компьютером и крадут идеи, записанные на нем для C# .NStar? Стал ли .NStar в меньшей степени "сборной солянкой"? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Труд вопреки насмешкам
|
||
| 04.11.2025, 18:59 [ТС] | ||
|
Добавлено через 2 минуты Royal_X, возможно, это звучит грубо, но любой творец, если будет принимать все идеи, получится ералаш. Как в басне: "и Нил, и дуб, и огород...".
0
|
||
|
6767 / 3126 / 1065
Регистрация: 01.06.2021
Сообщений: 12,102
|
||
| 04.11.2025, 19:10 | ||
|
Etyuhibosecyu, ну что ж. Я выполнил твою просьбу, взглянул на твою программу. Но как тестировать, если с синтаксисом не знаком? Полез в документацию, но не захотел читать то, что там написано. Но на код я взглянул, в общем это и есть обертка) правда, поставляется она вместе с лексером, парсером... и с современным интерфейсом на авалонии.
0
|
||
|
Труд вопреки насмешкам
|
||||||||
| 04.11.2025, 19:32 [ТС] | ||||||||
|
Добавлено через 4 минуты Добавлено через 5 минут Royal_X, в третьем билде даже такой код работает...
Welemir1, я вас вижу! Вы раньше тестировали, сейчас вас очень не хватает...
0
|
||||||||
|
|
|||||||
| 04.11.2025, 19:40 | |||||||
|
Другой вопрос что нужно видеть перспективу у новшества, а не просто выдать что-то иное. Например я вижу этот кусок кода
x. Отлично, когда мне это может понадобится?1. я хочу записать копию переменной x. В том же C# для этого существует var, который выполняет ровно такую же задачу.2. я хочу записать иное значение того же типа, что и x, скажем чтобы в дальнейшем заменить при выполнении какого-то условия. Для того чтобы записать, справа нужно указать такой же тип, что и x, т.е. я всё ещё связан строгим указанием конкретного типа и мне от этого дженерика ни холодно, ни гарячо.Т.е. фича языка есть, а смысла в ней нет.
0
|
|||||||
|
Труд вопреки насмешкам
|
|
| 04.11.2025, 19:44 [ТС] | |
|
0
|
|
|
|
||
| 04.11.2025, 20:16 | ||
У вас же выходит что мы просто в коде указываем T = int, и дальше используем это как обычно значение. Мой пример с var наверное не самый удачный, но есть другая ассоциация прям один-в-один -- alias. Т.е. ровно тот же эффект будет, если я просто вверху укажу using T System.Int32;Но повторюсь -- смысл всего этого? Какой реальный кейс использования такого кода? Те же alias не используют чтобы указать тип, который будут быстро менять в случае чего, потому что в любом случае придется перелопачивать код.
0
|
||
|
6767 / 3126 / 1065
Регистрация: 01.06.2021
Сообщений: 12,102
|
|
| 04.11.2025, 20:18 | |
|
Wolfdp, а в остальных случаях ты увидел смысл? Вот как эксперт С#, скажи, пожалуйста, нужен ли вообще такой язык?
0
|
|
|
Труд вопреки насмешкам
|
|||
| 04.11.2025, 20:50 [ТС] | |||
|
Добавлено через 15 минут
0
|
|||
|
Автоматизируй это!
|
||
| 04.11.2025, 21:07 | ||
|
Вот для чего этот язык? на нем можно cli-приложения писать? так покажи, напиши веб на нем? напиши сайтик, покажи как сервер сделать что на нем можно написать нужное программистам?
0
|
||
|
Труд вопреки насмешкам
|
||||||||||||||||||||||||
| 04.11.2025, 21:13 [ТС] | ||||||||||||||||||||||||
0
|
||||||||||||||||||||||||
|
|
||||
| 04.11.2025, 21:19 | ||||
|
По крайне мере ощущения, как при чтении новых фич языка, не возникало. А я ооочень люблю почитать про нововведения и использовать их.
Теперь смотрите как это работает в C# - в инкапсулированом методе/классе я работаю с неким T. Он может быть уточнён, например что реализует INumber и можно выполнять арифметические операции. Я нигде в реализации метода/класса не указываю фактическое значение T, могу только уточнить его свойства. - вызывающий код уже обязан чётко указать с каким типом работаем. Это позволяет написать единую логику для схожих объектов, начиная с object. Смотрим ваш пример: - я в коде сразу должен указать что T = int. Когда вы пишете что "x имеет неизвестный тип", это вообще как? dynamic? Или всё же где-то выше есть объявление int x, и тип всё таки известен?P.S. замечу что конкретно ваш пример с списком и арифметическими операциями решается через INumber, а не рефлексию.
0
|
||||
|
Труд вопреки насмешкам
|
||
| 04.11.2025, 21:21 [ТС] | ||
|
0
|
||
|
|
||
| 04.11.2025, 21:35 | ||
1. Неименованный кортеж? Я себе такое только я лямдах позволяю, где типы априори не нужно указывать. То ещё приключение потом вспоминать что означает Item1. Причём ваш пример ещё и касается сокращения для случая, когда все элементы кортежа имеют один и тот же тип, что далеко не всегда так. 2. Тройной вложенный лист -- это реально что-то часто требующееся? Нет, бывает, но гораздо чаще встречал либо N-мерный массив, либо N-мерный зубчастый массив.
0
|
||
|
Труд вопреки насмешкам
|
||
| 04.11.2025, 21:39 [ТС] | ||
((int[3])[3])[3]). Вместо зубчатого - список делает все то же самое, только лучше.
0
|
||
|
|
|
| 04.11.2025, 21:40 | |
|
Под фрейворком я подразумевал например asp.net core или WPF. Т.е. какая-то комплексная технология для типичной задачи.
Касаемо документации неправильно выразился: "если появится доработанная документация". То что сейчас это очень куцая документация. Я просто отталкивался от того что уже есть: некий компилятор и некая документация. Представим что они доведены до совершенства. Без IDE, либ, фреймворков (или хз как назвать это правильно) -- это не взлетит.
0
|
|
|
Труд вопреки насмешкам
|
||
| 04.11.2025, 21:42 [ТС] | ||
|
0
|
||
|
6767 / 3126 / 1065
Регистрация: 01.06.2021
Сообщений: 12,102
|
||
| 04.11.2025, 21:44 | ||
|
0
|
||
|
|
||
| 04.11.2025, 22:03 | ||
|
Окей, даже если пофантазировать что всё это появится в будущем: я не вижу каких-то киллер-фич. Может если сравнивать с временами .net 2.0 и есть прикольные вещи, но сейчас уже готовится релиз C# 14, за всё это время он очень сильно продвинулся. Тут хотя бы догнать этот уровень, не то чтобы превзойти. Etyuhibosecyu, общая рекомендация: идём от проблемы к решению, а не наоборот. Вы пока показуете технологию, и не указываете какую проблему она решает. С теми же кортежами -- толку что я могу обратиться как к массиву? Чем val[0] отличается от val.Item1 в плане "угадай что там храниться?" Я хочу видеть явное имя хранящегося значения, например item.UserId. Так я сразу пойму с чем работаю, а не мотать по коду "а чего там записывалось вообще". Если мне понадобиться тупо массив значений, у меня уже есть массив. Зачем мне что-то другое?
0
|
||
|
14821 / 9605 / 1369
Регистрация: 21.01.2016
Сообщений: 36,155
|
|||
| 04.11.2025, 22:05 | |||
|
0
|
|||
|
6767 / 3126 / 1065
Регистрация: 01.06.2021
Сообщений: 12,102
|
|
| 04.11.2025, 23:06 | |
|
Etyuhibosecyu, правильно ли я понимаю, что ты планируешь выпустить свое приложение под другие платформы тоже (Linux, macOS), учитывая, что ты использовал Avalonia UI?
0
|
|
|
Новые блоги и статьи
|
|||
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|