А если я ощущаю отталкивание, то у меня в руке положительный или отрицательный заряд?
Утверждаю, что отрицательных зарядов не бывает, а бывают заряды двух разных видов, которые, если зажмуриться, вместе образуют группу Гротендика поверх моноида натуральных чисел (которая единственна с точностью до изоморфизма, соответствующего переобозначению + ↔ -). Но зажмуриваться надо очень сильно, потому что даже объединение мюона⁺ и электрона не приводит к пустоте и нулю, а даёт мюоний, у которого есть очень нетривиальная квантовая структура, физически, измеримо отличная от таковой у объединения протона и электрона. А если предположить, что отрицательные числа имеют смысл, то и там, и там — ноль, и получаем, что 0 ≠ 0.
Ветка об экономике была до меня. Я отпочковал от неё ветку о Трампе.
Когда люди отпочковывают новую ветку с существенно новым контекстом, как говорится, in good faith, они явно указывают на смену контекста беседы. Например, начиная свой комментарий так: «Понимаю, что это не имеет прямого отношения к обсуждаемому вопросу, но моя нелюбовь к данному политику не позволяет мне не ввернуть лишний раз пропагандистский нарратив про inject bleach. Итак, вот он: [...]»
Более того, ещё раз, когда люди это делают in good faith, но по тем или иным причинам забывают предупредить о смене контекста, они не удивляются, когда собеседник пытается связать ответ человека с, собственно, контекстом беседы, и не продолжают настаивать, что они всё сделали правильно, просто собеседник дурачок.
Учитывая, что вы не сделали ничего из этого, и ранее прямо писали, что основная цель ваших дискуссий — выставить себя д'Артаньяном, априорное отношение к вам соответствующее.
Осталась самая мелочь — найти их (эти символы) на клавиатуре.
Зависит от вашей ОС и оболочки. В моём линуксе это Compose + Shift + <<. В моём андроиде достаточно нажать и подержать на обычные кавычки (и я этим пользуюсь, когда пишу с андроида). Там, кстати, будут и «ёлочки». В OS X вроде тоже какой-то лёгкий аккорд.
И, опять же, для самообразования, повторю вопрос, на который вы забыли ответить — какой прескриптивной нормой указана возможность использовать «лапки» снаружи в набранных на компьютере текстах?
Как успехи с расчётом паразитных ёмкостей Skylake-X? А то вы как-то замяли эту тему (как и тему про поведение MESI/кешлайнов/префетчера ранее).
Раз Вы не можете не то что доказать, а даже объяснить, какое отношение перечисленное Вами имеет к глубокому понимания того, как работает компьютер, то получается в чистом виде подмена темы
Так что до тех пор, пока Вы не укажете, каким образом теория типов связана с пониманием работы компьютера, ответа от меня не увидите.
Мой тезис в том, что перечисленное изначально вами не является необходимым для того, чтобы быть IT-профессионалом. Соответственно, моя иллюстрирующая аналогия наглядно показывает вам на других примерах, что не обязательно разбираться в фундаменте тех или иных аспектов профессии, чтобы быть продуктивным IT-профессионалом.
Я не понимаю, почему вы систематически от меня требуете показать вам, что приведённые мной вещи необходимы для понимания работы компьютера, если я утверждаю ровно обратное. Как у вас устроена логика (не RS-триггераня, а обычная, формальная)?
так как обсуждалось именно это.
И снова нет, так как вы написали
И я даже плохо себе представляю, как можно стать IT профессионалом, не имея понятия об этой базе.
Если бы вы написали «как можно иметь глубокое понимание работы компьютера», то я бы с вами не спорил.
Правда, если бы вы после этого или рядом написали «без глубокого понимания работы компьютера нельзя стать IT профессионалом», то я бы с вами снова спорил, потому что это не так. А у вас, похоже, эти две вещи отождествляются, потому что вы с большой лёгкостью их регулярно подменяете.
А вот Вы пытаетесь утверждать.
Можете отсыпать «видимо» и «кажется» в мои фразы по вашему усмотрению. Я не вижу смысла в этих словах, так как на высказывание универсальных законов социума мы с вами претендуем в равной степени.
Реализация AVX всегда предполагает эту зависимость.
Поэтому я использовал слово «архитектурное решение», а не «микроархитектурное решение». Но нет никаких фундаментальных законов природы, по которым какой-нибудь AVX-штрих не смог бы избежать этой зависимости. И эти причины вы не сможете вывести из первых принципов вообще никак.
А вот то, что сбросить все триггера старших разрядов в множестве регистров сигналом reset в разы быстрее, чем микрокодом, объясняет необходимость этой команды.
Микрокод тут вообще ни при чём, он никак не делает эту команду необходимой или не-необходимой. Эта команда просто разрывает dependency chain (что я указал в правке предыдущего комментария) на некоторыхмикроархитектурах, что позволяет выполнять следующие инструкции, не дожидаясь результатов предыдущих, если там нет прямой зависимости. Как если вы, скажем, долго что-то считали в ymm1, потом сохранили это в память, сделали xor xmm1, xmm1 и стали дальше считать уже на xmm1 — без vzeroupper некоторые микроархитектуры будут предполагать наличие зависимости последующих считываний xmm1 от предыдущих записей в ymm1, и не начнут их (замапив xmm1 в другой физический регистр и считая в нём), хотя вы xmm1 привели явно в конкретное состояние. Здесь скорость обнуления старшей половины ни при чём. Совсем. Вообще.
Ну или Вы занимаетесь только частью работ в реализации HFT, не понимая и не зная целого, что опять таки говорит совсем не в Вашу пользу.
Разделение труда — не слышали про такое?
Я в курсе, что с демагогом дискутировать смысла не имеет. Так что до тех пор, пока Вы не укажете, каким образом теория типов связана с пониманием работы компьютера, ответа от меня не увидите.
Учитывая, что я уже указал, почему требование ответа необходимости теории типов для понимания компьютера не имеет никакого смысла в данном разговоре (потому что изначально вы вообще не про понимание работы говорили, и потому что я как раз доказываю отсутствие этой необходимости для вашего исходного тезиса), отсутствие ответа будет означать ваш слив под весьма надуманным предлогом, не более.
И, кстати, заодно отсутствие указания метода расчёта паразитных ёмкостей в каком-нибудь современном интеловском проце с достаточной точностью для точной оценки задержек кешей, чтобы её потом не нужно было валидировать бенчмарками — это тоже слив.
Но это нестрашно, можете продолжать рассказывать всем про важность знания pn-переходов.
Тогда получается, что суть в подмене темы, а следовательно в демагогии.
Нет никакой подмены темы. Это иллюстрирующая аналогия, как я сразу и написал.
Вы можете верить в эту догму, но тут, в основном, технические специалисты и в догмы они не верят.
Утверждение о необходимости не менее догматично (и, я бы даже сказал, строго более догматично, потому что у описываемой с этим утверждением системы большая сложность).
А в чем проблема то? Они и выводятся, в том числе, через максимальный коэффициент умножения цифрового ФАПЧ и паразитных индуктивности и емкости схемотехнического решения.
Отлично! Последний раз я этим занимался на Skylake-X. С интересом посмотрю на вывод задержек доступа к кэшам по упомянутым вами принципам. Продемонстрируете, особенно если проблем, судя по первой процитированной фразе, никаких?
Можно начать с вычисления паразитных индуктивности и ёмкости схемотехнического решения Skylake-X. Мне (и, думаю, вам) этого хватит за глаза.
Для этого нужно понимать, как работает RS-триггер
Нет. Для этого нужно (и достаточно) понимать, что без vzeroupper процессор предполагает зависимость от старших 128 бит регистра, что является исключительно архитектурным выбором (как, например, является архитектурным выбором сохранять старшие 128 бит ymmN при работе с xmmN) и не следует из первых принципов (я тут снова упрощаю — там внутри проца целая стейтмашина, которая у разных микроархитектур разная — наверн, RS-триггеры принципиально разные между поколениями).
выставить reset для любого количества триггеров в разы быстрее, чем загружать логический ноль в них микрокодом.
Зачем загружать микрокодом? Откуда тут это взялось?
Скорость загрузки ноля тут вообще ни при чём, vzeroupper строго добавляет такты. Дело в разбиении dependency chain в OOO-движке проца.
Как, помогло вам знание pn-переходов, если вы даже не увидели, в чём конкретно проблема и как конкретно она решается?
Например, в FAST процессорах используются решения на FPGA, где без понимания цифровой логики и её базы делать вообще нечего.
В моих задачах FPGA не используется, и?
Зато в моих задачах используется шаблонное метапрограммирование на C++, а это функциональный язык с паттерн-матчингом, а значит, без понимания теорий типов и во что дешугарится паттерн-матчинг там тоже делать нечего. Ведь нечего же? Ведь все программисты на C++, использующие шаблоны, но не знающие типизированное лямбда-исчисление и кодировку Бома-Берардуччи, просто зубрилы и недостойны называться профессионалами?
В убеждённости, что для объяснения окружающего мира достаточно школьных знаний.
Что на самом деле писал я:
Его достаточно, чтобы отбраковать заведомо нереалистичные утверждения
У создателя нарративов-то как: не соврал — день прошёл зря.
Тут я, конечно, искренне надеюсь, что вы действительно просто врёте, а не считаете «отбраковать заведомо нереалистичные утверждения» эквивалентным «объяснить окружающий мир», потому что последнее ещё хуже.
отпадает необходимость в науке
Какое отношение вы имеете к науке? Вы к ней относитесь так же, как верующий относится к его религиозной книжке: он просто верит, потому что в его картине мира ничего лучше быть не может.
Так в итоге, как выбрать, кому доверять — каким-то чувакам в белых халатах или каким-то чувакам в чёрных рясах? Вторых больше и они существуют дольше, там опыта больше, если что.
Попытка заменить это на набор рассуждений обречена на провал.
ХЗ, у меня это приводит в среднем к выбору стратегий поведения, про которые пост-фактум понятно, что они близки к оптимальным, и достаточно хорошим предсказаниям развития событий.
Нет, не плевать, и я бенчмаркал и сравнивал с ragel'ем, например (который генерирует код в том числе с goto, и который писали совсем неглупые люди). Моя хренота была на 3-5% медленнее притом, что умела больше, чем ragel (потому что у меня был не совсем классический регулярный язык, и мне нужно было поддерживать больше вещей, чем умел ragel).
Впрочем, например, программистам JS эффективность интересна в последнем случае.
Я не джаваскриптер.
goto в таких случаях именно улучшает читабельность и лаконичность.
RAII в C++? bracket/with в функциональщине? Да это всё ерунда!
Ассемблерный код или тот, что я пишу? Тот, что я пишу — например, что-то в таком духе
data State
= Init String
| Foo Int
| Done ResultType
step (Init s) = Foo (length s)
step (Foo 0) = Done someResult
step (Foo n) = Foo (n - 1)
run = go . Init
where
go state = case step state of
Done r -> r
state' -> go state'
При этом ваше «слишком много буквочек» позволяет вам просто напрочь проигнорировать все аргументы, которые я вам написал, и просто продолжать повторять шаблонные пропагандистские тезисы, приправляя их фразами-маркерами вроде «привет повсеместные маски которые не любят МАГА» или «а РФ которую приводили МАГА в "хороший" пример», хотя это вообще не имеет никакого отношения к обсуждаемому вопросу, а призвано лишь продемонстрировать вашу приверженность группе.
Вы сначала объясните, почему перечисленное Вами является необходимым
Так оно не является необходимым, в том-то и суть.
для глубокого понимания того, как работает компьютер.
Вы изначально говорили про IT-профессионалов в целом. Глубокое понимание, как работает компьютер (для которого пишутся программы), необходимо настолько же, как глубокое понимание, как работает математическая логика (на основе которой пишутся программы) — то есть, совсем не необходимо.
Можно успешно решать бизнес-задачи, быть полезным в обществе и считаться IT-профессионалом без этих знаний.
Например, можно зазубрить, что доступ к кеш памяти быстрее, чем к основной памяти, но если не понимать почему это так
А задержки доступа к L1/L2/L3/RAM (и размеры кэшей, и особенности TLB) для конкретного процессора сможете вывести из первых принципов и pn-переходов, или всё равно придётся зубрить? А от их конкретных значений и соотношений зависит, какой код будет оптимальнее для данной конкретной машины (поэтому, например, ATLAS при компиляции под железо просто проверяет кучу разных комбинаций размеров кернелов и выбирает наиболее подходящее).
Как далеко от понимания pn-переходов до конкретных протоколов синхронизации кэшей и методов избегания false sharing'а между ядрами? Или, по факту, всё равно надо зубрить что-то в духе «ядра синхронизируются по кэш-линиям, поэтому независимые атомарные переменные должны лежать в разных кэш-линиях, а лучше — через несколько, чтобы префетчер не портил малину»?
Необходимость vzeroupper для эффективного кода (возникающую исключительно из-за особенностей работы legacy SSE с AVX-регистрами) сможете вывести из первых принципов и pn-переходов, или тоже придётся зубрить?
то будет неэффективный код, когда столкнётесь с архитектурой, где это не так.
Среди того, чем я профессионально занимался и могу заниматься — пытаюсь писать наиболее эффективный код и пытаюсь обыграть других людей, пытающихся писать наиболее эффективный код, и всё это в игре с нулевой суммой и существенным вознаграждением aka высокочастотный трейдинг (то есть, стимулы писать эффективный код высокие). Не вижу, как знание pn-переходов в этом помогает.
Более того, я не представляю, что должно случиться в мире, чтобы вдруг пришлось писать под архитектуру, где это не так, и как знание pn-переходов помогло бы и в этом случае.
Я в пэт-проектах использую и парсеры и стейт-машины, почитай, лет пятнадцать. Просто, мне приходится для этого гемороиться с циклом и ветвлением по номеру состояния.
А могли бы взять комбинаторы для парсеров, и не пришлось бы геморроиться.
Я писал эффективные стейтмашины и парсеры. goto в целевом коде всё ещё не нужен. Для парсеров у меня есть attoparsec (которого хватает для 99% задач), для стейтмашин обычный простой код на data State = Foo SomeFooData | Bar SomeOtherData | Baz YouGotItMoreData тоже в 99% задач даёт более чем достаточную эффективность. В 1% задач, когда этого не хватает, я сажусь и пишу DSL с кодогенерацией, а не обмазываю логику goto .
Эффективное зависимое выделение/освобождение — это оксюморон, потому что сам процесс выделения/освобождения на порядки больше любой экономии на подобных вещах.
Не могу на ощупь отличить положительный от отрицательного.
А скорость вдоль координатной оси?
Испытываю только её (заведомо неотрицательный) модуль. Объективных координатных осей не существует в природе (чё-то там про принцип относительности Галилея), это человеческая абстракция.
А диагональ квадрата?
Я специально написал про «невычислимые вещественные» — это для которых не существует алгоритма вычисления. Диагональ квадрата вычислима, поэтому таких диагоналей счётное число (так как алгоритмов счётное число, очевидно). Следовательно, подавляющего большинства вещественных чисел (всё несчётное ℝ минус какое-то счётное множество) не существует.
А если я ощущаю отталкивание, то у меня в руке положительный или отрицательный заряд?
Утверждаю, что отрицательных зарядов не бывает, а бывают заряды двух разных видов, которые, если зажмуриться, вместе образуют группу Гротендика поверх моноида натуральных чисел (которая единственна с точностью до изоморфизма, соответствующего переобозначению + ↔ -). Но зажмуриваться надо очень сильно, потому что даже объединение мюона⁺ и электрона не приводит к пустоте и нулю, а даёт мюоний, у которого есть очень нетривиальная квантовая структура, физически, измеримо отличная от таковой у объединения протона и электрона. А если предположить, что отрицательные числа имеют смысл, то и там, и там — ноль, и получаем, что 0 ≠ 0.
Когда люди отпочковывают новую ветку с существенно новым контекстом, как говорится, in good faith, они явно указывают на смену контекста беседы. Например, начиная свой комментарий так: «Понимаю, что это не имеет прямого отношения к обсуждаемому вопросу, но моя нелюбовь к данному политику не позволяет мне не ввернуть лишний раз пропагандистский нарратив про inject bleach. Итак, вот он: [...]»
Более того, ещё раз, когда люди это делают in good faith, но по тем или иным причинам забывают предупредить о смене контекста, они не удивляются, когда собеседник пытается связать ответ человека с, собственно, контекстом беседы, и не продолжают настаивать, что они всё сделали правильно, просто собеседник дурачок.
Учитывая, что вы не сделали ничего из этого, и ранее прямо писали, что основная цель ваших дискуссий — выставить себя д'Артаньяном, априорное отношение к вам соответствующее.
Зависит от вашей ОС и оболочки. В моём линуксе это Compose + Shift + <<. В моём андроиде достаточно нажать и подержать на обычные кавычки (и я этим пользуюсь, когда пишу с андроида). Там, кстати, будут и «ёлочки». В OS X вроде тоже какой-то лёгкий аккорд.
И, опять же, для самообразования, повторю вопрос, на который вы забыли ответить — какой прескриптивной нормой указана возможность использовать «лапки» снаружи в набранных на компьютере текстах?
Я так говорю, будто у вас вызвало неподдельное удивление, чего это я вспомнил про экономику в ветке об экономике.
Вы систематически не приносите ничего, кроме шума, и это начинает надоедать.
Можно источник, что внешние кавычки могут быть «лапками»?
Кстати, для (немецких, используемых в русском языке) «лапок» есть специальные символы — unicode 8220 и 8222, которые отличаются от ваших 34.
Как успехи с расчётом паразитных ёмкостей Skylake-X? А то вы как-то замяли эту тему (как и тему про поведение MESI/кешлайнов/префетчера ранее).
Мой тезис в том, что перечисленное изначально вами не является необходимым для того, чтобы быть IT-профессионалом. Соответственно, моя иллюстрирующая аналогия наглядно показывает вам на других примерах, что не обязательно разбираться в фундаменте тех или иных аспектов профессии, чтобы быть продуктивным IT-профессионалом.
Я не понимаю, почему вы систематически от меня требуете показать вам, что приведённые мной вещи необходимы для понимания работы компьютера, если я утверждаю ровно обратное. Как у вас устроена логика (не RS-триггераня, а обычная, формальная)?
И снова нет, так как вы написали
Если бы вы написали «как можно иметь глубокое понимание работы компьютера», то я бы с вами не спорил.
Правда, если бы вы после этого или рядом написали «без глубокого понимания работы компьютера нельзя стать IT профессионалом», то я бы с вами снова спорил, потому что это не так. А у вас, похоже, эти две вещи отождествляются, потому что вы с большой лёгкостью их регулярно подменяете.
Можете отсыпать «видимо» и «кажется» в мои фразы по вашему усмотрению. Я не вижу смысла в этих словах, так как на высказывание универсальных законов социума мы с вами претендуем в равной степени.
Поэтому я использовал слово «архитектурное решение», а не «микроархитектурное решение». Но нет никаких фундаментальных законов природы, по которым какой-нибудь AVX-штрих не смог бы избежать этой зависимости. И эти причины вы не сможете вывести из первых принципов вообще никак.
Микрокод тут вообще ни при чём, он никак не делает эту команду необходимой или не-необходимой. Эта команда просто разрывает dependency chain (что я указал в правке предыдущего комментария) на некоторых микроархитектурах, что позволяет выполнять следующие инструкции, не дожидаясь результатов предыдущих, если там нет прямой зависимости. Как если вы, скажем, долго что-то считали в
ymm1, потом сохранили это в память, сделалиxor xmm1, xmm1и стали дальше считать уже наxmm1— безvzeroupperнекоторые микроархитектуры будут предполагать наличие зависимости последующих считыванийxmm1от предыдущих записей вymm1, и не начнут их (замапивxmm1в другой физический регистр и считая в нём), хотя выxmm1привели явно в конкретное состояние. Здесь скорость обнуления старшей половины ни при чём. Совсем. Вообще.Разделение труда — не слышали про такое?
Учитывая, что я уже указал, почему требование ответа необходимости теории типов для понимания компьютера не имеет никакого смысла в данном разговоре (потому что изначально вы вообще не про понимание работы говорили, и потому что я как раз доказываю отсутствие этой необходимости для вашего исходного тезиса), отсутствие ответа будет означать ваш слив под весьма надуманным предлогом, не более.
И, кстати, заодно отсутствие указания метода расчёта паразитных ёмкостей в каком-нибудь современном интеловском проце с достаточной точностью для точной оценки задержек кешей, чтобы её потом не нужно было валидировать бенчмарками — это тоже слив.
Но это нестрашно, можете продолжать рассказывать всем про важность знания pn-переходов.
Это уже терминология какая-то.
Когда я пишу
то я разрабатываю парсер в ваших терминах?
Нет никакой подмены темы. Это иллюстрирующая аналогия, как я сразу и написал.
Утверждение о необходимости не менее догматично (и, я бы даже сказал, строго более догматично, потому что у описываемой с этим утверждением системы большая сложность).
Отлично! Последний раз я этим занимался на Skylake-X. С интересом посмотрю на вывод задержек доступа к кэшам по упомянутым вами принципам. Продемонстрируете, особенно если проблем, судя по первой процитированной фразе, никаких?
Можно начать с вычисления паразитных индуктивности и ёмкости схемотехнического решения Skylake-X. Мне (и, думаю, вам) этого хватит за глаза.
Нет. Для этого нужно (и достаточно) понимать, что без
vzeroupperпроцессор предполагает зависимость от старших 128 бит регистра, что является исключительно архитектурным выбором (как, например, является архитектурным выбором сохранять старшие 128 битymmNпри работе сxmmN) и не следует из первых принципов (я тут снова упрощаю — там внутри проца целая стейтмашина, которая у разных микроархитектур разная — наверн, RS-триггеры принципиально разные между поколениями).Зачем загружать микрокодом? Откуда тут это взялось?
Скорость загрузки ноля тут вообще ни при чём,
vzeroupperстрого добавляет такты. Дело в разбиении dependency chain в OOO-движке проца.Как, помогло вам знание pn-переходов, если вы даже не увидели, в чём конкретно проблема и как конкретно она решается?
В моих задачах FPGA не используется, и?
Зато в моих задачах используется шаблонное метапрограммирование на C++, а это функциональный язык с паттерн-матчингом, а значит, без понимания теорий типов и во что дешугарится паттерн-матчинг там тоже делать нечего. Ведь нечего же? Ведь все программисты на C++, использующие шаблоны, но не знающие типизированное лямбда-исчисление и кодировку Бома-Берардуччи, просто зубрилы и недостойны называться профессионалами?
Что пишете вы:
Что на самом деле писал я:
У создателя нарративов-то как: не соврал — день прошёл зря.
Тут я, конечно, искренне надеюсь, что вы действительно просто врёте, а не считаете «отбраковать заведомо нереалистичные утверждения» эквивалентным «объяснить окружающий мир», потому что последнее ещё хуже.
Какое отношение вы имеете к науке? Вы к ней относитесь так же, как верующий относится к его религиозной книжке: он просто верит, потому что в его картине мира ничего лучше быть не может.
И снова из совсем недавнего
и таких случаев тоже дофига. Вещей вроде канадского требования диверсити в любом исследовании тоже дофига.
Так себе ирония, короче.
А, так вы просто не понимаете, что такое контекст обсуждения!
Контекст обсуждения — это не то, что вы установили, вклинившись в разговор других людей, а то, о чём говорили эти люди до того, как вы вклинились.
Во-первых, в таких случаях в русском языке используются кавычки-«ёлочки».
Во-вторых, я писал о том, что вы говорили, а не о том, что говорил Трамп.
У вас же контекст в свободной форме устанавливается? Наслаждайтесь.
У вас там что-то пропущено, кажется.
Они между собой его ведут? Если да, то я причём к ним?
Так в итоге, как выбрать, кому доверять — каким-то чувакам в белых халатах или каким-то чувакам в чёрных рясах? Вторых больше и они существуют дольше, там опыта больше, если что.
ХЗ, у меня это приводит в среднем к выбору стратегий поведения, про которые пост-фактум понятно, что они близки к оптимальным, и достаточно хорошим предсказаниям развития событий.
И эта проблема проявляется… в чём?
В итоге всё равно выбрали батюшку. Ну и о чём разговор тогда был?
Нет, не плевать, и я бенчмаркал и сравнивал с ragel'ем, например (который генерирует код в том числе с goto, и который писали совсем неглупые люди). Моя хренота была на 3-5% медленнее притом, что умела больше, чем ragel (потому что у меня был не совсем классический регулярный язык, и мне нужно было поддерживать больше вещей, чем умел ragel).
Я не джаваскриптер.
RAII в C++? bracket/with в функциональщине? Да это всё ерунда!
Ассемблерный код или тот, что я пишу? Тот, что я пишу — например, что-то в таком духе
Не понимаю, как «использую парсеры» означает «более низкий уровень реализации [чем библиотека комбинаторов]».
Но тупые всё равно реднеки.
При этом ваше «слишком много буквочек» позволяет вам просто напрочь проигнорировать все аргументы, которые я вам написал, и просто продолжать повторять шаблонные пропагандистские тезисы, приправляя их фразами-маркерами вроде «привет повсеместные маски которые не любят МАГА» или «а РФ которую приводили МАГА в "хороший" пример», хотя это вообще не имеет никакого отношения к обсуждаемому вопросу, а призвано лишь продемонстрировать вашу приверженность группе.
Но да, тупые всё равно реднеки.
Так оно не является необходимым, в том-то и суть.
Вы изначально говорили про IT-профессионалов в целом. Глубокое понимание, как работает компьютер (для которого пишутся программы), необходимо настолько же, как глубокое понимание, как работает математическая логика (на основе которой пишутся программы) — то есть, совсем не необходимо.
Можно успешно решать бизнес-задачи, быть полезным в обществе и считаться IT-профессионалом без этих знаний.
А задержки доступа к L1/L2/L3/RAM (и размеры кэшей, и особенности TLB) для конкретного процессора сможете вывести из первых принципов и pn-переходов, или всё равно придётся зубрить? А от их конкретных значений и соотношений зависит, какой код будет оптимальнее для данной конкретной машины (поэтому, например, ATLAS при компиляции под железо просто проверяет кучу разных комбинаций размеров кернелов и выбирает наиболее подходящее).
Как далеко от понимания pn-переходов до конкретных протоколов синхронизации кэшей и методов избегания false sharing'а между ядрами? Или, по факту, всё равно надо зубрить что-то в духе «ядра синхронизируются по кэш-линиям, поэтому независимые атомарные переменные должны лежать в разных кэш-линиях, а лучше — через несколько, чтобы префетчер не портил малину»?
Необходимость
vzeroupperдля эффективного кода (возникающую исключительно из-за особенностей работы legacy SSE с AVX-регистрами) сможете вывести из первых принципов и pn-переходов, или тоже придётся зубрить?Среди того, чем я профессионально занимался и могу заниматься — пытаюсь писать наиболее эффективный код и пытаюсь обыграть других людей, пытающихся писать наиболее эффективный код, и всё это в игре с нулевой суммой и существенным вознаграждением aka высокочастотный трейдинг (то есть, стимулы писать эффективный код высокие). Не вижу, как знание pn-переходов в этом помогает.
Более того, я не представляю, что должно случиться в мире, чтобы вдруг пришлось писать под архитектуру, где это не так, и как знание pn-переходов помогло бы и в этом случае.
А могли бы взять комбинаторы для парсеров, и не пришлось бы геморроиться.
То есть, на контекст обсуждения вам совершенно наплевать?
Причём здесь вообще Трамп? Вы же прямо сказали, на какую фразу вы отвечали, так и отвечайте за себя.
Я писал эффективные стейтмашины и парсеры.
gotoв целевом коде всё ещё не нужен. Для парсеров у меня естьattoparsec(которого хватает для 99% задач), для стейтмашин обычный простой код наdata State = Foo SomeFooData | Bar SomeOtherData | Baz YouGotItMoreDataтоже в 99% задач даёт более чем достаточную эффективность. В 1% задач, когда этого не хватает, я сажусь и пишу DSL с кодогенерацией, а не обмазываю логикуgoto.Эффективное зависимое выделение/освобождение — это оксюморон, потому что сам процесс выделения/освобождения на порядки больше любой экономии на подобных вещах.
Не могу на ощупь отличить положительный от отрицательного.
Испытываю только её (заведомо неотрицательный) модуль. Объективных координатных осей не существует в природе (чё-то там про принцип относительности Галилея), это человеческая абстракция.
Я специально написал про «невычислимые вещественные» — это для которых не существует алгоритма вычисления. Диагональ квадрата вычислима, поэтому таких диагоналей счётное число (так как алгоритмов счётное число, очевидно). Следовательно, подавляющего большинства вещественных чисел (всё несчётное ℝ минус какое-то счётное множество) не существует.