Pull to refresh
-1
1.9

Специалист по теории типов USB-кабелей

Send message

А если я ощущаю отталкивание, то у меня в руке положительный или отрицательный заряд?

Утверждаю, что отрицательных зарядов не бывает, а бывают заряды двух разных видов, которые, если зажмуриться, вместе образуют группу Гротендика поверх моноида натуральных чисел (которая единственна с точностью до изоморфизма, соответствующего переобозначению + ↔ -). Но зажмуриваться надо очень сильно, потому что даже объединение мюона⁺ и электрона не приводит к пустоте и нулю, а даёт мюоний, у которого есть очень нетривиальная квантовая структура, физически, измеримо отличная от таковой у объединения протона и электрона. А если предположить, что отрицательные числа имеют смысл, то и там, и там — ноль, и получаем, что 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 профессионалом, не имея понятия об этой базе.

Если бы вы написали «как можно иметь глубокое понимание работы компьютера», то я бы с вами не спорил.

Правда, если бы вы после этого или рядом написали «без глубокого понимания работы компьютера нельзя стать IT профессионалом», то я бы с вами снова спорил, потому что это не так. А у вас, похоже, эти две вещи отождествляются, потому что вы с большой лёгкостью их регулярно подменяете.

А вот Вы пытаетесь утверждать.

Можете отсыпать «видимо» и «кажется» в мои фразы по вашему усмотрению. Я не вижу смысла в этих словах, так как на высказывание универсальных законов социума мы с вами претендуем в равной степени.

Реализация AVX всегда предполагает эту зависимость.

Поэтому я использовал слово «архитектурное решение», а не «микроархитектурное решение». Но нет никаких фундаментальных законов природы, по которым какой-нибудь AVX-штрих не смог бы избежать этой зависимости. И эти причины вы не сможете вывести из первых принципов вообще никак.

А вот то, что сбросить все триггера старших разрядов в множестве регистров сигналом reset в разы быстрее, чем микрокодом, объясняет необходимость этой команды.

Микрокод тут вообще ни при чём, он никак не делает эту команду необходимой или не-необходимой. Эта команда просто разрывает dependency chain (что я указал в правке предыдущего комментария) на некоторых микроархитектурах, что позволяет выполнять следующие инструкции, не дожидаясь результатов предыдущих, если там нет прямой зависимости. Как если вы, скажем, долго что-то считали в ymm1, потом сохранили это в память, сделали xor xmm1, xmm1 и стали дальше считать уже на xmm1 — без vzeroupper некоторые микроархитектуры будут предполагать наличие зависимости последующих считываний xmm1 от предыдущих записей в ymm1, и не начнут их (замапив xmm1 в другой физический регистр и считая в нём), хотя вы xmm1 привели явно в конкретное состояние. Здесь скорость обнуления старшей половины ни при чём. Совсем. Вообще.

Ну или Вы занимаетесь только частью работ в реализации HFT, не понимая и не зная целого, что опять таки говорит совсем не в Вашу пользу.

Разделение труда — не слышали про такое?

Я в курсе, что с демагогом дискутировать смысла не имеет. Так что до тех пор, пока Вы не укажете, каким образом теория типов связана с пониманием работы компьютера, ответа от меня не увидите.

Учитывая, что я уже указал, почему требование ответа необходимости теории типов для понимания компьютера не имеет никакого смысла в данном разговоре (потому что изначально вы вообще не про понимание работы говорили, и потому что я как раз доказываю отсутствие этой необходимости для вашего исходного тезиса), отсутствие ответа будет означать ваш слив под весьма надуманным предлогом, не более.

И, кстати, заодно отсутствие указания метода расчёта паразитных ёмкостей в каком-нибудь современном интеловском проце с достаточной точностью для точной оценки задержек кешей, чтобы её потом не нужно было валидировать бенчмарками — это тоже слив.

Но это нестрашно, можете продолжать рассказывать всем про важность знания pn-переходов.

Это уже терминология какая-то.

Когда я пишу

parseFloat = do
  sign <- fromMaybe Positive <$> optional (char '-' $> Negative)
  intPart <- digits
  fracPart <- optional $ char '.' >> digits
  expPart <- optional $ char 'e' >> digits
  pure $ makeFloat sign intPart fracPart expPart
  where
  digits = some digit

то я разрабатываю парсер в ваших терминах?

Тогда получается, что суть в подмене темы, а следовательно в демагогии.

Нет никакой подмены темы. Это иллюстрирующая аналогия, как я сразу и написал.

Вы можете верить в эту догму, но тут, в основном, технические специалисты и в догмы они не верят.

Утверждение о необходимости не менее догматично (и, я бы даже сказал, строго более догматично, потому что у описываемой с этим утверждением системы большая сложность).

А в чем проблема то? Они и выводятся, в том числе, через максимальный коэффициент умножения цифрового ФАПЧ и паразитных индуктивности и емкости схемотехнического решения.

Отлично! Последний раз я этим занимался на Skylake-X. С интересом посмотрю на вывод задержек доступа к кэшам по упомянутым вами принципам. Продемонстрируете, особенно если проблем, судя по первой процитированной фразе, никаких?

