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

Очередной маленький проект: язык программирования Unvariable

31.05.2026, 18:19. Показов 4043. Ответов 59
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Существует популярное заблуждение, что я только за гигантские проекты хватаюсь, которые не осиливаю, а маленьких якобы нет. На самом деле у моей компании было уже много маленьких проектов, и многие из них имели несколько страниц обсуждения: игрушечный язык программирования HQRCS, морской бой (собственного названия не имел), Cards II, Exlaroveen, демонстрация возможностей C#.NStar Threes, и вот теперь очередной игрушечный язык программирования, который, возможно, разовьется в большой проект, а может быть, так и останется маленьким. Язык называется Unvariable и содержит всего две операции: создание константы и возврат. Скачать можно на сайте (мы существенно обновили главную страницу, поэтому ссылка на нее, оттуда не сложно перейти на нужную).

Наш стиль


1. В этом языке нет переменных, только константы (потому и Unvariable).
2. Нет циклов, только рекурсия.
3. Значение функции зависит только от аргументов, не нужно каждый раз воссоздавать внешнее состояние, чтобы проверить, работает ли функция.

Наши главные достижения


1. Результат выполнения функции кэшируется, повторный вызов с теми же параметрами занимает десятки-сотни наносекунд.

Наши главные планы


1. Ввод-вывод.
2. Параллельное выполнение не связанных операций.
3. "Ленивое" выполнение операций, результат которых не используется.

Преимущества Unvariable


1. Технически переполнение стека возможно, но если захотите вызвать его специально, вряд ли дождетесь.
2. Пока в разработке...

Почти полное описание синтаксиса


Объявление константы:
Code
1
T x = value;
Можно также вместо явного типа использовать var. Можно объявить новую константу с тем же именем:
Code
1
x op= y;
Это не присваивание, это объявление новой константы. Если вы выполните одно из нескольких таких действий в зависимости от условия (об условиях ниже), в каждой ветке создастся своя константа, а после завершения условия вообще будет использована последняя объявленная до условия. Поддерживаемые типы:
byte - беззнаковое целое число от 0 до 255.
short int - знаковое целое от -32768 до 32767.
unsigned short int - беззнаковое целое от 0 до 65535.
int - знаковое целое от ~-2 млрд до ~2 млрд.
unsigned int - беззнаковое целое от 0 до ~4 млрд.
long int - знаковое целое от ~-9 ктлн до ~9 ктлн.
unsigned long int - беззнаковое целое от 0 до ~18 ктлн.
long long - произвольно большое знаковое целое.
unsigned long long - произвольно большое беззнаковое целое.
real - с плавающей точкой от ~1E-312 до ~1E+308 в плюс и в минус, а также ноль, плюс-минус бесконечность и NaN (аналог неопределенности).
char - не тестировался.
(T1, T2, T3, ...) - кортеж.
() T - список. Доступны только функции проверки, добавления в конец (Add, AddRange, AddSeries) и создающие новый список, изменение и удаление не поддерживается.
(n) T - многомерный список.
string - строка. Такой же критерий доступности функций, как и для списка.
System.Func[TResult, T1, T2, T3, ...] - делегат с возвращаемым типом TResult и одним или несколькими параметрами. Используются квадратные, а не угловые скобки.
Исключения: System.ArgumentException, System.IndexOutOfRangeException, System.NullReferenceException, System.OverflowException.
Поддерживаемые бинарные операторы: + - * / % & | ^ && || ^^ (N-арный XOR, возвращает true, только если ровно один операнд равен true) << >> <<< (циклический сдвиг) >>> (беззнаковый сдвиг) pow (возведение в степень) == != >= <= > < = += -= *= /= %= &= |= ^= <<= >>= pow=.
Унарные: + - ! (префиксный - отрицание, постфиксный - факториал) ~ ^ (индекс с конца).
Тернарные: x ? y : z, x ?= y : z, x ?!= y : z, x ?>= y : z, x ?<= y : z, x ?> y : z, x ?< y : z (все, кроме первого, эквивалентны x op y ? x : z (?== сокращается до ?=)). Тернарные операторы - вообще одни из главных операторов в Unvariable, так как в обычных условиях имеет смысл только возврат.
Возврат:
Code
1
return x;
На этом можно было бы закончить, но есть еще несколько конструкций, унаследованных от C#.NStar и явно не удаленных. Например, условие:
Code
1
2
3
4
5
6
7
8
if (condition1)
    ...
else if (condition2)
    ...
else if (...)
    ...
else
    ...
