Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
18 / 0 / 0
Регистрация: 19.06.2026
Сообщений: 2

Создаю свой язык программирования для автоматизации игр. Кто пробовал?

19.06.2026, 21:51. Показов 1208. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Давно хотел поделиться одной идеей, которая, возможно, кого-то тут заинтересует.

Я занимаюсь автоматизацией в играх, и существующие языки типа Lua или Python, вроде бы удобные, но все равно приходится подстраиваться под их синтаксис и ограничения. Тогда я подумал: а что если сделать язык, который будет идеально подходить для моих задач? Специфический синтаксис, встроенные функции для работы с памятью и процессами.

Сначала казалось, что это что-то невероятно сложное. Но оказалось, что основа не такая уж и страшная. Все что нужно это:

Определится с типом языка. Интерпретируемый (как Python) или компилируемый (как C++). Для начала я выбрал интерпретируемый — его проще сделать.

Придумать синтаксис. Как будут выглядить команды? Например, print("Hello") или вывод "Привет"?

Написать лексер и парсер. Это самая техническая часть. Лексер разбивает код на токены, а парсер строит из них дерево.

Создать интерпретатор. Он будет выполнять код.

Я даже набросал простейший интерпретатор на Python, чтобы проверить концепцию. Он умеет выполнять арифметику, работать с переменными и выводить текст.

Код, если кому интересно:

Python
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
39
40
41
42
import re
import sys
 
class Interpreter:
    def __init__(self):
        self.variables = {}
 
    def evaluate(self, code):
        lines = code.split('\n')
        for line in lines:
            line = line.strip()
            if not line:
                continue
 
            if line.startswith('print('):
                expr = line[6:-1]
                result = self.evaluate_expression(expr)
                print(result)
            elif '=' in line:
                var_name, expr = line.split('=', 1)
                var_name = var_name.strip()
                value = self.evaluate_expression(expr.strip())
                self.variables[var_name] = value
            else:
                print(f"[!] Unknown command: {line}")
 
    def evaluate_expression(self, expr):
        for var, val in self.variables.items():
            expr = expr.replace(var, str(val))
        try:
            return eval(expr)
        except:
            return expr
 
if __name__ == "__main__":
    interpreter = Interpreter()
    code = """
    x = 10
    y = 20
    print(x + y)
    """
    interpreter.evaluate(code)
Это, конечно, детский лепет, но он показывает сам принцип.

В планах:

Добавить функции (def, return).

Условия (if, else).

Циклы (for, while).

Встроенные функции для работы с памятью (read_memory, write_memory).

Вопрос к сообществу: кто-то пробовал делать что-то подобное? Может быть, есть готовые фреймворки или статьи, которые помогут не изобретать велосипед? Слышал про ANTLR и LLVM, но пока не разобрался.

Буду рад любым советам и критике. Если тема зайдет, могу выложить более подробный код и объяснить, как все работает.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.06.2026, 21:51
Ответы с готовыми решениями:

Язык для систем автоматизации
Здравствуйте! Возможно вопрос покажется несуразным, но не знаю в какую сторону смотреть! Сейчас на...

Как начать создавать свой язык программирование?
Как начать создавать свой язык программирование cхожий с TypeScript по принципу работы?

Опрос: Если бы Вы делали свой собственный компилируемый язык программирования, как бы Вы его реализовали?
Ответ обоснуйте, пожалуйста :)

15
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,117
Записей в блоге: 2
21.06.2026, 19:41
Цитата Сообщение от Hexus Посмотреть сообщение
Я занимаюсь автоматизацией в играх, и существующие языки типа Lua или Python, вроде бы удобные, но все равно приходится подстраиваться под их синтаксис и ограничения. Тогда я подумал: а что если сделать язык, который будет идеально подходить для моих задач? Специфический синтаксис, встроенные функции для работы с памятью и процессами.
Если говорить правду - обычный "рублёвый замах" что кончается "копеечным броском", а часто и его нет. Чем не устраивает (гибкий) пытон? Приведите пример Вашей задачи где его использование затруднительно
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4315 / 2106 / 432
Регистрация: 19.07.2009
Сообщений: 3,215
Записей в блоге: 24
22.06.2026, 15:54
Цитата Сообщение от Hexus Посмотреть сообщение
кто-то пробовал делать что-то подобное?
Я пробовал. Собственно, нужда возникает ровно тогда, когда предметно-ориентированный язык, реализованный в виде набора определений типов и функций на языке общего назначения (Python, скажем), становится слишком многословным из-за вербализации всех, даже самых маленьких, синтаксических конструкций своего языка.
Кстати, это также ответ на вопрос Igor3D.

