Telegram Group & Telegram Channel
Тут недавно один юный компиляторщик у видел у нас в рантайме название BIBOB и очень смеялся необычно звучащему для него слову: "что это за названия у вас в рантайме такие смешные?"

Но для рантаймщика то это звучит вполне естественно, это один из самых базовых терминов. Наверное и вы, читатели, если когда-нибудь занимались управлением памятью в виртуальных машинах, узнали здесь небольшую модификацию классической техники BIBOP (BIg Bag Of Pages), которая представляет из себя довольно простую штуку.

В рантайме по любому объекту в памяти нужно уметь быстро понимать его свойства, при том, как instance-специфичные (самое простое: помечен он сейчас GC-ом или нет? Хэшировали уже объект или нет?), так и class-специфичные (это массив или нет? у класса есть нетривиальный финализатор или нет? Размер объекта какой?). И если для instance-специфичной информации в объекте обычно зарезервировано несколько байт в заголовке (за битики в этом заголовке идет настоящая битва, всем надо), то class-специфичная информация обычно хранится отдельно. Для доступа к ней в объект записывают адрес на соответствующую рантайм структуру, в хотспоте, например, это Klass*.

Но это же получается целое поле под этот адрес для метаинфы в каждом объекте хранить! Объектов миллионы, дороговато получается, дороговато. В общем случае в современных языках этого не избежать, но в некоторых частных случаях может захотеться иметь альтернативный способ получения этой метаинформации об объектах. И тут срабатывает классический трюк: давайте кодировать информацию в адресах объектов. Я сейчас не про то, чтобы записывать что-то в старшие биты адреса и потом маркировать (так тоже делают, конечно, но это скорее instance- или даже pointer-специфичная инфа), а про то, чтобы использовать сам адрес для быстрого поиска нужной вам информации: давайте аллоцировать все объекты с одинаковыми свойствами (например, массивы) рядом, в заранее известных регионах памяти. Тогда вы за пару сдвигов сможете понять по адресу объекта, в каком он регионе и соответственно получить всю необходимую метаинфу.

Если чуть обобщить, то вы просто делаете хэш-таблицу из адресов в объектов в метаинфу, что освобождает вас от необходимости хранить адрес на метаинфу в каждом объекте (но накладывает ограничение на аллокации и перемещения объектов, трейдоф понятен). Вот такая техника и называется BIBOP (BIg Bag Of Pages). Pages там, понятно, из-за того, что обычно хранится информация не конкретно об объекте, а о страничке, в которой он (и похожие на него объекты) аллоцирован.

У нас в рантайме используется похожая техника, но не для конкретных объектов, а для наших собственных блоков памяти (поэтому вместо Pages, у нас Blocks, и аббревиатура превращается в BIBOB).

Забавно, что техника BIBOP один из первых раз описана была в 1977 году, вот здесь, для реализации MacLisp на PDP-10. Хотя даже там автор уже подтрунивает на самим термином и говорит, что так уже называют схему, когда новые страницы под данные выделяют с верхних адресов к нижним, а код, наоборот, загружают в нижние адреса. И вот дырка в середине, которую с двух сторон съедают во время исполнения, называется "BIg Bag of Pages" (автор использует словосочетание "whimsically named"), поэтому и схему с аллокацией объектов вместе и кодированием метаинфы в адресах автор тоже решил назвать BIBOP.



В общем, это настолько древняя (почти 50 лет!) и понятная технология, что слово BIBOP не звучит для рантаймщика, как что-то странное, совершенно.

Но я же недавно посмотрел Сowboy Bebop! А дальше уже просто не смог удержаться: пошел и подписал к комменту над нашим бибопом одну строчку в качестве шалости. See you, space cowboys.

#дух_машины



group-telegram.com/gdb_dbg/653
Create:
Last Update:

Тут недавно один юный компиляторщик у видел у нас в рантайме название BIBOB и очень смеялся необычно звучащему для него слову: "что это за названия у вас в рантайме такие смешные?"

Но для рантаймщика то это звучит вполне естественно, это один из самых базовых терминов. Наверное и вы, читатели, если когда-нибудь занимались управлением памятью в виртуальных машинах, узнали здесь небольшую модификацию классической техники BIBOP (BIg Bag Of Pages), которая представляет из себя довольно простую штуку.

