Dmitry
https://ru.wikipedia.org/wiki/Буферизация_(информатика)
Сережа
вообще я херню сказал
Сережа
гау делает системный вызов
Сережа
а ос уже отвечает за то, что файл будет записан
Сережа
хотя нет, func (*Writer) Flush относится к bufio.Writer а это уже го реализация
Сережа
After all data has been written, the client should call the Flush method to guarantee all data has been forwarded to the underlying io.Writer.
Сережа
явное лучше неявного, ага, да
Сережа
ну без деструкторов то и не сделаешь, чтобы оно перед удалением записывало все
Dmitry
повторяю, это зависит не от языка
Dmitry
вот пример как это делается в плюсах http://www.cplusplus.com/reference/ostream/ostream/flush/
Сережа
конкретно это зависит от языка
Dmitry
http://www.intuit.ru/studies/courses/640/496/lecture/11252
Dmitry
явное лучше неявного, ага, да
io.WriteString(enyFile, "sometext") вот этим методом не надо никакого флуша вызывать
Сережа
в плюсах например и при std::endl неявно вызывается flush
Сережа
так же при освобождении стрима вызывается flush
Сережа
https://stackoverflow.com/questions/5036878/why-does-ofstream-require-a-flush
Сережа
вот обсуждение похожей проблемы
Сережа
https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D0%B0_%D0%B5%D1%81%D1%82%D1%8C_%D0%B8%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F
Сережа
а вот то, чего в гау нет, и почему вы вынуждены не забывать flush
Oleg
О чем этот тип говорит?) Flush есть везде же:)
nezorflame
об том и говорит
Oleg
Зачем? Все это и так знают
nezorflame
видимо, нет
Сережа
я говорю о том, что в плюсах flush вызывается неявно при освобождении ресурса
Сережа
а в го есть bufio.Writer который реализует буферизированную запись куда угодно, но если забыть вызывать flush явно - то ничего не будет записано
Сережа
смекаете?
Oleg
А в чем проблема?
Сережа
во мне, у меня это вызывает отторжение
Oleg
Ты идиот, а виноват го
Oleg
Обожаю таких людей😂
Oleg
Ты как мой одногруппник который ругался "Да хули код ниже исполняется!!!!":))
Oleg
Простите за мат:)
Сережа
ну да, надо ман читать, прежде чем лезть помогать
Oleg
Он return забыл просто:)
Anonymous
Ты как мой одногруппник который ругался "Да хули код ниже исполняется!!!!":))
Мой отец говорит "Тупой компутар!", хотя я знаю, что тупой не комп, а программисты 😄
Сережа
ладно-ладно, все вы победили, кто не вызывает flush тот тупой
Сережа
в го не делает
Сережа
я так понял, что flush нужен bufio.Writer это в нем буфер, если вызвать file.Sync - это будет системный вызов и если из bufio.Writer байты не пришли, то записано тоже ничего не будет
Dmitry
вру :)
Anonymous
Я чот ни разу не вызывал Flush, но все файлы у меня записываются целиком. И брат жив. ))
Michael
fsync & flsuh - are different things
Michael
и вообще - во всём виноват с++
Сережа
да, приучает к RAII
Michael
не, RAII кое-где упоминается
Сережа
кстати, зачем использовать bufio, если ОС сама буферизирует файловые операции?
Michael
а так - целься и стреляй куда и во что хочешь
Сережа
дабл буфер? чтобы еще быстрее?
Michael
причём разные компиляторы - по-разному
Michael
система сама шедулит ио
Anonymous
система сама шедулит ио
Шедулит только запись, а не чтение. Читать наперёд не умеет ))
Michael
при падении софта система фсюнкнет буферы и данные попадут на винт
Michael
я б не был так уверен
Michael
так как есть кэши и на чтение
Michael
особенно когда читаешь блоками
Anonymous
Ок, снизил уверенность на 50% ))
Anonymous
особенно когда читаешь блоками
Поэтому и нужен в go buffer, т.к. ОС не знает сколько там тебе надобно.
Антон
кстати, зачем использовать bufio, если ОС сама буферизирует файловые операции?
а ты умеешь управлять буферизацией ОС? Ты можешь ей сказать читать до опредёлнного символа и тп?
Michael
флаш из буфио нужен для кастомной реализации буфера
Michael
писать в буфер в озу куда быстрее чем дергать ось
Michael
ось же оптимизирует запись в целом на винт
Сережа
я говорю именно про этот случай
Michael
апи то системное используется
Сережа
у него там слайс в памяи уже готовый он из него пишет в bufio
Michael
надо выпить и слайсом бекона закусить
Anonymous
надо выпить и слайсом бекона закусить
Из какого package берёшь бекон?
Anonymous
Требую поделиться беконом на github'е
Dmitry
я говорю о том, что в плюсах flush вызывается неявно при освобождении ресурса
а есть способ что бы не вызывался flush при освобождении ресурса?
Сережа
я не знаю
Сережа
наверное нет
Сережа
может есть метод который можно вызвать чтобы предотвратить flush в деструкторе
Сережа
может там есть bool, что flush уже был вызван и если новые данные не добавляются, то в деструкторе flush не вызывается
Dmitry
просто если не надо записывать данные, (в случаи ошибки например) то в Го реализация лучше
Сережа
это то - о чем программист на высокоуровневом языке не думает
Сережа
так ты проверяй на ошибку данные до того, как в ostream писать
Dmitry
это то понятно, но всякое же бывает
Anton
ну вы развели тут :)