Крылатый
Лущ ревизию бы писал)
Berkus
а чо, его нельзя в маркдауне в гитхаб положить?
Berkus
как делают с пропозалом стандарта с++
Крылатый
Крылатый
Кто html шлёт, кто ещё как...
Berkus
это же пдф
Berkus
какой хтмл
Крылатый
Можно ваще в чём-то одном, а потом есть няшный pandoc
Berkus
ну можно хтмл и пдф генерить из маркдауна или чего-то еще вменяемого
Berkus
latex там
Крылатый
Кто не знает: https://pandoc.org/
Крылатый
Ваще зачётная штука, советую.
Berkus
я про то что редактировать совместно пдф файл это такое себе удовольствие
Berkus
а с текст-бейзед можно например вычитать и кинуть PR на поправку опечаток
Berkus
с пдфом объем лишней работы на порядок больше
Крылатый
Можно в маркдауне пилить, а потом хоть в latex, хоть в pdf, хоть в html. да даже в docx
Крылатый
Ну, если без раширений, то да.
Крылатый
Нёвер больше знает.
Berkus
маркдаун, rst и так далее
Крылатый
@fvnever призываю тебя!
Крылатый
Во имя Омниссии!
Dr. Friedrich
Я могу сказать, что оно конвертит latex в docx, и формулы тоже конвертит.
Крылатый
Dr. Friedrich
В обратную сторону не пробовал, право. Но почти уверен, что нормально сконвертит.
Dr. Friedrich
Знаешь, я в это бы не поверил, зная, насколько там ужасный и недокументированный формат у этих формул.
Dr. Friedrich
Ну, короче, если кто и сможет хорошо сконвертить документы, то это pandoc. И если собираешься чего-то допиливать, то вполне целесообразно допиливать его.
Крылатый
Собери сам)
Крылатый
Там всего лишь хаскель.
Grigory
Тоже внесу свою лепту "... По соглашению удаленные функции объявляются как puЫic, а не private ..." (Скотт Мейерс)
Крылатый
+
Крылатый
Так в тексте ошибки компиляции будет сразу видно, что функция помечена как delete, а не как приватная, что может зависти в заблуждение.
Крылатый
Ну тип ололо синглтон чтоле и такое вот)
Крылатый
@zamazan4ik всё же рисуй к файлу версию)
Крылатый
Лущ циферка(
Крылатый
Свежесть хэшей я пока не понимаю.
Крылатый
Это правильно. Но тут рано)
Крылатый
ИМХО
Berkus
Berkus
эцсамое, напомните у нас тут есть адекватный чят для начинающих по Rust?
Berkus
а то я начал и у меня пока от умиления слюни аж брызжут
Berkus
cargo doc --open вот это всё
Крылатый
Berkus
ок, спасибо, если будет безнадежно то ливну, чо уж
vladislav
Крылатый
Уии
Berkus
Ruslan
Всем привет.
Что если я зарезервирую память под контейнер, а потом сделаю это еще раз?
Ruslan
да
Ruslan
то есть смотри, допустим у меня 2 потока работают с одной таблицей, не понятно,какой из них будет раньше работать с таблицей, я делаю reserve() у обоих потоков
Berkus
синхронизацию используй
Ruslan
да, просто локи желательно, конечно, не использовать, ибо они тормозят жизнь
Anatoly
тогда ресерви буфер до старта тредов
Ruslan
я понимаю, что возможно какая-то такая ситуация. я делаю reserve(), чтоб не писать в таблицу, места под которой нет. Проверяю empty(), после резервирую.
Допустим, один поток считал empty() (то есть size() == 0) и выделил память, второй сделал то же самое, потом первый он инициализировал таблицу, а второй перезаписал действия первого. Память, выделенная первым, потерялась.
Anatoly
только в любом случае, для записи в буфер ты обязан будешь предотравращать доступ с разных тредов
Anatoly
я понимаю, что возможно какая-то такая ситуация. я делаю reserve(), чтоб не писать в таблицу, места под которой нет. Проверяю empty(), после резервирую.
Допустим, один поток считал empty() (то есть size() == 0) и выделил память, второй сделал то же самое, потом первый он инициализировал таблицу, а второй перезаписал действия первого. Память, выделенная первым, потерялась.
у тебя классическая гонка
Ruslan
спасибо за советы. но надеялся без локов, онечно, обойтись
Ruslan
так сказать, верил)))
Anatoly
"используй силу, Люк"
Berkus
Ruslan
а как вы к такому относитесь?
http://en.cppreference.com/w/cpp/thread/call_once
Berkus
нормально
Berkus
но после reserve тебе надо будет работать с контейнером из разных тредов - и ЭТО ОПЯТЬ ЛОКИ
Berkus
он хочет call_once(vec.reserve()) из двух тредов с одним once_token
Berkus
я понимаю, что возможно какая-то такая ситуация. я делаю reserve(), чтоб не писать в таблицу, места под которой нет. Проверяю empty(), после резервирую.
Допустим, один поток считал empty() (то есть size() == 0) и выделил память, второй сделал то же самое, потом первый он инициализировал таблицу, а второй перезаписал действия первого. Память, выделенная первым, потерялась.
нет конечно, так не работают стандартные контейнеры
Berkus
но если ты будешь дергать контейнер непотокобезопасный из разных тредов - готовься дебажить днями и ночами двойные free, use-after-free, сегфолты непонятно откуда и просто нестабильную работу приложения
Ruslan
да, со стандартными контейнерами беда насчет локов. надо делать свои таблички, мапы и тд, которые влезают в кеш-линию
Ruslan
а как я понимаю, если под локом reserve() вызывать, то хоть 10 раз можно, он просто проверит,что уже выделено и пойдет дальше?
Anatoly
а причем контейнеры, у тебя многопоточная программа, хочешь менять данные конкрурентно, лочь
Anatoly
и?
Anatoly
надо мерять
Berkus
в общем случае lock-free будут медленнее в случае contention
Berkus
это ж не бесплатно
Berkus
Ruslan
спасибо всем)
cyberzx 🇷🇺
cyberzx 🇷🇺
lock-free синхронизация в общем случае медленее, чем locking
cyberzx 🇷🇺
lock-free это не про скорость. lock-free это про гарантии
Arseny
Что принято использовать если нужен семафор, которого можно ждать в epoll/poll/select?
Я пока умею только писать свою реализацию через eventfd.
cyberzx 🇷🇺
а чем eventfd не устраивает?