Цитата Сообщение от Hexus Посмотреть сообщение
Все что нужно это:
Определится с типом языка
Придумать синтаксис
Написать лексер и парсер
Создать интерпретатор.
А ещё:
- Подобрать и внедрить систему типизации, реализовать проверку типов (а также разрешение перегрузок, восстановление неявных типов, унификацию, вывод). Понадобится это буквально на третий день отладки, когда окажется, что проблема банально в несоблюдении очевидных ограничений типизации.
- Реализовать LSP или другое средство подсвечивать код и вообще работать с ним не как с потоком букв.
- Реализовать отладчик. Может оказаться, что DAP очень не подходит для выбранного языка.
- Обеспечить стандартную библиотеку функций и средства интеграции среды исполнения выбранного языка со средой исполнения интерпретатора (FFI и другие прелести).
- Проработать алгебру или исчисление конструкций выбранного языка. Понадобится это ровно в тот момент, когда на самом обычном коде программа подвиснет и окажется, что нужен оптимизатор, причём статический.

и это не полный список.

Цитата Сообщение от Hexus Посмотреть сообщение
Слышал про ANTLR и LLVM, но пока не разобрался.
Для быстрого прототипирования синтаксического разбора рекомендую посмотреть в сторону парсерных комбинаторов. Они пишутся быстрее и понятнее, чем ANTLR. Правда, медленнее, но на этапе прототипирования это не является особой проблемой.
0
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,117
Записей в блоге: 2
22.06.2026, 16:44
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Я пробовал.
И как? Лежит на полочке, но, конечно, Вы получили бесценный опыт и.т.п.?
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Собственно, нужда возникает ровно тогда, когда предметно-ориентированный язык, реализованный в виде набора определений типов и функций на языке общего назначения (Python, скажем), становится слишком многословным из-за вербализации всех, даже самых маленьких, синтаксических конструкций своего языка.
Что же это за потребность когда общих конструкций мало? Можно пример?
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Кстати, это также ответ на вопрос Igor3D.
Пока не уловил ответ
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4315 / 2106 / 432
Регистрация: 19.07.2009
Сообщений: 3,215
Записей в блоге: 24
22.06.2026, 17:36
Цитата Сообщение от Igor3D Посмотреть сообщение
И как? Лежит на полочке, но, конечно, Вы получили бесценный опыт и.т.п.?
По-разному.
Одним полностью собственным языком я пользуюсь по настоящий момент и он оправдал себя полностью. Чистый функциональный.
Ещё один создал больше проблем, чем принёс пользы. Впрочем, у него не было собственного компактного текстового синтаксиса, он был подмножеством XML (с синтаксисом, совместимым с XML). Императивный с синхронизацией параллельных потоков.
Ещё один был скорее учебным, но выполнил свои задачи полностью. Язык рекурсивных арифметических выражений. Он был полностью на собственном компактном синтаксисе. Я фрагмент книги Мальцева «Алгоритмы и рекурсивные функции» на нём реализовал.

Цитата Сообщение от Igor3D Посмотреть сообщение
Что же это за потребность когда общих конструкций мало?
Невнимательно читаешь. Про общие конструкции я ничего не говорил.
Проблема возникает тогда, когда запись становится громоздкой.

Например. надо описать поведение NPC в виде конечных автоматов.
Можно писать на Python:
Python
1
2
3
4
5
GOBLIN = [
  ("IDLE", "saw Player", "ATTACK"),
  ("ATTACK", "low HP", "RUN AWAY"),
  ("RUN AWAY", "not low HP", "IDLE"),
]
Можно на питоне, но вместо list и tuple использовать подходящие конструкторы классов, тогда размер кода увеличится вдвое.
А на специализированном DSL будет короче:
Code
1
2
GOBLIN:
  IDLE --[ saw Player ]-> ATTACK --[ low HP ]-> RUN AWAY --[ not low HP ]-> IDLE
Дальше возникает экономический вопрос: если таких конечных автоматов с десяток, то можно и на питоне написать.
Если же их сотни-тысячи, и к тому же хочется, чтобы разработчики игровой логики программистов не дёргали в время отладки поведения NPC, то специализированный язык может существенно снизить уровень входа (можно студентов набрать) и повысит читаемость сценариев, сократив время на поиск и правку.
1
 Аватар для Storm Screamer
5242 / 1548 / 120
Регистрация: 21.04.2013
Сообщений: 9,080
22.06.2026, 19:13
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Если же их сотни-тысячи
Скорее подход изменят к разработке игровой ИИ логике, чем напишут спец. язык. Вместо конечных автоматов дерево поведения выберут, или как минимум конечные автоматы опишут не для GOBLIN, а для чего-то вроде AIPawn для описания целого класса NPC.

Цитата Сообщение от Mysterious Light Посмотреть сообщение
можно студентов набрать
Можно нейросетку натравить на рутинные задачи.
0
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,117
Записей в блоге: 2
22.06.2026, 19:59
Цитата Сообщение от Mysterious Light Посмотреть сообщение
А на специализированном DSL будет короче:
Не убеждает. Если хочется вводить/иметь такие строки - можно класс написать, необходимости в чем-то глобальном не видно
Цитата Сообщение от Mysterious Light Посмотреть сообщение
IDLE --[ saw Player ]-> ATTACK
А как обеспечить смешивание (переход, blend, mix и.т.п) анимаций от IDLE до ATTACK? Прямолинейная интерполяция сработает грубо. Возможно здесь и есть смысл поизобретать какие-то тулзы, хотя выглядит "узко"
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4315 / 2106 / 432
Регистрация: 19.07.2009
Сообщений: 3,215
Записей в блоге: 24
22.06.2026, 23:55
Storm Screamer, кстати, да.

Не уверен, что для ИИ вообще есть разница, каким конкретным синтаксисом пользоваться. С другой стороны, современные модели (по моим ощущениям) не очень хорошо работают со специализированными DSL, но норовят вставить простыню «низкоуровневого» текста.

Igor3D, отвечу притчей:
Кликните здесь для просмотра всего текста
­Приехали гости к хозяину дома. Спросили: как нам воду нагреть, если нигде чайника нет.
Он отвечает: вот есть агрегат. Наливаете туда воды, сколько вам нужно или чуть больше, нажимаете на этой панели кнопку с количеством литров, которые вы хотите нагреть, и он греет столько, сколько нужно.
Они говорят: не понятно, давай на примере.
Он говорит: хорошо. Например, хотим нагреть 1 литр воды. Заливаете литр воды или чуть больше. Нажимаете на этой панели кнопку «1 литр». Видите, она греет. Вот, она налила 1 литр горячей воды. Понятно?
Гости говорят: ничего не понятно. Один литр воды — это же слишком мало на такую ораву людей. Тут едва на полчашки чая хватит каждому. Да и чай Вася любит чёрный, а Вова — зелёный. А Маша вообще только кофе пьёт. А говоришь нам — один литр воды. Глупости ты говоришь! Вздор!
И хозяин постиг дзен.
0
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,117
Записей в блоге: 2
23.06.2026, 01:26
Цитата Сообщение от Mysterious Light Посмотреть сообщение
отвечу притчей:
Полагаю мысль такая
Ну это же просто для примера
Примета верная: если идея созрела - примеры находятся сами собой, и не один. А если вот так, приходится притчи рассказывать - ну значит это "концептуально интересно"
0
Эксперт .NET
 Аватар для Usaga
14370 / 9471 / 1360
Регистрация: 21.01.2016
Сообщений: 35,741
23.06.2026, 02:49
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Если же их сотни-тысячи, и к тому же хочется, чтобы разработчики игровой логики программистов не дёргали в время отладки поведения NPC, то специализированный язык может существенно снизить уровень входа
Узкоспециализированный язык снижающий порог входа до возможности использования его непрограммистами будет настолько игрушечным и невыразительным, что придётся дёргать тех самых программистов, чтобы хоть как-то на нём могли выразить логику поведения NPC.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
23.06.2026, 09:31
Цитата Сообщение от Igor3D Посмотреть сообщение
Что же это за потребность когда общих конструкций мало? Можно пример?
Например, SQL.
0
Эксперт функциональных языков программированияЭксперт по математике/физике
4315 / 2106 / 432
Регистрация: 19.07.2009
Сообщений: 3,215
Записей в блоге: 24
23.06.2026, 12:56
Цитата Сообщение от Usaga Посмотреть сообщение
Узкоспециализированный язык снижающий порог входа до возможности использования его непрограммистами будет настолько игрушечным и невыразительным, что придётся дёргать тех самых программистов, чтобы хоть как-то на нём могли выразить логику поведения NPC.
Есть такой риск.

