<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Форум 'Философия программирования' на RSDN</title>
    <link>http://rsdn.org/Forum/philosophy/</link>
    <description></description>
    <category>philosophy</category>
    <language>ru-ru</language>
    <copyright>Copyright ©, RSDN, 2001-2007</copyright>
    <webMaster>forum@rsdn.org</webMaster>
    <generator>RSDN RSS Generator 1.3</generator>
    <image>
      <url>http://rsdn.org/rsdn.gif</url>
      <title>RSDN</title>
      <link>http://rsdn.org</link>
    </image>
    <lastBuildDate>Sat, 04 Apr 2026 00:55:10 GMT</lastBuildDate>
    <ttl>5</ttl>
	<item>
		<title>Самый успешный проект в истории человечества</title>
		<link>http://rsdn.org/Forum/philosophy/9068749.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/philosophy/9068749</guid>
		<comments>http://rsdn.org/Forum/philosophy/9068749</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=9068749</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/9068749</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=9068749</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Вначале был LLM. Точнее статья 2017 года, attention all you need. Хрень которая умеет распареллеливать вычисления и обрабатывать текст как массив знаний. Затем идея что если мы обучим сеть продолжать предложения, то на текст он будет отвечать текстом. Внезапно оказалось, что на вопрос &amp;mdash; LLM создает наиболее вероятный ответ. Так называемый &amp;mdash; zero shot. Немного химии и дообучения и появился ChatGPT. Первый ChatGPT появился ноябрь 2022. Фактически 4 с половиной года назад. В него стали пихать больше знаний и процессоров, он становился умнее и умнее. Потом оказалось что если давать несколько примеров (few shot) то LLM отвечает вернее. Потом придумали технологию Function Calling чтобы LLM могла получать дополнительную информацию. &lt;br /&gt;
Где-то в 2024 году началась эра агентов. Это когда программист программирует процесс, создает промпт LLM, дает инструменты, и LLM сама решает как выполнить эту задачу. &lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;«Это крупнейший, самый популярный и самый успешный проект с открытым исходным кодом в истории человечества. Это определенно следующий ChatGPT»&lt;/p&gt;&lt;/blockquote&gt;
(с) Генеральный директор NVideо&lt;br /&gt;
&lt;a class="m" href="https://expert.ru/news/glava-nvidia-nazval-ii-startap-openclaw-novym-chatgpt/" target="_blank"&gt;https://expert.ru/news/glava-nvidia-nazval-ii-startap-openclaw-novym-chatgpt/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
В ноябре 2025 года &amp;mdash; первый проект&lt;br /&gt;
В январе 2026 года &amp;mdash; появилось название&lt;br /&gt;
В марте 2026 &amp;mdash; самое скачиваемое приложение из github&lt;br /&gt;
&lt;br /&gt;
Ребята сделали классную вещь. Они дали возможность выполнять команда bash, использовать браузер, интеграция с телеграммами, whatsup, discord и другими экстремисткими программами запрещенными российским гражданам. И есть один обязательный инструмент &amp;mdash; create_skill. Технические подробности &amp;mdash; опущу. По сути это запрограммируй себя. OpenClaw может сам себя программировать, настраивать свою идентификацию редактируя файл с говорящим названием SOUL.md. Может настраивать новые уникальные задачи, можно попросить зайти на страницу и заказать билеты, отследить публикации, посмотреть текущие pull request. Безусловно есть отлаженные skill в частности &lt;a class="m" href="https://www.skillhub.club/" target="_blank"&gt;https://www.skillhub.club/&lt;/a&gt; но сама концепция самопрограммирования. И главное &amp;mdash; она успешная.&lt;br /&gt;
&lt;br /&gt;
Время жизни OpenClaw несколько месяцев. Время прогресса сжимается. Что будет в конце года?&lt;br /&gt;
&lt;br /&gt;
update: Вот фирмы разработчиков берут деньги за предложение и автоматизацию сценариев. А тут сценарии придумывает пользователь. С чего деньги брать?&lt;/div&gt;
				
		</description>
		
		<category>philosophy</category>
		<pubDate>Sun, 22 Mar 2026 12:11:32 GMT</pubDate>
		
			<author>GlebЗ &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>2</slash:comments>
		
	</item>

	<item>
		<title>Зачем ИИ домысливает ?</title>
		<link>http://rsdn.org/Forum/philosophy/9065246.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/philosophy/9065246</guid>
		<comments>http://rsdn.org/Forum/philosophy/9065246</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=9065246</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/9065246</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=9065246</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Решил  я поискать, что есть в сети обо мне на раннем этапе моей карьеры &amp;mdash; студента &amp;mdash; химика и аспиранта &amp;mdash; химика. Вывели меня на ИИ (от Гугла), ну я его и попытал.&lt;br /&gt;
&lt;br /&gt;
Сначала хотел просто процитировать, что он на мои вопросы ответил, но это было бы длинно и неинтересно. Поэтому лишь краткое резюме.&lt;br /&gt;
&lt;br /&gt;
Начал я с того. что спросил о своем участии во всесоюзной олимпиаде студентов по химии 1976 года. Думал, что ничего не ответит. К удивлению, ответил, и почти правильно &amp;mdash; лишь сказал, что занял я второе место, а в действительности было третье. Это-то ладно, но вот почему-то меня произвел в студенты ФЕН НГУ и потом долго рассказывал о моей дальнейшей карьере в НГУ в качестве преподавателя и научного сотрудника. В действительности я был студентом Томского ГУ, а к НГУ никогда отношения не имел. Ну ладно, ошибиться по вопросу, в каком вузе я учился и какое место занял &amp;mdash; грех небольшой, но зачем же было расписывать мою дальнейшую карьеру в НГУ, если я вообще к нему не имел отношения ?&lt;br /&gt;
&lt;br /&gt;
Потом спросил о том, чем я занимался во времена аспирантуры. И тут он ответил. И годы аспирантуры правильно привел, и тематику. И названия моих статей правильно привел. Правда, ошибся в названиях журналов &amp;mdash; якобы они опубликованы в "Известиях вузов". Между тем диссертацию я делал в институте АН СССР и статьи были в Известиях АН СССР, серия химическая. Дал даже название моей диссертации и автореферата, но тут уже вообще чистая фантазия &amp;mdash; их нет в сети и ссылок на них нет. ИИ сам это название придумал.&lt;br /&gt;
&lt;br /&gt;
Потом сообщил, что я работал в Омском ГУ. Верно, работал. Вот только почему-то заявил, что преподавал я на химическом факультете и занимался научной работой в области физической и аналитической химии. Между тем работал я на математическом факультете, вел программирование, а к своей химической тематике с момента прихода в ОмГУ никогда не возвращался. А уж к аналитической химии после 2 курса вообще отношения не имел. &lt;br /&gt;
&lt;br /&gt;
Причем живо все это описал. Чуть ли не в классика меня превратил &amp;mdash; в тех областях, где я или вообще не работал, или где моя роль весьма умеренная. Договорился до того, что мои результаты попали в какие-то справочники по химии, где и пребывают. Между тем мои работы времен аспирантуры ни для какого справочника не годятся &amp;mdash; в них нет данных, которые можно поместить в справочники.&lt;br /&gt;
&lt;br /&gt;
Общий вывод &amp;mdash; сочетание вполне достоверных данных с домысливанием (чтобы не сказать больше). Там где можно найти достоверные данные &amp;mdash; он их приводит, иногда с простительными искажениями. Хотя и непонятно, зачем искажать. Привести правильно год журнала, номер тома и страницы, название статьи и дать название другого журнала &amp;mdash; зачем ?&lt;br /&gt;
&lt;br /&gt;
В остальном же буйный полет фантазии &amp;mdash; домысливает по принципу "если мы о нем вот это знаем, то что бы еще могло быть ? Вот такое могло бы. Могло. Ну значит, оно и было".&lt;br /&gt;
&lt;br /&gt;
Был он студентом НГУ ? Был (по его мнению. в действительности не был). Ну значит, мог быть потом там же научным сотрудником. Чем занимался там ? Сейчас придумаем.&lt;br /&gt;
Делал он диссертацию ? Делал. Значит, должен был быть автореферат. Названия его найти не удалось, не беда. Сейчас придумаем это название по аналогии с названиями его статей.&lt;br /&gt;
Был он аспирантом вуза ? Да. Ну значит, и публиковался в Известиях вузов.&lt;br /&gt;
Работал он потом преподавателем в ОмГУ ? Да. Он же химик ? Да. Ну , значит, и преподавал на химическом факультете в той же области химии, которой занимался в аспирантуре.&lt;br /&gt;
&lt;br /&gt;
В итоге получилась вольная фантазия, где правда так перемешана с домыслами, что кому-то, ничего не знающему обо мне, отличить одно от другого практически невозможно. Поэтому общая ценность всего этого равна 0. Тут не ложка дегтя, которая портит бочку меда, тут в бочке половина меда и половина дегтя, хорошо перемешанные.&lt;br /&gt;
&lt;br /&gt;
Что это &amp;mdash; его родимое пятно ? Надеяться на то, что со временем станет лучше, в этом случае не приходится. Новых данных о ранних годах моей карьеры не появится, скорее всего. Так что дообучиться он не сможет, не на чем. Поэтому вопрос не в том, что он какие-то данные не учел, а в том, что он вольно нафантазировал там, где всего лишь нужно было сказать "не знаю".&lt;br /&gt;
&lt;br /&gt;
Он когда-нибудь так фантазировать перестанет ?&lt;/div&gt;
				
		</description>
		
		<category>philosophy</category>
		<pubDate>Tue, 10 Mar 2026 15:22:18 GMT</pubDate>
		
			<author>Pavel Dvorkin &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>40</slash:comments>
		
	</item>

	<item>
		<title>И еще рассуждения об ИИ</title>
		<link>http://rsdn.org/Forum/philosophy/9050707.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/philosophy/9050707</guid>
		<comments>http://rsdn.org/Forum/philosophy/9050707</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=9050707</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/9050707</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=9050707</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Во-первых, ограничимся достаточно узкой областью. Какой-нибудь open source фреймворк.&lt;br /&gt;
&lt;br /&gt;
Что тут вообще может делать интеллект, неважно какой.&lt;br /&gt;
&lt;br /&gt;
1. Освоить имеющийся материал по этому фреймворку&lt;br /&gt;
2. Применить эти знания на практике, то есть сделать код с использованием его для конкретной задачи&lt;br /&gt;
3. Дать свои рекомендации по внесению изменений в него, не делая эти изменения. Какие-то новые идеи высказать, например, или хотя бы улучшения предложить.&lt;br /&gt;
4. Разработать свой код в качестве contibutor и предложить pull request&lt;br /&gt;
5. Принять этот pull request (или отвергнуть его) &lt;br /&gt;
6. Внести изменения в release и сделать следующую версию.&lt;br /&gt;
&lt;br /&gt;
ЕИ все это может. Разумеется, разные представители ЕИ &lt;img border='0' width='15' height='15' src='//rsdn.org/Forum/images/smile.gif' /&gt;&lt;br /&gt;
&lt;br /&gt;
Ну ладно, (6) мы пока ИИ не поручим &lt;img border='0' width='15' height='15' src='//rsdn.org/Forum/images/smile.gif' /&gt;&lt;br /&gt;
&lt;br /&gt;
(1) &amp;mdash; (2) ИИ вроде как может.&lt;br /&gt;
&lt;br /&gt;
Может ли он (3) &amp;mdash; (5) ? Если сейчас не может &amp;mdash; сможет ли ?&lt;br /&gt;
&lt;br /&gt;
Иными словами, сможет он стать разработчиком нового или останется только компилятором существующего ?&lt;/div&gt;
				
		</description>
		
		<category>philosophy</category>
		<pubDate>Sat, 31 Jan 2026 07:44:55 GMT</pubDate>
		
			<author>Pavel Dvorkin &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>53</slash:comments>
		
	</item>

	<item>
		<title>Multithreading: как очередь, но вручную и красиво?</title>
		<link>http://rsdn.org/Forum/philosophy/9044385.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/philosophy/9044385</guid>
		<comments>http://rsdn.org/Forum/philosophy/9044385</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=9044385</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/9044385</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=9044385</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Периодически возникает при многонитевом построении примерно следующий "паттерн": есть элемент состояния/управления (как очередь заданий), который требует контролируемого взаимодействия с помощью лока и "условной переменной". Но чтобы на время выполнения задания не блокировать тех, кто хочет установить следующее задание, лок снимается на это время. Получается следующая схема:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;## Псевдокод в стиле Python