В каждом условии рекомендуется сделать возврат, так как если только создать константы, при выходе из условия они удалятся. Выражение switch (оператор switch упразднен):
Code
1
2
3
4
5
6
7
8
var result = x switch
{
    pattern1 => value1,
    pattern2 => value2,
    pattern3 => value3,
    ...
    _ => defaultValue,
};
Запятая после последнего значения обязательна. В качестве pattern1, pattern2 и т. д. используется сопоставление шаблонов, подробнее читайте здесь. Поддерживаются шаблон-константа, шаблон-тип, тип с объявлением переменной, var с объявлением переменной, шаблон сравнения (больше/меньше), пустой шаблон (_) и составной шаблон - несколько шаблонов, объединенных операторами and, or, not. Можно воспользоваться теми же шаблонами и без выражения switch - x is pattern.
Циклов, как уже упоминалось, нет, для этого используется рекурсия. Функция:
Code
1
2
3
4
5
TResult Function Name(T1 param1, T2 param2, T3 param3, ...)
{
    DoSomething();
    return result;
}
А также в виде лямбда-выражения:
Code
1
System.Func[TResult, T1, T2, T3, ...] = (param1, param2, param3, ...) => result;
Можно также не писать каждый раз System, только Func[...], если в начале кода написать:
Code
1
using System;
Теоретически есть и другие пространства имен, но в них мало полезного.
Обработка исключений:
Code
1
2
3
4
5
6
7
8
9
try
{
    () int a = (1, 2);
    return a[5];
}
catch (System.IndexOutOfRangeException ex)
{
    return false;
}
Классы, структуры, коллекции, DateTime, GUI, файлы и пакетный менеджер временно отключены для дальнейшей переработки. На этом, похоже, и все.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.05.2026, 18:19
Ответы с готовыми решениями:

На чем лучше всего писать маленький проект (такой как тетрис)?
1) На Шарпе. 2) На Game Maker. 3) На Game Maker Studio 2. 4) На Unreal Engine. 5) Пытаться...

Сверх-язык программирования
Мне кажется довольно странным, что за 40 лет, человечество почти не продвинулось в плане...

Новый язык программирования
исходный код и сам язык: https://github.com/RedL-Offiziel-Deutschland/RedL

59
 Аватар для Noname2331
94 / 77 / 10
Регистрация: 22.12.2024
Сообщений: 528
22.07.2026, 22:15
Студворк — интернет-сервис помощи студентам
Etyuhibosecyu, можете пожалуйста дать короткое определение всем трем терминам?

1) Переменная
2) Константа
3) Литерал
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,603
23.07.2026, 10:36
Оказывается, за последние несколько месяцев много чего произошло.

https://red-star-soft.com/Lineedge/

Добро пожаловать в Lineedge! Это когда-то казавшаяся перспективной, но теперь ушедшая на свалку истории ролевая игра.
А я даже не заметил, как Линейка оказалась на свалке истории.

ТС, видимо, сейчас полностью перешёл на новую игру Subords https://subords.com/

Главное, чтобы он не повторил тех же самых ошибок, что и в Линейке.
0
42 / 47 / 6
Регистрация: 21.10.2022
Сообщений: 645
Записей в блоге: 2
23.07.2026, 10:48
Цитата Сообщение от Royal_X Посмотреть сообщение
А я даже не заметил, как Линейка оказалась на свалке истории.
ТС, видимо, сейчас полностью перешёл на новую игру Subords https://subords.com/
Главное, чтобы он не повторил тех же самых ошибок, что и в Линейке.
Так был же анонс )
Но вообще странно, что человек который одной левой на раз-два пишет языки программирования, компрессоры, фреймворки и прочее, не может осилить UE C++ и мучается с блюпринтами.
0
Эксперт .NET
 Аватар для Usaga
14733 / 9507 / 1363
Регистрация: 21.01.2016
Сообщений: 35,869
23.07.2026, 10:53
Цитата Сообщение от Royal_X Посмотреть сообщение
Добро пожаловать в Lineedge! Это когда-то казавшаяся перспективной, но теперь ушедшая на свалку истории ролевая игра.
Никогда такого не было и вот опять! Так на свалке истории скоро места не останется свободного.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,603
23.07.2026, 11:27
Цитата Сообщение от didgik Посмотреть сообщение
не может осилить UE C++ и мучается с блюпринтами
как начнешь делать игры, то поймешь, что для создания хорошей игры, которая нравится людям и приносит деньги, не важно, используешь ты С++ или блюпринты, используешь текстуры 4096х4096 или 512х512, используешь звуки flac по 30 МБ или вообще используешь процедурный MetaSound, используешь PBR-материалы или простые материалы и т.д.
Я это к тому, что проблема ТС никак не связана с блюпринтами и при переходе на С++ его игры не станут лучше, а даже, как по мне, станут еще глючнее (будут утечки памяти и пр.).
0
 Аватар для Noname2331
