Forwarded from Сельский блог 🍁
я, когда не прогаю: блин, хочу, но таааак лень, пойду на ютубчик чтоли
я, когда прогаю: блин в смысле уже 2 часа прошло
я, когда прогаю: блин в смысле уже 2 часа прошло
❤15👍4🤡2
Блог*
#prog #js #typescript #abnormalprogramming github.com/jamiebuilds/json-parser-in-typescript-very-bad-idea-please-dont-use
GitHub
GitHub - dmjio/type-level-json: RFC8259 compliant JSON parser, at the type level.
RFC8259 compliant JSON parser, at the type level. Contribute to dmjio/type-level-json development by creating an account on GitHub.
Блог*
#prog #cpp C++ iceberg fouronnes.github.io/cppiceberg
Интересно, выходит, приличную долю из этого я и так знаю
#article
Не трогайте разработчиков. Отстаньте. Просто не беспокойте
Или про процесс разработки, который хорошо работает на практике, но сложно повторить. Комментарии тоже ценны.
Не трогайте разработчиков. Отстаньте. Просто не беспокойте
Или про процесс разработки, который хорошо работает на практике, но сложно повторить. Комментарии тоже ценны.
Хабр
Не трогайте разработчиков. Отстаньте. Просто не беспокойте
Всем привет! Меня зовут Ян, я руководитель разработки Департамента ИТ инвестиционного бизнеса Газпромбанка. Совершенно неожиданно я занял первое место на конференции Highload++ с докладом про то, как...
#prog #rust #rustasync #rustlib #article
Как известно, в настоящий момент трейты в Rust не могут иметь асинхронные методы. Причины для этого описаны в статьеНикитоса Niko Matsakis why async fn in traits are hard, и если коротко, они связаны с кучей нерешённых вопросов и недопиленных фич — это примерно так же, как в Rust до версии 1.26.0 нельзя было нормально вернуть из функции замыкание.
Для обхода этой проблемы есть несколько путей, которые так или иначе сводятся к стиранию типов. Первый — как и в случае с замыканиями, просто забоксить футуру. Это именно то, что делает async-trait. Второй путь — разместить футуру в некоем байтовом массиве, который хранится инлайн, а не в куче. Именно это делают stackfuture и name-it. Вторая библиотека вычисляет размер футуры и хранит его в байтовом массиве в точности нужного размера, а также (не) реализует все те же авто-трейты, что и исходная футура. Первой нужно наперёд указывать размер хранилища под футуру, но зато она не полагается на макросы для работы.
(thanks @goldsteinq, которому, кстати, и принадлежит авторство второй библиотеки)
Как известно, в настоящий момент трейты в Rust не могут иметь асинхронные методы. Причины для этого описаны в статье
Для обхода этой проблемы есть несколько путей, которые так или иначе сводятся к стиранию типов. Первый — как и в случае с замыканиями, просто забоксить футуру. Это именно то, что делает async-trait. Второй путь — разместить футуру в некоем байтовом массиве, который хранится инлайн, а не в куче. Именно это делают stackfuture и name-it. Вторая библиотека вычисляет размер футуры и хранит его в байтовом массиве в точности нужного размера, а также (не) реализует все те же авто-трейты, что и исходная футура. Первой нужно наперёд указывать размер хранилища под футуру, но зато она не полагается на макросы для работы.
(thanks @goldsteinq, которому, кстати, и принадлежит авторство второй библиотеки)
🔥7👍1
#prog #cpp
Если вам по каким-то причинам нужно сделать порядковый индекс итерации в range-based for loop и при этом нету возможности или желания использовать ranges, то можно накостылить такое:
Ещё может возникнуть вопрос, почему не что-то попроще в духе:
Если вам по каким-то причинам нужно сделать порядковый индекс итерации в range-based for loop и при этом нету возможности или желания использовать ranges, то можно накостылить такое:
size_t i = 0;
for (auto & elem : collection) {
struct IncrementOnDrop {
size_t old;
size_t& assign_to;
IncrementOnDrop(size_t& i): old(i), assign_to(i) {}
~IncrementOnDrop() {
assign_to = old + 1;
}
} inc{i}
// каким бы сложным не был поток управления
// в теле цикла, i будет инкрементировано всегда
// в конце итерации, когда будет вызван
// деструктор inc
...
}
Разумеется, не обязательно объявлять IncrementOnDrop
по месту, но если это требуется лишь единожды — почему нет?Ещё может возникнуть вопрос, почему не что-то попроще в духе:
struct IncrementOnDrop {
size_t& i;
~IncrementOnDrop() {
++i;
}
} inc{i};
Это тоже работает, но в этом случае, если i
меняется в теле цикла, число итераций будет подсчитано неверно. Вариант выше защищает от этого.👏5🔥1
Forwarded from Anonymous
Что ж поучаствовал я в этом празднике жизни. Рассказываю:
Как понял: у парней есть сервис на питоне, сервис хранит, скажем так, таблицу фильтрации трафика для файервола. Эта таблица раскатывается на сервера облака, чтобы каждый хост мог посылать/получать только пакеты от доверенных хостов. Так как данное решение не очень быстрое они решили переписать его на что-то нативное, раст выбрали из-за того, что при раскатывании на 100500 хостов лучше иметь гарантии безопасности, чем писать на плюсах.
Само собеседование классиченкий клон FAANG - три часа пытаемся решать задачки на алгоритмы в блокноте, отлаживая результат творчества в уме на собственных примера.
Как понял: у парней есть сервис на питоне, сервис хранит, скажем так, таблицу фильтрации трафика для файервола. Эта таблица раскатывается на сервера облака, чтобы каждый хост мог посылать/получать только пакеты от доверенных хостов. Так как данное решение не очень быстрое они решили переписать его на что-то нативное, раст выбрали из-за того, что при раскатывании на 100500 хостов лучше иметь гарантии безопасности, чем писать на плюсах.
Само собеседование классиченкий клон FAANG - три часа пытаемся решать задачки на алгоритмы в блокноте, отлаживая результат творчества в уме на собственных примера.
👍1
Forwarded from Anonymous
Если совсем кратко, то:
* задачи не соответствуют занимаемой должности;
* большая часть кода написана студентами и олимпиадниками с однобуквенными переменными, методами на 1 000 строк и запросами из джоинов через where;
* сверху бесплатно накидывают всякое дежурство и настройку ci/cd;
* зарплата, даже с идеальным прохождением всех этапов примерно на 15% меньше рынка.
* задачи не соответствуют занимаемой должности;
* большая часть кода написана студентами и олимпиадниками с однобуквенными переменными, методами на 1 000 строк и запросами из джоинов через where;
* сверху бесплатно накидывают всякое дежурство и настройку ci/cd;
* зарплата, даже с идеальным прохождением всех этапов примерно на 15% меньше рынка.
🤡33🐳11👍2💩2🔥1