with self.lock: ## для C++ аналог -- захват лока в конструкторе
    while True:
        if not self.task: ## можно было и с предикатом, если кому удобнее читать
            self.cv.sleep()
            continue
        task = self.task
        self.task = None
        self.lock.release() ## начинается длительная операция
        try:
            self.execute(task)
        except Exception:
            ... пожаловались ...
        self.lock.acquire()&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Мне не нравится в нём именно "ручное" освобождение и последующее занятие лока вокруг длительной работы. RAII или with-оператор придумали не просто так, если есть возможность взвалить контроль на них, то лучше этим воспользоваться.&lt;br /&gt;
&lt;br /&gt;
Можно было бы просто перевести на очередь. Но бывает, что при этом ещё и какие-то элементы статуса отдаются обратно, или воздействие от управляющего метода более сложное. И если может быть поставлено не более одного задания, то делать это в виде очереди, ограниченной одним элементом, тоже как-то странно. Ещё бывают собственные idle операции, а ждать чтения из очереди с таймаутом не всегда возможно.&lt;br /&gt;
&lt;br /&gt;
Какие есть варианты сделать это красиво без подобных ручных плясок?&lt;/div&gt;
				
		</description>
		
		<category>philosophy</category>
		<pubDate>Thu, 15 Jan 2026 09:56:40 GMT</pubDate>
		
			<author>netch80 &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>9</slash:comments>
		
	</item>

	<item>
		<title>Некоторые размышления об ИИ</title>
		<link>http://rsdn.org/Forum/philosophy/9029787.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/philosophy/9029787</guid>
		<comments>http://rsdn.org/Forum/philosophy/9029787</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=9029787</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/9029787</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=9029787</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Почему не в форум об ИИ &amp;mdash; там в основном специальные вопросы, а это обсуждение общего плана.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Интеллект это или не интеллект &amp;mdash; вопрос скорее философский. В общем, можно сказать, что это нечто, отчасти похожее на человеческий интеллект, но и существенно от него отличающееся. Тут можно многое сказать, но не буду.&lt;br /&gt;
&lt;br /&gt;
Если считать его все же интеллектом, то вполне логично сравнить его с естественным интеллектом (ЕИ). И вот тут обнаруживаются существенные различия организационного характера.&lt;br /&gt;
&lt;br /&gt;
Носители ЕИ, как правило, являются специалистами в одной, реже нескольких областях. Их знания в других областях поверхностны, и, как правило, не годятся для того, чтобы сделать серьезные экспертные заключения. За примерами ходить далеко не надо. Тут все более или менее являются специалистами в ИТ и могут дать компетентное заключение по какому-то вопросу, но послушаешь, что они высказывают в непрофильных форумах, например, по экономике &amp;mdash; порой волосы становятся дыбом и уши вянут. И уж никакой серьезный экономист в здравом уме и твердой памяти  не станет руководствоваться их высказываниями по экономике.&lt;br /&gt;
&lt;br /&gt;
Более того. ЕИ (если конечно, речь не идет о личностях вроде Ноздрева) по большинству вопросов вне своей сферы компетенции даст ответ &amp;mdash; не знаю. Ну действительно, что Вы можете ответить на узкоспециальный вопрос, скажем, по гетерогенному катализу ? Только одно &amp;mdash; не знаю. Я как химик по образованию когда-то что-то знал, но давно забыл, так что и мой ответ, скорее всего, будет таким же.&lt;br /&gt;
&lt;br /&gt;
Второй отличительный признак ЕИ &amp;mdash; он децентрализован. Отдельные люди и являются его носителями, и их интеллект каким-то не вполне понятным образом и решает возникающие проблемы, дает ответ. С довольно высокой скоростью. Каналы же связи между носителями ЕИ имеют довольно низкую пропускную способность, как минимум не сравнимую с пропускной способностью внутренних интерфейсов ЕИ. Если необходимо получить ответ на вопрос, затрагивающий несколько сфер деятельности, то для ЕИ это приведет к созданию некоторой системы взаимодействующих ЕИ, являющихся специалистами в разных областях. Проще говоря, соберут совещание, на которое пригласят специалистов разного профиля, и они совместными усилиями будут пытаться решить эту проблему. При этом каждый участник , несомненно, будет хорошо понимать , что он сам говорит на эту тему и никаких недопониманий себя с самим собой не будет, а вот недопонимания и разногласия при взаимодействии участников будут почти обязательно, и их "утрясание" может занять большое время. За примерами опять же далеко ходить не надо &amp;mdash; достаточно почитать дискуссии здесь на какую-то тему.&lt;br /&gt;
&lt;br /&gt;
С ИИ все обстоит иначе. Он универсален и готов ответить на любой вопрос. А поскольку нельзя объять необъятное, то он начинает фантазировать, скрещивая данные из самых разных источников, и как результат, часто попадая впросак. Универсальный же ЕИ существует только в произведениях фантастов (вроде Лемовского Соляриса), реально его нет.&lt;br /&gt;
&lt;br /&gt;
Может быть, в этом и (отчасти) кроются некоторые проблемы , связанные с ИИ ? Может быть, будь он организован иначе, эти проблемы бы ушли ?&lt;br /&gt;
&lt;br /&gt;
Представьте себе, что ИИ организован по-другому. Вместо универсального ChatGPT или DeepSeek имеется большое количество узкоспециализированных ИИ, но таких, которые очень хорошо ориентируются в своей области, так что на вопрос, относящийся к ней они дают всегда или почти всегда правильный ответ, а если вопрос выходит за пределы их компетенции &amp;mdash; пытаются определить, к компетенции какого другого ИИ он относится и передаю вопрос ему. Иными словами, ведут себя как люди в этом плане. "Я в этой области плохо разбираюсь, но знаю Ивана Петрова, который вроде в этом разбирается, спрошу его". Возможно, что Иван Петров тоже окажется не специалистом и передаст вопрос Петру Сидорову, а возможно, что в итоге будет собрано совещание с участием всех троих, и совместными усилиями они найдут ответ. Вот и для ИИ могло  бы быть аналогично.&lt;br /&gt;
&lt;br /&gt;
Ну и конечно, ИИ в данной области совсем не обязан быть в единственном экземпляре. Вполне можно допустить наличие нескольких экземпляров его, отличающихся заложенными для ответа данными или алгоритмами. Тогда окончательный ответ может быть дан путем "обсуждения" и последующего согласования ответов, данных отдельными экземплярами, либо же окончательный ответ будет сформулирован в виде "к сожалению, дать надежный ответ на этот вопрос не оказалось возможным, имеются разные точки зрения на то, что считать правильным". Возможно, что возникнет некоторая иерархическая система, в которой более авторитетные ИИ будет запрашивать  мнение менее авторитетных и на основе их формировать окончательный ответ. В общем, как у ЕИ.&lt;br /&gt;
&lt;br /&gt;
Это существенно изменит и саму модель ИИ как явления. Вместо одного универсального ИИ в огромном датацентре можно будет иметь сотни и тысячи (а может, сотни тысяч) специализированных ИИ, взаимодействующих между собой и расположенных на относительно некрупных серверах относительно небольших организаций.&lt;br /&gt;
&lt;br /&gt;
Мне кажется, что ИИ сейчас проходит период развития, который можно назвать "очень большие и не слишком умные". Как динозавры. Или, если угодно, как ЭВМ до эпохи микропроцессоров и персональных компьютеров.&lt;br /&gt;
&lt;br /&gt;
Что думаете ?&lt;/div&gt;
				
		</description>
		
		<category>philosophy</category>
		<pubDate>Sat, 13 Dec 2025 13:45:06 GMT</pubDate>
		
			<author>Pavel Dvorkin &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>40</slash:comments>
		
	</item>

	<item>
		<title>Unix-way универсален для нейрочипов?</title>
		<link>http://rsdn.org/Forum/philosophy/9022919.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/philosophy/9022919</guid>
		<comments>http://rsdn.org/Forum/philosophy/9022919</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=9022919</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/9022919</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=9022919</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Насколько универсальна Unix-философия и Unix-инструментарий (Unix-утилиты)?&lt;br /&gt;
Когда появятся нейрочипы и сознание пост-человека перетечёт в компьютеры, будет ли чиповая ОС в своих недрах содержать Unix-ядро, монолит или микроядро, не важно, важно для моего вопроса  то, что будет или нет там набор Unix-утилит. Если да, то получается, изучая Unix-утилиты, можно будет уметь ковыряться в своих мозгах? Типа, смотреть tail мыслей. Или редачить воспоминания с помощью sed, что как-бы нельзя делать, но разработчики чипа забыли убрать sed из дистрибутива чип-ОС.&lt;/div&gt;
				
		</description>
		
		<category>philosophy</category>
		<pubDate>Tue, 25 Nov 2025 08:46:37 GMT</pubDate>
		
			<author>gyraboo &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>0</slash:comments>
		
	</item>

	<item>
		<title>Список переходов в ДКА</title>
		<link>http://rsdn.org/Forum/philosophy/8999321.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/philosophy/8999321</guid>
		<comments>http://rsdn.org/Forum/philosophy/8999321</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8999321</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8999321</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8999321</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Здравствуйте!&lt;br /&gt;
&lt;br /&gt;
Наверное, в "Философию", хотя, вопрос всё же вполне практический.&lt;br /&gt;
&lt;br /&gt;
Ковыряю генератор ДКА. Думаю, как описывать переходы между состояниями. Пока надумал примерно так:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;Синтаксис описания переходов:

СписокИсхСостояний : СписокСобытий [? ДопУсловие] -&amp;gt; ЦелевоеСостояние [? ДопУсловие] [: СписокДействий] [- Описание];
где
  СписокИсхСостояний - Состояние1 [, Состояние2 [, Состояние3... ] ]
  СостояниеN         - * / Состояние / !Состояние
  СписокСобытий      - Событие1 [, Событие2 [, Событие3... ] ]
  СобытиеN           - * / Событие / !Событие
  СписокДействий     - Действие1 [, Действие2 [, Действие3... ] ]

'*' - означает любое состояние, для которого не задано перехода.
'!' (отрицание) - используется совместно с состоянием '*', и явно исключает
    генерацию перехода из этого состояния.

Аналогичная семантика используется при описании списка событий.

ДопУсловие - логическое выражение, состоящее из предикатов, операций '&amp;amp;', '|', '!'
и группроующих скобок.
ДопУсловие может располагаться либо после списка событий, либо после целевого состояния,
но только в одном из этих мест.&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
Ничего не забыл?&lt;br /&gt;
&lt;br /&gt;
Вопрос &amp;mdash; как сравнивать такие записи? И надо ли сравнивать? По идее, переходы могут пересекаться по условиям, и это нельзя. И хочется сразу отсечь проблемы. Или оставить на потом?&lt;br /&gt;
&lt;br /&gt;
Для начала надо отсортировать по состояниям и переходам, сохраняя относительный порядок у переходов одного типа.&lt;br /&gt;
&lt;br /&gt;
Сначала идут все переходы, у которых нет "звездочек" в исходных состояниях и в событиях перехода.&lt;br /&gt;
Потом &amp;mdash; те переходы, у которых есть "звездочка", но есть исключения из звездочки, состояния/события с отрицанием (тут вопрос, что идёт раньше, "звездочка" в исх состояниях или "звездочка" в событиях?)&lt;br /&gt;
Потом &amp;mdash; те переходы, у которых только одна звездочка.&lt;br /&gt;
&lt;br /&gt;
Когда отсортировали, разбиваем эти сложные описания переходов на примитивные, когда у нас только одно исходное состояние и только одно событие перехода.&lt;br /&gt;
Потом применяем "звездочки" с исключениями.&lt;br /&gt;
Потом применяем чистые "звездочки".&lt;br /&gt;
&lt;br /&gt;
Предложения, пожелания, критика?&lt;/div&gt;
				
		</description>
		
		<category>philosophy</category>
		<pubDate>Tue, 30 Sep 2025 19:40:28 GMT</pubDate>
		
			<author>Marty &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>12</slash:comments>
		
	</item>

	<item>
		<title>Два несуществующих файла</title>
		<link>http://rsdn.org/Forum/philosophy/8997825.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/philosophy/8997825</guid>
		<comments>http://rsdn.org/Forum/philosophy/8997825</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8997825</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8997825</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8997825</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Вот если мы сравниваем два нулевых указателя, то получаем true. &lt;br /&gt;
