ФлеймФорумПрограммирование

Arduino String - строки которые мы заслужили? (3 стр)

Страницы: 1 2 3 4 511 Следующая »
#30
7:19, 12 авг 2024

skalogryz
> Намерение в том, чтобы сделать ровно одну аллокацию для новой строки, т.к. размероность всех входящих данных заранее известно.

Как? Расскажи подробнее.
Почему перегруженный оператор + будет хуже знать под что он выделяет строку.
А как должен "догадываться" format %s ?
Дичь говорите, но сами похоже в неё верите.

#31
7:25, 12 авг 2024

=A=L=X=
> Почему перегруженный оператор + будет хуже знать под что он выделяет строку.
ну как же ш... у тебя каждой оператор +, должен вернуть новую строку.
a + b + c
это 2 аллокации: ab , и abc

перегруженный оператор так и работает, он перёд 2 операнда, и возвращает 1 результат.

если оператор не будет перегруженный, а будет встроенный в язык. Тогда компилятор, сможет осилить и заменить несколько "+" в один concat() вызов.  Который для результирующей строки сделает одно выделение памяти.

=A=L=X=
> А как должен "догадываться" format %s ?
1) парсишь входящую строку - находишь размер "шаблонных кусков" (всё то, что не является %s, %d и т.д.)
2) пробегаешься по входящим параметрам (проверяешь типы, приводишь их к "строке")

3.1) если нужно  на выхлопе получить строку складываем размеры каждого из кусков, найденных в шагах 1 и 2 и делаем одну аллокацию, а потом каждый кусок последовательно move в новую строку

3.2) если на выхлопе не нужно строку получать, а просто сливать строку куда-то там в файл или поток, то просто каждый кусок последовательно делаем move, output или чего-там по нужно адресу.

#32
(Правка: 7:38) 7:30, 12 авг 2024

=A=L=X=
> Почему перегруженный оператор + будет хуже знать под что он выделяет строку.
дело не в отдельном +, а в последовательности.
a + b
мало чем уступает
printf(a, b)

но a+b+c уже начинаются вопросы.

Лично был свидтелем код, который тормозил, потому что был целиком написан на a+b реализации.
И на тестах с маленькими данными, работал идеально. Но в продакшене, данные оказались чуток подлинее, и тормоза оказывались существенными.
Веб сервис, определённые запросы, вместо 100 мс умудрялся обрабатывать > 30 секунд.  (Код тупо копировал одни и те же данные из одного место в другое, но поширше предыдущего)

Код был написан на делфи. (а там a+b, сам бог велел писать).

#33
8:05, 12 авг 2024

skalogryz
> Веб сервис, определённые запросы, вместо 100 мс умудрялся обрабатывать > 30 секунд. (Код тупо копировал одни и те же данные из одного место в другое, но поширше предыдущего)
>
> Код был написан на делфи. (а там a+b, сам бог велел писать).

Так ты послушай - я на С++ недавно писал программу и она зависла!
Прикинь?
С/C++ говно я не языки, просто по логике твоей днище днистое, нерабочий хлам.
Истинно говорю я, а ты пиздец какой то выдумываешь сам в него не веря.

#34
8:08, 12 авг 2024

Какой травмой детства и изнасилованием в жопу малолетки конечно проникнуты тут высказывавшиеся на тему того что нельзя конкатенировать строку и число вот просто как оно есть в скриптовых языках мне лично НЕВЕДОМО.
Это непостижимо. Какие то вот травмы видимо глубокие. Слава богу у меня ничего такого не случалось.

#35
8:13, 12 авг 2024

ты можешь складывать строки попарно!
вопрос только в том, как часто ты это будешь делать, и не придётся ли потом такие места оптимизировать.

=A=L=X=
> С/C++ говно я не языки, просто по логике твоей днище днистое, нерабочий хлам.

зачем доказывать очевидное?

#36
8:19, 12 авг 2024

=A=L=X=
> конкатенировать строку и число вот просто как оно есть в скриптовых языках мне лично НЕВЕДОМО.
так это неудобно (если делать плюсом, а не &) . Получил от пользователя ввод, забыл перевести из строки в число потому что этот ввод прошёл через кучу всяких уровней абстракции (и один из них оказывается иногда возвращает строку а не число), и вот у тебя пошло молотить делая 2+2=22 (а ошибка вылезет не там а в месте первого минуса/деления/синуса и гадай потом).

#37
(Правка: 8:24) 8:21, 12 авг 2024

=A=L=X=
> Я не понимаю
Верю.

kipar
> если делать плюсом, а не &
& в плюсе — это битовое и, так что не варик.

В луа, конкатенация строк — это .. (две точки).

В хаскеле — это <> (ромбик из меньше-больше).

В плюсах — а там все операторы так или иначе уже заняты, так что только хрен сосать. Авось в каком-нибудь C++2090 таки дойдут и исправят.

#38
8:25, 12 авг 2024

kipar
> так это неудобно

То есть вместо a + b неудобно писать a + std::to_string(b)?
Шта?
Какое определение "неудобности" тут подразумевается? Ибо оно явно отличается от классики.

#39
8:27, 12 авг 2024

Имбирная Ведьмочка
> В плюсах — а там все операторы так или иначе уже заняты, так что только хрен сосать. Авось в каком-нибудь C++2090 таки дойдут и исправят.

Это называется Arduino - см. ссылку в первопосте, всё работает прямо сейчас и работало 20 лет назад как минимум.
Шоры просто надо снять.

#40
8:28, 12 авг 2024

Только строки в стиле си ... Только хардкор ...

#41
8:32, 12 авг 2024

=A=L=X=
удобно писать a<<b, a#b, a~b, a&b, в общем лишь бы не плюс а отдельный оператор.

#42
8:41, 12 авг 2024

kipar
> в общем лишь бы не плюс а отдельный оператор.

Это гордость и предубеждение в Лас-Вегасе какое то.
Что плохого будет если не плюс?

#43
9:28, 12 авг 2024

Имбирная Ведьмочка
> То, что нужно в 99% случаев — это форматирование, а оно делается через printf-подобный интерфейс
Согласен

https://en.cppreference.com/w/cpp/utility/format/format
(since C++20)
Ну не чмошники?

#44
9:52, 12 авг 2024

А что мешает страждущему перегрузить этот оператор для std::string самостоятельно и погрузиться в блаженную негу?
Лично мне такое "богатство" нафиг не упёрлось. Я бы еще руки оторвал гениям, которые придумали для строк всякие хитрые конструкторы принимающие числа, чары и их комбинации.

Страницы: 1 2 3 4 511 Следующая »
ФлеймФорумПрограммирование