ты не понимаешь, что этот твой лишний вызов произойдёт ТУТ ЖЕ за первым, и за счёт прогретости кешей выполнится мгновенно [на два порядка быстрее первого вызова] ?
ты не понимаешь, что пока кратчайшее описание твоей микрооптимизации занимает меньше трех страниц папира — скорее всего, где-то эта оптимизация делается уже и лучше автоматически?
// не имея измерений подперднул с дивана и немножко промочил себе лицо капелькой собственной мочи
@hirthwork конкатенацию строк плюсиками в цикле делают абстракциебоги, посмеиваясь над ничтожествами с C-style нультерминированными строками из прошлого тысячелетия // которые даже не поддерживают O(1) .length()
@ulidtko > ты не понимаешь, что пока кратчайшее описание твоей микрооптимизации занимает меньше трех страниц папира — скорее всего, где-то эта оптимизация делается *уже* и *лучше* автоматически?
гэцэцэ тебе тут штоле
@komar это сделает плюсик blazingly fast за счёт нуля реаллокаций
но даже и без знания аппербаунда с неуёбищными (паскалевскими) строками конкатенация N строк в цикле = O(N), а не O(N²), этого уже более чем достаточно (ты не сделаешь быстрее)
@ulidtko Улиточка, в твоем академомирке, возможно, копипаста байта из одного куска памяти в другой имеет такую же СЛОЖНОСТЬ, какую и копипаста гигабайта, но я в университетах не учился, и что это за нолик в скобочках и перевернутая — не знаю. Зато я знаю, что если не выебываться и брать join, то будет быстро.
@mugiseyebrows а для вектора, тьюплов и мапов где определять? с полной общностью это сука никуда не лезет, ни в каком файле неуместно, кроме MISC_PARASHA.cpp — а там уже дохуя
нашли что обсудить, блин. про преаллокацию большого буфера у StringBuilder я так скажу, тырпрайз пацаны потом делают new String(sb) чтобы шарить буфер StringBuilder, так что выделив большой буфер ты рискуешь сделать его долгоживущим
@ulidtko хуле ты там умных словечек начитался, аппербаунд блядь, ассимптотическая оценка сложности.
совсем жсеры от рук отбились.
расскажите мне про реализацию строк в вашем язычке.
сколько реаллокаций на конкатенацию?
Интересно, IntelliJ Idea уже долшла умом до того, чтобы реализовать это методом каких-то правил переписывания? (по типу хаскелевых)
Насколько слышал, про null они давно умеют понимать (аннотации null'абл объект или нет). А вот про механизмы "переписывания" не слышал.
@polecat ни хуя он не подпердоливает, я скомпилял раскомпилял и перфоманс посчитал 6мс против 600мс и посоны на стеке тоже самое говорят, компиляч переписывает только элементарщину вроде` String a,b,c; <...> c = a+b;`
@anonymous Ты не понял. Я хочу, чтоб форма `sb.append(obj)` переписывалась в `sb.append(obj.toString())` компилятором, а не программистом при помощи кнопочки "рефакторинг".
@mugiseyebrows таки компайлер не подставит всё как надо. алсо, конкатенацию строк плюсиками в цикле делают только мудаки
@krkm ну бля охуей теперь
уау // поссал в ебло за прожигание энтропии на бездарную микрооптимизацию
ты не понимаешь, что этот твой лишний вызов произойдёт ТУТ ЖЕ за первым, и за счёт прогретости кешей выполнится мгновенно [на два порядка быстрее первого вызова] ?
ты не понимаешь, что пока кратчайшее описание твоей микрооптимизации занимает меньше трех страниц папира — скорее всего, где-то эта оптимизация делается уже и лучше автоматически?
// не имея измерений подперднул с дивана и немножко промочил себе лицо капелькой собственной мочи
@hirthwork конкатенацию строк плюсиками в цикле делают абстракциебоги, посмеиваясь над ничтожествами с C-style нультерминированными строками из прошлого тысячелетия // которые даже не поддерживают O(1) .length()
@krkm шо
@komar пук
@komar хули оверхед? а что если я smartass и заранее знаю верхний лимит по длине? что теперь, съел?
@komar я могу её знать (потому что я пишу цикл)
@krkm говна поешь
@komar это сделает плюсик blazingly fast за счёт нуля реаллокаций
но даже и без знания аппербаунда с неуёбищными (паскалевскими) строками конкатенация N строк в цикле = O(N), а не O(N²), этого уже более чем достаточно (ты не сделаешь быстрее)
@mugiseyebrows ето чувство когда мейнстримное дерьмо без third party library не умеет даже распечатать std::vector
@komar што join? сложность какая? +пруф что меньше O(N)
@mugiseyebrows хуита, чувак, хуита, не скейлится совсем нихуя
@komar ты тупой как доска просто
@mugiseyebrows вложенные данные ты как печатать будешь? что если у меня std::vector<company> и struct company { std::vector<Employee> hooey; ... } ?
@komar быстрее алгоритмически блядь, в жабомифе O(N²) конкатенация строк через плюсик
про join заебись аргумент, но с паскалевкими строками плюсик в цикле настолько же хорошо прокатит
@ulidtko твоя оценка сверху может оказаться слишком грубой, чтобы оптимизировать лишнюю аллокацию-две
@mugiseyebrows а для вектора, тьюплов и мапов где определять? с полной общностью это сука никуда не лезет, ни в каком файле неуместно, кроме MISC_PARASHA.cpp — а там уже дохуя
@hirthwork да join вон возьми и успокойся, посчитаешь всё заранее с точностью до байта
@krkm dae рыночная наука
@komar :)
-O1 (вместо -O2) тогда хуле
@komar
починил
@mugiseyebrows тьюпл в лог пишу // сорь
@krkm что ті нєсешь, кому ето вігодно?
нашли что обсудить, блин. про преаллокацию большого буфера у StringBuilder я так скажу, тырпрайз пацаны потом делают
new String(sb)
чтобы шарить буфер StringBuilder, так что выделив большой буфер ты рискуешь сделать его долгоживущим@krkm сорь, я сегодня слить забыл просто (у твоей мамки выходной)
@krkm ^^^ я б поитерировал (безопасно)
@krkm :3