А вот если мы сравниваем два несуществующих файла, то функция их сравнения должна возвращать true или false?&lt;/div&gt;
				
		</description>
		
		<category>philosophy</category>
		<pubDate>Fri, 26 Sep 2025 17:11:48 GMT</pubDate>
		
			<author>B0FEE664 &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>73</slash:comments>
		
	</item>

	<item>
		<title>Программа как договор :)</title>
		<link>http://rsdn.org/Forum/philosophy/8953531.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/philosophy/8953531</guid>
		<comments>http://rsdn.org/Forum/philosophy/8953531</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8953531</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8953531</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8953531</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Наткнулся в канале одного умного человека на &lt;a class="telegram" data-message-id="/polden21/101" href="https://t.me/polden21/101"&gt;уподобление программы договору&lt;/a&gt;. &lt;img border='0' width='15' height='15' src='//rsdn.org/Forum/images/smile.gif' /&gt; Интересная точка зрения, мне раньше не попадалась. &lt;img border='0' width='15' height='15' src='//rsdn.org/Forum/images/smile.gif' /&gt;&lt;/div&gt;
				
		</description>
		
		<category>philosophy</category>
		<pubDate>Sun, 22 Jun 2025 11:43:10 GMT</pubDate>
		
			<author>Евгений Музыченко &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>7</slash:comments>
		
	</item>

	<item>
		<title>Игорь Ашманов об влиянии ИИ на ИТ, общество, бизнес...</title>
		<link>http://rsdn.org/Forum/philosophy/8948848.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/philosophy/8948848</guid>
		<comments>http://rsdn.org/Forum/philosophy/8948848</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8948848</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8948848</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8948848</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;&lt;a class="lite" href="https://www.youtube.com/watch?v=kb9qKsiTfTw&amp;amp;ab_channel=%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B5%D0%B9%D0%A1%D0%B0%D0%B2%D0%B2%D0%B0%D1%82%D0%B5%D0%B5%D0%B2%D0%B8%D0%A0%D0%BE%D0%B4%D0%BD%D0%B0%D1%8F%D0%A8%D0%BA%D0%BE%D0%BB%D0%B0" id="kb9qKsiTfTw" style="width:640px;height:360px;" target="_blank"&gt;https://www.youtube.com/watch?v=kb9qKsiTfTw&amp;amp;amp;ab_channel=%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B5%D0%B9%D0%A1%D0%B0%D0%B2%D0%B2%D0%B0%D1%82%D0%B5%D0%B5%D0%B2%D0%B8%D0%A0%D0%BE%D0%B4%D0%BD%D0%B0%D1%8F%D0%A8%D0%BA%D0%BE%D0%BB%D0%B0&lt;/a&gt;&lt;br /&gt;
Довольно любопытно. &lt;br /&gt;
&lt;blockquote class='q'&gt;&lt;p&gt;«Искусственный интеллект понижает качество везде, где он дотягивается. Это я вам говорю, как профессиональный разработчик искусственного интеллекта»&lt;br /&gt;
&lt;br /&gt;
«Есть проблема – об этом надо сказать. Люди с удовольствием становятся рабами роботов. Они с удовольствием отдают ответственность. &lt;br /&gt;
Как от этого, от этой проблемы защищаться – склонности людей передавать ответственность роботам?»&lt;br /&gt;
&lt;br /&gt;
«У нас есть категория оголтелых цифровизаторов, которые рассказывают всем, в том числе самому  главному начальнику, что цифровизация нас спасёт, что всё будет круто. &lt;br /&gt;
Пока мы знаем, что цифровизация привела к тому, что были совершены миллиарды звонков мошенников, которые украли сотни миллиардов рублей у наших граждан. Почему? Потому что утекли гигантские объёмы записей персональных данных»&lt;br /&gt;
&lt;br /&gt;
«Человек очень склонен экономить энергию, особенно – мыслительную энергию. Все будут её экономить – значит, должны отупеть. Ну как – все уже отупели от смартфонов, от Гугла, от Википедии и так далее. Дальше будет сильно хуже»&lt;br /&gt;
...&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;
				
		</description>
		
		<category>philosophy</category>
		<pubDate>Thu, 12 Jun 2025 05:15:32 GMT</pubDate>
		
			<author>LaptevVV &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>12</slash:comments>
		
	</item>

	<item>
		<title>Зуев, Недоря, Богатырев о ЯП</title>
		<link>http://rsdn.org/Forum/philosophy/8936168.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/philosophy/8936168</guid>
		<comments>http://rsdn.org/Forum/philosophy/8936168</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8936168</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8936168</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8936168</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Очень интересный видос&lt;br /&gt;
&lt;a class="m" href="https://rutube.ru/video/539091c054d11587b5e21fc3fe3b5f56/?r=wd" target="_blank"&gt;https://rutube.ru/video/539091c054d11587b5e21fc3fe3b5f56/?r=wd&lt;/a&gt;&lt;br /&gt;
С Недорей и Богатыревым знаком лично &amp;mdash; пересекались на конференциях. &lt;br /&gt;
Из книжки Зуева по ТурбоПаскалю в свою переложил на С++ пример о побочном эффекте.&lt;br /&gt;
Еще в 2003 году.&lt;/div&gt;
				
		</description>
		
		<category>philosophy</category>
		<pubDate>Tue, 20 May 2025 05:20:04 GMT</pubDate>
		
			<author>LaptevVV &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>13</slash:comments>
		
	</item>

	<item>
		<title>Практический смысл (польза) от разработки ПО</title>
		<link>http://rsdn.org/Forum/philosophy/8933175.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/philosophy/8933175</guid>
		<comments>http://rsdn.org/Forum/philosophy/8933175</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8933175</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8933175</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8933175</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Вот сейчас кричат из каждой кофеварки &amp;mdash; &lt;a class="m" href="https://habr.com/ru/news/873236/" target="_blank"&gt;мидлов заменят мидлов заменяет&lt;/a&gt;. Т.е. если ты не эксперт и не элита &amp;mdash; сиди дрожи.&lt;br /&gt;
&lt;br /&gt;
И я так задумался &amp;mdash; а в чем вообще смысл разработки ПО и зачем она человечеству, нельзя ли без нее?&lt;br /&gt;
&lt;br /&gt;
И скорее прихожу к выводу что конечный смысл &amp;mdash; занять людей хоть чем-то. Т.е. просто чтобы они были заняты и не буянили. А основной смысл криков об ИИ и замене &amp;mdash; это вызвать эмоции страха, как-то сыграть на этих эмоциях.&lt;br /&gt;
&lt;br /&gt;
Поясню. Вот есть ручной труд:&lt;br /&gt;
&lt;br /&gt;
&lt;table style="margin-top:5px;margin-bottom:5px" cellpadding="0" cellspacing="0"&gt; 	&lt;tbody onclick="toggleExpand(this)" style="cursor:pointer"&gt; 		&lt;tr&gt; 			&lt;td style="width:10px" class="hidden_Plus"&gt;				&amp;nbsp;			&lt;/td&gt;			&lt;td style="font-weight:bold;padding-left:2px;font-family:Verdana,Arial;font-size:9pt;"&gt;								Скрытый текст			&lt;/td&gt; 		&lt;/tr&gt; 	&lt;/tbody&gt; 	&lt;tbody style="display:none"&gt; 		&lt;tr&gt;			&lt;td style="background-image:url(//rsdn.org/Forum/images/line.gif);background-repeat:repeat-y;background-position:center"&gt;							&lt;/td&gt;			&lt;td style="padding-left:3px;font-family:Verdana,Arial;font-size:8pt"&gt;&lt;a class="lite" href="https://www.youtube.com/watch?v=N5mGcYwMWKc" id="N5mGcYwMWKc" style="width:640px;height:360px;" target="_blank"&gt;https://www.youtube.com/watch?v=N5mGcYwMWKc&lt;/a&gt;&lt;/td&gt; 		&lt;/tr&gt; 		&lt;tr&gt;			&lt;td style="height:1px;background-image:url(//rsdn.org/Forum/images/corner.gif);background-repeat:no-repeat;background-position:center"&gt;							&lt;/td&gt;			&lt;td&gt;&lt;/td&gt;		&lt;/tr&gt;	&lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt;
&lt;br /&gt;
Чел. увлечен, радуется что у него получается, что его ценят в обществе, есть что передать детям. И тут вы приходите со своей "Ардуникой" и сервоприводами и автоматизируете все что он делает. Ну пусть не все, часть работы. И что? Чел. теряет смысл жизни, заняться ему нечем. И дальше возникает новая проблема &amp;mdash; нужно спасать его от безделья и делать комп. игрушки. А ведь раньше он не страдал и в реале. &lt;br /&gt;
&lt;br /&gt;
Ну ладно, когда автоматизация производства (еда, одежда, машины, дома) &amp;mdash; это можно еще понять.&lt;br /&gt;
&lt;br /&gt;
Но ведь большинство софта &amp;mdash; и того не делают, &lt;i&gt;даже труд не автоматизируют&lt;/i&gt;. Вот есть &lt;a class="m" href="https://alternativeto.net/" target="_blank"&gt;https://alternativeto.net/&lt;/a&gt; &amp;mdash; 131,855 приложений. Чтобы по минутке каждому уделить &amp;mdash; нужно 270 дней потратить. И это не все что наваяло человечество &amp;mdash; на самом деле намного больше.&lt;br /&gt;
&lt;br /&gt;
И какой в этом великий смысл? По сути критических софтин не так много и они уже давно написаны не единожды.&lt;br /&gt;
&lt;br /&gt;
Сейчас смысл имеет разве что выход на новый научный уровень &amp;mdash; освоение дальнего космоса, понимание природы сознания, нанороботы и пр. Свистоперделки в принципе нафиг не нужны, вернее нужность создается искусственно.&lt;br /&gt;
&lt;br /&gt;
Как создается нужность. Вот одни гомы напали на других &amp;mdash; догадались убивать друг-друга "вентиляторами". Теперь уже появилась нужность &amp;mdash; нужно писать софт для вентиляторов, чтобы делать абсолютно бессмысленную идеи &amp;mdash; убивать других гомов.&lt;br /&gt;
&lt;br /&gt;
Или другое. Сидит штаны протирает орда бездельников &amp;mdash; чиновников. И придумывают новые обязательные отчеты для бизнеса в неймоверном количестве. И вот тебе уже &amp;mdash; нужность налоговых консултантов, нужность писателей книг по этим налогам, бухгалтерских еженедельников, кучи софта для отчета и подсчетов. И нафига? Думаете в этом всем есть смысл? Да нет же никакого смысла &amp;mdash; он надуман.&lt;br /&gt;
&lt;br /&gt;
Так вот &amp;mdash; фишка в том что оно и так уже давно 90% ничего не нужно, просто чтобы гомов чем-то занять, чтобы не было стенка на стенку &amp;mdash; как бы создается иллюзия нужности. Ну и иллюзия страха, чтобы ты крепче держался за свою нужность.&lt;/div&gt;
				
		</description>
		
		<category>philosophy</category>
		<pubDate>Tue, 13 May 2025 07:52:10 GMT</pubDate>
		
			<author>Shmj &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>75</slash:comments>
		
	</item>

	<item>
		<title>Дублирование логики?</title>
		<link>http://rsdn.org/Forum/philosophy/8930478.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/philosophy/8930478</guid>
		<comments>http://rsdn.org/Forum/philosophy/8930478</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8930478</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8930478</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8930478</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Есть такой термин номер недели. В базе есть таблица со всеми днями на год и у каждого дня есть номер недели. Это много где используется на уровне логики базы.&lt;br /&gt;