Я скептически отношусь к лозунгам «используйте X и программисты будут не нужны». Но если задача реально стереотипная, то её стереотипную часть можно формализовать в виде отдельного языка, которого будет достаточно для того, выразить всю необходимую логику. А когда будет нужно что-то нетривиальное, придётся дёргать тех самых программистов™.
Отсюда мораль: не нужно вводить новый язык, если он не покроет почти все основные ситуации, ради которых вводится.

Кроме этого, более частый класс ситуаций, по моему мнению, — это когда пользоваться специализированным языком будут другие программисты. Тогда сам язык может восприниматься как формализованный стандартизованный набор рецептов, из которых можно насобирать решение конкретной прикладной задачи. Это снижает когнитивную нагрузку и при решении задачи, и при сопровождении.
А если ещё и синтаксис минималистичный — вообще шик.

Ещё, наверное, надо бы разделить несколько тем, которые мы здесь поднимаем и обсуждаем, и лучше бы их не смешивать:
1. выделение специализированного абстрактного языка, который может быть представлен отдельным конкретным языком или же набором определений на другом языке (грубо говоря, мы определяем набор типов и функций и договариваемся, что этот класс задач мы будем решать только с использованием этих типов и функций и ничем другим) — это больше про проектирование систем, фиксацию модели предметной области и других принятых решений.
2. определение специализированного конкретного языка, у которого собственный компактный синтаксис и т.п. — это про то, что спрашивает ТС, как мне кажется.
3. вопросы сопровождения

Цитата Сообщение от Shamil1 Посмотреть сообщение
Например, SQL.
Он не примет этот пример. Ставлю на то, что скажет, что у него в проекте нет реляционных БД, или даже так: «у меня 2Пб данных лежат в базе, ты предлагаешь мне в MySQL её хранить, совсем никаких вразумительных примеров не осталось?!»
0
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,117
Записей в блоге: 2
23.06.2026, 17:55
Цитата Сообщение от Mysterious Light Посмотреть сообщение
Он не примет этот пример. Ставлю на то, что скажет, что у него в проекте нет реляционных БД, или даже так: «у меня 2Пб данных лежат в базе, ты предлагаешь мне в MySQL её хранить, совсем никаких вразумительных примеров не осталось?!»
Да, реляционные БД - бог миловал, заниматься этим не пришлось. Но видел/слышал как делаются всякие выборки, и вынужден признать что свои языки для БД - это нормально, наоборот, было бы странно без них. Заметим что для этого есть основания гораздо более мощные чем "стремление к творчеству"

Не по теме:

Цитата Сообщение от Mysterious Light Посмотреть сообщение
2Пб
Не знаю кто такой "Пб". Для интереса такой пример работы с данными: есть модель дерева напр скромные 50К полигонов. Требуется отрендерить лес из тыщи (1К) таких деревьев. Или из 10К и.т.п. Как современные приложения это делают за приемлемое время и без всякого супер железа (GPU)?

0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,898
24.06.2026, 11:14
Создание нового языка программирования - дело полезное. Только нужно чётко представлять себе, для чего это делается и почему старые не устраивают. До сих пор появляются новые языки, хотя Fortran и Lisp создали 70 лет тому назад. Видимо, чем-то не устраивали. Совсем недавно вот Mojo появился. Видимо, и современные языки чем-то не устраивают.
2
 Аватар для chessman2
164 / 144 / 10
Регистрация: 21.10.2012
Сообщений: 499
10.07.2026, 20:12
ну питон получается по ходу.
0
 Аватар для Mikle Quits
787 / 307 / 17
Регистрация: 21.01.2023
Сообщений: 530
20.07.2026, 09:25
Не вышло броска, даже копеечного. Автор создал пост и уже месяц ничего не пишет.
А, между тем, в списке задач нет той, без которой никто этим пользоваться не станет, и при этом самой сложной - создания инфраструктуры. Писать код в блокноте? Пусть даже notepad++? Нет, увольте. А отладчик как же?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.07.2026, 09:25

язык 1С- это язык???
Многие программисты советуют использовать при разработке 'ФИНАНСОВЫХ' программ язык 1С, если есть в...

Забытый странный язык. "Мертвый" язык
Здравствуйте друзья. Вот с чем пришлось столкнуться. Это возможно самый древний язык, который...

Хочу научиться программированию. Какой язык выбрать?
Какой язык выбрать с учётом того, что я ничего про это не знаю.... :p Хочу научиться писать...

Помогите выбрать язык программирования
Привет всем форумчанам. Помогите выбрать язык программирования, который позволить реализовать...

Идеальный язык программирования
Решил написать свой язык программирования (На него серьезные планы, а не от <censored> делать)....


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru