|
Труд вопреки насмешкам
|
||||||||||||||||||||||||||||||||||||||||||||||
Очередной маленький проект: язык программирования Unvariable31.05.2026, 18:19. Показов 4267. Ответов 59
Метки нет (Все метки)
Существует популярное заблуждение, что я только за гигантские проекты хватаюсь, которые не осиливаю, а маленьких якобы нет. На самом деле у моей компании было уже много маленьких проектов, и многие из них имели несколько страниц обсуждения: игрушечный язык программирования HQRCS, морской бой (собственного названия не имел), Cards II, Exlaroveen, демонстрация возможностей C#.NStar Threes, и вот теперь очередной игрушечный язык программирования, который, возможно, разовьется в большой проект, а может быть, так и останется маленьким. Язык называется Unvariable и содержит всего две операции: создание константы и возврат. Скачать можно на сайте (мы существенно обновили главную страницу, поэтому ссылка на нее, оттуда не сложно перейти на нужную).
Наш стиль1. В этом языке нет переменных, только константы (потому и Unvariable). 2. Нет циклов, только рекурсия. 3. Значение функции зависит только от аргументов, не нужно каждый раз воссоздавать внешнее состояние, чтобы проверить, работает ли функция. Наши главные достижения1. Результат выполнения функции кэшируется, повторный вызов с теми же параметрами занимает десятки-сотни наносекунд. Наши главные планы1. Ввод-вывод. 2. Параллельное выполнение не связанных операций. 3. "Ленивое" выполнение операций, результат которых не используется. Преимущества Unvariable1. Технически переполнение стека возможно, но если захотите вызвать его специально, вряд ли дождетесь. 2. Пока в разработке... Почти полное описание синтаксисаОбъявление константы:
var. Можно объявить новую константу с тем же именем:
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, так как в обычных условиях имеет смысл только возврат. Возврат:
x is pattern.Циклов, как уже упоминалось, нет, для этого используется рекурсия. Функция:
Обработка исключений:
0
|
||||||||||||||||||||||||||||||||||||||||||||||
| 31.05.2026, 18:19 | |
|
Ответы с готовыми решениями:
59
На чем лучше всего писать маленький проект (такой как тетрис)? Сверх-язык программирования Новый язык программирования |
|
Труд вопреки насмешкам
|
||
| 01.06.2026, 16:48 [ТС] | ||
0
|
||
|
2491 / 1641 / 746
Регистрация: 17.03.2022
Сообщений: 5,362
|
|||
| 01.06.2026, 17:15 | |||
|
К тому же в данном случае это еще и характеристика сложности задачи: написать компилятор в общепринятом смысле этого слова существенно сложнее, чем "компилятор" в байт-код виртуальной машины.
0
|
|||
|
Труд вопреки насмешкам
|
||
| 01.06.2026, 17:32 [ТС] | ||
0
|
||
|
14815 / 9589 / 1368
Регистрация: 21.01.2016
Сообщений: 36,114
|
||
| 01.06.2026, 17:45 | ||
|
0
|
||
|
2491 / 1641 / 746
Регистрация: 17.03.2022
Сообщений: 5,362
|
||
| 01.06.2026, 18:28 | ||
|
Нет регистров - есть стек. Есть типизация (кроме как тупо по размеру, "влезет/нет"). Есть автоматическое управление памятью. Есть контроль исключений. Нет привязки к конкретной архитектуре (и размышлений о том, как оно работает на ARM какой-то версии или еще где-нибудь). Заметная часть команд описывает одной командой то, что на машинном уровне делается десятками, а то и сотнями инструкций. Наконец, этих команд попросту меньше на порядок. Где-то попадалась хорошая аналогия, что байт-код VM - это описание рецептов на уровне: "взять полкило картошки, почистить, отварить столько-то минут, растолочь...", а машинный код - уровня "вытянуть правую руку, опустить вниз, сжать пальцы, поднять руку с картофелиной вверх...". Действительно похоже.
0
|
||
|
Труд вопреки насмешкам
|
||
| 01.06.2026, 18:42 [ТС] | ||
|
P. S. Только что нашел в Яндексе.
0
|
||
|
Модератор
|
||
| 01.06.2026, 21:16 | ||
|
А вообще на тему промежуточных кодов. С++ внутри Clang компилируется в байт код очень похожий на шарповый/джавовый, его можно оттуда вытащить и запускать на GraalVm как джаву. И так же джаву/котлин можно собьрать с помощью грааля в нативный код (правда размер ехе будет громадный). Знаю что у шарпа есть il2cpp, но помню из юнити вытаскивал из этой штуки шарповый байт код, так что похоже это нечто иное.
0
|
||
|
14815 / 9589 / 1368
Регистрация: 21.01.2016
Сообщений: 36,114
|
||
| 02.06.2026, 02:47 | ||
|
0
|
||
|
Труд вопреки насмешкам
|
|
| 02.06.2026, 12:12 [ТС] | |
|
Royal_X, вот вы писали, что нельзя тестировать, если не знаком с синтаксисом. Тут синтаксис минималистичный, в шапке описан в деталях - не могли бы протестировать?
0
|
|
|
14815 / 9589 / 1368
Регистрация: 21.01.2016
Сообщений: 36,114
|
|
| 02.06.2026, 12:45 | |
|
Etyuhibosecyu, в мире разработки такие вещи тестами покрывают. Чтобы автоматизировать процесс. Ты же не собрался на каждое изменение в своём языке мистера Royal_X просить всё перетестировать?
0
|
|
|
Нарушитель
6693 / 3086 / 1064
Регистрация: 01.06.2021
Сообщений: 11,922
|
||
| 02.06.2026, 14:22 | ||
|
0
|
||
|
Труд вопреки насмешкам
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 20.07.2026, 20:30 [ТС] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Unvariable (Pre-Pre-Alpha) 0.09Ловите новую версию игрушечного языка программирования - Unvariable (Pre-Pre-Alpha) 0.09! Вот что изменилось: - Разблокирован ввод-вывод, но для него требуется новое ключевое слово IO (см. в описании синтаксиса). - Добавлено автоматическое форматирование, удаляющее точки с запятой и расставляющее отступы. - Добавлен более предсказуемый синтаксис, в частности, следующие конструкции теперь не работают:
Следующие конструкции также не работают:
Замеченные, но не исправленные ошибки- Возможны ошибки в автоматическом форматировании. Наша компания тестировала, насколько возможно, но всегда остается шанс, что где-то ошибки остались. - Можно поймать вылет транслятора, если экспериментировать с действиями без присваивания и без вызова (например, со строками, состоящими только из "x + y", где x и y - некоторые выражения, но без знака '=' и без вызовов функций). - В собранном EXE, после завершения приложения, выдается сообщение о "Необработанном исключении". На само приложение это не влияет. Почти полное описание синтаксисаОбъявление константы:
var. Можно объявить новую константу с тем же именем:
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. Следующие типы требуют указания ключевого слова IO перед именем
DateTime (без пространства имен) System.RedStarLinq System.RedStarLinqDictionaries System.RedStarLinqExtras System.RedStarLinqParallel System.RedStarLinqMath System.RedStarLinqRemoveDoubles System.Collections.BaseDictionary[TKey, TValue, TCertain] System.Collections.BaseHashSet[T, TCertain] System.Collections.BaseIndexable[T, TCertain] System.Collections.BaseList[T, TCertain] System.Collections.BaseSet[T, TCertain] System.Collections.BaseSortedSet[T, TCertain] System.Collections.BaseSumList[T, TCertain] System.Collections.Buffer[T] System.Collections.Comparer[T] System.Collections.Dictionary[TKey, TValue] System.Collections.EComparer[T] System.Collections.Extents System.Collections.FastDelHashSet[T] System.Collections.Group[T, TKey] System.Collections.G.LinkedList[T] System.Collections.G.LinkedListNode[T] System.Collections.LimitedQueue[T] System.Collections.ListEComparer[T] System.Collections.ListHashSet[T] System.Collections.ListOfBigSums System.Collections.Mirror[TKey, TValue] System.Collections.ParallelHashSet[T] System.Collections.Queue[T] System.Collections.Slice[T] System.Collections.SortedDictionary[TKey, TValue] System.Collections.SortedSet[T] System.Collections.Stack[T] System.Collections.SumList System.Collections.SumSet[T] System.Collections.TreeHashSet[T] System.Collections.TreeSet[T] System.GUI.Animatable System.GUI.AutoCompleteBox System.GUI.AvaloniaObject System.GUI.Bitmap System.GUI.Border System.GUI.Brush System.GUI.Button System.GUI.Canvas System.GUI.CheckBox System.GUI.Color System.GUI.ColumnDefinition System.GUI.ColumnDefinitions System.GUI.ComboBox System.GUI.Control System.GUI.Controls System.GUI.Decorator System.GUI.DefinitionBase System.GUI.DockPanel System.GUI.Expander System.GUI.Grid System.GUI.GridLength System.GUI.GridSplitter System.GUI.GridUnitType System.GUI.GUIWindow System.GUI.HeaderedContentControl System.GUI.HorizontalAlignment System.GUI.IBrush System.GUI.IImage System.GUI.Image System.GUI.ImageBrush System.GUI.IResourceDictionary System.GUI.ItemsControl System.GUI.KeyEventArgs System.GUI.Panel System.GUI.PixelPoint System.GUI.Point System.GUI.PointerEventArgs System.GUI.PointerPressedEventArgs System.GUI.PointerReleasedEventArgs System.GUI.RadioButton System.GUI.RangeBase System.GUI.RelativePanel System.GUI.RoutedEventArgs System.GUI.RowDefinition System.GUI.RowDefinitions System.GUI.ScrollViewer System.GUI.SelectingItemsControl System.GUI.Slider System.GUI.SolidColorBrush System.GUI.SplitView System.GUI.StackPanel System.GUI.TabControl System.GUI.TemplatedControl System.GUI.TextBlock System.GUI.TextBox System.GUI.Thumb System.GUI.TileBrush System.GUI.ToggleButton System.GUI.ToolTip System.GUI.UniformGrid System.GUI.VerticalAlignment System.GUI.Window System.GUI.WrapPanel System.GUI.ZoomBorder System.IO.Directory System.IO.DirectoryInfo System.IO.DriveInfo System.IO.DriveType System.IO.File System.IO.FileAccess System.IO.FileAttributes System.IO.FileInfo System.IO.FileMode System.IO.FileOptions System.IO.FileShare System.IO.FileStream System.IO.FileSystemInfo System.IO.IOException System.IO.MemoryStream System.IO.Path System.IO.Stream System.IO.UnixFileMode Поддерживаемые бинарные операторы: + - * / % & | ^ && || ^^ (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, так как в обычных условиях имеет смысл только возврат. Возврат:
x is pattern.Циклов нет, для этого используется рекурсия. Функция:
using System.GUI и т. д.Обработка исключений:
(IO DateTime).Now. И вообще если нужно вызвать статический метод или вызвать статическое свойство у IO-типа, используется именно такая конструкция: (IO Type).Member.Пример с GUI
Классы, структуры и пакетный менеджер все еще отключены.
0
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
| 21.07.2026, 14:29 | |
|
Давно не интересовался поделками Etyuhibosecyu. Заглянул, по репозиторию тоже пробежался чтобы наверняка убедиться во всём. Не помню, говорил ли я раньше это, поэтому возможно повторюсь.
Плюс только один - человек старается, опыт повышает в кодогенерации. Для собственной радости - это точно отлично. "Всяко лучше, чем по подъездам валяться пьяным". Но зачем Это? Или зачем это называть ультра-высоко-гипер-максимально-суперстар-технологичное... ? 1) Ни для одного проекта я так и не увидел применимости. Хоть одно бы подтверждение, кто-нибудь бы сказал что это нужная фича. Отсюда и постоянный вопрос "Зачем это?". 2) Что NStar, что RedStarMath. И вот теперь Это. Всё это "обёртка" уже существующего C# и его функционала. НИЧЕГО нового я так и не увидел. Только тонны непонятного, нечитабельного кода над уже идеально-"вылизанным" языком. На каждую "фичу" для этого "языка" можно сразу привести контраргумент уже существующего функционала, который уже работает. При желании можно просто начать по другому программировать и всё. Ну и... если бы он был написан на С++ или ассемблере ну тогда да... другой язык. А так... обвешанный, утяжелённый C#.С таким энтузиазмом, лучше бы направил деятельность на улучшения и оптимизацию. Да хоть чего. Проектов в гитхабе дохрена. В том числе и официальные. Помоги всем, сделай существующие библиотеки лучше - точно увидят, точно запомнят. Эх... столько энтузиазма пропадает.
0
|
|
|
14815 / 9589 / 1368
Регистрация: 21.01.2016
Сообщений: 36,114
|
|
| 21.07.2026, 15:24 | |
|
HF, да ничего он не станет улучшать, принципиально. Нарциссизм знатно приправленный NIH’ом не позволят ему заниматься чем-то, где он не во главе угла. Да он и не сможет.
0
|
|
|
Труд вопреки насмешкам
|
||
| 21.07.2026, 18:33 [ТС] | ||
|
0
|
||
|
|
|||
| 21.07.2026, 19:26 | |||
|
А если, для примера, IList класс назвали NStarList а внутри всё тоже самое - хранение коллекции, итератор, обход коллекции... а к этому ещё тонны кода, которые типа что-то полезное делают. Вот это и есть "обёртка" над существующей реализацией. Только если бы она давала реальные бонусы, имела понятные фичи - то это бы привлекало и можно было сказать что супер функционал и даже претендует на библиотеку. А так, повторюсь, вообще не понятная хреновина. Выглядит как то что мы знаем, называется по новому, тяжелее, не понятнее и по пользе так и не доказано ничем. Добавлено через 4 минуты Мы используем буквы. Но вы что-то написали и претендуете на бестселлер. Ну а я говорю что вы знаете буквы и слова и бумаги потратили много, но... читать это невозможно. Ни сюжета, ни героев. Вроде буквы теже и слова знакомые, но книга в макулатуру. Щас понятно?
0
|
|||
|
Труд вопреки насмешкам
|
||
| 21.07.2026, 19:30 [ТС] | ||
|
0
|
||
|
|
|||||||
| 21.07.2026, 20:05 | |||||||
|
Три базовых "теста" существенности: - это что-то из того что людям всегда нужно было и хотели бы видеть - тесты или статистика показывающие преимущество а не деградацию скорости (любой, набора букв или скорости выполнения) - ну и то как это используется. Если это выглядит так что ничего не понятно и даже после прочтения документации не понятно как это писать и выглядит не понятно и не очевидно. То это вызывает только отторжение. Но есть объяснение, обоснование? Константа для чего? Чтобы не переназначить? То есть если внутри цикла будет переменная, то это будет ХХХ констант в цикле на ХХХ итераций? А если это переменная - тяжёлый объект? Этому нужны объяснение о пользе, и тесты. Вывод: польза не выявлена. Мне вот вообще посрать как SDK написан, но если они обновляют и показывают что скорость увеличилась, а память не используется теперь вообще - я вижу что они молодцы и более уверенно использую функционал. При желании могу глянуть код и понять как они это делают. Но мне лично всё равно что там. Вывод: польза не выявлена. Или кто-то "обернул" все функции в таски? Ну да... там можно состояние проверить. "Значение зависит от аргументов". Ничего не понятно. Что такое "значение функции"? Результат? Или ссылка на функцию которая как таск, с состоянием? Вывод: польза не выявлена. Сомневаюсь что код компилируется в бинарник и хранится в памяти и выполняется уже.... Стоп, именно так и работает компилированная программа. Откуда тогда новая скорость? Вывод: польза не выявлена. тестов и примеров тоже. Выглядит так словно операция выполняется даже если не используется. Опять таски? но зачем запускать не используемое? Вообщем по кааждому пункту больше вопросов. А раз нет ни путных примеров, тестов и объяснений "А зачем это? Чем это круче того что мы имеем каждый день?" то и напрашиваются вышенаписанные выводы.
0
|
|||||||
|
Труд вопреки насмешкам
|
|||||||||||
| 21.07.2026, 20:17 [ТС] | |||||||||||
0
|
|||||||||||
|
14815 / 9589 / 1368
Регистрация: 21.01.2016
Сообщений: 36,114
|
||||
| 22.07.2026, 02:47 | ||||
|
И тут встаёт вопрос: а зачем нужна обёртка над нормальным языком, когда есть сам нормальный язык? Нужно что-то, чего "из каробки" нет? Ну, добро пожаловать в реестр NuGet-пакетов.
0
|
||||
| 22.07.2026, 02:47 | |
|
Xana - язык программирования Lugha - опять Язык Программирования XMM - мой язык программирования Создадим свой процессор, свою операционку, свой язык программирования и свое ПО! Очередная моя попытка сделать свой 2D движок Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|