irma icon indicating copy to clipboard operation
irma copied to clipboard

Orgs shape, embeddedness and mem optimizations

Open tmptrash opened this issue 5 years ago • 0 comments

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

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

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

Связано с #70

tmptrash avatar Apr 16 '20 07:04 tmptrash