Aleksei
Aleksei
Anonymous
факт
Vladimir
Мерль
Vladimir
как это?
Vladimir
а как тогда можно буфер в пул класть?
Kirill
Kirill
спокойно, как я и написал выше
Kirill
берешь и кладешь
Vladimir
как можно класть в пул буфер, если наружу отдан этот буфер в виде immutable строки?
Kirill
у буфера уберется указатель на строку, а строка останется со значением
Vladimir
Что будет если поменять буфер? Строка поменяется?
Kirill
эта оптимизация применяется не всегда
Kirill
а тогда, когда указатель на данные будет опустошен
Kirill
тогда идет использование в буфере ссылки на новую область памяти при опустошении, а строка смотрит на старый слайс байт
Vladimir
ну то есть когда ты берешь из пула ты не переиспользуешь память?
Vladimir
тогда в чем смысл пула?
Vladimir
Короче, че то ты гонишь. Пойду проверять
Kirill
переиспользую память тогда, когда оптимизатор это даст сделать
Kirill
а промежуточную память переиспользую
Vladimir
Не, я проверю, что string() не копирует память
Vladimir
Если копирует - то ты гонишь
Kirill
гонщик. то, что происходит в string() все равно оптимизируется.
Vladimir
память либо копируется либо нет
Vladimir
окей, допустим она может не копироваться если нет других ссылок
Vladimir
но в твоем случае они всегда есть
Kirill
слушай, как ты попал в nodejs foundation, если ты контекст не учитываешь?
Vladimir
Какой контекст?
Vladimir
Я все учитываю)
Kirill
контекст выполнения, компиляции, оптимизации несколькими бэкендами и т.д.
Kirill
если у тебя такие вопросы — то ты банально не знаешь, что учитывать
Kirill
а значит, что разговор пустой.
Vlad
мб сразу какашками бросаться?
Vladimir
Сорри, бро. Ты просто вместо того, чтобы объяснить почему твой код работает, начинаешь рассказывать сказки про оптимизацию
Vladimir
Объяснять никто и не заставляет, конечно
Kirill
я выше уже все объяснил подробно, и все нормальные разработчики на go учитывают то, что будет делать оптимизатор, именно поэтому все написано именно так, а не иначе.
Michael
😂😂😂
Моё ледцо каждый раз, когда говорят про оптимизации
😂😂😂
Vladimir
b := []byte{0x66, 0x6f, 0x6f}
str := string(b)
fmt.Println(str)
b[1] = 0x62
fmt.Println(str)
Kirill
аминь
Vladimir
Итак, при string() явно происходит копия
Kirill
буду за него рад, если он сможет
Vladimir
> @kirilldanshin
все нормальные разработчики на go учитывают то, что будет делать оптимизатор,
Тяжело жить, наверно
Kirill
Michael
Всё сидите и оптимизируете, кто фичи новые делать-то будет?!
Vladimir
> @kirilldanshin
ясен красен, что будет копия))
я не сомневался, в общем то
Vladimir
как и в твоем случае
Aleksei
Да, сегодня читал какой-то коммент, по поводу того, что если ты пишешь на пыхе и подключаешь сяшные утилиты, то ты пишешь на C. Если следовать логике, то все кто пишет на js не пишут на js, а пишут на плюсах
Vladimir
Есть копия, или нет, твой код не эффективен по сравнению с простой сишной реализацией
Michael
Весёлый ты
Vladimir
@chicoxyzzy вроде закончили, теперь можно про хаскелль
Vladimir
Я верю что оптимизатор иногда может не копировать буфер
Vladimir
Проблема в том что я не вижу логики в коде - либо ты в конце копируешь буффер в строку и тогда ты можешь его переиспользовать, либо ты не копируешь и тогда не можешь переиспользовать
Vladimir
С утверждением, что этот код написан так, чтобы оптимизатор волшебно оптимизировал, сложно спорить
Roman
Ну не бывает волшебных оптимизаторов.
Vlad
Vlad
на нескольких версиях оптимизатора
Vlad
оптимизируешь на спичках
Vlad
в любом случае на каком-нибудь edge case сломается твоя оптимизация
Vladimir
Просто если абстрагироваться от конкретного кода - как раз вот такие вещи неприемлимы в системном коде
Мерль
Погодите, это какоё-то десткий сад, господа
Во-первых
Мерль
Aleksei
Иногда на спичках, но когда упираешься в скорость конкатенации, это важно, а в других случаях можно просто юзать и все, есть же не просит
Vladimir
bytes.Buffer?
Мерль
Andrey
скажите лучше. что еще почитать по поводу оптимизаций в JS?)
Aleksei
Aleksei
Vladimir
Только не исходники
Andrey
V8
v8 не маг чудесный, можно писать сильно разный код
Vladimir
А там Егорова того же