Skip to content

Orgs shape, embeddedness and mem optimizations #90

Description

@tmptrash

Это очень фундаментальная идея того, как организмы должны хранится в мире и из чего состоять. Она сводит все маленькие идеи воедино...
В ветке language-redesign, последние пол года я пытался сделать так чтобы операторы языка являлись атомами и занимали физическое место в двухмерном мире. Это первый шаг в тому чтобы получить более реальный эмулятор реальности. Таким образом организмы состоят из того, из чего состоит остальной мир вокруг. Второй шаг - сделать так чтобы организмы имели форму. То есть занимали пространство определенной конфигурации (как в нашем мире). Чтобы это было возможно, нужно чтобы каждая команда или атом занимал одну клетку в 2х мерном мире. То есть, организм будет физически находится в разных точках мира и при этом представлять из себя линейный байт код. В структурах VM.orgs и BioVM.orgMols будут храниться только 32 битные числа - ссылки на первый байт организма в двумерном мире. Сами эти структуры превратятся из FastArray в Uint32Array. Сам мир будет представлять из себя Uint8Array. Еще это очень оптимизирует расход памяти. Сейчас хранение ссылок на классы Organism и Molecule занимают по 60 байт каждая. Это дикий перерасход.

Подумать над:

  • Как будет кодироваться связь между предыдущей командой и следующей и как будут кодироваться их расположения? Ведь следующая команда может быть по одному из 8ми направлений относительно текущей (у меня уже были мысли по этому поводу)
  • Как будут осуществляться повороты организма?
  • Как будет реализовано движение? Весь организм сразу? Будет ли он "тянуться" или его атомы будут жестко закреплены друг к другу?
  • Нужны ли нам вообще молекулы и разделители между атомами? Если в мире будут существовать только атомы, то BioVM очень сильно упрощается. Нам в принципе не нужны будут классы Organism и Molecule. Точнее, Organism будет значительно упрощен. Он не будет хранить массив команд, так как они будут физически хранится в массиве мира. Все будет храниться в двумерном мире.
  • Команда будет занимать 6 бит. 2 первых бита будут свободны для будущих манипуляций
  • В моих записях в телефоне есть идея использования мультипоточности внутри одного организма

Связано с #70

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions