Сегодня, пока сидел на физике (ОГЭ) и ждал лабораторку, пришла интересная мысль:
Есть же в компиляторостроении такая штука как AST - Абстрактно Синтаксическое Дерево. Которая интерпретирует ваш сложный код в простые для компьютера узлы
И я подумал - а сколько этих узлов бывает?
Для лучшего контраста представим что узел - это маленькая, сантиметровая, монетка. Соберем эти монеты вдоль, друг за другом, и что мы получим (цифры подбирал примерные):
- Linux - 1.25 млрд узлов, 12.5 тысячи километров. Практически как расстояние от Москвы до Владивостока, или, высота где заканчивается атмосфера и начинаются орбиты многих искусственных спутников
- Qt6 - 2 млрд узлов, 20 тысяч километров. Почти что длина экватора Земли (40.075 км)
- LLVM/Clang - 2.7 млрд узлов, 27 тысяч километров. Сложите 2 наши Земли вместе - и расстояние между крайними точками (двум диаметрам) будет ~25.5 тысяч километров
- UE5 - 8 млрд узлов... 80 тысяч километров... Четверть расстояния до Луны...
И это все помещается в наш 64-битный компьютер, вот думайте....
P.S. Я взял в расчет ВСЮ кодовую базу проектов, что естественно неверно. Ведь компилятор строит дерево для каждого .cpp файла (единицы трансляции), создает промежуточный файл, и затем удаляет дерево из оперативки. Так-то в одном .cpp файле может быть от силы 100 тысяч узлов, и учитывая размер узла +-64 байта, это дает нам +-6 МБ. Не так уж и много
Есть же в компиляторостроении такая штука как AST - Абстрактно Синтаксическое Дерево. Которая интерпретирует ваш сложный код в простые для компьютера узлы
И я подумал - а сколько этих узлов бывает?
Для лучшего контраста представим что узел - это маленькая, сантиметровая, монетка. Соберем эти монеты вдоль, друг за другом, и что мы получим (цифры подбирал примерные):
- Linux - 1.25 млрд узлов, 12.5 тысячи километров. Практически как расстояние от Москвы до Владивостока, или, высота где заканчивается атмосфера и начинаются орбиты многих искусственных спутников
- Qt6 - 2 млрд узлов, 20 тысяч километров. Почти что длина экватора Земли (40.075 км)
- LLVM/Clang - 2.7 млрд узлов, 27 тысяч километров. Сложите 2 наши Земли вместе - и расстояние между крайними точками (двум диаметрам) будет ~25.5 тысяч километров
- UE5 - 8 млрд узлов... 80 тысяч километров... Четверть расстояния до Луны...
И это все помещается в наш 64-битный компьютер, вот думайте....
P.S. Я взял в расчет ВСЮ кодовую базу проектов, что естественно неверно. Ведь компилятор строит дерево для каждого .cpp файла (единицы трансляции), создает промежуточный файл, и затем удаляет дерево из оперативки. Так-то в одном .cpp файле может быть от силы 100 тысяч узлов, и учитывая размер узла +-64 байта, это дает нам +-6 МБ. Не так уж и много
❤1🔥1
Ничего не обычного, просто 19 способ инициализировать переменную в C++
it's simple
UPD: Кому интересно почитать: тык
it's simple
UPD: Кому интересно почитать: тык
😎1
Примеры работы с PSE SDK
Завершая и замораживая Portal Solver Editor SDK, не могу не поделиться первыми примерами работы с ним
Объясню кратко каждый шаг:
1) Создаем команду на создание элемента, и выбираем ему класс "дверь"
2) Каждый элемент имеет по 8 32-битных регистров для данных. Их спецификация расписана в PSE > Concept > Elements. В данном случае в регистре "1" находится цвет двери при активации. Туда мы записываем красный цвет
3) И затем отправляем команду чтобы установиться State = 1. Что такое State? Главная нить судьбы, связующая между элементами. Например я нажал на кнопку -> кнопка сгенерировала событие с State = 1 -> Дверь приняла этот State и открылась. Все просто. И хоть State является 8 битным числом, большинство элементов интерпретируют свою активацию при State не равном нулю, то есть, та же условная дверь откроется при State != 0
В посте также прикреплю вырезки из спецификации SDK (в которой большинство вещей уже прописаны мною)
На этом все я думаю? Не знаю, держите v flower на удачу
Завершая и замораживая Portal Solver Editor SDK, не могу не поделиться первыми примерами работы с ним
Объясню кратко каждый шаг:
1) Создаем команду на создание элемента, и выбираем ему класс "дверь"
2) Каждый элемент имеет по 8 32-битных регистров для данных. Их спецификация расписана в PSE > Concept > Elements. В данном случае в регистре "1" находится цвет двери при активации. Туда мы записываем красный цвет
3) И затем отправляем команду чтобы установиться State = 1. Что такое State? Главная нить судьбы, связующая между элементами. Например я нажал на кнопку -> кнопка сгенерировала событие с State = 1 -> Дверь приняла этот State и открылась. Все просто. И хоть State является 8 битным числом, большинство элементов интерпретируют свою активацию при State не равном нулю, то есть, та же условная дверь откроется при State != 0
В посте также прикреплю вырезки из спецификации SDK (в которой большинство вещей уже прописаны мною)
На этом все я думаю? Не знаю, держите v flower на удачу
💘4
PSE SDK - Что такое State и почему это "нить судьбы"
Давайте начистоту: В Portal: Solver есть куча элементов, и они должны постоянно общаться друг с другом: игрок нажал на кнопку - дверь открылась, активировал солвер-кнопку - дропнули кубик. И чтобы жестко не завязывать каждый элемент друг с другом, была разработана универсальная единая сущность: State (состояние)
State - это, в кой то степени, универсальный язык, на котором разговаривают все элементы в игре. В игре (и в редакторе) он как провод от одного элемента к другому. И по этому проводу бегает всего-навсего одно маленькое число типа int8 (8-битное целое число, то есть байт)
Но, большинство элементов бинарны по своей природе, то есть, имеют лишь 2 состояние (открыт/закрыт) - и тогда было создано одно простое правило: Для таких элементов активность будет считаться при State не равном 0. А источники (кнопки) наоборот, отправляют State равной 1 при активации, и 0 при деактивации
Вот такой мини-Kismet из UE3 получился
Надеюсь стало понятнее, ха
Давайте начистоту: В Portal: Solver есть куча элементов, и они должны постоянно общаться друг с другом: игрок нажал на кнопку - дверь открылась, активировал солвер-кнопку - дропнули кубик. И чтобы жестко не завязывать каждый элемент друг с другом, была разработана универсальная единая сущность: State (состояние)
State - это, в кой то степени, универсальный язык, на котором разговаривают все элементы в игре. В игре (и в редакторе) он как провод от одного элемента к другому. И по этому проводу бегает всего-навсего одно маленькое число типа int8 (8-битное целое число, то есть байт)
Но, большинство элементов бинарны по своей природе, то есть, имеют лишь 2 состояние (открыт/закрыт) - и тогда было создано одно простое правило: Для таких элементов активность будет считаться при State не равном 0. А источники (кнопки) наоборот, отправляют State равной 1 при активации, и 0 при деактивации
Вот такой мини-Kismet из UE3 получился
Надеюсь стало понятнее, ха
❤1🔥1🤩1
Бля как же ахуенно спустя долгое время выйти на улицу. Такой графон, такое погружение....
Real Engine is so cool
Real Engine is so cool
❤3🔥1
Короче сегодня утром попался этот мем, и пока был в магазине, решил навайбкодить его с телефона
Глядите что получилось, ахаха
https://roottool0.github.io/pointerle/index.html
Глядите что получилось, ахаха
https://roottool0.github.io/pointerle/index.html
🔥2