Тут зашел разговор, что для ускорения работы на бэке хорошо бы не лазить в базу, а в бэке иметь высчитывание.&lt;br /&gt;
Как считаете нормально ли иметь по сути дублированную логику в бэке или лучше из базы брать и хранить в том же кэше?&lt;/div&gt;
				
		</description>
		
		<category>philosophy</category>
		<pubDate>Tue, 06 May 2025 07:43:32 GMT</pubDate>
		
			<author>merge &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>9</slash:comments>
		
	</item>

	<item>
		<title>Бизнес ничего личного</title>
		<link>http://rsdn.org/Forum/philosophy/8902521.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/philosophy/8902521</guid>
		<comments>http://rsdn.org/Forum/philosophy/8902521</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8902521</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8902521</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8902521</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Как вы относитесь к тому что "жрите что дают" и становиться всё более модной идеологией при разработке чего-угодно.&lt;br /&gt;
И не дай бог вы что-то не обновили, то вообще всё перестаёт работать. То есть работает только здесь и сейчас (причем эта область постепенно сужается).&lt;br /&gt;
&lt;br /&gt;
как пример:&lt;br /&gt;
&lt;a class="m" href="https://www.reddit.com/r/KafkaFPS/comments/1it0dp4/%D0%B0%D0%BD%D0%B5%D0%BA%D0%B4%D0%BE%D1%82_rtx_5090_%D0%B2_10_%D1%80%D0%B0%D0%B7_%D1%85%D1%83%D0%B6%D0%B5_rtx_4090_%D0%B0_%D1%82%D0%B5%D0%BF%D0%B5%D1%80%D1%8C/" target="_blank"&gt;https://www.reddit.com/r/KafkaFPS/comments/1it0dp4/%D0%B0%D0%BD%D0%B5%D0%BA%D0%B4%D0%BE%D1%82_rtx_5090_%D0%B2_10_%D1%80%D0%B0%D0%B7_%D1%85%D1%83%D0%B6%D0%B5_rtx_4090_%D0%B0_%D1%82%D0%B5%D0%BF%D0%B5%D1%80%D1%8C/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a class="lite" href="https://www.youtube.com/watch?v=CDgh9QDcgsc" id="CDgh9QDcgsc" style="width:640px;height:360px;" target="_blank"&gt;https://www.youtube.com/watch?v=CDgh9QDcgsc&lt;/a&gt;&lt;/div&gt;
				
		</description>
		
		<category>philosophy</category>
		<pubDate>Sat, 22 Feb 2025 21:38:04 GMT</pubDate>
		
			<author>kov_serg &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>2</slash:comments>
		
	</item>

	<item>
		<title>Сможет ли deepseek разобрать винду, чтобы сделать исходники?</title>
		<link>http://rsdn.org/Forum/philosophy/8893241.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/philosophy/8893241</guid>
		<comments>http://rsdn.org/Forum/philosophy/8893241</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8893241</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8893241</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8893241</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;А в чем сложности разобрать ядро винды или ios?&lt;/div&gt;
				
		</description>
		
		<category>philosophy</category>
		<pubDate>Wed, 05 Feb 2025 12:53:27 GMT</pubDate>
		
			<author>snaphold &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>25</slash:comments>
		
	</item>

	<item>
		<title>Верстка UI - обзор подходов</title>
		<link>http://rsdn.org/Forum/philosophy/8874875.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/philosophy/8874875</guid>
		<comments>http://rsdn.org/Forum/philosophy/8874875</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8874875</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8874875</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8874875</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Вот что интересное заметил.&lt;br /&gt;
&lt;br /&gt;
Ранее старались разделить &amp;mdash; мухи отдельно, котлеты отдельно. Т.е. желали декларативное описание UI и отдельно уже код. Вот примеры&lt;br /&gt;
&lt;br /&gt;
&lt;h5 class='formatter'&gt;Дедовский MFC .rc (resource script)&lt;/h5&gt;
&lt;br /&gt;
Канонически правильный, не мешаем котлеты с мухами:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;IDD_MYDIALOG DIALOGEX 0, 0, 200, 150
STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "My Dialog"
FONT 8, "MS Sans Serif"
BEGIN
    CONTROL "OK", IDOK, "Button", WS_TABSTOP, 50, 120, 50, 14
    CONTROL "Cancel", IDCANCEL, "Button", WS_TABSTOP, 110, 120, 50, 14
END&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h5 class='formatter'&gt;Qt Designer UI Language (XML)&lt;/h5&gt;
&lt;br /&gt;
&lt;table style="margin-top:5px;margin-bottom:5px" cellpadding="0" cellspacing="0"&gt; 	&lt;tbody onclick="toggleExpand(this)" style="cursor:pointer"&gt; 		&lt;tr&gt; 			&lt;td style="width:10px" class="hidden_Plus"&gt;				&amp;nbsp;			&lt;/td&gt;			&lt;td style="font-weight:bold;padding-left:2px;font-family:Verdana,Arial;font-size:9pt;"&gt;								XML			&lt;/td&gt; 		&lt;/tr&gt; 	&lt;/tbody&gt; 	&lt;tbody style="display:none"&gt; 		&lt;tr&gt;			&lt;td style="background-image:url(//rsdn.org/Forum/images/line.gif);background-repeat:repeat-y;background-position:center"&gt;							&lt;/td&gt;			&lt;td style="padding-left:3px;font-family:Verdana,Arial;font-size:8pt"&gt;&lt;pre class='c'&gt;&lt;code&gt;&amp;lt;&lt;span class='kw'&gt;?xml version&lt;/span&gt;=&lt;span class='str'&gt;"1.0"&lt;/span&gt; &lt;span class='kw'&gt;encoding&lt;/span&gt;=&lt;span class='str'&gt;"UTF-8"&lt;/span&gt;?&amp;gt;
&amp;lt;ui &lt;span class='kw'&gt;version&lt;/span&gt;=&lt;span class='str'&gt;"4.0"&lt;/span&gt;&amp;gt;
 &amp;lt;class&amp;gt;MainWindow&amp;lt;/class&amp;gt;
 &amp;lt;widget class=&lt;span class='str'&gt;"QMainWindow"&lt;/span&gt; &lt;span class='kw'&gt;name&lt;/span&gt;=&lt;span class='str'&gt;"MainWindow"&lt;/span&gt;&amp;gt;
  &amp;lt;property &lt;span class='kw'&gt;name&lt;/span&gt;=&lt;span class='str'&gt;"geometry"&lt;/span&gt;&amp;gt;
   &amp;lt;rect&amp;gt;
    &amp;lt;x&amp;gt;0&amp;lt;/x&amp;gt;
    &amp;lt;y&amp;gt;0&amp;lt;/y&amp;gt;
    &amp;lt;width&amp;gt;400&amp;lt;/width&amp;gt;
    &amp;lt;height&amp;gt;300&amp;lt;/height&amp;gt;
   &amp;lt;/rect&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;property &lt;span class='kw'&gt;name&lt;/span&gt;=&lt;span class='str'&gt;"windowTitle"&lt;/span&gt;&amp;gt;
   &amp;lt;string&amp;gt;Пример окна&amp;lt;/string&amp;gt;
  &amp;lt;/property&amp;gt;
  &amp;lt;widget class=&lt;span class='str'&gt;"QWidget"&lt;/span&gt; &lt;span class='kw'&gt;name&lt;/span&gt;=&lt;span class='str'&gt;"centralWidget"&lt;/span&gt;&amp;gt;
   &amp;lt;layout class=&lt;span class='str'&gt;"QVBoxLayout"&lt;/span&gt; &lt;span class='kw'&gt;name&lt;/span&gt;=&lt;span class='str'&gt;"verticalLayout"&lt;/span&gt;&amp;gt;
    &amp;lt;item&amp;gt;
     &amp;lt;widget class=&lt;span class='str'&gt;"QLineEdit"&lt;/span&gt; &lt;span class='kw'&gt;name&lt;/span&gt;=&lt;span class='str'&gt;"lineEdit"&lt;/span&gt;/&amp;gt;
    &amp;lt;/item&amp;gt;
    &amp;lt;item&amp;gt;
     &amp;lt;widget class=&lt;span class='str'&gt;"QPushButton"&lt;/span&gt; &lt;span class='kw'&gt;name&lt;/span&gt;=&lt;span class='str'&gt;"pushButton"&lt;/span&gt;&amp;gt;
      &amp;lt;property &lt;span class='kw'&gt;name&lt;/span&gt;=&lt;span class='str'&gt;"text"&lt;/span&gt;&amp;gt;
       &amp;lt;string&amp;gt;Нажми меня&amp;lt;/string&amp;gt;
      &amp;lt;/property&amp;gt;
     &amp;lt;/widget&amp;gt;
    &amp;lt;/item&amp;gt;
   &amp;lt;/layout&amp;gt;
  &amp;lt;/widget&amp;gt;
  &amp;lt;action &lt;span class='kw'&gt;name&lt;/span&gt;=&lt;span class='str'&gt;"actionExit"&lt;/span&gt;&amp;gt;
   &amp;lt;property &lt;span class='kw'&gt;name&lt;/span&gt;=&lt;span class='str'&gt;"text"&lt;/span&gt;&amp;gt;
    &amp;lt;string&amp;gt;Выход&amp;lt;/string&amp;gt;
   &amp;lt;/property&amp;gt;
  &amp;lt;/action&amp;gt;
 &amp;lt;/widget&amp;gt;
 &amp;lt;resources/&amp;gt;
 &amp;lt;connections/&amp;gt;
&amp;lt;/ui&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt; 		&lt;/tr&gt; 		&lt;tr&gt;			&lt;td style="height:1px;background-image:url(//rsdn.org/Forum/images/corner.gif);background-repeat:no-repeat;background-position:center"&gt;							&lt;/td&gt;			&lt;td&gt;&lt;/td&gt;		&lt;/tr&gt;	&lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;h5 class='formatter'&gt;QT QML (Qt Modeling Language)&lt;/h5&gt;
&lt;br /&gt;
&lt;table style="margin-top:5px;margin-bottom:5px" cellpadding="0" cellspacing="0"&gt; 	&lt;tbody onclick="toggleExpand(this)" style="cursor:pointer"&gt; 		&lt;tr&gt; 			&lt;td style="width:10px" class="hidden_Plus"&gt;				&amp;nbsp;			&lt;/td&gt;			&lt;td style="font-weight:bold;padding-left:2px;font-family:Verdana,Arial;font-size:9pt;"&gt;								QML			&lt;/td&gt; 		&lt;/tr&gt; 	&lt;/tbody&gt; 	&lt;tbody style="display:none"&gt; 		&lt;tr&gt;			&lt;td style="background-image:url(//rsdn.org/Forum/images/line.gif);background-repeat:repeat-y;background-position:center"&gt;							&lt;/td&gt;			&lt;td style="padding-left:3px;font-family:Verdana,Arial;font-size:8pt"&gt;&lt;pre class='c'&gt;&lt;code&gt;import QtQuick 2.15
import QtQuick.Controls 2.15

ApplicationWindow {
    visible: true
    width: 400
    height: 300
    title: "Пример на QML"

    Column {
        anchors.centerIn: parent
        spacing: 10

        TextField {
            id: inputField
            placeholderText: "Введите текст"
        }

        Button {
            text: "Нажми меня"
            onClicked: console.log("Текст: " + inputField.text)
        }
    }
}&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt; 		&lt;/tr&gt; 		&lt;tr&gt;			&lt;td style="height:1px;background-image:url(//rsdn.org/Forum/images/corner.gif);background-repeat:no-repeat;background-position:center"&gt;							&lt;/td&gt;			&lt;td&gt;&lt;/td&gt;		&lt;/tr&gt;	&lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt;
&lt;br /&gt;
&amp;mdash; это уже переходной этап, т.к. кроме декларации &amp;mdash; был JavaScript. Но все-же не смешивалось с основным ЯП &amp;mdash; как то C++.&lt;br /&gt;
&lt;br /&gt;
&lt;h5 class='formatter'&gt;WinForms и Xaml&lt;/h5&gt;
&lt;br /&gt;
WinForms сделали полностью императивное описание, но все-же была автоматическая кодогенерация и файл с вашим кодом находился в другом файле. Весьма гибко и все-таки из коробки имеется разделение, хотя и не строгое.&lt;br /&gt;
&lt;br /&gt;
Xaml же уже полностью вернулись к концепции полного разделения &amp;mdash; был специальный XML-файл:&lt;br /&gt;
&lt;br /&gt;
&lt;table style="margin-top:5px;margin-bottom:5px" cellpadding="0" cellspacing="0"&gt; 	&lt;tbody onclick="toggleExpand(this)" style="cursor:pointer"&gt; 		&lt;tr&gt; 			&lt;td style="width:10px" class="hidden_Plus"&gt;				&amp;nbsp;			&lt;/td&gt;			&lt;td style="font-weight:bold;padding-left:2px;font-family:Verdana,Arial;font-size:9pt;"&gt;								XAML			&lt;/td&gt; 		&lt;/tr&gt; 	&lt;/tbody&gt; 	&lt;tbody style="display:none"&gt; 		&lt;tr&gt;			&lt;td style="background-image:url(//rsdn.org/Forum/images/line.gif);background-repeat:repeat-y;background-position:center"&gt;							&lt;/td&gt;			&lt;td style="padding-left:3px;font-family:Verdana,Arial;font-size:8pt"&gt;&lt;pre class='c'&gt;&lt;code&gt;&amp;lt;Window x:Class=&lt;span class='str'&gt;"ExampleApp.MainWindow"&lt;/span&gt;
        xmlns=&lt;span class='str'&gt;"http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt;
        xmlns:x=&lt;span class='str'&gt;"http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;
        Title=&lt;span class='str'&gt;"Пример XAML UI"&lt;/span&gt; Height=&lt;span class='str'&gt;"300"&lt;/span&gt; Width=&lt;span class='str'&gt;"400"&lt;/span&gt;&amp;gt;
    &amp;lt;Grid&amp;gt;
        &amp;lt;Grid.RowDefinitions&amp;gt;
            &amp;lt;RowDefinition Height=&lt;span class='str'&gt;"Auto"&lt;/span&gt;/&amp;gt;
            &amp;lt;RowDefinition Height=&lt;span class='str'&gt;"Auto"&lt;/span&gt;/&amp;gt;
            &amp;lt;RowDefinition Height=&lt;span class='str'&gt;"*"&lt;/span&gt;/&amp;gt;
        &amp;lt;/Grid.RowDefinitions&amp;gt;
        &amp;lt;Grid.ColumnDefinitions&amp;gt;
            &amp;lt;ColumnDefinition Width=&lt;span class='str'&gt;"*"&lt;/span&gt;/&amp;gt;
            &amp;lt;ColumnDefinition Width=&lt;span class='str'&gt;"Auto"&lt;/span&gt;/&amp;gt;
        &amp;lt;/Grid.ColumnDefinitions&amp;gt;

        &amp;lt;!-- Метка для ввода текста --&amp;gt;
        &amp;lt;TextBlock Grid.Row=&lt;span class='str'&gt;"0"&lt;/span&gt; Grid.Column=&lt;span class='str'&gt;"0"&lt;/span&gt; Margin=&lt;span class='str'&gt;"10"&lt;/span&gt; Text=&lt;span class='str'&gt;"Введите текст:"&lt;/span&gt; VerticalAlignment=&lt;span class='str'&gt;"Center"&lt;/span&gt;/&amp;gt;

        &amp;lt;!-- Текстовое поле для ввода --&amp;gt;
        &amp;lt;TextBox x:Name=&lt;span class='str'&gt;"InputTextBox"&lt;/span&gt; Grid.Row=&lt;span class='str'&gt;"0"&lt;/span&gt; Grid.Column=&lt;span class='str'&gt;"1"&lt;/span&gt; Margin=&lt;span class='str'&gt;"10"&lt;/span&gt; Width=&lt;span class='str'&gt;"200"&lt;/span&gt;/&amp;gt;

        &amp;lt;!-- Кнопка для подтверждения --&amp;gt;
        &amp;lt;Button x:Name=&lt;span class='str'&gt;"SubmitButton"&lt;/span&gt; Grid.Row=&lt;span class='str'&gt;"1"&lt;/span&gt; Grid.ColumnSpan=&lt;span class='str'&gt;"2"&lt;/span&gt; Margin=&lt;span class='str'&gt;"10"&lt;/span&gt; Content=&lt;span class='str'&gt;"Отправить"&lt;/span&gt; Click=&lt;span class='str'&gt;"SubmitButton_Click"&lt;/span&gt;/&amp;gt;

        &amp;lt;!-- Поле для отображения результата --&amp;gt;
        &amp;lt;TextBlock x:Name=&lt;span class='str'&gt;"ResultTextBlock"&lt;/span&gt; Grid.Row=&lt;span class='str'&gt;"2"&lt;/span&gt; Grid.ColumnSpan=&lt;span class='str'&gt;"2"&lt;/span&gt; Margin=&lt;span class='str'&gt;"10"&lt;/span&gt; Text=&lt;span class='str'&gt;"Здесь будет результат"&lt;/span&gt; TextWrapping=&lt;span class='str'&gt;"Wrap"&lt;/span&gt;/&amp;gt;
    &amp;lt;/Grid&amp;gt;
&amp;lt;/Window&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt; 		&lt;/tr&gt; 		&lt;tr&gt;			&lt;td style="height:1px;background-image:url(//rsdn.org/Forum/images/corner.gif);background-repeat:no-repeat;background-position:center"&gt;							&lt;/td&gt;			&lt;td&gt;&lt;/td&gt;		&lt;/tr&gt;	&lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;h5 class='formatter'&gt;Что с Web-технологиями&lt;/h5&gt;
&lt;br /&gt;
Интересно что ASP.Net WebForms &amp;mdash; был смесью HTML и серверных тегов &amp;mdash; все-таки позиционировался как декларативный &amp;mdash; код на C# размещался отдельно, что поднимало на уровень выше по сравнению с тогдашним PHP:&lt;br /&gt;
&lt;br /&gt;
&lt;table style="margin-top:5px;margin-bottom:5px" cellpadding="0" cellspacing="0"&gt; 	&lt;tbody onclick="toggleExpand(this)" style="cursor:pointer"&gt; 		&lt;tr&gt; 			&lt;td style="width:10px" class="hidden_Plus"&gt;				&amp;nbsp;			&lt;/td&gt;			&lt;td style="font-weight:bold;padding-left:2px;font-family:Verdana,Arial;font-size:9pt;"&gt;								ASP.NET Classic WebForms			&lt;/td&gt; 		&lt;/tr&gt; 	&lt;/tbody&gt; 	&lt;tbody style="display:none"&gt; 		&lt;tr&gt;			&lt;td style="background-image:url(//rsdn.org/Forum/images/line.gif);background-repeat:repeat-y;background-position:center"&gt;							&lt;/td&gt;			&lt;td style="padding-left:3px;font-family:Verdana,Arial;font-size:8pt"&gt;&lt;pre class='c'&gt;&lt;code&gt;&amp;lt;%@ Page Language=&lt;span class='str'&gt;"C#"&lt;/span&gt; AutoEventWireup=&lt;span class='str'&gt;"true"&lt;/span&gt; CodeBehind=&lt;span class='str'&gt;"ContactForm.aspx.cs"&lt;/span&gt; Inherits=&lt;span class='str'&gt;"MyApp.ContactForm"&lt;/span&gt; %&amp;gt;

&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html &lt;span class='kw'&gt;lang&lt;/span&gt;=&lt;span class='str'&gt;"en"&lt;/span&gt;&amp;gt;
&amp;lt;head runat=&lt;span class='str'&gt;"server"&lt;/span&gt;&amp;gt;
    &amp;lt;meta charset=&lt;span class='str'&gt;"utf-8"&lt;/span&gt; /&amp;gt;
    &amp;lt;title&amp;gt;Contact Form&amp;lt;/title&amp;gt;
    &amp;lt;link href=&lt;span class='str'&gt;"https://cdn.jsdelivr.net/npm/bootstrap@4.5.2/dist/css/bootstrap.min.css"&lt;/span&gt; rel=&lt;span class='str'&gt;"stylesheet"&lt;/span&gt; /&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div class=&lt;span class='str'&gt;"container"&lt;/span&gt;&amp;gt;
        &amp;lt;h2&amp;gt;Contact Form&amp;lt;/h2&amp;gt;

        &amp;lt;form id=&lt;span class='str'&gt;"form1"&lt;/span&gt; runat=&lt;span class='str'&gt;"server"&lt;/span&gt;&amp;gt;
            &amp;lt;div class=&lt;span class='str'&gt;"form-group"&lt;/span&gt;&amp;gt;
                &amp;lt;label for=&lt;span class='str'&gt;"Name"&lt;/span&gt;&amp;gt;Name&amp;lt;/label&amp;gt;
                &amp;lt;asp:TextBox ID=&lt;span class='str'&gt;"NameTextBox"&lt;/span&gt; runat=&lt;span class='str'&gt;"server"&lt;/span&gt; CssClass=&lt;span class='str'&gt;"form-control"&lt;/span&gt; /&amp;gt;
            &amp;lt;/div&amp;gt;

            &amp;lt;div class=&lt;span class='str'&gt;"form-group"&lt;/span&gt;&amp;gt;
                &amp;lt;label for=&lt;span class='str'&gt;"Email"&lt;/span&gt;&amp;gt;Email&amp;lt;/label&amp;gt;
                &amp;lt;asp:TextBox ID=&lt;span class='str'&gt;"EmailTextBox"&lt;/span&gt; runat=&lt;span class='str'&gt;"server"&lt;/span&gt; CssClass=&lt;span class='str'&gt;"form-control"&lt;/span&gt; /&amp;gt;
            &amp;lt;/div&amp;gt;

            &amp;lt;div class=&lt;span class='str'&gt;"form-group"&lt;/span&gt;&amp;gt;
                &amp;lt;label for=&lt;span class='str'&gt;"Message"&lt;/span&gt;&amp;gt;Message&amp;lt;/label&amp;gt;
                &amp;lt;asp:TextBox ID=&lt;span class='str'&gt;"MessageTextBox"&lt;/span&gt; runat=&lt;span class='str'&gt;"server"&lt;/span&gt; TextMode=&lt;span class='str'&gt;"MultiLine"&lt;/span&gt; CssClass=&lt;span class='str'&gt;"form-control"&lt;/span&gt; /&amp;gt;
            &amp;lt;/div&amp;gt;

            &amp;lt;asp:Button ID=&lt;span class='str'&gt;"SubmitButton"&lt;/span&gt; runat=&lt;span class='str'&gt;"server"&lt;/span&gt; Text=&lt;span class='str'&gt;"Submit"&lt;/span&gt; CssClass=&lt;span class='str'&gt;"btn btn-primary"&lt;/span&gt; OnClick=&lt;span class='str'&gt;"SubmitButton_Click"&lt;/span&gt; /&amp;gt;
        &amp;lt;/form&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt; 		&lt;/tr&gt; 		&lt;tr&gt;			&lt;td style="height:1px;background-image:url(//rsdn.org/Forum/images/corner.gif);background-repeat:no-repeat;background-position:center"&gt;							&lt;/td&gt;			&lt;td&gt;&lt;/td&gt;		&lt;/tr&gt;	&lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt;
&lt;br /&gt;
Потом как-то стал популярен MVC везде, в т.ч. в том же PHP он начал активно использоваться, и уже все стало намного проще:&lt;br /&gt;
&lt;br /&gt;
&lt;table style="margin-top:5px;margin-bottom:5px" cellpadding="0" cellspacing="0"&gt; 	&lt;tbody onclick="toggleExpand(this)" style="cursor:pointer"&gt; 		&lt;tr&gt; 			&lt;td style="width:10px" class="hidden_Plus"&gt;				&amp;nbsp;			&lt;/td&gt;			&lt;td style="font-weight:bold;padding-left:2px;font-family:Verdana,Arial;font-size:9pt;"&gt;								ASP.NET MVC (Razor)			&lt;/td&gt; 		&lt;/tr&gt; 	&lt;/tbody&gt; 	&lt;tbody style="display:none"&gt; 		&lt;tr&gt;			&lt;td style="background-image:url(//rsdn.org/Forum/images/line.gif);background-repeat:repeat-y;background-position:center"&gt;							&lt;/td&gt;			&lt;td style="padding-left:3px;font-family:Verdana,Arial;font-size:8pt"&gt;&lt;pre class='c'&gt;&lt;code&gt;@model MyApp.Models.ContactForm

@{
    ViewBag.Title = &lt;span class='str'&gt;"Contact Form"&lt;/span&gt;;
}

&amp;lt;h2&amp;gt;@ViewBag.Title&amp;lt;/h2&amp;gt;

@using (Html.BeginForm(&lt;span class='str'&gt;"Submit"&lt;/span&gt;, &lt;span class='str'&gt;"Home"&lt;/span&gt;, FormMethod.Post))
{
    &amp;lt;div class=&lt;span class='str'&gt;"form-group"&lt;/span&gt;&amp;gt;
        @Html.LabelFor(m =&amp;gt; m.Name)
        @Html.TextBoxFor(m =&amp;gt; m.Name, new { @class = &lt;span class='str'&gt;"form-control"&lt;/span&gt; })
    &amp;lt;/div&amp;gt;

    &amp;lt;div class=&lt;span class='str'&gt;"form-group"&lt;/span&gt;&amp;gt;
        @Html.LabelFor(m =&amp;gt; m.Email)
        @Html.TextBoxFor(m =&amp;gt; m.Email, new { @class = &lt;span class='str'&gt;"form-control"&lt;/span&gt; })
    &amp;lt;/div&amp;gt;

    &amp;lt;div class=&lt;span class='str'&gt;"form-group"&lt;/span&gt;&amp;gt;
        @Html.LabelFor(m =&amp;gt; m.Message)
        @Html.TextAreaFor(m =&amp;gt; m.Message, new { @class = &lt;span class='str'&gt;"form-control"&lt;/span&gt; })
    &amp;lt;/div&amp;gt;

    &amp;lt;button type=&lt;span class='str'&gt;"submit"&lt;/span&gt; class=&lt;span class='str'&gt;"btn btn-primary"&lt;/span&gt;&amp;gt;Submit&amp;lt;/button&amp;gt;
}&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt; 		&lt;/tr&gt; 		&lt;tr&gt;			&lt;td style="height:1px;background-image:url(//rsdn.org/Forum/images/corner.gif);background-repeat:no-repeat;background-position:center"&gt;							&lt;/td&gt;			&lt;td&gt;&lt;/td&gt;		&lt;/tr&gt;	&lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;table style="margin-top:5px;margin-bottom:5px" cellpadding="0" cellspacing="0"&gt; 	&lt;tbody onclick="toggleExpand(this)" style="cursor:pointer"&gt; 		&lt;tr&gt; 			&lt;td style="width:10px" class="hidden_Plus"&gt;				&amp;nbsp;			&lt;/td&gt;			&lt;td style="font-weight:bold;padding-left:2px;font-family:Verdana,Arial;font-size:9pt;"&gt;								ASP.NET Blazor			&lt;/td&gt; 		&lt;/tr&gt; 	&lt;/tbody&gt; 	&lt;tbody style="display:none"&gt; 		&lt;tr&gt;			&lt;td style="background-image:url(//rsdn.org/Forum/images/line.gif);background-repeat:repeat-y;background-position:center"&gt;							&lt;/td&gt;			&lt;td style="padding-left:3px;font-family:Verdana,Arial;font-size:8pt"&gt;&lt;pre class='c'&gt;&lt;code&gt;@page &lt;span class='str'&gt;"/contact"&lt;/span&gt;
@using MyApp.Models

&amp;lt;h3&amp;gt;Contact Form&amp;lt;/h3&amp;gt;

&amp;lt;EditForm Model=&lt;span class='str'&gt;"@contactForm"&lt;/span&gt; OnValidSubmit=&lt;span class='str'&gt;"HandleValidSubmit"&lt;/span&gt;&amp;gt;
    &amp;lt;DataAnnotationsValidator /&amp;gt;
    &amp;lt;ValidationSummary /&amp;gt;

    &amp;lt;div class=&lt;span class='str'&gt;"form-group"&lt;/span&gt;&amp;gt;
        &amp;lt;label for=&lt;span class='str'&gt;"Name"&lt;/span&gt;&amp;gt;Name&amp;lt;/label&amp;gt;
        &amp;lt;InputText id=&lt;span class='str'&gt;"Name"&lt;/span&gt; class=&lt;span class='str'&gt;"form-control"&lt;/span&gt; @bind-Value=&lt;span class='str'&gt;"contactForm.Name"&lt;/span&gt; /&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;div class=&lt;span class='str'&gt;"form-group"&lt;/span&gt;&amp;gt;
        &amp;lt;label for=&lt;span class='str'&gt;"Email"&lt;/span&gt;&amp;gt;Email&amp;lt;/label&amp;gt;
        &amp;lt;InputText id=&lt;span class='str'&gt;"Email"&lt;/span&gt; class=&lt;span class='str'&gt;"form-control"&lt;/span&gt; @bind-Value=&lt;span class='str'&gt;"contactForm.Email"&lt;/span&gt; /&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;div class=&lt;span class='str'&gt;"form-group"&lt;/span&gt;&amp;gt;
        &amp;lt;label for=&lt;span class='str'&gt;"Message"&lt;/span&gt;&amp;gt;Message&amp;lt;/label&amp;gt;
        &amp;lt;InputTextArea id=&lt;span class='str'&gt;"Message"&lt;/span&gt; class=&lt;span class='str'&gt;"form-control"&lt;/span&gt; @bind-Value=&lt;span class='str'&gt;"contactForm.Message"&lt;/span&gt; /&amp;gt;
    &amp;lt;/div&amp;gt;

    &amp;lt;button type=&lt;span class='str'&gt;"submit"&lt;/span&gt; class=&lt;span class='str'&gt;"btn btn-primary"&lt;/span&gt;&amp;gt;Submit&amp;lt;/button&amp;gt;
&amp;lt;/EditForm&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt; 		&lt;/tr&gt; 		&lt;tr&gt;			&lt;td style="height:1px;background-image:url(//rsdn.org/Forum/images/corner.gif);background-repeat:no-repeat;background-position:center"&gt;							&lt;/td&gt;			&lt;td&gt;&lt;/td&gt;		&lt;/tr&gt;	&lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;h5 class='formatter'&gt;Андроид&lt;/h5&gt;
&lt;br /&gt;
Используются XML-файлы с описанием элементов формы:&lt;br /&gt;
&lt;br /&gt;
&lt;table style="margin-top:5px;margin-bottom:5px" cellpadding="0" cellspacing="0"&gt; 	&lt;tbody onclick="toggleExpand(this)" style="cursor:pointer"&gt; 		&lt;tr&gt; 			&lt;td style="width:10px" class="hidden_Plus"&gt;				&amp;nbsp;			&lt;/td&gt;			&lt;td style="font-weight:bold;padding-left:2px;font-family:Verdana,Arial;font-size:9pt;"&gt;								XML-layout			&lt;/td&gt; 		&lt;/tr&gt; 	&lt;/tbody&gt; 	&lt;tbody style="display:none"&gt; 		&lt;tr&gt;			&lt;td style="background-image:url(//rsdn.org/Forum/images/line.gif);background-repeat:repeat-y;background-position:center"&gt;							&lt;/td&gt;			&lt;td style="padding-left:3px;font-family:Verdana,Arial;font-size:8pt"&gt;&lt;pre class='c'&gt;&lt;code&gt;&amp;lt;&lt;span class='kw'&gt;?xml version&lt;/span&gt;=&lt;span class='str'&gt;"1.0"&lt;/span&gt; &lt;span class='kw'&gt;encoding&lt;/span&gt;=&lt;span class='str'&gt;"utf-8"&lt;/span&gt;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&lt;span class='str'&gt;"http://schemas.android.com/apk/res/android"&lt;/span&gt;
    android:layout_width=&lt;span class='str'&gt;"match_parent"&lt;/span&gt;
    android:layout_height=&lt;span class='str'&gt;"match_parent"&lt;/span&gt;
    android:orientation=&lt;span class='str'&gt;"vertical"&lt;/span&gt;
    android:padding=&lt;span class='str'&gt;"16dp"&lt;/span&gt;&amp;gt;

    &amp;lt;EditText
        android:id=&lt;span class='str'&gt;"@+id/usernameEditText"&lt;/span&gt;
        android:layout_width=&lt;span class='str'&gt;"match_parent"&lt;/span&gt;
        android:layout_height=&lt;span class='str'&gt;"wrap_content"&lt;/span&gt;
        android:hint=&lt;span class='str'&gt;"Enter your username"&lt;/span&gt; /&amp;gt;

    &amp;lt;Button
        android:id=&lt;span class='str'&gt;"@+id/submitButton"&lt;/span&gt;
        android:layout_width=&lt;span class='str'&gt;"match_parent"&lt;/span&gt;
        android:layout_height=&lt;span class='str'&gt;"wrap_content"&lt;/span&gt;
        android:text=&lt;span class='str'&gt;"Submit"&lt;/span&gt; /&amp;gt;
&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt; 		&lt;/tr&gt; 		&lt;tr&gt;			&lt;td style="height:1px;background-image:url(//rsdn.org/Forum/images/corner.gif);background-repeat:no-repeat;background-position:center"&gt;							&lt;/td&gt;			&lt;td&gt;&lt;/td&gt;		&lt;/tr&gt;	&lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;h5 class='formatter'&gt;iOS&lt;/h5&gt;
&lt;br /&gt;
Аналогично, использовался XML для описания:&lt;br /&gt;
&lt;br /&gt;
&lt;table style="margin-top:5px;margin-bottom:5px" cellpadding="0" cellspacing="0"&gt; 	&lt;tbody onclick="toggleExpand(this)" style="cursor:pointer"&gt; 		&lt;tr&gt; 			&lt;td style="width:10px" class="hidden_Plus"&gt;				&amp;nbsp;			&lt;/td&gt;			&lt;td style="font-weight:bold;padding-left:2px;font-family:Verdana,Arial;font-size:9pt;"&gt;								Storyboard			&lt;/td&gt; 		&lt;/tr&gt; 	&lt;/tbody&gt; 	&lt;tbody style="display:none"&gt; 		&lt;tr&gt;			&lt;td style="background-image:url(//rsdn.org/Forum/images/line.gif);background-repeat:repeat-y;background-position:center"&gt;							&lt;/td&gt;			&lt;td style="padding-left:3px;font-family:Verdana,Arial;font-size:8pt"&gt;&lt;pre class='c'&gt;&lt;code&gt;&amp;lt;&lt;span class='kw'&gt;?xml version&lt;/span&gt;=&lt;span class='str'&gt;"1.0"&lt;/span&gt; &lt;span class='kw'&gt;encoding&lt;/span&gt;=&lt;span class='str'&gt;"UTF-8"&lt;/span&gt;?&amp;gt;
&amp;lt;plist &lt;span class='kw'&gt;version&lt;/span&gt;=&lt;span class='str'&gt;"1.0"&lt;/span&gt;&amp;gt;
  &amp;lt;dict&amp;gt;
    &amp;lt;&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;UIApplicationSceneManifest&amp;lt;/&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;
    &amp;lt;dict&amp;gt;
      &amp;lt;&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;UIWindowScene&amp;lt;/&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;
      &amp;lt;dict&amp;gt;
        &amp;lt;&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;UIWindowSceneRoleApplication&amp;lt;/&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;
        &amp;lt;dict&amp;gt;
          &amp;lt;&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;UIViewController&amp;lt;/&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;
          &amp;lt;dict&amp;gt;
            &amp;lt;&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;view&amp;lt;/&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;
            &amp;lt;dict&amp;gt;
              &amp;lt;&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;subviews&amp;lt;/&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;
              &amp;lt;array&amp;gt;
                &amp;lt;dict&amp;gt;
                  &amp;lt;&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;UILabel&amp;lt;/&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;
                  &amp;lt;dict&amp;gt;
                    &amp;lt;&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;text&amp;lt;/&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;
                    &amp;lt;string&amp;gt;Hello, world!&amp;lt;/string&amp;gt;
                    &amp;lt;&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;frame&amp;lt;/&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;
                    &amp;lt;string&amp;gt;{{50, 50}, {200, 40}}&amp;lt;/string&amp;gt;
                  &amp;lt;/dict&amp;gt;
                &amp;lt;/dict&amp;gt;
                &amp;lt;dict&amp;gt;
                  &amp;lt;&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;UIButton&amp;lt;/&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;
                  &amp;lt;dict&amp;gt;
                    &amp;lt;&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;title&amp;lt;/&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;
                    &amp;lt;string&amp;gt;Press me&amp;lt;/string&amp;gt;
                    &amp;lt;&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;frame&amp;lt;/&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;
                    &amp;lt;string&amp;gt;{{50, 120}, {200, 50}}&amp;lt;/string&amp;gt;
                    &amp;lt;&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;action&amp;lt;/&lt;span class='kw'&gt;key&lt;/span&gt;&amp;gt;
                    &amp;lt;string&amp;gt;buttonPressed:&amp;lt;/string&amp;gt;
                  &amp;lt;/dict&amp;gt;
                &amp;lt;/dict&amp;gt;
              &amp;lt;/array&amp;gt;
            &amp;lt;/dict&amp;gt;
          &amp;lt;/dict&amp;gt;
        &amp;lt;/dict&amp;gt;
      &amp;lt;/dict&amp;gt;
    &amp;lt;/dict&amp;gt;
  &amp;lt;/dict&amp;gt;
&amp;lt;/plist&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt; 		&lt;/tr&gt; 		&lt;tr&gt;			&lt;td style="height:1px;background-image:url(//rsdn.org/Forum/images/corner.gif);background-repeat:no-repeat;background-position:center"&gt;							&lt;/td&gt;			&lt;td&gt;&lt;/td&gt;		&lt;/tr&gt;	&lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;h2 class='formatter'&gt;Новые нравы&lt;/h2&gt;
&lt;br /&gt;
А теперь смотрите к чему мы опять вернулись.&lt;br /&gt;
&lt;br /&gt;
&lt;h5 class='formatter'&gt;Flutter&lt;/h5&gt;
&lt;br /&gt;
&lt;table style="margin-top:5px;margin-bottom:5px" cellpadding="0" cellspacing="0"&gt; 	&lt;tbody onclick="toggleExpand(this)" style="cursor:pointer"&gt; 		&lt;tr&gt; 			&lt;td style="width:10px" class="hidden_Plus"&gt;				&amp;nbsp;			&lt;/td&gt;			&lt;td style="font-weight:bold;padding-left:2px;font-family:Verdana,Arial;font-size:9pt;"&gt;								Flutter			&lt;/td&gt; 		&lt;/tr&gt; 	&lt;/tbody&gt; 	&lt;tbody style="display:none"&gt; 		&lt;tr&gt;			&lt;td style="background-image:url(//rsdn.org/Forum/images/line.gif);background-repeat:repeat-y;background-position:center"&gt;							&lt;/td&gt;			&lt;td style="padding-left:3px;font-family:Verdana,Arial;font-size:8pt"&gt;&lt;pre class='c'&gt;&lt;code&gt;&lt;span class='kw'&gt;import&lt;/span&gt; '&lt;span class='kw'&gt;package&lt;/span&gt;:flutter/material.dart';

&lt;span class='kw'&gt;void&lt;/span&gt; main() {
  runApp(MyApp());
}

&lt;span class='kw'&gt;class&lt;/span&gt; MyApp &lt;span class='kw'&gt;extends&lt;/span&gt; StatelessWidget {
  @override
  Widget build(BuildContext context) {
    &lt;span class='kw'&gt;return&lt;/span&gt; MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Форма регистрации')),
        body: Padding(
          padding: &lt;span class='kw'&gt;const&lt;/span&gt; EdgeInsets.all(16.0),
          child: RegistrationForm(),
        ),
      ),
    );
  }
}

&lt;span class='kw'&gt;class&lt;/span&gt; RegistrationForm &lt;span class='kw'&gt;extends&lt;/span&gt; StatefulWidget {
  @override
  _RegistrationFormState createState() =&amp;gt; _RegistrationFormState();
}

&lt;span class='kw'&gt;class&lt;/span&gt; _RegistrationFormState &lt;span class='kw'&gt;extends&lt;/span&gt; State&amp;lt;RegistrationForm&amp;gt; {
  &lt;span class='kw'&gt;final&lt;/span&gt; _formKey = GlobalKey&amp;lt;FormState&amp;gt;();
  &lt;span class='kw'&gt;final&lt;/span&gt; _nameController = TextEditingController();
  &lt;span class='kw'&gt;final&lt;/span&gt; _emailController = TextEditingController();
  &lt;span class='kw'&gt;final&lt;/span&gt; _passwordController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    &lt;span class='kw'&gt;return&lt;/span&gt; Form(
      key: _formKey,
      child: Column(
        children: &amp;lt;Widget&amp;gt;[
          TextFormField(
            controller: _nameController,
            decoration: InputDecoration(labelText: 'Имя'),
            validator: (value) {
              &lt;span class='kw'&gt;if&lt;/span&gt; (value == &lt;span class='kw'&gt;null&lt;/span&gt; || value.isEmpty) {
                &lt;span class='kw'&gt;return&lt;/span&gt; 'Пожалуйста, введите имя';
              }
              &lt;span class='kw'&gt;return null&lt;/span&gt;;
            },
          ),
          TextFormField(
            controller: _emailController,
            decoration: InputDecoration(labelText: 'Электронная почта'),
            validator: (value) {
              &lt;span class='kw'&gt;if&lt;/span&gt; (value == &lt;span class='kw'&gt;null&lt;/span&gt; || value.isEmpty) {
                &lt;span class='kw'&gt;return&lt;/span&gt; 'Пожалуйста, введите email';
              } &lt;span class='kw'&gt;else if&lt;/span&gt; (!RegExp(r'\S+@\S+\.\S+').hasMatch(value)) {
                &lt;span class='kw'&gt;return&lt;/span&gt; 'Введите корректный email';
              }
              &lt;span class='kw'&gt;return null&lt;/span&gt;;
            },
          ),
          TextFormField(
            controller: _passwordController,
            decoration: InputDecoration(labelText: 'Пароль'),
            obscureText: &lt;span class='kw'&gt;true&lt;/span&gt;,
            validator: (value) {
              &lt;span class='kw'&gt;if&lt;/span&gt; (value == &lt;span class='kw'&gt;null&lt;/span&gt; || value.isEmpty) {
                &lt;span class='kw'&gt;return&lt;/span&gt; 'Пожалуйста, введите пароль';
              } &lt;span class='kw'&gt;else if&lt;/span&gt; (value.length &amp;lt; 6) {
                &lt;span class='kw'&gt;return&lt;/span&gt; 'Пароль должен содержать хотя бы 6 символов';
              }
              &lt;span class='kw'&gt;return null&lt;/span&gt;;
            },
          ),
          SizedBox(height: 20),
          ElevatedButton(
            onPressed: () {
              &lt;span class='kw'&gt;if&lt;/span&gt; (_formKey.currentState?.validate() ?? &lt;span class='kw'&gt;false&lt;/span&gt;) {
                &lt;span class='com'&gt;// Если форма валидна, отправить данные&lt;/span&gt;
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text('Форма отправлена')),
                );
              }
            },
            child: Text('Отправить'),
          ),
        ],
      ),
    );
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt; 		&lt;/tr&gt; 		&lt;tr&gt;			&lt;td style="height:1px;background-image:url(//rsdn.org/Forum/images/corner.gif);background-repeat:no-repeat;background-position:center"&gt;							&lt;/td&gt;			&lt;td&gt;&lt;/td&gt;		&lt;/tr&gt;	&lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;h5 class='formatter'&gt;Kotlin Multiplatform (KMP)&lt;/h5&gt;
&lt;br /&gt;
Вариант Compose Multiplatform:&lt;br /&gt;
&lt;br /&gt;
&lt;table style="margin-top:5px;margin-bottom:5px" cellpadding="0" cellspacing="0"&gt; 	&lt;tbody onclick="toggleExpand(this)" style="cursor:pointer"&gt; 		&lt;tr&gt; 			&lt;td style="width:10px" class="hidden_Plus"&gt;				&amp;nbsp;			&lt;/td&gt;			&lt;td style="font-weight:bold;padding-left:2px;font-family:Verdana,Arial;font-size:9pt;"&gt;								Compose Multiplatform			&lt;/td&gt; 		&lt;/tr&gt; 	&lt;/tbody&gt; 	&lt;tbody style="display:none"&gt; 		&lt;tr&gt;			&lt;td style="background-image:url(//rsdn.org/Forum/images/line.gif);background-repeat:repeat-y;background-position:center"&gt;							&lt;/td&gt;			&lt;td style="padding-left:3px;font-family:Verdana,Arial;font-size:8pt"&gt;&lt;pre class='c'&gt;&lt;code&gt;@Composable
fun LoginForm() {
    Column {
        TextField(value = username, onValueChange = { username = it }, label = { Text("Username") })
        TextField(value = password, onValueChange = { password = it }, label = { Text("Password") }, visualTransformation = PasswordVisualTransformation())
        Button(onClick = { /* handle login */ }) {
            Text("Login")
        }
    }
}&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt; 		&lt;/tr&gt; 		&lt;tr&gt;			&lt;td style="height:1px;background-image:url(//rsdn.org/Forum/images/corner.gif);background-repeat:no-repeat;background-position:center"&gt;							&lt;/td&gt;			&lt;td&gt;&lt;/td&gt;		&lt;/tr&gt;	&lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;h5 class='formatter'&gt;SwiftUI&lt;/h5&gt;
&lt;br /&gt;
И даже новомодный SwiftUI&lt;br /&gt;
&lt;br /&gt;
&lt;table style="margin-top:5px;margin-bottom:5px" cellpadding="0" cellspacing="0"&gt; 	&lt;tbody onclick="toggleExpand(this)" style="cursor:pointer"&gt; 		&lt;tr&gt; 			&lt;td style="width:10px" class="hidden_Plus"&gt;				&amp;nbsp;			&lt;/td&gt;			&lt;td style="font-weight:bold;padding-left:2px;font-family:Verdana,Arial;font-size:9pt;"&gt;								SwiftUI			&lt;/td&gt; 		&lt;/tr&gt; 	&lt;/tbody&gt; 	&lt;tbody style="display:none"&gt; 		&lt;tr&gt;			&lt;td style="background-image:url(//rsdn.org/Forum/images/line.gif);background-repeat:repeat-y;background-position:center"&gt;							&lt;/td&gt;			&lt;td style="padding-left:3px;font-family:Verdana,Arial;font-size:8pt"&gt;&lt;pre class='c'&gt;&lt;code&gt;&lt;span class='kw'&gt;import&lt;/span&gt; SwiftUI

struct ContentView: View {
    &lt;span class='kw'&gt;var&lt;/span&gt; body: some View {
        VStack {
            Text(&lt;span class='str'&gt;"Hello, world!"&lt;/span&gt;)
                .font(.title)
                .padding()
            
            Button(action: {
                print(&lt;span class='str'&gt;"Button pressed"&lt;/span&gt;)
            }) {
                Text(&lt;span class='str'&gt;"Press me"&lt;/span&gt;)
                    .font(.title)
                    .padding()
                    .background(Color.blue)
                    .foregroundColor(.white)
                    .cornerRadius(10)
            }
        }
        .padding()
    }
}

struct ContentView_Previews: PreviewProvider {
    &lt;span class='kw'&gt;static var&lt;/span&gt; previews: some View {
        ContentView()
    }
}&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt; 		&lt;/tr&gt; 		&lt;tr&gt;			&lt;td style="height:1px;background-image:url(//rsdn.org/Forum/images/corner.gif);background-repeat:no-repeat;background-position:center"&gt;							&lt;/td&gt;			&lt;td&gt;&lt;/td&gt;		&lt;/tr&gt;	&lt;/tbody&gt; &lt;/table&gt; &lt;br /&gt;
&lt;br /&gt;
&amp;mdash; это декларативно-императивный подход какой-то, когда вроде и все в декларации, но так же можно в любом месте и функцию дернуть. Причем сразу многие популярные платформы поддались этой тенденции. Т.е. все-таки отказались от концепции полного разделения мух и котлет &amp;mdash; немножко мух теперь поддобавить можно &lt;img border='0' width='15' height='15' src='//rsdn.org/Forum/images/smile.gif' /&gt;&lt;/div&gt;
				
		</description>
		
		<category>philosophy</category>
		<pubDate>Sun, 29 Dec 2024 10:06:41 GMT</pubDate>
		
			<author>Shmj &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>18</slash:comments>
		
	</item>

	<item>
		<title>Изменение массива данных</title>
		<link>http://rsdn.org/Forum/philosophy/8868872.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/philosophy/8868872</guid>
		<comments>http://rsdn.org/Forum/philosophy/8868872</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8868872</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8868872</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8868872</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Есть массив объектов типа Card {amount : decimal, currency : string} полученных из базы.&lt;br /&gt;
Надо на фронт отправить пользователю всё в одной валюте и для этого есть метод ApplyCurrencyRate в репозитории который к уже полученному из базы массиву применяет курс валюты выбранной пользователем.&lt;br /&gt;
&lt;br /&gt;
какой вариант лучше:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class='c'&gt;&lt;code&gt;List&amp;lt;ApplyCurrencyRate&amp;gt; ApplyCurrencyRate(List&amp;lt;ApplyCurrencyRate&amp;gt; list, Dictionary&amp;lt;&lt;span class='kw'&gt;string&lt;/span&gt;, &lt;span class='kw'&gt;decimal&lt;/span&gt;&amp;gt; rates)
{
  &lt;span class='kw'&gt;var&lt;/span&gt; result = list;
  Array.Foreach(result, ....);
  &lt;span class='kw'&gt;return&lt;/span&gt; result;
}

&lt;span class='kw'&gt;void&lt;/span&gt; ApplyCurrencyRate(List&amp;lt;ApplyCurrencyRate&amp;gt; list, Dictionary&amp;lt;&lt;span class='kw'&gt;string&lt;/span&gt;, &lt;span class='kw'&gt;decimal&lt;/span&gt;&amp;gt; rates)
{   
  Array.Foreach(list, ....);
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
				
		</description>
		
		<category>philosophy</category>
		<pubDate>Tue, 17 Dec 2024 06:52:48 GMT</pubDate>
		
			<author>snaphold &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>2</slash:comments>
		
	</item>

	<item>
		<title>Программисты-попаданцы :)</title>
		<link>http://rsdn.org/Forum/philosophy/8867823.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/philosophy/8867823</guid>
		<comments>http://rsdn.org/Forum/philosophy/8867823</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8867823</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8867823</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8867823</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Внезапно подумалось, есть ли книги о программистах-попаданцах. &lt;img border='0' width='15' height='15' src='//rsdn.org/Forum/images/smile.gif' /&gt; Погуглил &amp;mdash; действительно есть, но какое-то мутное фэнтези, замешанное на магии. А вот чтоб какой-нибудь питонист/жабаскриптер, да попал в реальные 60-70-е прошлого века, с миссией нести идеи "эффективного и безопасного" программирования в массы унылых тружеников фортрана и кобола? &lt;img border='0' width='15' height='15' src='//rsdn.org/Forum/images/smile.gif' /&gt;&lt;/div&gt;
				
		</description>
		
		<category>philosophy</category>
		<pubDate>Sat, 14 Dec 2024 19:04:14 GMT</pubDate>
		
			<author>Евгений Музыченко &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>58</slash:comments>
		
	</item>

	<item>
		<title>Динамические vs статические классы</title>
		<link>http://rsdn.org/Forum/philosophy/8863560.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/philosophy/8863560</guid>
		<comments>http://rsdn.org/Forum/philosophy/8863560</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8863560</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8863560</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8863560</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Я как обычно излагаю Delphi понятия, но вроде на C++ должно быть всё очень похоже. Если не ошибаюсь, в C++ есть динамические классы, которые корректно называть собственно классами, и статические классы, аналогом которых в Delphi являются рекорды?&lt;br /&gt;
Часто возникает выбор &amp;mdash; оборачивать ли какую-то сущность а класс или рекорд. Я обычно делаю рекорд из всего, что не требует никакого динамического выделения памяти. Например у меня есть рекорд tvector, включающий в себя три числа x, y, z. Для разных операций с векторами вроде вычисления длины вектора, сложения, умножения и т.д. я пишу функции (какие-то в виде собственных функций рекорда, какие в виде просто функций). Делать из векторов класс было бы весьма неудобно, т.к. надо их будет каждый раз инициализировать и финализировать, а с рекордом я могу написать vector2:=vector1.&lt;br /&gt;
Но везде, где появляются динамические массивы и строки, обычно мне кажется удобнее создавать класс. У класса есть три базовых функции, которые надо проверять и править каждый раз, когда я что-то в него добавляю: конструктор, деструктор и ассигн. В Delphi нет и видимо в принципе не может быть полностью безглючного присвоения data2:=data1 с такими рекордами, поэтому надо делать data2.assign(data1).&lt;br /&gt;
Собственно к рекорду тоже можно прикрутить ассигн, но мне интуитивно кажется что это всё не есть удачные решения. Тут главный момент &amp;mdash; передача данных в произвольных функциях. С классами всё понятно и удобно, потому что я всегда знаю что переменная класса &amp;mdash; это указатель, соответственно если например класс передаётся как параметр какой-то функции, я точно знаю что перед её вызовом был вызван конструктор класса, а после будет вызван деструктор. С рекордами, если они содержат что-то динамическое, приходится передавать данные в функциях через var, и я плохо осознаю, например, не будет ли лишних проблем, если переменную с var передать как var ещё одной подпрограмме, может быть рекурсивной.&lt;br /&gt;
С классами меня естественно раздражает их медленность по сравнению с рекордами, плюс то что классы хранят какую-то дополнительную информацию вроде названия класса или таблицы виртуальных методов, а это ещё тормоза. В Delphi нет быстрых классов без этого? Если нет, может я когда-то дозрею до того, что начну активно использовать указатели к рекордам. Но может быть я слышал что использование указателей в современном программировании считается моветоном, вроде безусловных переходов?&lt;br /&gt;
Сишники, вам понятны эти дельфистские заморочки, или у вас как-то по-другому?&lt;/div&gt;
				
		</description>
		
		<category>philosophy</category>
		<pubDate>Sat, 07 Dec 2024 10:36:58 GMT</pubDate>
		
			<author>Khimik &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>15</slash:comments>
		
	</item>

	<item>
		<title>Связи в разметке (на примере HTML)</title>
		<link>http://rsdn.org/Forum/philosophy/8862488.1</link>
		<guid isPermaLink="true">http://rsdn.org/Forum/philosophy/8862488</guid>
		<comments>http://rsdn.org/Forum/philosophy/8862488</comments>
		<wfw:comment>http://rsdn.org/Forum/PostRssComment.aspx?mid=8862488</wfw:comment>
		<wfw:commentRss>http://rsdn.org/Forum/RSS/8862488</wfw:commentRss>
		<trackback:ping>http://rsdn.org/Forum/Trackback.aspx?mid=8862488</trackback:ping>
		<description>
			
					&lt;div style="@import url(http://rsdn.org/Forum/Forum.css);"&gt;Как бы вы организовали связи между узлами разметки, если бы проектировали язык разметки с нуля?&lt;br /&gt;
&lt;br /&gt;
Возможные варианты.&lt;br /&gt;
&lt;br /&gt;
0. Нынешний. У элементов есть id. Элементы ссылаются друг на друга указанием id таргета (на уровне стандарта: &lt;a class="m" href="https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/for" target="_blank"&gt;for&lt;/a&gt;, &lt;a class="m" href="https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-controls" target="_blank"&gt;aria-controls&lt;/a&gt; и т.д.). id уникален в скоупе документа.&lt;br /&gt;
&lt;br /&gt;
Проблема в том, что это синглтон со всеми вытекающими. Например, нам нужно временно (или даже постоянно) склонировать узел для технических нужд, и мы приплыли. Другая проблема — шаблонизация. Представим себе, что у нас есть пара элементов. Тот же input и label к нему. Их нельзя просто объединить в шаблон и инстанцировать, заменяя чисто текст, нужно ещё каждый раз генерировать бессмысленный идентификатор, только для того, чтобы создать связь. Эта связь никому не интересна за пределами шаблона, но о ней приходится думать снаружи (лично я добавил к шаблонизатору специальную переменную "автоидентификатор").&lt;br /&gt;
&lt;br /&gt;
1. Понизить скоуп id. Наверно, тогда что-то сломается? Вам для чего-нибудь нужна уникальность id на уровне документа? Другой вопрос: понижать до какого уровня? До парента? Или ломать ветки как с position: relative, т.е. до первого помеченного (например, абсолютным позиционированием) элемента выше по дереву?&lt;br /&gt;
&lt;br /&gt;
2. Ссылаться не при помощи id, а при помощи селекторов. Но как тогда быть с конфликтами? Брать первый попавшийся? Брать ближайший в иерархии? И хотя это даёт бОльшую гибкость, увы, селекторы не решают проблему скоупа.&lt;br /&gt;
&lt;br /&gt;
2а. Ссылаться при помощи связки "селектор + квалификатор" ("первый в документе", "первый наружу", "первый вглубь" и, может быть, даже "рандомный в найденном", лол). Тогда селекторы можно указывать относительно какого-то элемента.&lt;br /&gt;
&lt;br /&gt;
3. Оформлять связи специальными элементами-скобками: &amp;lt;group&amp;gt;&amp;lt;input&amp;gt;&amp;lt;label&amp;gt;&amp;lt;/group&amp;gt;. Если элементы разнесены, ничего не получится. Т.е. сгодится для for, но не для aria-controls.&lt;br /&gt;
&lt;br /&gt;
4. Вынести описание связей из разметки куда-нибудь ещё (в специальные элементы, в заголовок документа, в DSL). Непонятно, правда, как при описании связи ссылаться на сами элементы... Похоже, это тупиковая идея &lt;img border='0' width='15' height='15' src='//rsdn.org/Forum/images/biggrin.gif' /&gt;&lt;br /&gt;
&lt;br /&gt;
5. Ваши варианты.&lt;/div&gt;
				
		</description>
		
		<category>philosophy</category>
		<pubDate>Thu, 05 Dec 2024 07:46:10 GMT</pubDate>
		
			<author>Alekzander &lt;forum@rsdn.org&gt;</author>
		
		
			<slash:comments>25</slash:comments>
		
	</item>
</channel>
</rss>
