Size: a a a

Compiler Development

2020 February 18

K

Kir in Compiler Development
polunin.ai
Я тут делаю недодвижок для создания текстовых квестов делаю, оцените примерно пж:

VM - вм
Она в себе хранит:
1. Функции на специальном (e)DSL.
2. Блоки исполняемого кода, которые содержат команды и вызовы функций.
3. Глобальный стейт для хранения данных.

Блоки - это диалоги. Они в себе хранят локальные переменные, и последовательность команд для вывода (за это отвечает GraphicController).
Код написанный на (e)DSL парсится в дерево, проходит тайпчек, и транслируется в последовательность блоков (их можно рассматривать как состояния в КА).
Делать чисто стековую ВМ это хорошо но слишком сложно. Вместо этого будут хранится деревья, а данные в hashset'ах (плановый вариант).
Графическая составляющая подгружается динамически в виде GraphicController у которого есть интерфейс, принимающий название команды и аргументы. Он занимается отображением на экране *логика*
Я бы сделал (взял) интерпретатор простенького языка. Вот, я недавно сделал один. 200 строк, паттерн-матчинг, letrec, объекты и аналог ADT.

Зачем хранить код игры в базе? Я бы положил его в git.
источник

K

Kir in Compiler Development
polunin.ai
Я тут делаю недодвижок для создания текстовых квестов делаю, оцените примерно пж:

VM - вм
Она в себе хранит:
1. Функции на специальном (e)DSL.
2. Блоки исполняемого кода, которые содержат команды и вызовы функций.
3. Глобальный стейт для хранения данных.

Блоки - это диалоги. Они в себе хранят локальные переменные, и последовательность команд для вывода (за это отвечает GraphicController).
Код написанный на (e)DSL парсится в дерево, проходит тайпчек, и транслируется в последовательность блоков (их можно рассматривать как состояния в КА).
Делать чисто стековую ВМ это хорошо но слишком сложно. Вместо этого будут хранится деревья, а данные в hashset'ах (плановый вариант).
Графическая составляющая подгружается динамически в виде GraphicController у которого есть интерфейс, принимающий название команды и аргументы. Он занимается отображением на экране *логика*
Без тайпчека, правда. У вас какая там система типов?
источник

p

polunin.ai in Compiler Development
Kir
Я бы сделал (взял) интерпретатор простенького языка. Вот, я недавно сделал один. 200 строк, паттерн-матчинг, letrec, объекты и аналог ADT.

Зачем хранить код игры в базе? Я бы положил его в git.
я не про язык спрашиваю, а про ВМ.
источник

K

Kir in Compiler Development
Так у меня напрямую интерпретатор AST, в виде свёртки графов
источник

p

polunin.ai in Compiler Development
Kir
Без тайпчека, правда. У вас какая там система типов?
хочу статически типизированную.
источник

K

Kir in Compiler Development
Типы каких порядков и рангов хочется иметь?
источник

p

polunin.ai in Compiler Development
Kir
Типы каких порядков и рангов хочется иметь?
не понял, можно попроще?)
источник

PK

Peter K in Compiler Development
/me прислушался к обсуждению vm для интерактивной литературы
источник

K

Kir in Compiler Development
Типы первого порядка - это как в жаве с генериками. Т.е., параметры генериков не могут быть генериками.
источник

K

Kir in Compiler Development
Типы высшего порядка - это когда генерик-тип может принимать аргументы-типы
источник

p

polunin.ai in Compiler Development
хм, я не уверен что генерики это то о чем я буду думать в принципе. большая часть кода будет как команды для отображения текста/картинок. Планирую сделать только примитивные типы и обычные структуры без наследований и обобщений.
источник

K

Kir in Compiler Development
В идеале, подойдёт система Хиндли-Мильнера через алгоритм W
источник

K

Kir in Compiler Development
На каком языке будете реализовывать?
источник

p

polunin.ai in Compiler Development
Rust
источник

RB

Rustem B. in Compiler Development
polunin.ai
Я тут делаю недодвижок для создания текстовых квестов делаю, оцените примерно пж:

VM - вм
Она в себе хранит:
1. Функции на специальном (e)DSL.
2. Блоки исполняемого кода, которые содержат команды и вызовы функций.
3. Глобальный стейт для хранения данных.

Блоки - это диалоги. Они в себе хранят локальные переменные, и последовательность команд для вывода (за это отвечает GraphicController).
Код написанный на (e)DSL парсится в дерево, проходит тайпчек, и транслируется в последовательность блоков (их можно рассматривать как состояния в КА).
Делать чисто стековую ВМ это хорошо но слишком сложно. Вместо этого будут хранится деревья, а данные в hashset'ах (плановый вариант).
Графическая составляющая подгружается динамически в виде GraphicController у которого есть интерфейс, принимающий название команды и аргументы. Он занимается отображением на экране *логика*
чё там по твоему двиглу? помощь нужна чи нет?
источник

p

polunin.ai in Compiler Development
Rustem B.
чё там по твоему двиглу? помощь нужна чи нет?
конечно. Я не знаю с чего подступить.
источник

RB

Rustem B. in Compiler Development
хммм, ну, можно пока парсер реализовать
источник

RB

Rustem B. in Compiler Development
точнее нужно
источник

RB

Rustem B. in Compiler Development
а, нет
источник

K

Kir in Compiler Development
Я б начал с AST
источник