<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3931016</guid>
        <pubDate>Fri, 31 Oct 2025 19:35:09 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3931016</link>
        <description><![CDATA[shm: <strong class='tag-b'>Славян</strong>, ты пытаешься изобрести tuple. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2025-10-31T22:40:23+03:00">31.10.25, 19:40</time></span></span><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">std::tuple&#60;int, char, float&#62; MyFunc(int a)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;return {a-1,&#39;A&#39;,3.14};</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2025-10-31T19:42:06+00:00">31.10.25, 19:42</time></span></span><br>
Смотрю выше уже написали, тогда не понимаю к чему спор. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2025-10-31T19:43:59+00:00">31.10.25, 19:43</time></span></span><br>
К слову, реальных применений tuple не так уж и много.]]></description>
        <author>shm</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929496</guid>
        <pubDate>Sat, 04 Oct 2025 11:15:11 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929496</link>
        <description><![CDATA[Славян: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3929485'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>B.V. &#064; <time class="tag-quote__quoted-time" datetime="2025-10-03T15:20:51+00:00">03.10.25, 15:20</time></span><div class='quote '>А как обращаться к полям такой структуры?</div></div>Ровно так же, как и к неименованым аргументам: никак. Разработчик убрал имя, значит сейчас оно ему не нужно. Как/когда понадобится - обзовёт. И мы были бы близки к идеалу:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">struct {int;char;float;} MyFunc(int a)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;...</div><div class="code_line">&nbsp;&nbsp; &nbsp;return (a-1,&#39;A&#39;,3.14);</div><div class="code_line">}</div></ol></div></div></div></div>Но тут вылезает другой изъян: запятая. Которая сейчас как бы говорит &quot;верну то, что справа&quot;. И сейчас же получается, что фраза:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">x = 5,6;</div></ol></div></div></div></div>вроде бы превращается в возврат 6 последним. Посему, конструкция &quot;a-1,&#39;A&#39;,3.14&quot; намекает, что вернётся 3.14, как последнее. Хотя компилятор не допускает<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">f = sin(0,1);</div></ol></div></div></div></div>А должен был бы (по логике) скормить 1 синусу. Короче, много неясностей каких-то...]]></description>
        <author>Славян</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929486</guid>
        <pubDate>Fri, 03 Oct 2025 15:32:53 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929486</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3929485'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>B.V. &#064; <time class="tag-quote__quoted-time" datetime="2025-10-03T15:20:51+00:00">03.10.25, 15:20</time></span><div class='quote '>А как обращаться к полям такой структуры?</div></div><br>
По идее такую шляпу можно было бы использовать в двух случаях:<br>
<ol class="tag-list" type="1"><li>В случае деструктуризации (это с++)</li><li>В случае присвоения переменной-структуре с идентичными по типам именованными полями</li></ol>]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929485</guid>
        <pubDate>Fri, 03 Oct 2025 15:20:51 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929485</link>
        <description><![CDATA[B.V.: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3929438'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Славян &#064; <time class="tag-quote__quoted-time" datetime="2025-10-03T01:30:20+00:00">03.10.25, 01:30</time></span><div class='quote '>Жаль, что пустые=неименованые поля в структурах недопустимы (вроде бы).</div></div><br>
А как обращаться к полям такой структуры?]]></description>
        <author>B.V.</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929438</guid>
        <pubDate>Fri, 03 Oct 2025 01:30:20 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929438</link>
        <description><![CDATA[Славян: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3929435'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2025-10-02T18:11:11+00:00">02.10.25, 18:11</time></span><div class='quote '>От так тож можно, ибо структурное связывание языковое, а не либовое:</div></div>Вот, уже ближе к желанному&#33; Но осуществляется как бы уход в какие-то другие языки, a&#39;la:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">MyFunc( args )</div><div class="code_line">{</div><div class="code_line">...</div><div class="code_line">MyFunc = val1; // то, что вернётся</div><div class="code_line">...</div><div class="code_line">MyFunc = val2;</div><div class="code_line">}</div></ol></div></div></div></div>Жаль, что пустые=неименованые поля в структурах недопустимы (вроде бы). Так бы:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">struct { int; int; int; } TranslateSysAddrToCS(unsigned SystemAddr);</div></ol></div></div></div></div>Хотя в аргументах неименование разрешается&#33;:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">int myFunc( int, int a, int)</div><div class="code_line">{</div><div class="code_line">...</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>Славян</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929436</guid>
        <pubDate>Thu, 02 Oct 2025 21:33:08 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929436</link>
        <description><![CDATA[Majestio: Ну можно попробовать сам exe задебажить. Я качнул <a class='tag-url' href='https://x64dbg.com' target='_blank'>x64dbg</a>. Но не хватило ни опыта в этом, ни терпения.<br>
Если есть желание, присоединяю сам exe.<br>
<span class="b-attach" data-size="2005711" data-hits="32" data-attach-id="67401" data-attach-post-id="3929436">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3929436&amp;attach_id=67401' title='Скачать файл' target='_blank'>test.exe.7z</a> (, : 32)
		</span> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2025-10-02T21:41:50+00:00">02.10.25, 21:41</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3929435'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2025-10-02T18:11:11+00:00">02.10.25, 18:11</time></span><div class='quote '>P.S. Кстати, за либы. От так тож можно, ибо структурное связывание языковое, а не либовое</div></div><br>
Это интереснее чем <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">tuple</span></span>, но тогда уж еще <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">typedef</span></span> и будет классика. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2025-10-02T22:05:32+00:00">02.10.25, 22:05</time></span></span><br>
На всяк случай скидываю линк на интересный утиль - плагин для FAR <a class='tag-url' href='https://plugring.farmanager.com/plugin.php?l=ru&pid=934' target='_blank'>PE analyzer</a>.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929435</guid>
        <pubDate>Thu, 02 Oct 2025 18:11:11 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929435</link>
        <description><![CDATA[Qraizer: Та фик там что найдёшь. Я даже myfunc не нашёл, а main аж две.<br>
<br>
P.S. Кстати, за либы. От так тож можно, ибо структурное связывание языковое, а не либовое:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">struct { int i1; int i2; int i3; } TranslateSysAddrToCS(unsigned SystemAddr);</div></ol></div></div></div></div>]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929433</guid>
        <pubDate>Thu, 02 Oct 2025 17:16:38 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929433</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3929432'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>macomics &#064; <time class="tag-quote__quoted-time" datetime="2025-10-02T17:02:27+00:00">02.10.25, 17:02</time></span><div class='quote '>Скорми ELF в objdump</div></div><br>
Файлы прикрепил.<br>
<span class="b-attach" data-size="364051" data-hits="29" data-attach-id="67399" data-attach-post-id="3929433">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3929433&amp;attach_id=67399' title='Скачать файл' target='_blank'>test_intel.asm.7z</a> (, : 29)
		</span><br>
<span class="b-attach" data-size="227265" data-hits="33" data-attach-id="67400" data-attach-post-id="3929433">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3929433&amp;attach_id=67400' title='Скачать файл' target='_blank'>test.aot.7z</a> (, : 33)
		</span>]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929432</guid>
        <pubDate>Thu, 02 Oct 2025 17:02:27 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929432</link>
        <description><![CDATA[macomics: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3929426'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2025-10-02T14:00:02+00:00">02.10.25, 14:00</time></span><div class='quote '>Есть отдельный ключ - он компилячит в объектный файл, но там сигнатура ELF, да и размер тоже сравнимый с exe</div></div><br>
Скорми ELF в objdump]]></description>
        <author>macomics</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929426</guid>
        <pubDate>Thu, 02 Oct 2025 14:00:02 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929426</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3929425'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2025-10-02T13:17:17+00:00">02.10.25, 13:17</time></span><div class='quote '>А нет волшебного ключика &quot;сделай asm&quot;? Как у Студии -FA, например. Мож он тогда только своё сгенерит, без всякой либовой обвязки<br>
</div></div><br>
Увы, нету. Я изучил вопрос. Сам Дарт сперва компилячит в свое внутренне представление, а потом из него в код целевой платформы. Есть отдельный ключ - он компилячит в объектный файл, но там сигнатура ELF, да и размер тоже сравнимый с exe. Максимум, что я могу сделать - представить кусок кода на js, но это всё совсем не то.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp;var A = {</div><div class="code_line">&nbsp;&nbsp; &nbsp;printString(string) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (typeof dartPrint == &quot;function&quot;) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;dartPrint(string);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (typeof console == &quot;object&quot; &amp;&amp; typeof console.log != &quot;undefined&quot;) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;console.log(string);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (typeof print == &quot;function&quot;) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;print(string);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;throw &quot;Unable to print message: &quot; + String(string);</div><div class="code_line">&nbsp;&nbsp; &nbsp;},</div><div class="code_line">&nbsp;&nbsp; &nbsp;_Universe_addRules(universe, rules) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return A._Utils_objectAssign(universe.tR, rules);</div><div class="code_line">&nbsp;&nbsp; &nbsp;},</div><div class="code_line">&nbsp;&nbsp; &nbsp;_Universe_addErasedTypes(universe, types) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return A._Utils_objectAssign(universe.eT, types);</div><div class="code_line">&nbsp;&nbsp; &nbsp;},</div><div class="code_line">&nbsp;&nbsp; &nbsp;_Utils_objectAssign(o, other) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;var i, key,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;keys = Object.keys(other),</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;$length = keys.length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;for (i = 0; i &#60; $length; ++i) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;key = keys[i];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;o[key] = other[key];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;},</div><div class="code_line">&nbsp;&nbsp; &nbsp;main() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;A.printString(&quot;42, hello&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp;};</div></ol></div></div></div></div>]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929425</guid>
        <pubDate>Thu, 02 Oct 2025 13:17:17 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929425</link>
        <description><![CDATA[Qraizer: А нет волшебного ключика &quot;сделай asm&quot;? Как у Студии -FA, например. Мож он тогда только своё сгенерит, без всякой либовой обвязки <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2025-10-02T13:20:00+00:00">02.10.25, 13:20</time></span></span><br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray">Упс. В примерах кода прошмыгнуло чуток конфиденциальности. Подправил.</span>]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929408</guid>
        <pubDate>Thu, 02 Oct 2025 11:59:42 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929408</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3929407'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2025-10-02T11:51:08+00:00">02.10.25, 11:51</time></span><div class='quote '>Можно на Dart посмотреть?</div></div><br>
Такое я еще не пробовал. Дело в том, что Dart сперва копилирует свой код в промежуточный, а уже потом тулчейнами в код целевой платформы. Я пока баловался только для Web - а там целевой код javascript. В принципе могу собрать exe для винды, но как там найти нужные места в ассемблерном представлении - я х3. Хэлоу ворлд будет порядка 20 метров. Хотя консольное приложение должно быть поменьше, т.к. хэлоу ворлд я делал на Dart+Flutter. А там статически влинковывается весь графический движок. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2025-10-02T12:13:57+00:00">02.10.25, 12:13</time></span></span><br>
<s class='tag-s'>Хотя, о чем это я :) Для винды у Dart - формируется второе промежуточное представление на С++, и из него тулчейном уже собирается exe-шник. Поэтому имеет смысл просто смотреть сгенерированный С++ код. Будет время - проверю что там генерится.</s><br>
<br>
Засада&#33; Оказывается промежуточное представление на С++ делает не Dart, а Flutter для свои &quot;обвязок&quot;. Код на Dart компилячится напрямую. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2025-10-02T12:50:23+00:00">02.10.25, 12:50</time></span></span><br>
exe получается 5 мегов, а дизасемблирование 105 мегов ассемблерного кода. Ну его нафиг&#33; :huh:]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929407</guid>
        <pubDate>Thu, 02 Oct 2025 11:51:08 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929407</link>
        <description><![CDATA[Qraizer: К вопросу об оверхеде<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">auto [found, node, cs] = TranslateSysAddrToCS(0x12345678u);</div></ol></div></div></div></div><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; edx, 305419896 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; 12345678H</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;lea &nbsp; &nbsp; rcx, QWORD PTR $S1$[rsp] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;&#60;-</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;call &nbsp; &nbsp;?TranslateSysAddrToCS@@YA?AV?$tuple@HHH@std@@I@Z ; TranslateSysAddrToCS</div><div class="code_line">; Line 10</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; r8d, DWORD PTR $S1$[rsp] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;&#60;-</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; edx, DWORD PTR $S1$[rsp+4] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;&#60;-</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; ecx, DWORD PTR $S1$[rsp+8] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;&#60;-</div></ol></div></div></div></div><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">std::tuple&#60;int, int, int&#62; TranslateSysAddrToCS(unsigned SystemAddr)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;int CSFound = SystemAddr &#62;&#62; 16, NodeID = SystemAddr % (1 &#60;&#60; 16), CS = SystemAddr != 0;</div><div class="code_line">/* ... */</div><div class="code_line">&nbsp;&nbsp;return { CSFound, NodeID, CS };</div><div class="code_line">}</div></ol></div></div></div></div><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;xor &nbsp; &nbsp; eax, eax</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;movzx &nbsp; r8d, dx</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; r9d, edx</div><div class="code_line">; File D:\VS2019\VC\Tools\MSVC.29.30133\include\tuple</div><div class="code_line">; Line 158</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; DWORD PTR [rcx+4], r8d &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;&#60;-</div><div class="code_line">; File D:\Work\DelMe\qq.cpp</div><div class="code_line">; Line 5</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;shr &nbsp; &nbsp; r9d, 16</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;test &nbsp; &nbsp;edx, edx</div><div class="code_line">; File D:\VS2019\VC\Tools\MSVC.29.30133\include\tuple</div><div class="code_line">; Line 158</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; DWORD PTR [rcx+8], r9d &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;&#60;-</div><div class="code_line">; File D:\Work\DelMe\qq.cpp</div><div class="code_line">; Line 5</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;setne &nbsp; al</div><div class="code_line">; File D:\VS2019\VC\Tools\MSVC.29.30133\include\tuple</div><div class="code_line">; Line 158</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; DWORD PTR [rcx], eax &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;&#60;-</div><div class="code_line">; File D:\Work\DelMe\qq.cpp</div><div class="code_line">; Line 7</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mov &nbsp; &nbsp; rax, rcx</div><div class="code_line">; Line 8</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ret &nbsp; &nbsp; 0</div></ol></div></div></div></div>Можно на Dart посмотреть?]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929393</guid>
        <pubDate>Thu, 02 Oct 2025 10:46:26 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929393</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3929377'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2025-10-02T06:12:10+00:00">02.10.25, 06:12</time></span><div class='quote '>tuple тоже в 11 появился (хотя были потом изменения).</div></div><br>
Я знаю.  Написал это к тому, что на дворе 2025 год, а до сих пор это неудобство. <br>
<br>
Например в Dart тоже формально нельзя возвращать более одного значения, но там допустима конструкция:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">(int, String) myfunc() {</div><div class="code_line">&nbsp;&nbsp;return (42, &quot;hello&quot;);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void main() {</div><div class="code_line">&nbsp;&nbsp;var (num, str) = myfunc(); // деструктуризация</div><div class="code_line">&nbsp;&nbsp;print(&quot;$num, $str&quot;);</div><div class="code_line">}</div></ol></div></div></div></div><br>
Функция <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">myfunc</span></span> по факту возвращает одно значение типа <strong class='tag-b'>Record</strong>. Но посмотри как это красиво записано, и не нужно каких-либо библиотек. Без оверхеда лучше.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929392</guid>
        <pubDate>Thu, 02 Oct 2025 10:35:56 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929392</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3929377'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2025-10-02T06:12:10+00:00">02.10.25, 06:12</time></span><div class='quote '>В перл можно управлять захватом контекста лямбды? Можно определять, по значению, по ссылке или вообще перенести данные в лямбду?</div></div><br>
<br>
<strong class='tag-b'>По ссылке</strong><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">my $x = 10;</div><div class="code_line">my $f = sub { return $x++ };</div><div class="code_line">$f-&#62;(); # изменяет $x</div></ol></div></div></div></div><br>
<br>
<strong class='tag-b'>По значению</strong><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">my $x = 10;</div><div class="code_line">my $f = do {</div><div class="code_line">&nbsp;&nbsp; &nbsp;my $copy = $x; &nbsp;# создаём локальную копию</div><div class="code_line">&nbsp;&nbsp; &nbsp;sub { return $copy++ }</div><div class="code_line">};</div><div class="code_line">$f-&#62;(); # не изменяет $x</div></ol></div></div></div></div><br>
<br>
<strong class='tag-b'>Перенос</strong><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">my $x = 10;</div><div class="code_line">my $f = do {</div><div class="code_line">&nbsp;&nbsp; &nbsp;my $moved = $x;</div><div class="code_line">&nbsp;&nbsp; &nbsp;undef $x; &nbsp; # &quot;обнуляем&quot; внешнюю переменную</div><div class="code_line">&nbsp;&nbsp; &nbsp;sub { return ++$moved }</div><div class="code_line">};</div><div class="code_line">$f-&#62;(); # переносит 10 в лямбду, а $x становится undef</div></ol></div></div></div></div><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3929377'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2025-10-02T06:12:10+00:00">02.10.25, 06:12</time></span><div class='quote '>Вот и получается, что слово одно, а фичи разные</div></div><br>
:tong:]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929377</guid>
        <pubDate>Thu, 02 Oct 2025 06:12:10 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929377</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3929372'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2025-10-02T03:42:04+00:00">02.10.25, 03:42</time></span><div class='quote '>В далеком 2011 году в Стандарте С++ появилась киллер-фича &quot;лямбды&quot;. Сколько себя помню в Perl, а это примерно 1997 год, там всегда это было.</div></div><br>
В перл можно управлять захватом контекста лямбды? Можно определять, по значению, по ссылке или вообще перенести данные в лямбду? Вот и получается, что слово одно, а фичи разные :) <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2025-10-02T06:16:40+00:00">02.10.25, 06:16</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3929372'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2025-10-02T03:42:04+00:00">02.10.25, 03:42</time></span><div class='quote '>Для С ... бида-пичаль, а для C++ ... ешьте <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">std::tuple</span></span> в 2025 году&#33;  ;) <br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#!/usr/local/bin/perl</div><div class="code_line">&nbsp;</div><div class="code_line">use strict;</div><div class="code_line">use warnings;</div><div class="code_line">&nbsp;</div><div class="code_line">my ($sign, $int, $frac) = SuperDiv(3,-2);</div><div class="code_line">&nbsp;</div><div class="code_line">print &quot;$sign$int.$frac\n&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">sub SuperDiv {</div><div class="code_line">&nbsp;&nbsp;my ($dividend, $divisor) = @_;</div><div class="code_line">&nbsp;&nbsp;my $res = $dividend / $divisor;</div><div class="code_line">&nbsp;&nbsp;my $sign = ($res &#60; 0) ? &quot;-&quot; : &quot;&quot;;</div><div class="code_line">&nbsp;&nbsp;my $int = int(abs($res));</div><div class="code_line">&nbsp;&nbsp;my $frac = abs($res) - $int;</div><div class="code_line">&nbsp;&nbsp;$frac =~ s/^0\.//;</div><div class="code_line">&nbsp;&nbsp;return ($sign, $int, $frac);</div><div class="code_line">}</div></ol></div></div></div></div><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">-1.5</div></ol></div></div></div></div><br>
 :victory: </div></div><br>
Это так, коротко о хороших и гениальных языках программирования&#33;</div></div><br>
tuple тоже в 11 появился (хотя были потом изменения).<br>
Кстати, это класс стандартной библиотеки, а не часть самого языка. Т.е. возможности языка позволяют реализовать подобное не включая в сам язык. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2025-10-02T06:18:18+00:00">02.10.25, 06:18</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3929372'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2025-10-02T03:42:04+00:00">02.10.25, 03:42</time></span><div class='quote '>Никогда такого не было, и вот опять&#33;&#33;&#33; Сколько себя помню в Perl, а это примерно 1997 год...</div></div><br>
Ну а чего perl? Чего там 97 год?<br>
Можно лисп вспомнить :lol:]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929372</guid>
        <pubDate>Thu, 02 Oct 2025 03:42:04 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929372</link>
        <description><![CDATA[Majestio: Сперва сдержался, но всеж не могу - уж очень хочется поёрничать, очень&#33; :D<br>
<br>
В далеком 2011 году в Стандарте С++ появилась киллер-фича &quot;лямбды&quot;. Сколько себя помню в Perl, а это примерно 1997 год, там всегда это было.<br>
Никогда такого не было, и вот опять&#33;&#33;&#33; Сколько себя помню в Perl, а это примерно 1997 год, там всегда была возможность возврата множественного результата. Для С ... бида-пичаль, а для C++ ... ешьте <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">std::tuple</span></span> в 2025 году&#33;  ;) <br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#!/usr/local/bin/perl</div><div class="code_line">&nbsp;</div><div class="code_line">use strict;</div><div class="code_line">use warnings;</div><div class="code_line">&nbsp;</div><div class="code_line">my ($sign, $int, $frac) = SuperDiv(3,-2);</div><div class="code_line">&nbsp;</div><div class="code_line">print &quot;$sign$int.$frac\n&quot;;</div><div class="code_line">&nbsp;</div><div class="code_line">sub SuperDiv {</div><div class="code_line">&nbsp;&nbsp;my ($dividend, $divisor) = @_;</div><div class="code_line">&nbsp;&nbsp;my $res = $dividend / $divisor;</div><div class="code_line">&nbsp;&nbsp;my $sign = ($res &#60; 0) ? &quot;-&quot; : &quot;&quot;;</div><div class="code_line">&nbsp;&nbsp;my $int = int(abs($res));</div><div class="code_line">&nbsp;&nbsp;my $frac = abs($res) - $int;</div><div class="code_line">&nbsp;&nbsp;$frac =~ s/^0\.//;</div><div class="code_line">&nbsp;&nbsp;return ($sign, $int, $frac);</div><div class="code_line">}</div></ol></div></div></div></div><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">-1.5</div></ol></div></div></div></div><br>
 :victory: </div></div><br>
Это так, коротко о хороших и гениальных языках программирования&#33;]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929368</guid>
        <pubDate>Wed, 01 Oct 2025 19:29:54 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929368</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3929367'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2025-10-01T18:32:52+00:00">01.10.25, 18:32</time></span><div class='quote '>В Плюсах есть, но синтаксис другой.</div></div><br>
Речь не о плюсах. В Си такое реализовать наиболее просто на структурах.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929367</guid>
        <pubDate>Wed, 01 Oct 2025 18:32:52 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929367</link>
        <description><![CDATA[Qraizer: В Плюсах есть, но синтаксис другой. Вроде того:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">std::tuple&#60;int, int, int&#62; TranslateSysAddrToCS(uint32_t SystemAddr){</div><div class="code_line">/* ... */</div><div class="code_line">return { CSFound, NodeID, CS };</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">//</div><div class="code_line">int [found, node, cs] = TranslateSysAddrToCS(0x12345678u);</div></ol></div></div></div></div>]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929365</guid>
        <pubDate>Wed, 01 Oct 2025 16:21:55 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929365</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3929358'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Славян &#064; <time class="tag-quote__quoted-time" datetime="2025-10-01T15:40:06+00:00">01.10.25, 15:40</time></span><div class='quote '>И простой вопрос: это же концептуальная запись (возврат нескольких значений)? Нет же такого ни в какой версии Си-компилятора?</div></div><br>
Это С-подобный псевдокод. Смотрится нагляднее, чем возвращать структуру. Но это невалидный С-код.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3929358'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Славян &#064; <time class="tag-quote__quoted-time" datetime="2025-10-01T15:40:06+00:00">01.10.25, 15:40</time></span><div class='quote '>А то вечно приходится &quot;костыли&quot; городить, чтобы вернуть два-три значения... Эх... </div></div><br>
Да нет, структуры это решают красиво. Автор решил еще &quot;приукрасить&quot;  :lol:]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929358</guid>
        <pubDate>Wed, 01 Oct 2025 15:40:06 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3929358</link>
        <description><![CDATA[Славян: Наткнулся на описание функции из книжки AMD (BIOS and Kernel Developer’s Guide for the AMD Athlon™ 64 and AMD Opteron™ Processors):<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">(int,int,int) TranslateSysAddrToCS((uint32)SystemAddr){</div><div class="code_line">int CSFound, NodeID, CS, F1Offset, F2Offset, Ilog;</div><div class="code_line">uint32 IntlvEn, IntlvSel;</div><div class="code_line">uint32 DramBase, DramLimit, DramEn;</div><div class="code_line">uint32 HoleOffset, HoleEn;</div><div class="code_line">uint32 CSBase, CSLimit, CSMask, CSEn;</div><div class="code_line">uint32 InputAddr, Temp;</div><div class="code_line">CSFound = 0;</div><div class="code_line">for(NodeID = 0; NodeID &#60; 8; NodeID++){</div><div class="code_line">&nbsp;&nbsp; &nbsp;F1Offset = 0x40 + (NodeID &#60;&#60; 3);</div><div class="code_line">&nbsp;&nbsp; &nbsp;DramBase = Get_PCI(bus0, dev24 + NodeID, func1, F1Offset);</div><div class="code_line">&nbsp;&nbsp; &nbsp;DramEn = DramBase &amp; 0x00000003;</div><div class="code_line">&nbsp;&nbsp; &nbsp;IntlvEn = (DramBase &amp; 0x00000700) &#62;&#62; 8;</div><div class="code_line">&nbsp;&nbsp; &nbsp;DramBase = DramBase &amp; 0xFFFF0000;</div><div class="code_line">&nbsp;&nbsp; &nbsp;...</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(CSFound) break;</div><div class="code_line">}</div><div class="code_line">return(CSFound,NodeID,CS);</div><div class="code_line">}</div></ol></div></div></div></div>И простой вопрос: это же концептуальная запись (возврат нескольких значений)? Нет же такого ни в какой версии Си-компилятора?<br>
Снова простая попытка/схема реализовать столь нужный функционал&#33; А то вечно приходится &quot;костыли&quot; городить, чтобы вернуть два-три значения... Эх...  :&#39;(]]></description>
        <author>Славян</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928804</guid>
        <pubDate>Sun, 21 Sep 2025 22:50:20 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928804</link>
        <description><![CDATA[Majestio: <strong class='tag-b'>amk</strong>, привет, дружище&#33;&#33;&#33;  :victory: <br>
<br>
Вообще без проблем поговорить по этому вопросу и набраться современных знаний - тема есть, но наука то не стоит&#33; <br>
Будь добр, обеспечить свои утверждения линками-пруфами по этим темам, чисто для ознакомления.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928802</guid>
        <pubDate>Sun, 21 Sep 2025 21:11:19 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928802</link>
        <description><![CDATA[amk: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3928428'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2025-09-14T18:07:54+00:00">14.09.25, 18:07</time></span><div class='quote '>Заметь&#33; 2 потом 3, а не 3 потом 2</div></div> Тут ты ошибся.<br>
Сперва из текста программы удаляются комментарии и производится склейка строк.<br>
Потом производится разбор текста на лексемы, включая и строки с директивами препроцессора.<br>
И уже после разбора на лексемы работает препроцессор, удаляя куски уже разобранного текста и заменяя макросы.<br>
<br>
Причём всё это время лексемы остаются привязанными к исходному тексту программы, и результат препроцессирования может быть выдан в виде текста так, будто препроцессор работает непосредственно с текстом.<br>
<br>
В ранних компиляторах C (K&amp;R), состоящих из отдельных программ, каждая из которых выполняла свой проход, порядок был другой. Препроцессор выполнялся до разбора на лексемы, но после удаления комментариев (собственно он их и удалял).]]></description>
        <author>amk</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928689</guid>
        <pubDate>Thu, 18 Sep 2025 10:13:08 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928689</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3928506'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2025-09-15T15:39:30+00:00">15.09.25, 15:39</time></span><div class='quote '>Никсоидам может быть и нормуль, когда make генерит makefile, по которому make генерит три makefile, по которым make генерит N makefiles для сборки N/3 пререквизитов, по которым рекурсивно процесс повторяется для сборки пререквизитов, ещё один собирает собственно проект с пререквизитами и ещё один конфигурит и инсталит, и поэтому им нормуль, когда половина пререквизитов автогенерится своими makefile, точнее, их половиной, тогда как вторая половина их собственно собирает... а, не, половина от N/3...  ойфсё.</div></div><br>
Вот тут про никсоидов было очень обидно сказано&#33; Нагнал жути :lol: <br>
<br>
Спецом побеседовал с ChatGPT по этой теме, т.к. практического использования bison+flex не имел. Ради прикола собрал парсер С++ кода, который из кода извлекает все литералы и распечатывает их. Заметь, я не использовал make, а сделал это современными и отчасти удобными средствами сборки cmake+ninja. <br>
<br>
А вот сам пример (да, понимаю, что сильно упрощенный - но наглядный)<br>
<br>
<strong class='tag-b'>lexer.l</strong><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">%{</div><div class="code_line">#include &quot;parser.tab.h&quot; &nbsp;// Включаем заголовок от Bison для токенов</div><div class="code_line">%}</div><div class="code_line">&nbsp;</div><div class="code_line">%option noyywrap</div><div class="code_line">&nbsp;</div><div class="code_line">/* Состояния */</div><div class="code_line">%x SINGLE_COMMENT</div><div class="code_line">%x MULTI_COMMENT</div><div class="code_line">&nbsp;</div><div class="code_line">%%</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;/* Пропуск пробелов и другого кода (мы фокусируемся только на литералах и комментариях) */</div><div class="code_line">[ \t\n]+ &nbsp; &nbsp;; &nbsp;// Игнорируем whitespace</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;/* Начало однострочного комментария */</div><div class="code_line">&quot;//&quot; &nbsp; &nbsp; &nbsp; &nbsp;{ BEGIN(SINGLE_COMMENT); }</div><div class="code_line">&#60;SINGLE_COMMENT&#62;[^\n]* &nbsp;; &nbsp;// Потребляем до конца строки</div><div class="code_line">&#60;SINGLE_COMMENT&#62;\n &nbsp; &nbsp; &nbsp;{ BEGIN(INITIAL); } &nbsp;// Возврат в нормальное состояние</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;/* Начало многострочного комментария */</div><div class="code_line">&quot;/*&quot; &nbsp; &nbsp; &nbsp; &nbsp;{ BEGIN(MULTI_COMMENT); }</div><div class="code_line">&#60;MULTI_COMMENT&#62;[^*]* &nbsp; &nbsp;; &nbsp;// Потребляем всё, кроме *</div><div class="code_line">&#60;MULTI_COMMENT&#62;&quot;*&quot;+[^*/]* &nbsp;; &nbsp;// Потребляем * не за которыми /</div><div class="code_line">&#60;MULTI_COMMENT&#62;&quot;*&quot;+&quot;/&quot; &nbsp;{ BEGIN(INITIAL); } &nbsp;// Конец комментария</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;/* Строковый литерал (упрощённо, с escape) */</div><div class="code_line">\&quot;(\.|[^\&quot;])*\&quot; &nbsp; { yylval.str = strdup(yytext); return STRING_LITERAL; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;/* Символьный литерал (упрощённо) */</div><div class="code_line">\&#39;(\.|[^\&#39;])*\&#39; &nbsp; { yylval.str = strdup(yytext); return CHAR_LITERAL; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;/* Другие символы (пропускаем, так как не интересуют) */</div><div class="code_line">. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; &nbsp;// Игнорируем остальной код</div><div class="code_line">&nbsp;</div><div class="code_line">%%</div></ol></div></div></div></div><br>
<strong class='tag-b'>parser.y</strong><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">%{</div><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;vector&#62;</div><div class="code_line">#include &#60;string&#62;</div><div class="code_line">#include &#60;cstring&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">extern int yylex();</div><div class="code_line">void yyerror(const char* s);</div><div class="code_line">&nbsp;</div><div class="code_line">std::vector&#60;std::string&#62; literals; &nbsp;// Глобальный список для собранных литералов</div><div class="code_line">%}</div><div class="code_line">&nbsp;</div><div class="code_line">%union {</div><div class="code_line">&nbsp;&nbsp; &nbsp;char* str;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">%token &#60;str&#62; STRING_LITERAL</div><div class="code_line">%token &#60;str&#62; CHAR_LITERAL</div><div class="code_line">&nbsp;</div><div class="code_line">%start program</div><div class="code_line">&nbsp;</div><div class="code_line">%%</div><div class="code_line">&nbsp;</div><div class="code_line">program: statements</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; ;</div><div class="code_line">&nbsp;</div><div class="code_line">statements: statement</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| statements statement</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;;</div><div class="code_line">&nbsp;</div><div class="code_line">statement: STRING_LITERAL &nbsp; { literals.push_back(); free(); }</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; | CHAR_LITERAL &nbsp; &nbsp; { literals.push_back(); free(); }</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; | /* пусто */ &nbsp; &nbsp; &nbsp;{ /* Игнорируем другие токены или пустые */ }</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; ;</div><div class="code_line">&nbsp;</div><div class="code_line">%%</div><div class="code_line">&nbsp;</div><div class="code_line">void yyerror(const char* s) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cerr &#60;&#60; &quot;Ошибка парсинга: &quot; &#60;&#60; s &#60;&#60; std::endl;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<strong class='tag-b'>main.cpp</strong><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;vector&#62;</div><div class="code_line">#include &#60;string&#62;</div><div class="code_line">#include &#60;windows.h&#62; // Для Windows API</div><div class="code_line">#include &quot;parser.tab.h&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">extern std::vector&#60;std::string&#62; literals;</div><div class="code_line">extern FILE* yyin;</div><div class="code_line">&nbsp;</div><div class="code_line">// Функция для вывода строки в CP1251 через WriteConsoleW</div><div class="code_line">void print_in_cp1251(const std::string&amp; str) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Конвертируем UTF-8 или ASCII строку в UTF-16 (Windows использует UTF-16)</div><div class="code_line">&nbsp;&nbsp; &nbsp;int wstr_size = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, nullptr, 0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::wstring wstr(wstr_size, 0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, &amp;wstr[0], wstr_size);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Выводим в консоль с CP1251 (Windows автоматически конвертирует UTF-16 в CP1251 для консоли)</div><div class="code_line">&nbsp;&nbsp; &nbsp;HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);</div><div class="code_line">&nbsp;&nbsp; &nbsp;WriteConsoleW(hConsole, wstr.c_str(), wstr.size() - 1, nullptr, nullptr);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int main(int argc, char** argv) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Устанавливаем кодировку консоли на CP1251</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetConsoleOutputCP(1251);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (argc &#62; 1) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;yyin = fopen(argv[1], &quot;r&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (!yyin) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;print_in_cp1251(&quot;Не удалось открыть файл: &quot; + std::string(argv[1]) + &quot;\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;yyparse(); &nbsp;// Запускаем парсер</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// Выводим собранные литералы</div><div class="code_line">&nbsp;&nbsp; &nbsp;print_in_cp1251(&quot;Собранные строковые и символьные литералы (вне комментариев):\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;for (const auto&amp; lit : literals) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; lit &#60;&#60; std::endl; // Литералы в ASCII, их можно выводить через std::cout</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (yyin != stdin) fclose(yyin);</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<strong class='tag-b'>CMakeLists.txt</strong><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">cmake_minimum_required(VERSION 3.10)</div><div class="code_line">project(CPPScanner LANGUAGES C CXX)</div><div class="code_line">&nbsp;</div><div class="code_line"># Стандарт C++17</div><div class="code_line">set(CMAKE_CXX_STANDARD 17)</div><div class="code_line">set(CMAKE_CXX_STANDARD_REQUIRED ON)</div><div class="code_line">&nbsp;</div><div class="code_line"># Включаем статическую линковку</div><div class="code_line">set(CMAKE_EXE_LINKER_FLAGS &quot;${CMAKE_EXE_LINKER_FLAGS} -static -static-libgcc&quot;)</div><div class="code_line">set(CMAKE_CXX_FLAGS &quot;${CMAKE_CXX_FLAGS} -static&quot;)</div><div class="code_line">&nbsp;</div><div class="code_line"># Найти Flex и Bison</div><div class="code_line">find_package(BISON REQUIRED)</div><div class="code_line">find_package(FLEX REQUIRED)</div><div class="code_line">&nbsp;</div><div class="code_line"># Генерация парсера из parser.y (с подавлением предупреждений Bison)</div><div class="code_line">BISON_TARGET(MyParser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.tab.c</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/parser.tab.h</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; COMPILE_FLAGS &quot;-Wnone&quot;)</div><div class="code_line">&nbsp;</div><div class="code_line"># Генерация лексера из lexer.l</div><div class="code_line">FLEX_TARGET(MyLexer lexer.l ${CMAKE_CURRENT_BINARY_DIR}/lex.yy.c)</div><div class="code_line">&nbsp;</div><div class="code_line"># Зависимость: парсер зависит от лексера</div><div class="code_line">ADD_FLEX_BISON_DEPENDENCY(MyLexer MyParser)</div><div class="code_line">&nbsp;</div><div class="code_line"># Собрать исполняемый файл</div><div class="code_line">add_executable(scanner</div><div class="code_line">&nbsp;&nbsp; &nbsp;main.cpp</div><div class="code_line">&nbsp;&nbsp; &nbsp;${BISON_MyParser_OUTPUT_SOURCE} &nbsp;# parser.tab.c</div><div class="code_line">&nbsp;&nbsp; &nbsp;${FLEX_MyLexer_OUTPUTS} &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# lex.yy.c</div><div class="code_line">)</div><div class="code_line">&nbsp;</div><div class="code_line"># Указываем, что генерированные .c файлы — это C++</div><div class="code_line">set_source_files_properties(${BISON_MyParser_OUTPUT_SOURCE} ${FLEX_MyLexer_OUTPUTS} PROPERTIES LANGUAGE CXX)</div><div class="code_line">&nbsp;</div><div class="code_line"># Подавляем предупреждение о deprecated для Clang</div><div class="code_line">set_source_files_properties(${BISON_MyParser_OUTPUT_SOURCE} ${FLEX_MyLexer_OUTPUTS} PROPERTIES</div><div class="code_line">&nbsp;&nbsp; &nbsp;COMPILE_FLAGS &quot;-Wno-deprecated&quot;)</div><div class="code_line">&nbsp;</div><div class="code_line"># Включить директории для заголовков</div><div class="code_line">target_include_directories(scanner PRIVATE ${CMAKE_CURRENT_BINARY_DIR})</div><div class="code_line">&nbsp;</div><div class="code_line"># Добавить путь к библиотекам clang64</div><div class="code_line">target_link_directories(scanner PRIVATE E:/Tools/MSys64/clang64/lib)</div><div class="code_line">&nbsp;</div><div class="code_line"># Линковка со статическими библиотеками C++ и unwind</div><div class="code_line">target_link_libraries(scanner PRIVATE -static libc++.a libunwind.a)</div></ol></div></div></div></div><br>
Процесс сборки:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">mkdir build &amp;&amp; cd build</div><div class="code_line">cmake -G Ninja ..</div><div class="code_line">ninja</div></ol></div></div></div></div><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">-- The C compiler identification is Clang 20.1.8</div><div class="code_line">-- The CXX compiler identification is Clang 20.1.8</div><div class="code_line">-- Detecting C compiler ABI info</div><div class="code_line">-- Detecting C compiler ABI info - done</div><div class="code_line">-- Check for working C compiler: E:/Tools/MSys64/clang64/bin/cc.exe - skipped</div><div class="code_line">-- Detecting C compile features</div><div class="code_line">-- Detecting C compile features - done</div><div class="code_line">-- Detecting CXX compiler ABI info</div><div class="code_line">-- Detecting CXX compiler ABI info - done</div><div class="code_line">-- Check for working CXX compiler: E:/Tools/MSys64/clang64/bin/c++.exe - skipped</div><div class="code_line">-- Detecting CXX compile features</div><div class="code_line">-- Detecting CXX compile features - done</div><div class="code_line">-- Found BISON: E:/Tools/MSys64/usr/bin/bison.exe (found version &quot;3.8.2&quot;)</div><div class="code_line">-- Found FLEX: E:/Tools/MSys64/usr/bin/flex.exe (found version &quot;2.6.4&quot;)</div><div class="code_line">-- Configuring done (1.7s)</div><div class="code_line">-- Generating done (0.0s)</div><div class="code_line">-- Build files have been written to: E:/Tools/MSys64/home/Majestio/work/bison_flex/build</div><div class="code_line">[6/6] Linking CXX executable scanner.exe</div></ol></div></div></div></div><br>
Проверяем на файле <strong class='tag-b'>input.cpp</strong> следующего содержимого:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">// Это комментарий с &quot;строкой&quot;, которую нужно пропустить</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::string s = &quot;hello world&quot;; &nbsp;// Строка для сбора</div><div class="code_line">&nbsp;&nbsp; &nbsp;char c = &#39;a&#39;; &nbsp;// Символ для сбора</div><div class="code_line">&nbsp;&nbsp; &nbsp;/* Многострочный комментарий с &#39;b&#39; и &quot;test&quot;, которые пропустить */</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">E:\Tools\MSys64\home\Majestio\work\bison_flex\build&#62;scanner.exe input.cpp</div><div class="code_line">Собранные строковые и символьные литералы (вне комментариев):</div><div class="code_line">&quot;hello world&quot;</div><div class="code_line">&#39;a&#39;</div></ol></div></div></div></div><br>
По-моему не всё так страшно-ужасно как ты расписал :victory:]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928506</guid>
        <pubDate>Mon, 15 Sep 2025 15:39:30 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928506</link>
        <description><![CDATA[Qraizer: Ну я бы не был так категоричен на предмет производительности. Другое дело, компиляция... &lt;_&lt; <br>Та и в целом, меня напрягает любой автоматически непонятно кем непонятно как генерируемый код, вставляемый в мой проект. Никсоидам может быть и нормуль, когда make генерит makefile, по которому make генерит три makefile, по которым make генерит N makefiles для сборки N/3 пререквизитов, по которым рекурсивно процесс повторяется для сборки пререквизитов, ещё один собирает собственно проект с пререквизитами и ещё один конфигурит и инсталит, и поэтому им нормуль, когда половина пререквизитов автогенерится своими makefile, точнее, их половиной, тогда как вторая половина их собственно собирает... а, не, половина от N/3... :wacko: ойфсё. И да, в Cях метакодить иначе никак. Спасибо, я всё ж лучше метакодить по Стандарту буду]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928501</guid>
        <pubDate>Mon, 15 Sep 2025 14:37:41 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928501</link>
        <description><![CDATA[Majestio: Bison + Flex однозначно лучше, когда требуется максимальная производительность парсинга для обработки больших входных данных, а грамматика подходит для LALR, так как они генерируют оптимизированный C-код, который работает быстрее, чем парсеры, созданные с помощью Boost::Spirit.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928497</guid>
        <pubDate>Mon, 15 Sep 2025 13:56:49 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928497</link>
        <description><![CDATA[Qraizer: Зачем такое старьё, если есть boost::spirit :lol: ?]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928472</guid>
        <pubDate>Mon, 15 Sep 2025 09:28:00 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928472</link>
        <description><![CDATA[Majestio: <strong class='tag-b'>Qraizer</strong>, тебе квест&#33;  ;) <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3928418'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2025-09-13T20:13:39+00:00">13.09.25, 20:13</time></span><div class='quote '>Как-то пришлось писать утилю, которая заменяла все я на Я, потому как используемая тулза (инструментатор исходного кода под: сбор структурного покрытия; сбор информации WCET, анализ потоков данных и/или управления; оценка наихудшего использования стека) на ASCII символах == 0xFF бажила. (Дело не в русской букве, а именно коде символа. В европейских кодировках на этом символе тот же баг.) Так это было целое приключение, т.к. заменять всё было нельзя, только в комментах. А то, что в строках, нужно оставить нетронутым, иначе меняется поведение кода, благо на таких тулза не бажила.<br>
В итоге это вылилось в весьма нетривиальный алгоритм.</div></div><br>
Я уверен, что сей велосипед ты навелосипедил на все 100% правильно. Но ты тогда, imho, пошел самым упоротым путем. Ибо для таких задач уже давно существовали специальные решения. А именно связка либ - <a class='tag-url' href='https://www.gnu.org/software/bison/' target='_blank'>bison</a> (1985) + <a class='tag-url' href='https://github.com/westes/flex' target='_blank'>flex</a> (1987). Генераторы парсеров и лексические анализаторы в лице вышеупомянутых либ.<br>
<br>
Слабо изучить матчасть и перевести свой код под эти &quot;платформы&quot;?<br>
<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body">заодно и мы поучимся ... а?</div></div>]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928430</guid>
        <pubDate>Mon, 15 Sep 2025 04:03:28 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928430</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3928429'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2025-09-14T21:56:44+00:00">14.09.25, 21:56</time></span><div class='quote '>В чём именно ты видишь неправильность?</div></div><br>
Ну я же написал выше. Не неправильность, а скорее запутанность. Проще написать, что внутри литералов не может быть комментов, равно как и внутри комментов не может быть литералов. <br>
Тогда всё ясно и понятно. И да, давай не будем душнить =)]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928429</guid>
        <pubDate>Sun, 14 Sep 2025 21:56:44 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928429</link>
        <description><![CDATA[Qraizer: В чём именно ты видишь неправильность? Я не собирался описывать алгоритм, хошь сырцов?, они есть. Я описал спектр учитываемых аспектов. Естественно их не следует применять в описанном порядке. Давайте не будем душнить. Плз.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928428</guid>
        <pubDate>Sun, 14 Sep 2025 18:07:54 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928428</link>
        <description><![CDATA[Majestio: <strong class='tag-b'>Qraizer</strong>, склейка строк не спасет от неправильности твоего этого утверждения. <br>
Хотя нет, не от неправильности. Твое это утверждение отчасти верно. Просто оно записано так, что несколько ломает причинно-следственные связи :lol: А именно ... как бы это правильно сказать: литералы все же первичны, конструкции комментариев вторичны. Т.е., выражаясь академическим языком, и чтобы не туманить мозги С++ неофитам, ты должен был выразить мысль в более &quot;календарном&quot; смысле, в обратном порядке:<ol class="tag-list" type="1"><li>Сперва проход препроцессора (склейки строк, инклюды, дефайны &amp;etc)</li><li>Определение литералов</li><li>Определение комментариев</li></ol>Заметь&#33; 2 потом 3, а не 3 потом 2. Если я не ошибаюсь, это что-то типа раздел 5.2 &quot;Phases of translation&quot; текущего Стандарта.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928427</guid>
        <pubDate>Sun, 14 Sep 2025 15:59:42 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928427</link>
        <description><![CDATA[Qraizer: <strong class='tag-b'>Majestio</strong>, ну да. Это и означает, что<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">std::cout &#60;&#60; &quot;Тут я не должна заменяться, даже /* если я размещу её */ вот так&quot;; // в отличие от &quot;Тут я должна быть \</div><div class="code_line">заменена&quot;, потому что это всё ещё коммент</div></ol></div></div></div></div>нужно уметь правильно обработать]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928426</guid>
        <pubDate>Sun, 14 Sep 2025 15:08:30 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928426</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3928418'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2025-09-13T20:13:39+00:00">13.09.25, 20:13</time></span><div class='quote '>Не всё, что внутри /**/ или //EOL, является комментом, а только то, что не в строковом литерале.</div></div><br>
Крайне подозрительное утверждение. Внутри комментариев - не может быть литералов. И если мы что-то решили закомментировать (я имею ввиду по правилам), то любые литералы автоматом превращаются в комментарии.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928425</guid>
        <pubDate>Sun, 14 Sep 2025 14:03:50 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928425</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3928417'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Славян &#064; <time class="tag-quote__quoted-time" datetime="2025-09-13T12:58:32+00:00">13.09.25, 12:58</time></span><div class='quote '>Может это и нормально, но совершенно выбесило меня&#33;.. </div></div><br>
Да, это проблемы раскрашивателя кода. Он не учитывает, что комментарии <strong class='tag-b'>не могут начинаться</strong>, и <strong class='tag-b'>не могут заканчиваться</strong> внутри строковых и символьных литералов.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3928419'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>macomics &#064; <time class="tag-quote__quoted-time" datetime="2025-09-14T00:04:34+00:00">14.09.25, 00:04</time></span><div class='quote '>Судя по этому утверждению, тогда &quot;&#092;&#092;&#092;&quot; должен быть завершенной строкой. Но не будет. Стоило сказать про нечетное количество &#092;.</div></div><br>
Проще не заморачиваться количеством или чётностью. А просто определиться с обработкой.<br>
<br>
Символ &#092; может участвовать:<ul class="tag-list"><li>Просто как символ, если он внутри комментария</li><li>Может участвовать в литералах как экранирующий или экранируемый символ</li><li>Может участвовать в escape-преобразованиях</li><li>Может участвовать как склеиватель строк</li></ul><br>
<strong class='tag-b'>Экранирование</strong><br>
Работает только внутри литералов. Символ &#092; может экранировать &quot; или &#39; или &#092;<br>
<br>
<strong class='tag-b'>Escape-преобразования</strong><br>
Работают только внутри литералов. Всем известные &#092;n &#092;r &#092;t &#092;a &#092;0 &#092;x42 ....<br>
<br>
Компилятор сканирует код посимвольно. Встречая символы, которые могут иметь и обычное, и управляющее значение. Компилятор, в процессе сканирования, &quot;назначает&quot; встретившему символу &quot;роль&quot; (обычный или управляющий) в зависимости от ряда состояний.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928424</guid>
        <pubDate>Sun, 14 Sep 2025 12:06:19 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928424</link>
        <description><![CDATA[macomics: Проверю.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">$ cat test.cpp </div><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Test \\&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return 0;</div><div class="code_line">}</div><div class="code_line">$ g++ -o test test.cpp</div><div class="code_line">test.cpp:4:22: предупреждение: отсутствует завершающий символ &quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;4 | &nbsp; &nbsp; &nbsp; &nbsp; std::cout &#60;&#60; &quot;Test \\&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;^</div><div class="code_line">test.cpp:4:22: ошибка: отсутствует терминирующий символ &quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;4 | &nbsp; &nbsp; &nbsp; &nbsp; std::cout &#60;&#60; &quot;Test \\&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;^~~~~~~~~~~</div><div class="code_line">test.cpp: In function «int main()»:</div><div class="code_line">test.cpp:5:9: ошибка: expected primary-expression before «return»</div><div class="code_line">&nbsp;&nbsp; &nbsp;5 | &nbsp; &nbsp; &nbsp; &nbsp; return 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; &nbsp; ^~~~~~</div><div class="code_line">$ cat test.cpp </div><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Test \\&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return 0;</div><div class="code_line">}</div><div class="code_line">$ g++ -o test test.cpp</div><div class="code_line">$ ./test</div><div class="code_line">Test \$</div></ol></div></div></div></div>]]></description>
        <author>macomics</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928420</guid>
        <pubDate>Sun, 14 Sep 2025 07:28:52 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928420</link>
        <description><![CDATA[Qraizer: Почему это? Не будет. &#092;, предшествующий &quot;, маскирует конец литерала и означает просто символ &quot; как его элемент, тогда как если этому &#092; предшествует ещё один &#092;, то это означает просто символ &#092; как элемент литерала, и если следом идёт &quot;, то это его граница. Если мы видим &#092;&#092;&#092;, то первые два означают просто &#092;, а последний является модификатором следующего символа, и какой-то смысл они имеют только совместно. &#092;&#092;&#092;&quot; означает два обычных символа &#092; и &quot;, не специальных, &#092;&#092;&#092;t означает &#092; и TAB итп]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928419</guid>
        <pubDate>Sun, 14 Sep 2025 00:04:34 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928419</link>
        <description><![CDATA[macomics: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3928418'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2025-09-13T20:13:39+00:00">13.09.25, 20:13</time></span><div class='quote '>Не все &#092;, предшествующие &quot;, маскируют конец строкового литерала, а только те, которым в свою очередь не предшествует ещё один &#092;.</div></div><br>
Судя по этому утверждению, тогда &quot;&#092;&#092;&#092;&quot; должен быть завершенной строкой. Но не будет. Стоило сказать про нечетное количество &#092;.]]></description>
        <author>macomics</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928418</guid>
        <pubDate>Sat, 13 Sep 2025 20:13:39 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928418</link>
        <description><![CDATA[Qraizer: Как-то пришлось писать утилю, которая заменяла все я на Я, потому как используемая тулза (инструментатор исходного кода под: сбор структурного покрытия; сбор информации WCET, анализ потоков данных и/или управления; оценка наихудшего использования стека) на ASCII символах == 0xFF бажила. (Дело не в русской букве, а именно коде символа. В европейских кодировках на этом символе тот же баг.) Так это было целое приключение, т.к. заменять всё было нельзя, только в комментах. А то, что в строках, нужно оставить нетронутым, иначе меняется поведение кода, благо на таких тулза не бажила.<br>
В итоге это вылилось в весьма нетривиальный алгоритм.<ul class="tag-list"><li>Не всё, что внутри &quot;&quot;, является строковым литералом, а только то, что не в комменте.</li><li>Не всё, что внутри /**/ или //EOL, является комментом, а только то, что не в строковом литерале.</li><li>Не все закрывающие &quot; являются концом строкового литерала, а только те, которым не предшествует &#092;.</li><li>Не все &#092;, предшествующие &quot;, маскируют конец строкового литерала, а только те, которым в свою очередь не предшествует ещё один &#092;.</li><li>Не все EOL являются концом строки исходного кода, а только те, которым непосредственно не предшествует &#092;, иначе следующая строка продолжает текущую.</li><li>Не все &#092; в исходном коде встречаются в явном виде, некоторые могут быть замаскированы триграфом ??/.</li><li>Триграф ??/ не так-то просто включить в текст тулзы, чтобы искать его в обрабатываемых ею сырцах, потому что и он тоже будет распознан компилятором и заменён при его компиляции :jokingly: .</li><li>Не одними только строковыми литералами вообще-то, ибо есть ещё и символьные, те что внутри &#39;&#39;. (И да, там может быть и больше одного символа.)</li></ul>В общем, регулярками тут не обойтись никак, одного только распознавания токенов будет недостаточно. Нужен хоть и несложный, но всё ж грамматический разбор последовательности токенов.<br>
<br>
P.S. Кому надо сырцы солью, мне не жалко.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928417</guid>
        <pubDate>Sat, 13 Sep 2025 12:58:32 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3928417</link>
        <description><![CDATA[Славян: Только что случайно обнаружил, что следующий код нормально не красится:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">int i;</div><div class="code_line">/*</div><div class="code_line">fprintf(f, &quot;/* коммент в выводимой строке*/&quot;);</div><div class="code_line">int j;</div><div class="code_line">*/</div></ol></div></div></div></div><br>
Может это и нормально, но совершенно выбесило меня&#33;..  :angry:]]></description>
        <author>Славян</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908148</guid>
        <pubDate>Sat, 03 Aug 2024 23:32:26 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908148</link>
        <description><![CDATA[Majestio: <strong class='tag-b'>D_KEY</strong>, благодарю&#33;]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908146</guid>
        <pubDate>Sat, 03 Aug 2024 12:58:27 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908146</link>
        <description><![CDATA[D_KEY: -Wuninitialized<br>Входит и в -Wall.<br><br>Я вообще люблю -Werror еще включать. И даже для легаси кода постепенно к этому приходить. В большинстве случаев это помогает, а там где мешает, лучше в коде явно выключить предупреждение (сильно при этом локализовав).<br><br>На всякий случай еще напомню про существование clang-tidy и пр. прекрасных утилит. И все это легко интегрируется в CI/CD.<br><br>Честно говоря, не понимаю, как люди без этого на плюсах кодят и зачем.]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908139</guid>
        <pubDate>Fri, 02 Aug 2024 20:00:22 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908139</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3908133'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-08-02T16:58:22+00:00">02.08.24, 16:58</time></span><div class='quote '>Majestio, ты часто упускаешь из виду, что неопределённое поведение говорит, лишь о том, что программа не соответствует Стандарту языка. Однако не означает, что она неверна, конкретные реализации имеют право доопределить поведение для частных случаев, и на них программа, допускающая такие нарушения Стандарта, тем не менее будет корректна.</div></div><br>
Хотя вот этот ответ - не совсем корректен для этого топика. Мы же тут именно про Стандарт говорим, а не про разработку вообще. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-08-02T20:05:39+00:00">02.08.24, 20:05</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3908133'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-08-02T16:58:22+00:00">02.08.24, 16:58</time></span><div class='quote '>Неинициализированные переменные компиляторы умеют детектить настолько давно, что я уж и не знаю, как найти хоть один, который бы этого не сделал.</div></div><br>
Кстати да ... а какой опцией компилятора (gcc, clang) этот детект включить? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-08-02T20:21:17+00:00">02.08.24, 20:21</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3908133'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-08-02T16:58:22+00:00">02.08.24, 16:58</time></span><div class='quote '> Мне вот не интересен заботливый родитель, который держит за ручку и сыпет &quot;нельзя&quot;, &quot;осторожно&quot;, &quot;не так&quot;, &quot;надень шапку&quot;, &quot;не простудись&quot;</div></div><br>
Тут конечно дело вкуса. А мне последнее время начал нравится подход а-ля:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#pragma GCC diagnostic push</div><div class="code_line">#pragma GCC diagnostic ignored &quot;-Wключ_предупреждения&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">// Участок кода, в котором нужно подавить определенное предупреждение</div><div class="code_line">&nbsp;</div><div class="code_line">#pragma GCC diagnostic pop</div></ol></div></div></div></div>]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908134</guid>
        <pubDate>Fri, 02 Aug 2024 18:05:06 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908134</link>
        <description><![CDATA[Qraizer: P.S. И местами даже не соваться туда, на что в Стандарте описано как &quot;приговаривается к пожизненному расстрелу&quot;. Плюсы вообще редко что запрещают абсолютно и навсегда, но чем опаснее хотелка, тем больше усилий требуется для её достижения. Но уж ежели кто озаботился, либо ССЗБ, либо явно не случайно это в программе появилось, по теории вероятности вселенная столько ещё не живёт.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908133</guid>
        <pubDate>Fri, 02 Aug 2024 16:58:22 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908133</link>
        <description><![CDATA[Qraizer: <strong class='tag-b'>Majestio</strong>, ты часто упускаешь из виду, что неопределённое поведение говорит, лишь о том, что программа не соответствует Стандарту языка. Однако не означает, что она неверна, конкретные реализации имеют право доопределить поведение для частных случаев, и на них программа, допускающая такие нарушения Стандарта, тем не менее будет корректна. Самый наитипичнейний пример — что-то типа:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">*reinterptret_cast&#60;void **&#62;(nullptr) = ccm_ram + ccm_ram_size;</div></ol></div></div></div></div>устанавливающий стек по reset на STM32. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-08-02T17:10:27+00:00">02.08.24, 17:10</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3908072'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-08-02T03:16:52+00:00">02.08.24, 03:16</time></span><div class='quote '>Следующая программа завершится просто Segmentation fault. Кстати, а тут можно какое-то предупреждение для компилятора включить?</div></div>Неинициализированные переменные компиляторы умеют детектить настолько давно, что я уж и не знаю, как найти хоть один, который бы этого не сделал. Если же ты спросишь, почему это не ошибка, а всего лишь ворнинг, то ответ до банальности прост: это нельзя стандартизировать как ошибочное поведение, т.к. в отдельных случаях подобный под будет корректным. Поэтому это лишь неопределённое поведение. Оно следует из пункта, что UB является использование объекта, которого не существует. Прикол в том, что несмотря на отсутствие инициализирующего кода, объект всё ж может существовать. Например, уже сконструирован и прошит во флэш. Звучит странно, но это возможно и для локальных переменных на отдельных исполнительных платформах. Т.к. Стандарт не определяет размещение автоматических объектов, для них необязательно используется стек, тут надо читать ABI. И кроме того, в embedded я сам пишу линкеру скрипт, определяющий разметку адресного пространства и распределение секций исполняемого объектного кода по нему. Это тебе не hosted, где всем обычно рулит ОС. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-08-02T17:48:56+00:00">02.08.24, 17:48</time></span></span><br>
В общем и целом, я уже много раз говорил, что C с Плюсами многого не могут себе позволить, просто исходя из того, для какой ниши они позиционируются. Точнее для одной из каких ниш. И Плюсы активно вытесняют C оттуда, не вытеснились разве что ленивые и консерваторы. Недаром же в Стандарте есть куча всего касательно freestanding помимо hosted. И нам неленивым реформистам нынешний вид Плюсов очень нравится. Мне вот не интересен заботливый родитель, который держит за ручку и сыпет &quot;нельзя&quot;, &quot;осторожно&quot;, &quot;не так&quot;, &quot;надень шапку&quot;, &quot;не простудись&quot; итд итп идр. Я работаю в сфере, где иначе просто не выйдет, ибо исполнительные окружения предъявляют, и хрен ты с этим что сделаешь.<br>
Но с другой стороны, у Плюсов позиционируемых ниш пруд пруди, и ради пары особенных жертвовать нормальными методиками и парадигмами, конечно, не резон. За C ничего не скажу, ИМХО он с C99 топчется на месте, а вот Плюсы делают всё возможное, чтобы кто если б захотел, собрал себе родителя по потребностям. Моё <s class='tag-s'>ИМХО</s>... нет, это понимание, выстраданное опытом, это уже не ИМХО... моё чёткое понимание философии Плюсов давно уж незыблемо: не тот хорошо знает язык, кто выштрудировал себя на Стандарте и либах, а тот, кто умеет договариваться с компилятором о разделе сфер ответственности. Я могу объяснить ему, куда ему можно лезть со своими &quot;не упади&quot; и &quot;осторожно, поранишься&quot;, куда прям-таки нужно &quot;стоять&#33; придурок&quot; и &quot;хрен тебе, а не сладкое&quot;, а куда пусть не суётся вообще. Покажи мне ещё один язык с такой фичей.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908131</guid>
        <pubDate>Fri, 02 Aug 2024 16:27:04 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908131</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3907990'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Славян &#064; <time class="tag-quote__quoted-time" datetime="2024-07-31T19:30:14+00:00">31.07.24, 19:30</time></span><div class='quote '>Ну или даже до 3...n значений.<br>
Эх...</div></div><br>
Да хоть 100500.<br>
Просто измени подход.<br>
Ты пытаешься писать на С.<br>
Попробуй на С++.<br>
Если необходимо менять сразу несколько значений одновременно,<br>
значит.. это объект.<br>
Объедини переменные в объект.<br>
Перегрузи для этого объекта операцию = ( operator=() )<br>
и все какие надо другие, если потребуются.<br>
И всё получится.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;s = A ? p : q;</div></ol></div></div></div></div>]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908072</guid>
        <pubDate>Fri, 02 Aug 2024 03:16:52 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908072</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3908070'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-08-01T22:26:39+00:00">01.08.24, 22:26</time></span><div class='quote '>Осталось только пояснить, почему ты это называешь &quot;нюансом&quot;.</div></div><br>
Ну это можно назвать и &quot;механизмом потенциального бага&quot;, если так будет угодно. Но, с учетом, уточнения <strong class='tag-b'>D_KEY</strong>, если выставить абсолютно все предупреждения компилятора - это будет не совсем корректно. Т.к. разработчику хоть и разрешено такое делать, но он всеж может быть предупрежден. Но может и не быть, если забудет выставить предупреждения.<br>
<br>
Кстати &quot;нюансом&quot; в С++ можно назвать и объявление без явной инициализации. На сколько я помню, в Стандарте С++ неявной инициализации посвящены отдельные подразделы? Давайте проведем сравнение.<br>
<br>
<strong class='tag-b'>C++</strong><br>
<br>
Следующая программа завершится просто <span class="tag-color tag-color-named" data-value="red" style="color: red">Segmentation fault</span>. Кстати, а тут можно какое-то предупреждение для компилятора включить?<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">class Bug {</div><div class="code_line">&nbsp;&nbsp; &nbsp;int number;</div><div class="code_line">&nbsp;&nbsp;public: </div><div class="code_line">&nbsp;&nbsp; &nbsp;Bug(int num):number(num) {}</div><div class="code_line">&nbsp;&nbsp; &nbsp;void hello() { </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Bug number:&quot; &#60;&#60; number;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">int main() { </div><div class="code_line">&nbsp;&nbsp;Bug *bug;</div><div class="code_line">&nbsp;&nbsp;bug-&#62;hello();</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<strong class='tag-b'>Dart</strong><br>
<br>
В Dart все переменные по умолчанию Null-safety. Чтобы реализовать подобный код, нужно использовать модификатор ? для снятия Null-safety. Вот пример:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">class Bug {</div><div class="code_line">&nbsp;&nbsp;int? number;</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;Bug(int num) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;number = num;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;</div><div class="code_line">&nbsp;&nbsp;void hello() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;print(&#39;Bug number: $number&#39;);</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void main() {</div><div class="code_line">&nbsp;&nbsp;Bug? bug;</div><div class="code_line">&nbsp;&nbsp;bug.hello();</div><div class="code_line">}</div></ol></div></div></div></div><br>
Но и тут просто так не прокатит. Компилятор просто выдаст ошибку:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">main.dart:15:7: Error: Method &#39;hello&#39; cannot be called on &#39;Bug?&#39; because it is potentially null.</div><div class="code_line">&nbsp;- &#39;Bug&#39; is from &#39;main.dart&#39;.</div><div class="code_line">Try calling using ?. instead.</div><div class="code_line">&nbsp;&nbsp;bug.hello();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;^^^^^</div></ol></div></div></div></div><br>
Если же мы воспользуемся &quot;советом&quot; компилятора, то <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">bug?.hello();</span></span> просто не будет выполнен, и программа завершит работу. <br>
В общем все эти неявные неявности С++ зло  :lol: <br>
<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body">Кстати, я так и не понял, а почему отрабатывает следующий код? Тут должно быть неопределённое поведение, но программа не падает:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">class Bug {</div><div class="code_line">&nbsp;&nbsp; &nbsp;int number;</div><div class="code_line">&nbsp;&nbsp;public: </div><div class="code_line">&nbsp;&nbsp; &nbsp;Bug(int num):number(num) {}</div><div class="code_line">&nbsp;&nbsp; &nbsp;void hello() { </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Bug&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">int main() { </div><div class="code_line">&nbsp;&nbsp;Bug *bug;</div><div class="code_line">&nbsp;&nbsp;bug-&#62;hello();</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div></div></div>]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908071</guid>
        <pubDate>Thu, 01 Aug 2024 22:43:40 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908071</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3908068'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-08-01T19:34:48+00:00">01.08.24, 19:34</time></span><div class='quote '>Код отрабатывает и не мяукает</div></div><br>
-Wconversion]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908070</guid>
        <pubDate>Thu, 01 Aug 2024 22:26:39 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908070</link>
        <description><![CDATA[Qraizer: Осталось только пояснить, почему ты это называешь &quot;нюансом&quot;.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908068</guid>
        <pubDate>Thu, 01 Aug 2024 19:34:48 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908068</link>
        <description><![CDATA[Majestio: Я вот сейчас во всю изучаю Dart. Естественно изучаю его фичи и сравниваю с С++. На счет неявного приведения типов. Вот смотри пример &quot;зла&quot;  :lol: <br>
<br>
<strong class='tag-b'>С++</strong><br>
<br>
Я спецом использовал <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">trу-catch</span></span>, просто показать, что это бесполезно, никаких исключений. Код отрабатывает и не мяукает. Выводит 44.<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp;int init = 300;</div><div class="code_line">&nbsp;&nbsp;uint8_t value;</div><div class="code_line">&nbsp;&nbsp;try {</div><div class="code_line">&nbsp;&nbsp; &nbsp;value = init; // &#60;--------------------------------------------------------------</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; static_cast&#60;int&#62;(value) &#60;&#60; std::endl; // выводит 44</div><div class="code_line">&nbsp;&nbsp;} catch(...) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;Error&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp;} &nbsp;</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
<strong class='tag-b'>Dart</strong><br>
<br>
В Dart нет встроенных 8-битных чисел. Если извратится через библиотеки, то присвоение Uint8 = int совсем не прокатывает на этапе компиляции, ибо Uint8 - неконструируемый тип. Но я нашел вот такое &quot;решение&quot;:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">import &#39;dart:typed_data&#39;;</div><div class="code_line">import &#39;dart:ffi&#39;;</div><div class="code_line">&nbsp;</div><div class="code_line">void main() {</div><div class="code_line">&nbsp;&nbsp;int init = 300;</div><div class="code_line">&nbsp;&nbsp;Uint8List value = Uint8List.fromList([init]);</div><div class="code_line">&nbsp;&nbsp;print(value[0]); // Выводит: 44</div><div class="code_line">}</div></ol></div></div></div></div><br>
Как резюме. Dart - в принципе новодел. Но в нем учтены различные вот такие &quot;нюансы&quot;, чтобы неявно не делалось того, чего не ждешь. Но если хочешь именно того чего не ждешь - ищи извраты :lol:]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908067</guid>
        <pubDate>Thu, 01 Aug 2024 17:30:04 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908067</link>
        <description><![CDATA[Qraizer: Если ты о строгой типизации, то оно тоже зло. В Паскале у меня, бывало, голова кипела из-за его дурацких ругательств в адрес смешения байтов и интов, к примеру. Мне пофигу, что они разного размера, для меня они оба целые, и мне только это важно. Я не хочу думать о репрезентации типов, я хочу думать об из свойствах и взаимоотношениях.<br>С этой позиции неявные касты более чем допустимы. Беда в том, что в разных ситуациях нужны и немного разные свойства и взаимоотношения, и для стандартных типов их не настроишь. Тут да, увы. Но фактически я как раз и настраиваю эти самые взаимоотношения между типами, когда пишу метакод или там перегружаю кастующие конструкторы и/или операторы. Вот этого от Плюсов отнять никак нельзя ни в коем разе.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908062</guid>
        <pubDate>Thu, 01 Aug 2024 15:27:28 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908062</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3908055'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2024-08-01T14:45:17+00:00">01.08.24, 14:45</time></span><div class='quote '>Я так думаю, предложение в Комитет о расширении синтаксиса ?: было, но из-за озвученных проблем, ведущих, как я в раннем в посту уже обращал внимание, к сюрпризам его отклонили, ибо вероятности программеру наглючить слишком велики. Я вот как-то даже теряюсь в том, чтобы просчитать всякоразные нюансы с выбором типа ?: и даже поведения. А что, если типы в кортеже разные? А что, если типы элементов кортежей посередине и справа не все совпадают? А вдруг там вперемежку значения и разного рода ссылки? Обычные, правосторонние, константные... Как при всём этом выполнять касты с учётом правил приоритетности от identical до ellipsis?</div></div><br>
На самом деле, автоматическое приведение типов, ИМХО - зло&#33; Самое ламповое место для внезапных багов. И тут желательно делать явные касты, даже в ущерб большей писанины. Другое дело автоматическое выведение типов. Увидел <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">auto</span></span> или <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">decltype</span></span>, сразу маячок, мол &quot;смотри, что выводится&quot;.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908055</guid>
        <pubDate>Thu, 01 Aug 2024 14:45:17 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908055</link>
        <description><![CDATA[Qraizer: Вообще, желаемая <strong class='tag-b'>Славян</strong>ом конструкция сама по себе довольно сомнительна. Ведь ?:, как и любое выражение, имеет результат, у которого вполне определённый тип. Даже для стандартного ?: там довольно неочевидно, что да как, и эти ?: в C и C++ отличаются из-за наличия ссылок в последнем. Например, можно написать<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">(cond ? a : b) = expr;</div></ol></div></div></div></div>но только в Плюсах, а в C нужно так:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">*(cond ? &amp;a : &amp;b) = expr;</div></ol></div></div></div></div>Ещё интереснее, если типы между ? и : и после : разные. Там интуитивно понятные, но довольно непростые правила вывода результирующего типа, ведь он у ?: должен быть однозначно определён, не взирая на то, какое именно выражение формирует его результат.<br>
Я так думаю, предложение в Комитет о расширении синтаксиса ?: было, но из-за озвученных проблем, ведущих, как я в раннем в посту уже обращал внимание, к сюрпризам его отклонили, ибо вероятности программеру наглючить слишком велики. Я вот как-то даже теряюсь в том, чтобы просчитать всякоразные нюансы с выбором типа ?: и даже поведения. А что, если типы в кортеже разные? А что, если типы элементов кортежей посередине и справа не все совпадают? А вдруг там вперемежку значения и разного рода ссылки? Обычные, правосторонние, константные... Как при всём этом выполнять касты с учётом правил приоритетности от identical до ellipsis?]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908019</guid>
        <pubDate>Thu, 01 Aug 2024 07:28:52 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3908019</link>
        <description><![CDATA[Majestio: <strong class='tag-b'>Qraizer</strong>, зацени как элегантно это (ну почти это) обыграно в ЯП Dart:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">myList = [1, 2, 3, 4]; </div><div class="code_line">final [b, _, c, _] = myList; </div><div class="code_line">print(&#39;b: $b, c: $c&#39;); // b: 1, c: 3</div></ol></div></div></div></div><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">var myList = [1, 2, 3, 4, 5, 6, 7]; </div><div class="code_line">final [a, ..., b] = myList; </div><div class="code_line">print(&#39;a: $a, b: $b&#39;); // a: 1, b: 7</div></ol></div></div></div></div><br>
Это примеры только по деструктуризации списков. Для деструктуризации записей, хэшей и классов - там тоже очень красиво :good:<br>
<br>
А если перевести именно мой кусок с С++ на Dart, то это будет выглядеть так:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">void main() {</div><div class="code_line">&nbsp;&nbsp;int p1 = 3, p2 = 4, q1 = 5, q2 = 5;</div><div class="code_line">&nbsp;&nbsp;bool b = true;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;var (s1, s2) = b ? (p1, p2) : (q1, q2);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;print(&quot;s1: $s1&quot;);</div><div class="code_line">&nbsp;&nbsp;print(&quot;s2: $s2&quot;);</div><div class="code_line">}</div></ol></div></div></div></div><br>
 :wub:]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3907997</guid>
        <pubDate>Thu, 01 Aug 2024 05:27:17 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3907997</link>
        <description><![CDATA[Qraizer: Я сперва тоже так хотел, но увы, структурное связывание может использоваться только при определении для инициализации. Тут же речь об обычном присваивании, т.е. однажды определив, те же сущности должно быть можно изменять присваиванием, а не определять новые. std::tie формально решает, однако он не допускает или делает крайне неудобными ситуации, когда типы данных слева и справа от = не совпадают и нуждаются в кастах. Тут легко можно запутаться, т.к. = в std::tie имеет несколько иную семантику, нежели в обычном =. У меня = сохраняет семантику, и новых сюрпризов не вносит. Но не буду спорить, что в целом этот более простой вариант имеет право быть. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-08-01T05:35:17+00:00">01.08.24, 05:35</time></span></span><br>
Впрочем, что у тебя, что у меня варианты грешат &quot;лишними&quot; буквами. Конечно с простыми {} было бы поприятнее. Подождём C++26, там на метаклассах, возможно, получится поэлегантнее.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3907995</guid>
        <pubDate>Thu, 01 Aug 2024 02:21:03 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3907995</link>
        <description><![CDATA[Majestio: <strong class='tag-b'>Славян</strong>, в стандарте С++17 было введено &quot;структурное связывание&quot; (<a class='tag-url' href='https://en.cppreference.com/w/cpp/language/structured_binding' target='_blank'>Structured binding declaration</a>). Поэтому твой код можно записать вот так:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;tuple&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;int p1 = 3, p2 = 4, q1 = 5, q2 = 5;</div><div class="code_line">&nbsp;&nbsp; &nbsp;bool b = true;</div><div class="code_line">&nbsp;&nbsp; &nbsp;auto [s1, s2] = b ? std::make_tuple(p1, p2) : std::make_tuple(q1, q2); &nbsp; &nbsp;// если s1 и s2 &nbsp;объявлены ранее, то вместо auto [s1, s2] используем &nbsp;std::tie(s1, s2)</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;s1: &quot; &#60;&#60; s1 &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;s2: &quot; &#60;&#60; s2 &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
Важно чтобы количество элементов в кортежах было одинаковое.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3907994</guid>
        <pubDate>Wed, 31 Jul 2024 22:16:02 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3907994</link>
        <description><![CDATA[Qraizer: Ну попробуй так:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;tuple&#62;</div><div class="code_line">#include &#60;utility&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">template &#60;typename ...Args&#62;</div><div class="code_line">class Multi</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;std::tuple&#60;Args...&#62; left;</div><div class="code_line">&nbsp;</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp;explicit Multi(Args&amp;&amp; ...list): left(std::tuple&#60;Args...&#62;(list...)){}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;template &#60;typename ...Params&#62;</div><div class="code_line">&nbsp;&nbsp;Multi&amp; operator=(const Multi&#60;Params...&#62;&amp; right)</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;auto generator = [counter = 0]()mutable { return counter++; };</div><div class="code_line">&nbsp;&nbsp; &nbsp;auto assigner &nbsp;= [](int idx, auto&amp; l, const auto&amp; r) { std::get&#60;idx&#62;(l) = std::get&#60;idx&#62;(r); };</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;(assigner(generator(), left, right.left), ...);</div><div class="code_line">&nbsp;&nbsp; &nbsp;return *this;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">template &#60;typename ...Args&#62;</div><div class="code_line">auto multi(Args&amp;&amp; ...args)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;return Multi&#60;Args...&#62;(std::forward&#60;Args&#62;(args)...);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">void check(bool b)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;int p1 = 123, p2 = 321,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;q1 = 456, q2 = 654;</div><div class="code_line">&nbsp;&nbsp;int s1 = 789, s2 = 987;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;multi(s1, s2) = b ? multi(p1, p2) : multi(q1, q2); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// аналог того, чего хотел</div><div class="code_line">&nbsp;&nbsp;std::cout &#60;&#60; s1 &#60;&#60; &#39;\t&#39; &#60;&#60; s2 &#60;&#60; std::endl;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int main()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;check(true);</div><div class="code_line">&nbsp;&nbsp;check(false);</div><div class="code_line">}</div></ol></div></div></div></div>Может кто до ума доведёт...]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3907990</guid>
        <pubDate>Wed, 31 Jul 2024 19:30:14 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3907990</link>
        <description><![CDATA[Славян: В Си есть=допустима такая конструкция:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">s = A ? p : q;</div></ol></div></div></div></div><br>
Тут как-то захотелось, чтобы она была расширяема до такого:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">{s1,s2} = A ? {p1,p2} : {q1,q2};</div></ol></div></div></div></div><br>
Ну или даже до 3...n значений.<br>
Эх...]]></description>
        <author>Славян</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3896124</guid>
        <pubDate>Tue, 24 Oct 2023 06:36:55 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3896124</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3896119'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Славян &#064; <time class="tag-quote__quoted-time" datetime="2023-10-23T17:31:21+00:00">23.10.23, 17:31</time></span><div class='quote '>1. Само распаковалось на 123 МБ. Мне думается, что это сильно много, ибо BorlandC где-то под 30 МБ раньше выходил и делал весьма много.</div></div><br>
Ну сравнил хрен с пальцем  :lol: Посмотри внимательно содержимое распакованного, там только каталог с заголовками весит 30 метров. Проект живой, под современные вёнды, потому и весит столько.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3896119'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Славян &#064; <time class="tag-quote__quoted-time" datetime="2023-10-23T17:31:21+00:00">23.10.23, 17:31</time></span><div class='quote '>Просто открыть файл (с примером выше) и откомпилить не удалось - ей проект надо делать и всё такое. Минус.</div></div><br>
Минус тебе ;) Можно было бы не делать поспешных выводов, а почитать документацию&#33; Правда юзергайд надо <a class='tag-url' href='https://lcc-win32.services.net/manual.exe' target='_blank'>искать на сайте</a>. Единственное смущает, что его сделали с инсталлятором. Тем не менее, можно компилячить и линковать без использования IDE от этого проекта, чисто его утилитами командной строки.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3896119'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Славян &#064; <time class="tag-quote__quoted-time" datetime="2023-10-23T17:31:21+00:00">23.10.23, 17:31</time></span><div class='quote '>При сохранении проекта, закрытии его и нажатии &quot;открыть&quot; прога упала.</div></div><br>
Без комментариев :blink: У меня такое не получалось. Хотя, скажу честно, я не часто эту софтину пользую.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3896119'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Славян &#064; <time class="tag-quote__quoted-time" datetime="2023-10-23T17:31:21+00:00">23.10.23, 17:31</time></span><div class='quote '>Резюме: сильно попытались заморочиться, им надо было бы как-то попроще быть... </div></div><br>
Еще раз посоветую внимательнее разобраться. Но, как говорят, если нет ... на нет и суда нет. Это не моя софтина <s class='tag-s'>мопед не мой</s>, тогда да, придется тебе самому &quot;идеал искать&quot;.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3896119</guid>
        <pubDate>Mon, 23 Oct 2023 17:31:21 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3896119</link>
        <description><![CDATA[Славян: Попробовал. Печально. А именно:<br>
1. Само распаковалось на 123 МБ. Мне думается, что это сильно много, ибо BorlandC где-то под 30 МБ раньше выходил и делал весьма много.<br>
2. Просто открыть файл (с примером выше) и откомпилить не удалось - ей проект надо делать и всё такое. Минус. :no-sad: <br>
3. При сохранении проекта, закрытии его и нажатии &quot;открыть&quot; прога упала. :facepalm: <br>
<br>
<strong class='tag-b'>Резюме:</strong> сильно попытались заморочиться, им надо было бы как-то попроще быть... :whistle: <br>
В идеале бы: TurboC x64 (кой у меня 1,3 МБ). :rolleyes:]]></description>
        <author>Славян</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3896082</guid>
        <pubDate>Sun, 22 Oct 2023 21:47:15 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3896082</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3896080'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Славян &#064; <time class="tag-quote__quoted-time" datetime="2023-10-21T19:38:10+00:00">21.10.23, 19:38</time></span><div class='quote '>Какой покрохотнее компилятор посоветуете? - дабы скомпилил под Винду нечто такое:</div></div><br>
Попробуй <a class='tag-url' href='https://lcc-win32.services.net' target='_blank'>lcc-win</a>]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3896080</guid>
        <pubDate>Sat, 21 Oct 2023 19:38:10 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3896080</link>
        <description><![CDATA[Славян: Пардон, вопрос конечно не про то, что тема ведёт, но всё же:<br>
Какой покрохотнее компилятор посоветуете? - дабы скомпилил под Винду нечто такое:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;stdio.h&#62;</div><div class="code_line">#include &#60;math.h&#62;</div><div class="code_line">int</div><div class="code_line">main()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;for( int i=0; i&#60;180; i+=10)</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot;sin(%d)=%f&quot;, i, sin(i*M_PI/180);</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div>Желательно под 64-бита, но желание это маленькое.]]></description>
        <author>Славян</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3885327</guid>
        <pubDate>Sun, 22 Jan 2023 11:32:19 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3885327</link>
        <description><![CDATA[Qraizer: Ну, сочувствую. Это C, тут это нормально. В язык complex не введут, для встроек это крайне нерентабельно. А вот в библиотеки ввести можно, т.к. соответствующий заголовок для freestanding можно объявить необязательным. Собственно так и сделали.<br>Не подходит, тогда тебе в Плюсы или в Фортран.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3885323</guid>
        <pubDate>Sun, 22 Jan 2023 05:58:44 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3885323</link>
        <description><![CDATA[Славян: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3885220'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>phprus &#064; <time class="tag-quote__quoted-time" datetime="2023-01-19T20:02:06+00:00">19.01.23, 20:02</time></span><div class='quote '>Тогда <a class='tag-url' href='https://en.cppreference.com/w/c/numeric/complex' target='_blank'>Complex number arithmetic из C99</a></div></div>Что-то почитываю, и что-то не нравятся эти намёки вида:<br>
1. Файл corecrt_math.h<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;struct _complex</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;double x, y; // real and imaginary parts</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;#if _CRT_INTERNAL_NONSTDC_NAMES &amp;&amp; !defined __cplusplus</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Non-ANSI name for compatibility</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;#define complex _complex</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;#endif</div></ol></div></div></div></div>2. Файл complex.h<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#ifndef _C_COMPLEX_T</div><div class="code_line">&nbsp;&nbsp; &nbsp;#define _C_COMPLEX_T</div><div class="code_line">&nbsp;&nbsp; &nbsp;typedef struct _C_double_complex</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;double _Val[2];</div><div class="code_line">&nbsp;&nbsp; &nbsp;} _C_double_complex;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;typedef struct _C_float_complex</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;float _Val[2];</div><div class="code_line">&nbsp;&nbsp; &nbsp;} _C_float_complex;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;typedef struct _C_ldouble_complex</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;long double _Val[2];</div><div class="code_line">&nbsp;&nbsp; &nbsp;} _C_ldouble_complex;</div><div class="code_line">#endif</div><div class="code_line">&nbsp;</div><div class="code_line">typedef _C_double_complex &nbsp;_Dcomplex;</div><div class="code_line">typedef _C_float_complex &nbsp; _Fcomplex;</div><div class="code_line">typedef _C_ldouble_complex _Lcomplex;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</div><div class="code_line">//</div><div class="code_line">// Macros</div><div class="code_line">//</div><div class="code_line">//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</div><div class="code_line">#define _DCOMPLEX_(re, im) &nbsp;_Cbuild(re, im)</div><div class="code_line">#define _FCOMPLEX_(re, im) &nbsp;_FCbuild(re, im)</div><div class="code_line">#define _LCOMPLEX_(re, im) &nbsp;_LCbuild(re, im)</div><div class="code_line">&nbsp;</div><div class="code_line">#define _Complex_I _FCbuild(0.0F, 1.0F)</div><div class="code_line">#define I &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_Complex_I</div></ol></div></div></div></div>Такое ощущение, что Си-шники очередной раз всякими макросами и пр. пытаются обмануть систему. &lt;_&lt; <br>
<br>
Стандарт, - это когда можно будет написать такой код:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">complex kvadrat( complex z) { return z*z; }</div><div class="code_line">// далее - что угодно</div><div class="code_line">#include &#60;math.h&#62;</div><div class="code_line">#include &#60;complex.h&#62;</div><div class="code_line">int main()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;complex z=5;</div><div class="code_line">&nbsp;&nbsp;return abs(kvadrat(z)); // ну или cabs, или ещё нечто такое</div><div class="code_line">}</div></ol></div></div></div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2023-01-22T06:06:48+00:00">22.01.23, 06:06</time></span></span><br>
Пардон, так:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">return (int)abs(kvadrat(z)); // ну или cabs, или ещё нечто такое</div></ol></div></div></div></div>]]></description>
        <author>Славян</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3885220</guid>
        <pubDate>Thu, 19 Jan 2023 20:02:06 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3885220</link>
        <description><![CDATA[phprus: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3885219'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Славян &#064; <time class="tag-quote__quoted-time" datetime="2023-01-19T19:54:34+00:00">19.01.23, 19:54</time></span><div class='quote '>Имелось ввиду принятие его в язык Си, а не Си++.<br>
</div></div><br>
Тогда <a class='tag-url' href='https://en.cppreference.com/w/c/numeric/complex' target='_blank'>Complex number arithmetic из C99</a>]]></description>
        <author>phprus</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3885219</guid>
        <pubDate>Thu, 19 Jan 2023 19:54:34 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3885219</link>
        <description><![CDATA[Славян: Имелось ввиду принятие его в язык Си, а не Си++.]]></description>
        <author>Славян</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3885218</guid>
        <pubDate>Thu, 19 Jan 2023 19:04:14 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3885218</link>
        <description><![CDATA[phprus: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3885217'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Славян &#064; <time class="tag-quote__quoted-time" datetime="2023-01-19T18:54:45+00:00">19.01.23, 18:54</time></span><div class='quote '>Есть ли хоть какой-то шанс (хоть 1%-й), что введут в стандарт тип complex? Для комплексных чисел.<br>
</div></div><br>
<a class='tag-url' href='https://en.cppreference.com/w/cpp/numeric/complex' target='_blank'>std::complex</a> уже давно в стандарте.]]></description>
        <author>phprus</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3885217</guid>
        <pubDate>Thu, 19 Jan 2023 18:54:45 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3885217</link>
        <description><![CDATA[Славян: Есть ли хоть какой-то шанс (хоть 1%-й), что введут в стандарт тип complex? Для комплексных чисел.<br>А то, мне думается, что чуть ли не &#39;каждый второй&#39; ваял такой класс/методы работы с ними, но всё же (при наличии стандарта) много ж было бы несколько проще.<br>Или же работает принцип &quot;есть же в бусте, значит наплюём&#33;&quot;?]]></description>
        <author>Славян</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3884398</guid>
        <pubDate>Fri, 06 Jan 2023 01:21:35 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3884398</link>
        <description><![CDATA[Qraizer: Запятая вносит точку следования между левым и правым операндом, так что все сайд-эффекты после вычисления левого должны быть нейтрализованы. В твоём случае в , нет смысла, т.к. её приоритет ниже, чем у присваивания.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3884394</guid>
        <pubDate>Thu, 05 Jan 2023 20:16:37 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3884394</link>
        <description><![CDATA[Majestio: <strong class='tag-b'>Славян</strong>, по идее, при операции запятая сперва вычисляется левый операнд, а потом правый. В твоем случае, при таком присвоении вычисляется <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">*b</span></span> и присваивается для <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">а</span></span>, потом вычисляется <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">b++</span></span> и отбрасывается.<br>
<br>
А вот если бы было:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">a = (*b, ++b);</div></ol></div></div></div></div><br>
То тогда, сперва бы вычислялся операнд <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">*b</span></span>, потом инкремент <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">b</span></span>, и результат инкремента присваивался бы <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">a</span></span>. Но если бы было как написано <span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="blue" style="color: blue">b++</span></span>, инкремент был бы строго после присвоения.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3884391</guid>
        <pubDate>Thu, 05 Jan 2023 19:52:37 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3884391</link>
        <description><![CDATA[Славян: Нановопрос. (Давно уж спрашивал, но подзабыл ответ).<br>
Если я пишу <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">a = *b, b++;</div></ol></div></div></div></div>, то оговорено ли стандартами, что вначале всё же гарантированно будет сделана часть до запятой, а потом - то, что после запятой?<br>
П.С. просто сие видится как &quot;один сложный кусок в единице трансляции/интерпретации, а потому программист должен сам быть уверен, что каша в его выполнении не несёт ничего многозначного&quot;...<br>
 :thanks:]]></description>
        <author>Славян</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3884278</guid>
        <pubDate>Mon, 02 Jan 2023 15:50:05 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3884278</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3883993'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2022-12-28T13:54:38+00:00">28.12.22, 13:54</time></span><div class='quote '>К тому же не только переменными едиными. Как быть с типами, именами структур/классов/объединений, перечислениями, функциями, пространствами имён... ?</div></div><br>
Последнее время мне приходится работать с PHP. Поверь мне, у меня есть достаточный опыт работы и с С++, и с PHP, соответственно - некоторые оправданные временем умозаключения. Даже скорее не умозаключения - а, как говорят, мышечная память, на уровне набора исходного кода. У PHP много хорошего, которое стоило бы перенять. Но есть и &quot;шлак&quot; в виде &quot;персонального&quot; обозначения видимости методов - в С++ это сделано компактнее, естественние.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3883993</guid>
        <pubDate>Wed, 28 Dec 2022 13:54:38 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3883993</link>
        <description><![CDATA[Qraizer: Ну, так было изначально. В Фортране, например. А потом ещё в Бейсике. Не прижилось, потому что неудобно.<br>К тому же не только переменными едиными. Как быть с типами, именами структур/классов/объединений, перечислениями, функциями, пространствами имён... ?]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3883850</guid>
        <pubDate>Mon, 26 Dec 2022 13:32:53 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3883850</link>
        <description><![CDATA[Majestio: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=190375&view=findpost&p=3883843'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2022-12-26T13:04:05+00:00">26.12.22, 13:04</time></span><div class='quote '>Несложно поднастроить парсер исходного кода, наделив его знанием о новых токенах, немножечко сложнее наделить граммер знанием о характеристиках этого токена. Самое сложное – не поломать существующую кодовую базу, насчитывающую 50-летнюю историю.</div></div><br>
Кстати, хорошая и важная тема&#33; В этом плане С++, да и ряд еще &quot;перпендикулярных&quot; ЯП, типа Pascal, Rust, D и подобных - будут в жутком цейтноте переработки парсеров по мере развития стандартов. То ли дело Perl :lool: Шучу, еще и PHP. Они сделали когда-то очень, ИМХО, &quot;знаковый&quot; шаг - разделили понятие &quot;переменная&quot; и все остальное. На мой взгляд, это знатно упрощает парсинги. Я когда-то, лет 20 назад, плотно сидел на Паскале (Borland Turbo, Virtual Pascal, Delphi, Free Pascal), и спустя уже n-месяцев словил себя на мысли, да какого хрена мне писать присвоение как &quot;:=&quot;?&#33;&#33; Сравнений на порядки меньше присваиваний. А потом сишные {} вместо паскалевских begin-end просто манили. Так я пришел к Перлу :lool: <br>
<br>
Ну а если без шуток и пафоса ... если бы ввели четкое ограничение в С++ как и в PHP &amp; Perl  - именовать переменные, начиная с &#036; - сложность разбора, ИМХО, сильно бы просела. Повторюсь - IMHO&#33;]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3883843</guid>
        <pubDate>Mon, 26 Dec 2022 13:04:05 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3883843</link>
        <description><![CDATA[Qraizer: Если коротко, то тебя обманули. В C/C++ нет чётких характеристик типов данных, есть только их характеристики относительно друг друга. (Единственное исключение – char. Его sizeof == 1, но даже для него нет требований в количестве бит.) В этом смысле long double должен быть не менее мощен, нежели double, и в частности характеристики этих типов могут совпадать.<br>Даже больше. Стандарты C/C++ не регламентируют представление типов с плавающей точкой. (В отличие от целочисленных, для которых какое-никакое представление регламентируется.) Они описаны в абстрактных понятиях мантиссы/порядка/знака с поведением, основанным на части IEEE-754. Другими словами, реализации не обязаны придерживаться IEEE-754 или чего-то подобного для репрезентации float/double/long double. Просто чаще всего железяки проектируют не конкретно под C/C++, а под RFS-стандарты, и следование IEEE для компоненты FPU обычно выгоднее, т.к. делает эти железяки вполне удобными безотносительно к инструментальным средствам и знакомыми программистам. Поэтому средства разработки тоже не выделываются и просто реализуют IEEE. Причём даже если исходно железяка не поддерживает плавающую точку, и среда вынуждена имитировать её наличие программными методами.<br>Что касается новых слов, то тут всё гораздо прозаичнее. Несложно поднастроить парсер исходного кода, наделив его знанием о новых токенах, немножечко сложнее наделить граммер знанием о характеристиках этого токена. Самое сложное – не поломать существующую кодовую базу, насчитывающую 50-летнюю историю. Когда, скажем, хренадцать лет назад писалась некая большая система, например Oracle DB, никаких bool, typeof, complex итд итп идр в языке не было, поэтому программисты вольны были использовать их в своих целях. Несложно представить, что бы произошло, если бы в C99 добавили bool с false и true. Причём имеющему влияние на всю систему целиком, независимо от того, каково было их распространение в исходном виде, пусть даже и сугубо локальное в отдельных функциях. Поэтому появление нового ключевого слова в языке всегда очень нежелательный процесс.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3883795</guid>
        <pubDate>Sun, 25 Dec 2022 16:38:07 +0000</pubDate>
        <title>Текущий Стандарт С++ и перспективы его развития</title>
        <link>https://forum.sources.ru/index.php?showtopic=190375&amp;view=findpost&amp;p=3883795</link>
        <description><![CDATA[Славян: Увидел, что 128-битное плавающее записывается как &#39;long double&#39;.<br>А почему делают именно связку имеющихся типов, а не какой-то новый, скажем &#39;longdouble&#39; ?<br>Так как-то парсер проще настроить, или ещё какие-то соображения есть?  :-?]]></description>
        <author>Славян</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	