94 / 77 / 10
Регистрация: 22.12.2024
Сообщений: 528
23.07.2026, 12:10
Насколько помню, первая семи-альфа Subords планируется к выходу в 2030м году. Кто-то удивится, если новая игра ничем не будет отличаться от старой, отличия будет видеть только сам автор?

Тут как в анекдоте: "Цыганские учёные уже много лет работают над лекарством от рака, но получается пока только героин."
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,603
23.07.2026, 12:20
Цитата Сообщение от Noname2331 Посмотреть сообщение
Кто-то удивится, если новая игра ничем не будет отличаться от старой
я тоже полагаю, что новая игра не будет отличаться от старой. Вот, я даже писал

Цитата Сообщение от Royal_X Посмотреть сообщение
Главное, чтобы он не повторил тех же самых ошибок, что и в Линейке.
проблема в том, что уже по первым скриншотам игры Subords видно, что это та же самая Линейка
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
23.07.2026, 12:55  [ТС]
Royal_X, вроде я написал почти исчерпывающее описание синтаксиса, протестируете язык? Или отказано?

Добавлено через 2 минуты
К слову, я обнаружил ошибку в автоформаттере: он "ломается" на комментариях на всю строку или многострочных. Но, думаю, тестировать можно и без этого.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,603
23.07.2026, 13:20
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
протестируете язык? Или отказано?
Отказано, поскольку я еще ни разу при написании кодов на C# не сталкивался с тем, что чего-то мне не хватало в этом языке. Так что, будет лучше, если твой язык твою обертку протестируют те, кто в своей работе видят необходимость в расширении данного языка.
1
42 / 47 / 6
Регистрация: 21.10.2022
Сообщений: 645
Записей в блоге: 2
23.07.2026, 13:49
Цитата Сообщение от Royal_X Посмотреть сообщение
Отказано, поскольку я еще ни разу при написании кодов на C# не сталкивался с тем, что чего-то мне не хватало в этом языке. Так что, будет лучше, если твой язык твою обертку протестируют те, кто в своей работе видят необходимость в расширении данного языка.
Вот поэтому игры лучше. Больше шансов, что кто-нибудь захочет посмотреть.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,603
23.07.2026, 14:19
Цитата Сообщение от didgik Посмотреть сообщение
Больше шансов, что кто-нибудь захочет посмотреть.
но если игра будет требовать топовый GPU, то и тут будет мало шансов, ибо не думаю, что на этом форуме геймеры сидят с RTX 5090

помню, что когда-то ТС в системных требованиях упоминал даже серию Blackwell, которая даже не для обычных геймеров, а для всяких дата-центров и суперкомпьютеров...
0
Эксперт .NET
 Аватар для Usaga
14733 / 9507 / 1363
Регистрация: 21.01.2016
Сообщений: 35,869
23.07.2026, 15:53
Etyuhibosecyu, «тестировать язык» должны тесты. Тебе уже сто раз про это говорили. Но видимо игнорировать общие РАБОЧИЕ практики это твое кредо.
0
Модератор
Эксперт Java
 Аватар для alecss131
2896 / 1402 / 412
Регистрация: 11.08.2017
Сообщений: 4,489
Записей в блоге: 2
23.07.2026, 15:56
Видел тут про ленивые вычисления, так они вроде есть и в чистом шарпе.

А так думаю стоит выбросить UE и набраться опыта либо в юнити (ибо язык надстройка над шарпом) заодно можно зяык прикрутить к игре, либо в годоте.
Требования буду поменьше да и судя по скринам, под те поделки ue излишен.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
23.07.2026, 17:01  [ТС]
Цитата Сообщение от alecss131 Посмотреть сообщение
А так думаю стоит выбросить UE
1200$ за модели и плагины тоже выбросить?
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,603
23.07.2026, 17:14
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
1200$ за модели и плагины тоже выбросить?
просто представь, что ты в Париже нанял двух девушек на пару часов, и забудь об этих деньгах
0
Эксперт .NET
 Аватар для Usaga
14733 / 9507 / 1363
Регистрация: 21.01.2016
Сообщений: 35,869
23.07.2026, 17:30
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
1200$ за модели и плагины тоже выбросить?
Ты их уже выбросил, взявшись за то, что не закончишь.
2
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
23.07.2026, 17:50  [ТС]
Цитата Сообщение от Royal_X Посмотреть сообщение
просто представь, что ты в Париже нанял двух девушек на пару часов, и забудь об этих деньгах
А вот для меня эти шутки обидны! Прошу так больше не шутить, если не хотите опять поссориться, тем более, нового положительного вклада (тестов) нет.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
24.07.2026, 01:16  [ТС]

Unvariable (Pre-Pre-Alpha) 0.13


Ссылка
- Добавлена оптимизация рекурсии. В целом работает так же, как и классическая оптимизация хвостовой рекурсии, но в некоторых случаях работает и тогда, когда TCO бессильна (то есть - является надмножеством TCO). Тривиальная рекурсия (сложение идущих подряд натуральных чисел) на нашем основном компьютере (характеристики в профиле) выполняется до глубины 20М без оптимизации за 7 секунд, с оптимизацией - за доли секунды (точно измерить не получается, но с оптимизацией даже 1Г выполняется за несколько секунд, в то время как без оптимизации 20М - это предел, 21М уже повисает насовсем). Единственный недостаток по сравнению с классической TCO - чуть больше потребляет памяти, в пределах нескольких байт, редко десятков байт на уровень (соответственно, несколько мегабайт на миллион уровней). Ну и еще есть временная мера, что в вызове должно быть столько же параметров тех же типов, что и в функции, никаких params.
- Исправлена ошибка с некорректным автоформатированием комментариев на всю строку.
- Разблокированы циклы. Тем не менее, переменные на каждой итерации они не обновляют, единственное, что могут сделать - собрать список, добавляя по элементу или по несколько элементов за итерацию.

Замеченные, но не исправленные ошибки


- Можно поймать вылет транслятора, если экспериментировать с действиями без присваивания и без вызова (например, со строками, состоящими только из "x + y", где x и y - некоторые выражения, но без знака '=' и без вызовов функций).
- В собранном EXE, после завершения приложения, выдается сообщение о "Необработанном исключении". На само приложение это не влияет.
Это последняя полноценная версия Unvariable. Дальше возможны только билды, а если нет, то сразу "большой", не игрушечный язык.
И открою страшную тайну, хотя, как я вижу, многие уже догадались, а один, возможно, догадался в первом же ответе: это не Шарп и не C#.NStar, это совсем другой язык, и это - "функциональный язык с человеческим лицом". Если вам нравится, можете считать его оберткой над Шарпом, ассемблер я, возможно, попробую написать, когда будет достаточно времени и энергии, но такое бывает одновременно крайне редко, поэтому не буду спорить, пусть будет обертка, но очень "толстая".
Можете не тестировать, это технический патч, главной цели уже достигший.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,603
24.07.2026, 14:50
Цитата Сообщение от alecss131 Посмотреть сообщение
в юнити
там еще размер игры будет адекватным. Вот размер папки с ассетами моей одной игры почти 300 МБ, а игра вышла на 147 МБ, причем она еще сжимается с помощью LZMA2 до 58 МБ.

Цитата Сообщение от alecss131 Посмотреть сообщение
либо в годоте
наверное, ТС сложно будет привыкать к годоту после ue. К тому же, он привык, что все оптимизации берет на себя движок. Имею в виду, что ТС вообще не думает над оптимизациями, он кидает все ассеты на сцену и ожидает, что движок оптимизирует всё автоматически. В годот тоже есть оптимизации из коробки, но еще нужно немного помочь движку.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,698
Записей в блоге: 29
27.07.2026, 17:15
ух ты, Коля пытается F# изобрести...только не с человеческим лицом и без выведения типов
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.07.2026, 17:15

Xana - язык программирования
Где-то месяц(или 2 недели) назад начал писать новый язык программирования, чтобы заменить свой...

Lugha - опять Язык Программирования
Привет. Да, понимаю что уже надоел со своими &quot;языками программирования&quot;. Но он лучше! Я начал...

XMM - мой язык программирования
Наконец-то я сделал первую версию. Она оооочень сырая. Из-за лени сделал только 2 команды -...

Создадим свой процессор, свою операционку, свой язык программирования и свое ПО!
Дисклеймер: я и сам пока не знаю, троллинг это или нет. Читать дальше или нет - решайте сами. ...

Очередная моя попытка сделать свой 2D движок
24 октября 2022 года мне пришла идея сделать свой 2D движок. Ну и я начал делать. До этого уже были...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru