<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Есть ли оптимизация при конкатенации строк?]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Есть ли оптимизация при конкатенации строк? форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Thu, 07 May 2026 10:52:58 +0300</pubDate>
		<item>
			<title>Есть ли оптимизация при конкатенации строк?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message75002/topic8569/">Есть ли оптимизация при конкатенации строк?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Ничего не понятно, но всё так, как надо. &nbsp;<img src="http://forum.quik.ru/upload/main/smiles/5/icon_smile.png" border="0" data-code=":smile:" data-definition="SD" alt=":smile:" style="width:16px;height:16px;" title="С улыбкой" class="bx-smile" /><br /><br />Где-то в Интернете есть онлайн сервисы, на которых вводишь код на разных языках и смотришь скомпилированный код. Возможно, так можно увидеть через байт-код Луа, как фрагменты компилируются.<br /><br />А я вчера много времени потратил на выяснение: будет ли ускорение от такой оптимизации в OnAllTrade и в OnQuote, где вычисляется символьное время сделки/изменения в стакане для вывода типа
====code====
<pre>UWGN 18:49:59.388251 47.4 482 S
IRKT 18:48:33.469798 bids=20 85.45/1806 85.40/56 85.35/6 85.20/163 85.15/4 85.05/12 85.00/36 84.90/28 84.85/11 84.80/3 84.60/2 84.50/99 84.40/3 84.30/2 84.25/6 84.20/10 84.15/7 84.10/43 84.05/129 84.00/482 offers=3 85.20/15 85.40/13 85.45/512</pre>
=============
Часы и минуты меняются редко, цена и количество акций в стакане по нелучшим ценам тоже: что, если запоминать эти значения в строках, и если они не изменились, вставлять закэшированные?<br />Мерял время выполнения этих коллбэков через os.sysdate().mcs, получал 0. Снизил частоту ЦП до 800 МГц, внутри коллбэка сделал цикл на 10 повторов, опять 0. Как-то не верится в такое: слишком быстро. А если повтор цикла увеличить, то выскакивают цифры ~ 5000 мкс, 10000, 15500. Про 15500 я знаю, что это квант времени для работы потока. Поэтому я так и не понял, есть ли от этого ускорение. Ведь в этом случае этой оптимизации придётся делать проверки, что время не поменялось, запоминать новое время, конкатенировать строки... В общем, НИР/ОКР ерундой прозанимался... <img src="http://forum.quik.ru/upload/main/smiles/5/icon_confuse.png" border="0" data-code=":what:" data-definition="SD" alt=":what:" style="width:16px;height:16px;" title="Озадаченно" class="bx-smile" /> <br />
			<i>20.03.2024 14:31:46, Serge123.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message75002/topic8569/</link>
			<guid>http://forum.quik.ru/messages/forum10/message75002/topic8569/</guid>
			<pubDate>Wed, 20 Mar 2024 14:31:46 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Есть ли оптимизация при конкатенации строк?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message74997/topic8569/">Есть ли оптимизация при конкатенации строк?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Похоже, что есть: у <noindex><a href="https://www.lua.org/manual/5.4/manual.html#lua_concat" target="_blank" rel="nofollow">lua_concat</a></noindex> параметр - количество строк для конкатенации. <br />Ну и кусок из исходников:
====code====
<pre>/*
** Create code for '(e1 .. e2)'.
** For '(e1 .. e2.1 .. e2.2)' (which is '(e1 .. (e2.1 .. e2.2))',
** because concatenation is right associative), merge both CONCATs.
*/
static void codeconcat (FuncState *fs, expdesc *e1, expdesc *e2, int line) {
&nbsp;&nbsp;Instruction *ie2 = previousinstruction(fs);
&nbsp;&nbsp;if (GET_OPCODE(*ie2) == OP_CONCAT) {&nbsp;&nbsp;/* is 'e2' a concatenation? */
&nbsp;&nbsp;&nbsp;&nbsp;int n = GETARG_B(*ie2);&nbsp;&nbsp;/* # of elements concatenated in 'e2' */
&nbsp;&nbsp;&nbsp;&nbsp;lua_assert(e1-&#62;u.info + 1 == GETARG_A(*ie2));
&nbsp;&nbsp;&nbsp;&nbsp;freeexp(fs, e2);
&nbsp;&nbsp;&nbsp;&nbsp;SETARG_A(*ie2, e1-&#62;u.info);&nbsp;&nbsp;/* correct first element ('e1') */
&nbsp;&nbsp;&nbsp;&nbsp;SETARG_B(*ie2, n + 1);&nbsp;&nbsp;/* will concatenate one more element */
&nbsp;&nbsp;}
&nbsp;&nbsp;else {&nbsp;&nbsp;/* 'e2' is not a concatenation */
&nbsp;&nbsp;&nbsp;&nbsp;luaK_codeABC(fs, OP_CONCAT, e1-&#62;u.info, 2, 0);&nbsp;&nbsp;/* new concat opcode */
&nbsp;&nbsp;&nbsp;&nbsp;freeexp(fs, e2);
&nbsp;&nbsp;&nbsp;&nbsp;luaK_fixline(fs, line);
&nbsp;&nbsp;}
}

</pre>
============= <br />
			<i>20.03.2024 08:02:31, paluke.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message74997/topic8569/</link>
			<guid>http://forum.quik.ru/messages/forum10/message74997/topic8569/</guid>
			<pubDate>Wed, 20 Mar 2024 08:02:31 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Есть ли оптимизация при конкатенации строк?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message74996/topic8569/">Есть ли оптимизация при конкатенации строк?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Кто-нибудь знает, при нескольких конкатенациях:
====code====
<pre>str1 = 'b'
str = str .. 'a' .. str1 .. str1</pre>
=============
str будет 3 раза удаляться и пересоздаваться, или будет какая-то оптимизация этого присваивания? <br />
			<i>19.03.2024 22:29:26, Serge123.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message74996/topic8569/</link>
			<guid>http://forum.quik.ru/messages/forum10/message74996/topic8569/</guid>
			<pubDate>Tue, 19 Mar 2024 22:29:26 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
