Я тут задумался насколько компании выгодно хорошее код ревью?
Тут стоит уточнить, что в тех местах где я работал на ревью обычно смотрят на плюсовую составляющую кода, если повезёт на многопоточность или алгоритмы, тут зависит от компетенции ревьювера.
Но в целом, особенно учитывая что я работаю в графике и не в геймдеве, лично у меня все как-то грустно.
Но даже если не брать в расчет мою специфику и посмотреть на другие пр, да и на тот же опенсурс, не редки случаи, когда максимум, что напишут в ревью, это какие то языковые нюансы, которые ты мог упустить случайно.
Ну это помимо кодстайла и очевидных багов/недостатков.
И мне вот интересно если в ревью выставлять теги и требовать апрувы по конкретным темам, типо язык программирование, многопточность, етс. Это будет явно больше и сложнее с точки зрения организации. Но будет ли это профитнее?
Тут стоит уточнить, что в тех местах где я работал на ревью обычно смотрят на плюсовую составляющую кода, если повезёт на многопоточность или алгоритмы, тут зависит от компетенции ревьювера.
Но в целом, особенно учитывая что я работаю в графике и не в геймдеве, лично у меня все как-то грустно.
Но даже если не брать в расчет мою специфику и посмотреть на другие пр, да и на тот же опенсурс, не редки случаи, когда максимум, что напишут в ревью, это какие то языковые нюансы, которые ты мог упустить случайно.
Ну это помимо кодстайла и очевидных багов/недостатков.
И мне вот интересно если в ревью выставлять теги и требовать апрувы по конкретным темам, типо язык программирование, многопточность, етс. Это будет явно больше и сложнее с точки зрения организации. Но будет ли это профитнее?
Как вы проводите ревью? (Забыл написать если вы не программист, или возможно не участвовали ни в каких проектах, голосуйте только результаты)
Anonymous Poll
19%
Не провожу
13%
Баги/фичи языка, поверхносто
20%
Вникаю в то что делает код, в 1/3 пр
11%
2/3
4%
99%
9%
Ревьювю пр в код который писал сам/очень хорошо знаком
43%
Результаты
Loser story
В общем пишу про работу тут, в целом почти все над чем я работал, особенно после стажки было очень интересным, например почти весь последний год писал новый рендер картографии, где-то даже успели на него перейти уже, а с декабря делал (уже не один правда)…
Собственно по поводу работы в мейле, я тут сейчас один над рендером работаю. И хоть на сайте нет вакансии, на самом деле она есть. Поэтому если вы/у вас есть знакомые на мидл-сеньор позицию заинтересованные, пишите расскажу подробнее и прорекомендую вероятно.
Я тут дочитал классный блог, думаю стоит рассказать, вот посты, которые мне показались наиболее интересные:
1. https://travisdowns.github.io/blog/2019/06/11/speed-limits.html про ограничения скорости исполнения программы на уровне железа, оно конечно не совсем применимо для большинства, но очень любопытно
2. https://travisdowns.github.io/blog/2020/07/06/concurrency-costs.htmlдля тех кто не читает, то что я кидаю в общем немного про то как считать счётчики конкурентно, и в целом как понять что твой конкурентный код хорош вообще про это все более подробно можно почитать в perfbook, может быть теперь вы наконец-то решите его прочесть
3. https://travisdowns.github.io/blog/2020/05/13/intel-zero-opt.html прикольный эффект с заполнением нулями
4. https://travisdowns.github.io/blog/2019/08/20/interrupts.html Когда именно происходят прерывания? Вопрос интересен даже без полноценного ответа
В целом есть ещё интересные посты, но они наверняка вам в том или ином виде знакомы ('\0' vs 0, strict aliasing, порядок инклудов, етс. Если нет, читайте). Часть же постов немного специфична, в основном про avx512, не думаю что многим оно будет интересно
1. https://travisdowns.github.io/blog/2019/06/11/speed-limits.html про ограничения скорости исполнения программы на уровне железа, оно конечно не совсем применимо для большинства, но очень любопытно
2. https://travisdowns.github.io/blog/2020/07/06/concurrency-costs.html
3. https://travisdowns.github.io/blog/2020/05/13/intel-zero-opt.html прикольный эффект с заполнением нулями
4. https://travisdowns.github.io/blog/2019/08/20/interrupts.html Когда именно происходят прерывания? Вопрос интересен даже без полноценного ответа
В целом есть ещё интересные посты, но они наверняка вам в том или ином виде знакомы ('\0' vs 0, strict aliasing, порядок инклудов, етс. Если нет, читайте). Часть же постов немного специфична, в основном про avx512, не думаю что многим оно будет интересно
Performance Matters
Performance Speed Limits
A laundry list of speed limits that your code can’t exceed.
А ещё мне кажется, что я злоупотребляю зачеркнутым текстом.
Вообще вместо того что выше, хотел написать пояснения к design доку tcmalloc, а так же по сути отсутвующую там часть про transfer cache и central free list, но со мной приключилась ужасная история.
Я закрыл браузер с вкладкой с текстом набранным в telegraph. Собственно полезный для всех вывод:
никогда не используйте telegraph при написании чего то, только при публикации
А так постараюсь к концу недели переписать, плюс появилась пара идей, как сделать лучше/полезнее. В идеале хотелось сделать серию постов об аллокаторах, но это я далеко загадываю.
https://xn--r1a.website/experimentalchill/110
Хотел напомнить, что если x86 умрет и мы все станем счастливыми обладателями arm-а везде, то помимо снижения энергопотребления, более сложной архитектуры кешей => лучшей производительности хорошего конкуретного кода (и куче багов в плохом).
У нас ещё и везде будет load link (условно, атомарно загрузить значение и поставить флажок) store conditional (атомарно смотрит никто ли не тронул флажок и если никто, то устанавливает значение) вместо
Который фейлится, если кто-то потрогал кешлинию (еще иногда на самом деле, например, когда был switch context потоков ОС)
И как следствие из того как он работает, cas написанный с его помощью не подвержен ABA проблеме.
Собственно если кому то не очевидно как это реализовать, выглядит это например так:
https://elixir.bootlin.com/linux/latest/source/arch/arm/include/asm/cmpxchg.h#L254
ldr* это load link
str* это store conditional
Хотел напомнить, что если x86 умрет и мы все станем счастливыми обладателями arm-а везде, то помимо снижения энергопотребления, более сложной архитектуры кешей => лучшей производительности хорошего конкуретного кода (и куче багов в плохом).
У нас ещё и везде будет load link (условно, атомарно загрузить значение и поставить флажок) store conditional (атомарно смотрит никто ли не тронул флажок и если никто, то устанавливает значение) вместо
lock; cmpxchg.Который фейлится, если кто-то потрогал кешлинию (еще иногда на самом деле, например, когда был switch context потоков ОС)
И как следствие из того как он работает, cas написанный с его помощью не подвержен ABA проблеме.
Собственно если кому то не очевидно как это реализовать, выглядит это например так:
https://elixir.bootlin.com/linux/latest/source/arch/arm/include/asm/cmpxchg.h#L254
ldr* это load link
str* это store conditional
Я по-моему уже где-то спрашивал, но зачем на работе всегда пишут приветствия с восклицательным знаком, я мб не грамотный, но я не могу придумать применения восклицательному знаку, кроме цитирования устной речи или чего-то вроде "?!??!?".
Ну и обычно если вы с кем-то здороваетесь устно, вы говорите это спокойно?
В общем странная фигня какая-то.
Ну и обычно если вы с кем-то здороваетесь устно, вы говорите это спокойно?
В общем странная фигня какая-то.
Ещё прочитал статьи:
https://research.swtch.com/mm
tldr
1) Классические примеры хардварной модели памяти, и какие исполнения допускают процессоры.
2) Почему несмотря на относительную простоту 1) все на самом деле сложно: оптимизации компиляторов, необходимость или relaxed atomic-ов или валидности программ с data race
3) Собственно про изменения которые они планируют в golang.
Из интересного:
1. В отличие от Java/JavaScript, они явно утверждают, что если в программе обнаружится гонка то программа может сообщить о ней и упасть, а не как-то "не очень опасно" работать
2. Оказывается разработчики архитектур думают о нас простых смертных и делают seq_cst/java volatile более дешёвым с точки зрения исполнения, например на armv8 acq_rel ~ seq_cst для load/store, как следствие наверно в будущем все сведётся к наличию seq_cst и relaxed(unsync) атомикам. Потому что кажется, без последних достаточно сложно обеспечить хорошую производительность некоторых thread safe структур данных/статистики
https://research.swtch.com/mm
tldr
1) Классические примеры хардварной модели памяти, и какие исполнения допускают процессоры.
2) Почему несмотря на относительную простоту 1) все на самом деле сложно: оптимизации компиляторов, необходимость или relaxed atomic-ов или валидности программ с data race
3) Собственно про изменения которые они планируют в golang.
Из интересного:
1. В отличие от Java/JavaScript, они явно утверждают, что если в программе обнаружится гонка то программа может сообщить о ней и упасть, а не как-то "не очень опасно" работать
2. Оказывается разработчики архитектур думают о нас простых смертных и делают seq_cst/java volatile более дешёвым с точки зрения исполнения, например на armv8 acq_rel ~ seq_cst для load/store, как следствие наверно в будущем все сведётся к наличию seq_cst и relaxed(unsync) атомикам. Потому что кажется, без последних достаточно сложно обеспечить хорошую производительность некоторых thread safe структур данных/статистики
Loser story
https://youtu.be/M2fKMP47slQ Прикольный доклад про хешмапы, интересные вариации https://engineering.fb.com/2019/04/25/developer-tools/f14 https://abseil.io/about/design/swisstables собственно как я понимаю та табличка которая в докладе аналог google flat…
https://youtu.be/ncHmEUmJZf4
https://youtu.be/JZE3_0qvrMg
Кст глянул тут доклады именно про swiss table.
В первом больше про то как они пришли к такому дизайну, а во втором как они переходили в проде и с какими проблемами столкнулись.
https://youtu.be/JZE3_0qvrMg
Кст глянул тут доклады именно про swiss table.
В первом больше про то как они пришли к такому дизайну, а во втором как они переходили в проде и с какими проблемами столкнулись.
YouTube
CppCon 2017: Matt Kulukundis “Designing a Fast, Efficient, Cache-friendly Hash Table, Step by Step”
http://CppCon.org
—
Presentation Slides, PDFs, Source Code and other presenter materials are available at: https://github.com/CppCon/CppCon2017
—
Hash tables consume a large volume of both compute resources and memory across Google's production system. The…
—
Presentation Slides, PDFs, Source Code and other presenter materials are available at: https://github.com/CppCon/CppCon2017
—
Hash tables consume a large volume of both compute resources and memory across Google's production system. The…
photo_2021-08-14_23-45-00.png
165.9 KB
Я видимо перепоступил на фиит пмпу (кст бтв 0 знакомых оттуда, в отличие от пми, ну узнаю что за шарага)
Loser story
Ещё прочитал статьи: https://research.swtch.com/mm tldr 1) Классические примеры хардварной модели памяти, и какие исполнения допускают процессоры. 2) Почему несмотря на относительную простоту 1) все на самом деле сложно: оптимизации компиляторов, необходимость…
Кст хейтерам mm в rust, а точнее ее отсутствию или фразы "пока как в плюсах".
Вы можете привести пример, как относительно разумно может измениться модель памяти в rust так, чтобы сломать ваш код, при этом не требуя изменения кода (то есть кейс, когда вы сменили версию компилятора, код скомпилировался, но перестал быть корректным)
Вы можете привести пример, как относительно разумно может измениться модель памяти в rust так, чтобы сломать ваш код, при этом не требуя изменения кода (то есть кейс, когда вы сменили версию компилятора, код скомпилировался, но перестал быть корректным)
Я тут подумал что хочу немного разобраться в том как можно сжимать данные, а то мои знания ограничиваются как написать jpeg encoder/decoder.
Может кто посоветует книжечку/курс?
Может кто посоветует книжечку/курс?
Недавно начали писать с друзьями весьма интересную библиотеку, уже сейчас фьючи весьма хороши, и лучше большинства аналогов, а будут ещё лучше)
В общем, если у кого какие-то вопросы, или есть желание поконтрибутить, пишите
В общем, если у кого какие-то вопросы, или есть желание поконтрибутить, пишите
Telegram
lofi channel
https://github.com/YACLib/YACLib/blob/main/doc/DESIGN_DOC_RU.md
Написали дизайн-док к нашей библиотеке конкурентного исполнения задач, пока на русском, скоро переведем. В-общем, читайте, ставьте звездочки, скоро будет норм документация (наверное)
Написали дизайн-док к нашей библиотеке конкурентного исполнения задач, пока на русском, скоро переведем. В-общем, читайте, ставьте звездочки, скоро будет норм документация (наверное)
Как же мне надоел репозиторий llvm mirror который устарел.
Можно его как то убрать из поисковой выдачи?
Можно его как то убрать из поисковой выдачи?