Можно начать с вычисления паразитных индуктивности и ёмкости схемотехнического решения Skylake-X. Мне (и, думаю, вам) этого хватит за глаза.

Для этого нужно понимать, как работает RS-триггер

Нет. Для этого нужно (и достаточно) понимать, что без vzeroupper процессор предполагает зависимость от старших 128 бит регистра, что является исключительно архитектурным выбором (как, например, является архитектурным выбором сохранять старшие 128 бит ymmN при работе с xmmN) и не следует из первых принципов (я тут снова упрощаю — там внутри проца целая стейтмашина, которая у разных микроархитектур разная — наверн, RS-триггеры принципиально разные между поколениями).

выставить reset для любого количества триггеров в разы быстрее, чем загружать логический ноль в них микрокодом.

Зачем загружать микрокодом? Откуда тут это взялось?

Скорость загрузки ноля тут вообще ни при чём, vzeroupper строго добавляет такты. Дело в разбиении dependency chain в OOO-движке проца.

Как, помогло вам знание pn-переходов, если вы даже не увидели, в чём конкретно проблема и как конкретно она решается?

Например, в FAST процессорах используются решения на FPGA, где без понимания цифровой логики и её базы делать вообще нечего.

В моих задачах FPGA не используется, и?

Зато в моих задачах используется шаблонное метапрограммирование на C++, а это функциональный язык с паттерн-матчингом, а значит, без понимания теорий типов и во что дешугарится паттерн-матчинг там тоже делать нечего. Ведь нечего же? Ведь все программисты на C++, использующие шаблоны, но не знающие типизированное лямбда-исчисление и кодировку Бома-Берардуччи, просто зубрилы и недостойны называться профессионалами?

Что пишете вы:

В убеждённости, что для объяснения окружающего мира достаточно школьных знаний.

Что на самом деле писал я:

Его достаточно, чтобы отбраковать заведомо нереалистичные утверждения

У создателя нарративов-то как: не соврал — день прошёл зря.

Тут я, конечно, искренне надеюсь, что вы действительно просто врёте, а не считаете «отбраковать заведомо нереалистичные утверждения» эквивалентным «объяснить окружающий мир», потому что последнее ещё хуже.

отпадает необходимость в науке

Какое отношение вы имеете к науке? Вы к ней относитесь так же, как верующий относится к его религиозной книжке: он просто верит, потому что в его картине мира ничего лучше быть не может.

ангажированной леваками

И снова из совсем недавнего

U.S. Study on Puberty Blockers Goes Unpublished Because of Politics, Doctor Says

и таких случаев тоже дофига. Вещей вроде канадского требования диверсити в любом исследовании тоже дофига.

Так себе ирония, короче.

Контекст обсуждения я привожу в своём сообщении,

А, так вы просто не понимаете, что такое контекст обсуждения!

Контекст обсуждения — это не то, что вы установили, вклинившись в разговор других людей, а то, о чём говорили эти люди до того, как вы вклинились.

Во-первых, "при чём"

Во-первых, в таких случаях в русском языке используются кавычки-«ёлочки».

во-вторых, кто скажет, что это не Трамп — пусть первым бросит в меня его фотоальбомом.

Во-вторых, я писал о том, что вы говорили, а не о том, что говорил Трамп.

У вас же контекст в свободной форме устанавливается? Наслаждайтесь.

У вас там что-то пропущено, кажется.

Они между собой его ведут? Если да, то я причём к ним?

Так в итоге, как выбрать, кому доверять — каким-то чувакам в белых халатах или каким-то чувакам в чёрных рясах? Вторых больше и они существуют дольше, там опыта больше, если что.

Попытка заменить это на набор рассуждений обречена на провал.

ХЗ, у меня это приводит в среднем к выбору стратегий поведения, про которые пост-фактум понятно, что они близки к оптимальным, и достаточно хорошим предсказаниям развития событий.

Я подозреваю, что именно здесь ваша главная проблема

И эта проблема проявляется… в чём?

Я ничего не знаю про РАН, вопрос не по адресу. Если это что-то про российскую науку, то я не думаю, что она сейчас заметна или вобще существует.

В итоге всё равно выбрали батюшку. Ну и о чём разговор тогда был?

ну, значит, на эффективность Вам было плевать.

Нет, не плевать, и я бенчмаркал и сравнивал с 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 .

Эффективное зависимое выделение/освобождение — это оксюморон, потому что сам процесс выделения/освобождения на порядки больше любой экономии на подобных вещах.

А электрический заряд?

Не могу на ощупь отличить положительный от отрицательного.

А скорость вдоль координатной оси?

Испытываю только её (заведомо неотрицательный) модуль. Объективных координатных осей не существует в природе (чё-то там про принцип относительности Галилея), это человеческая абстракция.

А диагональ квадрата?

Я специально написал про «невычислимые вещественные» — это для которых не существует алгоритма вычисления. Диагональ квадрата вычислима, поэтому таких диагоналей счётное число (так как алгоритмов счётное число, очевидно). Следовательно, подавляющего большинства вещественных чисел (всё несчётное ℝ минус какое-то счётное множество) не существует.

Information

Rating
1,571-st
Registered
Activity