В рантайме по любому объекту в памяти нужно уметь быстро понимать его свойства, при том, как instance-специфичные (самое простое: помечен он сейчас GC-ом или нет? Хэшировали уже объект или нет?), так и class-специфичные (это массив или нет? у класса есть нетривиальный финализатор или нет? Размер объекта какой?). И если для instance-специфичной информации в объекте обычно зарезервировано несколько байт в заголовке (за битики в этом заголовке идет настоящая битва, всем надо), то class-специфичная информация обычно хранится отдельно. Для доступа к ней в объект записывают адрес на соответствующую рантайм структуру, в хотспоте, например, это Klass*.

Но это же получается целое поле под этот адрес для метаинфы в каждом объекте хранить! Объектов миллионы, дороговато получается, дороговато. В общем случае в современных языках этого не избежать, но в некоторых частных случаях может захотеться иметь альтернативный способ получения этой метаинформации об объектах. И тут срабатывает классический трюк: давайте кодировать информацию в адресах объектов. Я сейчас не про то, чтобы записывать что-то в старшие биты адреса и потом маркировать (так тоже делают, конечно, но это скорее instance- или даже pointer-специфичная инфа), а про то, чтобы использовать сам адрес для быстрого поиска нужной вам информации: давайте аллоцировать все объекты с одинаковыми свойствами (например, массивы) рядом, в заранее известных регионах памяти. Тогда вы за пару сдвигов сможете понять по адресу объекта, в каком он регионе и соответственно получить всю необходимую метаинфу.

Если чуть обобщить, то вы просто делаете хэш-таблицу из адресов в объектов в метаинфу, что освобождает вас от необходимости хранить адрес на метаинфу в каждом объекте (но накладывает ограничение на аллокации и перемещения объектов, трейдоф понятен). Вот такая техника и называется BIBOP (BIg Bag Of Pages). Pages там, понятно, из-за того, что обычно хранится информация не конкретно об объекте, а о страничке, в которой он (и похожие на него объекты) аллоцирован.

У нас в рантайме используется похожая техника, но не для конкретных объектов, а для наших собственных блоков памяти (поэтому вместо Pages, у нас Blocks, и аббревиатура превращается в BIBOB).

Забавно, что техника BIBOP один из первых раз описана была в 1977 году, вот здесь, для реализации MacLisp на PDP-10. Хотя даже там автор уже подтрунивает на самим термином и говорит, что так уже называют схему, когда новые страницы под данные выделяют с верхних адресов к нижним, а код, наоборот, загружают в нижние адреса. И вот дырка в середине, которую с двух сторон съедают во время исполнения, называется "BIg Bag of Pages" (автор использует словосочетание "whimsically named"), поэтому и схему с аллокацией объектов вместе и кодированием метаинфы в адресах автор тоже решил назвать BIBOP.



В общем, это настолько древняя (почти 50 лет!) и понятная технология, что слово BIBOP не звучит для рантаймщика, как что-то странное, совершенно.

Но я же недавно посмотрел Сowboy Bebop! А дальше уже просто не смог удержаться: пошел и подписал к комменту над нашим бибопом одну строчку в качестве шалости. See you, space cowboys.

#дух_машины

BY Алло, это отладочная?




Share with your friend now:
group-telegram.com/gdb_dbg/653

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

What distinguishes the app from competitors is its use of what's known as channels: Public or private feeds of photos and videos that can be set up by one person or an organization. The channels have become popular with on-the-ground journalists, aid workers and Ukrainian President Volodymyr Zelenskyy, who broadcasts on a Telegram channel. The channels can be followed by an unlimited number of people. Unlike Facebook, Twitter and other popular social networks, there is no advertising on Telegram and the flow of information is not driven by an algorithm. Founder Pavel Durov says tech is meant to set you free Russians and Ukrainians are both prolific users of Telegram. They rely on the app for channels that act as newsfeeds, group chats (both public and private), and one-to-one communication. Since the Russian invasion of Ukraine, Telegram has remained an important lifeline for both Russians and Ukrainians, as a way of staying aware of the latest news and keeping in touch with loved ones. At this point, however, Durov had already been working on Telegram with his brother, and further planned a mobile-first social network with an explicit focus on anti-censorship. Later in April, he told TechCrunch that he had left Russia and had “no plans to go back,” saying that the nation was currently “incompatible with internet business at the moment.” He added later that he was looking for a country that matched his libertarian ideals to base his next startup. In February 2014, the Ukrainian people ousted pro-Russian president Viktor Yanukovych, prompting Russia to invade and annex the Crimean peninsula. By the start of April, Pavel Durov had given his notice, with TechCrunch saying at the time that the CEO had resisted pressure to suppress pages criticizing the Russian government.
from us


Telegram Алло, это отладочная?
FROM American