«Порвало» — это когда человека поймали на вранье и подмене и привели свидетельства этого, окей.
Пример твита, за который уволили, лол
Ещё раз, увольнение — это действие, запрещаемое первой поправкой? На этот вопрос можно ответить однозначно да/нет.
В первый раз вы не ответили. Во второй сможете, или будете дальше юлить?
С давлением на работодателей со стороны прокуроров, губернаторов и прочих республиканцев с административным давлением.
Конкретные примеры «прокурор/губернатор/республиканец A надавил ⇒ человека B уволили именно из-за этого» сможете привести, или это всё ваши домыслы?
В статье ссылаются на Джимми Киммеля, лол. Отвечу тоже цитатой, чтобы вы понимали, что такое «преследовали людей», по мотивам того, какие действия применяются к правым:
I’m sorry, I must have missed it. I haven’t caught up on the latest news. Did PayPal cancel Jimmy Kimmel’s personal account? Did Chase and Bank of America shut down his accounts? Did Twitter ban him from the platform? Did Facebook suspend him from buying ads? Did Stripe shut down his merchant account? Did the FBI open up an investigation into him? Did rabid protesters force him to evacuate his studio? Did they chase him to his house and force him to evacuate there too? Is there an entire ideology centered around the idea that Jimmy Kimmel can’t be allowed to speak anymore in society? Are there terrorist cells in every major metro area calling to shut him down by any means necessary, even assassination? Are there countless Subreddits calling for his assassination? Are billionaires funding lawsuits seeking to force ABC News to pull him off the air?
Прочее — вот вы мне уже начинаете объяснять, что первая поправка — она для правых, а левых она не касается потому что потому.
Я вам начинаю объяснять, что вы исключительно избирательно и непоследовательно возбуждаетесь, что вызывает некоторые вопросы о вашей моральной чистоте.
И как там ваш брат любит говорить? А, во: никакой свободы врагам свободы. Enjoy.
Государство увольняло работников частных компаний? Или первая поправка защищает от увольнения?
преследовали
Кто преследовал с использованием государственной монополии на насилие?
Хоть кого-то посадили в тюрьму? Может, оштрафовали хотя бы?
недостаточно почтительно отнёсшихся к убийству Чарли Кирка
По мнению леваков, «недостаточно почтительное отношение» — это всего-навсего такие мелочи, как:
Left-wing TikToker, Charlotte Hayes, with over 200k followers calls for people to “kill them all” following Charlie’s murder.
Liberal influencer Hassan Piker openly urges his followers to assassinate conservatives: “You need to shanking these motherf*ckers… you need to be gutting them.”
“Don’t let it stop with Charlie. Get rid of the whole family, his wife and kids, too."
This black leftist says Charlie Kirk’s whole family should’ve been killed by the assassin, and says that every conservative should be killed and have their homes burned down. “It should’ve been worse, why not just wipe out the whole bloodline.”
Олсо, леваки сами готовы затравить тех, кто недостаточно радовался, вот чуваку извиняться пришлось и объяснять, почему именно он испытал сочувственную эмоцию:
Кстати, какой положняк был, когда люди недостаточно почтительно отнеслись к смерти фентанилового рецидивиста от передоза? Сколько людей безнаказанно говорило «kill them all»? Вместо этого верёвку для закрытия гаража у чёрного гонщика расследовал целый отряд ФБР.
Согласен, если вы начнёте говорить, что надо убивать всех консерваторов чёрных, то ФБР придёт и к вам, и первая поправка работает посему не до конца, конечно, но это сравнительные степени: США по свободе слова всё равно далеко впереди любой европейской страны.
И эта страна на первом месте по уровню свободы Интернета.
Смеюсь на первопоправочном.
Страна, имеющая hate speech laws с возможностью посадить человека за «online insults», физически не может быть на первом месте по уровню свободы в интернете.
Потому что это роль государства -социальная защита граждан.
Роль государства (любого, да и вообще любой бюрократии) — укрупнение и захват власти. Даже если в моменте кажется, что оно о вас заботится.
А роль коммерческой компании - получение прибыли.
И в моменте компания тоже может о вас заботиться!
Мне t-mobile в 2020-м сделал анлимный интернет без всяких государственных регуляций, уведомив об этом смской в духе «ну тут ковид, мы понимаем, как удалённая работа важна, поэтому мы сделали анлимный интернет».
Мы это уже обсуждали в соседнем треде про MWI: ложится в коробочку когнитивных подпорок, недалеко от Санта-Клауса, потому что коллапса нет.
Какая система типов отражает квантовые состояния?
Глубоко ответить на этот вопрос я вам смогу через несколько лет, когда зашарю, например, «a first course in topos quantum theory» (а до неё — несколько других, более классических вещей).
Неглубоко — соответствующая внутренней логике некоторой категории, выражающей язык квантмеха.
Но вообще те же линейные + зависимые типы, скажем: вот чуваки eDSL'ку делают поверх идриса — https://arxiv.org/pdf/2111.10867 . Там и про неунитарные преобразования есть (этот ваш пролапс волновой функции).
Опять какая-то императивщина. Ладно, буду 15 раскладывать на множители, с помощью Microsoft.Quantum и вайб-кодинга!
Добавьте в промпт нейробалаболу «with quipper», скажем, получится функциональщина.
Какое-то фантастическое желание избегать свободные монады и eDSL. Не понимаю.
О, кстати,
Quipper is based on a classical programming language called Haskell, which is particularly suited to programming for physics applications. It provides a high-level circuit description language that includes gate-by-gate descriptions of circuit fragments, as well as powerful operators for assembling and manipulating circuits.
Эту задачу решает ООП Daniel G. A. Smith opt_einsum, потому что ФП не смог, не смотря на все его типы.
Где не смог и почему? Потому что Daniel G. A. Smith решил выбрать не ФП-язык?
Это задача на упрощение AST. AST выражения с тензорами строится настолько просто в ML-языках, что об этом неприлично говорить:
data Expr
= Leaf Mat
| Mul Expr Expr
| Add Expr Expr
| Transpose Expr
| ...
class ExprLike a where
toExpr :: a -> Expr
instance ExprLike Expr where
toExpr = id
instance ExprLike Mat where
toExpr = Leaf
(:*:) :: (ExprLike a, ExprLike b) => a -> b -> Expr
a :*: b = toExpr a `Mul` toExpr b
(:+:) :: (ExprLike a, ExprLike b) => a -> b -> Expr
...
prepare :: Expr -> Expr
prepare = _ваш_алгоритм_упрощения
В плюсах это называется expression templates (и не требует ООП, к слову, но требует нетривиальных телодвижений, зато где-то в окрестности ранних нулевых было поводом говорить «плюсы в лице blitz++ уделывает фортран!»), в джаве наверняка есть какой-нибудь паттерн про это (который, конечно, требует ООП, но в джаве и хелловорлд не напишешь без ООП).
приходится вот так ему помочь, через вызов методов в нужном порядке
Не понял, отсос ФП и помощь ФП заключается в том, что в (якобы) ООП-коде этому ООП-коду нужно руками указывать порядок вычислений?
Скрытый текст
Мне один tenured-профессора из Кембриджа рассказывал, как ему один программист «переписал» на ФП, после чего программа стала работать в 100 раз медленнее )))
Тож аспирант небось? Это норма: аспиранты почему-то не умеют писать код. Мой камень был не в огород конкретно ООП, а в огород научного кода в целом.
В основе есть математическая формула, может надо было ее прочитать? Формулы читать умеете?
Когда формула записана в виде реализации процесса её вычисления и размазана на несколько тысяч строк (я не знаю, как человек так умудрился) — нет, не умею.
Во сколько тысяч раз замедлилось выполнение?
Замедлилось? В 10^{-6} тысяч раз, думаю. То есть, ускорилось порядка на три. Не помню конкретные числа, но помню, что когда закидывал очередной временной ряд на этак десяток тыщ точек, то старый лапшекод выполнялся минуты (я успевал задание-другое решить из туториала по линзочкам), а новый — меньше секунды, и боттлнеком становилось рисование графиков.
Если у вас все вычисления проходят через сериализацию в/из строки, то перф убьётся, будь оно трижды написано на C++.
Я понимаю, что ФП-ники решают задачи уровня детского сада и не для суперкомпьютеров и библиотеки аналогичной opt_einsum на Haskell нет.
Я понимаю, что ООПники решают задачи уровня «собачка гавкает, котик мяукает» и библиотеки аналогичной accelerate (или там unbound, sbv, тысячи их) на ООП нет.
Потому что Вы не умеете читать больше одного предложения )))
Умею, и поэтому замечаю, когда гоалпосты двигаются. И двиганье ESP32 → STM32F7 → топовые SoC — это несерьёзно (особенно учитывая, что MMU у них есть, лол).
Упомянутый выше класс будет выполняться на CPU-части просто по архитектурным причинам (если вы вдруг не решите зачем-то из FPGA сделать тоже процессор общего назначения — ну вдруг вам скучно сегодня, или мало ли какие причины на это могут быть).
Я не вижу почему этот класс не может быть использован, например, на STM32F7 с гигабайтом PSRAM.
Altera 100G Development Kit, Stratix V GX Edition
А почему вы дали ссылку на Altera 100G, а не на, например, Porsche 911? Последнее ещё дороже и к вашему изначальному тезису имеет примерно такое же отношение.
Так наоборот, на специализированном МК вполне можно достичь куда большей скорости, чем на CPU общего назначения. В данном случае наличие виртуальной памяти может только увеличить латентность, но уж никак не уменьшить.
При прочих равных.
А прочие равные — это и скорость самой железки (216 мегагерц судя по беглому гуглу? очень смешная шутка), и наличие дров для сетевых карточек, которые делают много интересных вещей на своём уровне (привет solarflare), и так далее.
Неужели впервые слышите о том, что для систем реального времени, где низкая латентность критически важна, специализированные MK и SoC куда более предпочтительны, чем CPU общего назначения?
Да, впервые. Особенно учитывая разницу на порядок в одной лишь частоте, и на два порядка — если учесть архитектурные особенности (под x86_64 я могу написать хешмапу, которая за счёт avx512 проверяет 16-32 элемента за раз, под это недоразумение для данной задачи — нет).
Именно поэтому в подобных местах повсеместно предпочитают MK и SoC (часто в виде ПЛК), вместо обычных компьютеров.
Не видел ни одного HFT-шопа, где использовали бы подобные МК, а я общался с кучей разных, от всяких стартапов «под радаром» до чуваков из гордых золотых спонсоров cppcon (три из четырёх, лол).
А HFT — это предельно конкурентная среда, и если бы можно было обыграть людей, выкинув x86 и поставив пердюшку за 10 баксов, люди бы это давно уже сделали. Но они этого почему-то не делают.
Ну так специализированные MK и SoC и есть золотая середина между FPGA и CPU общего назначения.
Только если в функции оптимизации знаки перепутать.
В этих МК невозможно запрограммировать алгоритм на уровне железа/вентилей, и невозможно быстро считать более сложные модели, чтобы управлять FPGA'шкой с простой моделью (стандартный финт: на FPGA делается линеаризованная модель с околонаносекундным временем отклика, константы которой подсчитываются и обновляются на большой x86-машине, стоящей рядом, требования по латентности к которой меньше, но более быстро считаемая более сложная модель всё равно означает больше денег).
Это "функции" называются операторами и они линейные — из этого следуют всякие финтифлюшки, типа no-cloning theorem.
Оператор — это функция (о, ФП!) с особых образом ограниченным (о, типы!) доменом, кодоменом, и ограничениями (больше типов!) на собственное поведение. Здесь нет нужды в ООП.
Во всём остальном, о чём вы пишете, тоже нет нужды в ООП на уровне задачи.
Поэтом алгоритм нахождения собственных значений квантового оператора допускает чисто функциональную спецификацию
Более того, это единственная естественная спецификация.
но не допускает чисто функциональную реализацию: стоимость персистентности состояния превышает доступные ресурсы.
Вы тут тоже, как и предыдущий оратор, боретесь с соломенными чучелами: во-первых, смысл обсуждаемой функциональщины не в отсутствии всяких сайд-эффектов, а в их выражении в типах. Во-вторых, компилятору никто не мешает заметить, что предыдущая версия структуры не используется, и свести реализацию к инплейс-апдейтам. В-третьих, вы что-нибудь слышали про линейные типы?
Открыл произвольный файл, попал на это. Ну, чтобы далеко не ходить, публичный API «класса» выглядит так:
class CCEnergyWavefunction : public Wavefunction {
public:
CCEnergyWavefunction(std::shared_ptr<Wavefunction> reference_wavefunction, Options &options);
~CCEnergyWavefunction() override;
double compute_energy() override;
std::map<std::string, SharedMatrix> get_amplitudes();
// (index within irrep, irrep) -> global index
std::map<std::tuple<int, int>, int> total_indices;
};
Что это такое? Это тупо функция
ccEnergyWaveFunction
:: Wavefunction
-> Options
-> (Double, Map String Matrix)
-- неленивые могут заменить возвращаемый тип на
data ComputedCCWV = ComputedCCWV
{ energy :: Double
, amplitudes :: Map String Matrix
}
Всё остальное в этом классе — как в той шутке, замыкания для бедных.
Может, Wavefunction для полиморфизма используется? Ну, класс переопределяет только compute_energy, который не используется в базовом классе, поэтому не кастомайзит поведение, поэтому это, опять же, просто реюз кода и выражение идеи «у меня тут есть функция с возвращаемым параметром Double».
Господи, как же это всё тошнотворно. У меня ПТСР от этой фигни вообще, потому что лет 10 назад один мой рабочий проект сводился к тому, чтобы переписать такой написанный «учёными» (аспирантом по матстатам, проходившим стажировку в компании и написавшим прототип детектора аномалий во временных рядах) код, написанный в ровно том же стиле: один класс с .cpp-файлом на несколько тыщ строк, который по факту является скоупом для всей программы (использовать глобальные переменные было бы честнее), и где всё взаимодействие между разными частями кода происходит через один std::map<std::string, std::string> , типа theMap["sigmaCoeff3_after2"] = std::to_string(computedSigma);, ну и потом парсить обратно. Ну, в этом psi4 хотя бы значения не теряют типы — видимо, код писали не аспиранты, а постдоки, а, может, и целые tenured-профессора.
Тот проект до меня, кстати, пытались переписать двое, но не смогли разобраться в хитросплетениях потока данных. Я за несколько календарных месяцев тоже не смог, поэтому решил, что это дело гиблое, и подошёл к коду как к чёрному ящику: накидал в него разных сгенерированных временных рядов, посмотрел, где оно находит аномалии, потом сделал сам пару алгоритмов (ну там, gauss changepoint detection, всякое такое), посмотрел, какой из них ближе всего к исходной реализации и к здравому смыслу, и просто заменил этим алгоритмом.
Потому что его смысл — участвовать в торгах на бирже с максимальной скоростью. Никто не торгует высокочастотно на бирже с STM32F7. С FPGA — торгуют, с обычных x86_64 — торгуют. С армов когда-нибудь торговать могут, если уже не. С таких железок — нет, потому что в чём смысл?
Вы провидец и точно знаете, какой класс может быть использован в будущем на ESP32 или каком-то ином МК со своими ограничениями, а какой нет?
Я — с достаточной точностью знаю. Например, класс для описания соединения с биржей со специальными для HFT финтифлюшками вряд ли будет использован на ESP32.
Более того, весь этот тред очень ироничный: «использование на $device» отождествляется с «отладкой бизнес-логики на $device», но превратить это в шутку о качестве кода и количестве багов в нём у среднего плюсиста читателю предлагается в качестве самостоятельного упражнения.
Походу надо пойти вернуть деньги людям, платившим мне за работу на хаскеле.
Основная проблема с утверждениями вроде вашего в таких тредах: их невозможно проверить и опровергнуть (ссылки на достаточно крупные проекты вроде тех же блокчейн-сред, или использование хаскеля в банке Mercury, или использование диалекта хаскеля в Standard Chartered, или использование хаскеля в фейсбуке, или использование хаскеля для верификации seL4, или да мало ли, будут отвергнуты, конечно, с той или иной формой сдвига гоалпостов). Но такие тезисы, как ваш, впрочем, и не предназначены для передачи информации о наблюдаемом мире: они предназначены для поддержания дискурсного консенсуса.
Но чаще этот приём используется в политических дискуссиях, конечно.
Я тоже самое могу на Python + Numba написать с помощью готовых boxed-библиотек типа Numpy и будет работать не сильно медленнее Fortran (правда памяти жрет как не в себя, но это скипнем).
А сколько ООП там будет? Будете каждому числу в матрице посылать сообщение «умножь себя на вон то и сложись с аккумулятором», как Кей завещал, или таки будет что-то адекватное?
ООП у вас там будет использоваться только как довольно хреновая замена системе модулей и неймспейсов.
Зато у них есть оригинальные бизнес идеи или идеи по квантовой химии, которые большинство программистов не поймет, этот тоже факт.
Ещё раз, мой тезис: большинство программистов не способно создавать программные системы. И да, это же большинство неспособно разобраться в квантовой химии, да и с хорошими бизнес-идеями (выше уровня пельмешек и когтеточек) там будет туговато, боюсь, но в бизнесе не шарю уже я, чтобы говорить про это конструктивно. Ваш тезис не противоречит моему, более того, они в каком-то смысле друг друга подтверждают.
И ООП помогает наладить диалог между ними лучше чем ФП.
Нет, конечно, не помогает. Помогает domain-driven design, который в ФП реализуется куда проще и понятнее, чем в ООП.
Электрон подкласса Элементарная частица интуитивно ясен, а для ФП нужно целую статью писать "как выучить квантовую механику на Хаскеле".
А потом у вас будет синглтон-менеджер фабрик элементарных частиц. Очень понятно.
Содержимое учебников по квантам спокойно перекладывается на функциональный стиль по построению: есть данные (состояние частиц), на них действуют какие-то функции, получаются новые состояния. Перекладывать это всё в ООП… не, спасибо, я лучше слесарем сортиры прочищать пойду.
Символическое в ООП — более воображаемое и нарративное. Оно создаёт красивую историю: «объекты взаимодействуют, как люди/вещи в мире».
Только для программирования нужна точность, а не красота и нарративность. Красота и нарративность хорошо подходят для книжки, почитать на ночь там что-нибудь этакое.
Это мощно, но когнитивно дороже для большинства.
Блин, я даже не знаю, какой вариант ответа на это выбрать:
Большинство людей не может создавать работающие программные системы, это просто медицинский факт. Когда мы пытаемся идти против этого факта, то получаем жрущий полтора гигабайта рамы у меня сейчас gmail, тормозящее дерьмо на электроне, приложения сбера на гигабайты, и регулярно сломанную форму и страницу комментариев на хабре.
Неужели держать в уме всю сеть взаимодействий между разными объектами и их методами когнитивно проще, чем когда побольше ограничений выражено в типах, и три четверти багов устраняется ещё при написании, даже до сохранения файла на диск, рефакторинг простой и понятный, и контрибьютить в очень нетривиальные кодовые базы можно на второй день?
Впрочем, эти варианты не являются взаимно противоречащими, поэтому можно выбрать их оба сразу. Пожалуй, так и поступлю!
Моя голова устает сильнее когда я программирую на ФП.
Моя голова устаёт, когда надо разбираться в ООП-лапше, потому что меняешь что-то здесь, а разваливается там.
А в случае ФП я могу прийти в новый нетривиальный проект вроде компилятора и продуктивно в него контрибьютить в первый же день. В худшем случае, в случае написанного в ФП-стиле кода на императивном языке, какого-нибудь там HFT-пайплайна на плюсах — в первую неделю.
А онбоардинг в ООП-проект может занимать месяц-другой, даже если его intrinsic-сложность на порядки меньше, и это не компилятор целого языка с тайпчекером, оптимизациями и доказательством корректности учёта газа (привет блокчейн), а, ну, не знаю, абсолютно простая хрень вроде «получи новость от Reuters и ещё десятка источников, сделай из неё bag-of-words-кодировку, посчитай расстояние Хэмминга с центрами имеющихся кластеров, найди ближайший, обнови». Это 500 строк на хаскеле в худшем случае, которые в ООП-стиле превращаются в 50 тыщ макаронов.
Ну как бы если любое движение от ассемблера считать движением в сторону ФП - то дальше спор смысла не имеет.
Я же явно написал «попытки разной степени успешности выйти из императивно-детализированной концепции в декларативную» (в прошлый раз без жирного, но, может, вы в этот раз заметите?). То есть, в сторону повышения способов выразить, что надо делать, а не как. Потому что когда вы пишете в своём императивном ООП animal.makeSound(), вы описываете, что надо сделать. Читатель этого кода не знает деталей реализации makeSound, процесса вывода байтиков на экране и смены состояния TTY, конкретного животного, да и особенностей работы виртуальных функций вообще и в данном конкретном случае тоже знать не обязан.
Но в сторону ФП тоже движение есть, что самое смешное, хотя я об этом не говорил! Оно настолько общепринято, что говорить об ФП в стиле 50-х, в смысле лиспа и «уау функции высшего порядка», в 2026-м не имеет смысла: это есть в подавляющем большинстве языков. И движение туда происходит в самых-самых мейнстримных иимперативных языках, начиная от евнух-версии в виде указателей на функции в C, и заканчивая делегатами в сишарпе, функторами в C++98 и целым STL, построенным на «в функцию-алгоритм передаётся произвольная функция», лямбдами в C++11, етц.
Никакого движения в сторону FP там не было.
kekw
Есть объекты реального мира. У них объективно есть состояние, которое меняется со временем по присущим им законам - или под внешним воздействием.
Или нету никаких изменений, а есть только функция s = s(x⃗, t).
Вы ещё не свыклись с мыслью, что вы просто живёте в четырёхмерном пространстве-времени (реальнее некуда)? А этой мысли уже больше ста лет.
Никто, щука, никогда не пытался представить модель мира как комбинацию бесчисленного количества чистых функций.
Смысл не в чистоте функций, а в том, что в типе функций указаны её эффекты.
Мастурбация на чистоту — это действительно молоток в руках вчера его освоившего.
«Порвало» — это когда человека поймали на вранье и подмене и привели свидетельства этого, окей.
Ещё раз, увольнение — это действие, запрещаемое первой поправкой? На этот вопрос можно ответить однозначно да/нет.
В первый раз вы не ответили. Во второй сможете, или будете дальше юлить?
Конкретные примеры «прокурор/губернатор/республиканец A надавил ⇒ человека B уволили именно из-за этого» сможете привести, или это всё ваши домыслы?
В статье ссылаются на Джимми Киммеля, лол. Отвечу тоже цитатой, чтобы вы понимали, что такое «преследовали людей», по мотивам того, какие действия применяются к правым:
Я вам начинаю объяснять, что вы исключительно избирательно и непоследовательно возбуждаетесь, что вызывает некоторые вопросы о вашей моральной чистоте.
И как там ваш брат любит говорить? А, во: никакой свободы врагам свободы. Enjoy.
Государство увольняло работников частных компаний? Или первая поправка защищает от увольнения?
Кто преследовал с использованием государственной монополии на насилие?
Хоть кого-то посадили в тюрьму? Может, оштрафовали хотя бы?
По мнению леваков, «недостаточно почтительное отношение» — это всего-навсего такие мелочи, как:
Олсо, леваки сами готовы затравить тех, кто недостаточно радовался, вот чуваку извиняться пришлось и объяснять, почему именно он испытал сочувственную эмоцию:
Кстати, какой положняк был, когда люди недостаточно почтительно отнеслись к смерти фентанилового рецидивиста от передоза? Сколько людей безнаказанно говорило «kill them all»? Вместо этого верёвку для закрытия гаража у чёрного гонщика расследовал целый отряд ФБР.
Согласен, если вы начнёте говорить, что надо убивать всех
консерваторовчёрных, то ФБР придёт и к вам, и первая поправка работает посему не до конца, конечно, но это сравнительные степени: США по свободе слова всё равно далеко впереди любой европейской страны.Смеюсь на первопоправочном.
Страна, имеющая hate speech laws с возможностью посадить человека за «online insults», физически не может быть на первом месте по уровню свободы в интернете.
Роль государства (любого, да и вообще любой бюрократии) — укрупнение и захват власти. Даже если в моменте кажется, что оно о вас заботится.
И в моменте компания тоже может о вас заботиться!
Мне t-mobile в 2020-м сделал анлимный интернет без всяких государственных регуляций, уведомив об этом смской в духе «ну тут ковид, мы понимаем, как удалённая работа важна, поэтому мы сделали анлимный интернет».
Мы это уже обсуждали в соседнем треде про MWI: ложится в коробочку когнитивных подпорок, недалеко от Санта-Клауса, потому что коллапса нет.
Глубоко ответить на этот вопрос я вам смогу через несколько лет, когда зашарю, например, «a first course in topos quantum theory» (а до неё — несколько других, более классических вещей).
Неглубоко — соответствующая внутренней логике некоторой категории, выражающей язык квантмеха.
Но вообще те же линейные + зависимые типы, скажем: вот чуваки eDSL'ку делают поверх идриса — https://arxiv.org/pdf/2111.10867 . Там и про неунитарные преобразования есть (этот ваш пролапс волновой функции).
Добавьте в промпт нейробалаболу «with quipper», скажем, получится функциональщина.
Какое-то фантастическое желание избегать свободные монады и eDSL. Не понимаю.
О, кстати,
(жирный лол мой)
Где не смог и почему? Потому что Daniel G. A. Smith решил выбрать не ФП-язык?
Это задача на упрощение AST. AST выражения с тензорами строится настолько просто в ML-языках, что об этом неприлично говорить:
В плюсах это называется expression templates (и не требует ООП, к слову, но требует нетривиальных телодвижений, зато где-то в окрестности ранних нулевых было поводом говорить «плюсы в лице blitz++ уделывает фортран!»), в джаве наверняка есть какой-нибудь паттерн про это (который, конечно, требует ООП, но в джаве и хелловорлд не напишешь без ООП).
Не понял, отсос ФП и помощь ФП заключается в том, что в (якобы) ООП-коде этому ООП-коду нужно руками указывать порядок вычислений?
Скрытый текст
Тож аспирант небось? Это норма: аспиранты почему-то не умеют писать код. Мой камень был не в огород конкретно ООП, а в огород научного кода в целом.
Когда формула записана в виде реализации процесса её вычисления и размазана на несколько тысяч строк (я не знаю, как человек так умудрился) — нет, не умею.
Замедлилось? В 10^{-6} тысяч раз, думаю. То есть, ускорилось порядка на три. Не помню конкретные числа, но помню, что когда закидывал очередной временной ряд на этак десяток тыщ точек, то старый лапшекод выполнялся минуты (я успевал задание-другое решить из туториала по линзочкам), а новый — меньше секунды, и боттлнеком становилось рисование графиков.
Если у вас все вычисления проходят через сериализацию в/из строки, то перф убьётся, будь оно трижды написано на C++.
Я понимаю, что ООПники решают задачи уровня «собачка гавкает, котик мяукает» и библиотеки аналогичной accelerate (или там unbound, sbv, тысячи их) на ООП нет.
А на порш цена ещё выше!
Умею, и поэтому замечаю, когда гоалпосты двигаются. И двиганье ESP32 → STM32F7 → топовые SoC — это несерьёзно (особенно учитывая, что MMU у них есть, лол).
Упомянутый выше класс будет выполняться на CPU-части просто по архитектурным причинам (если вы вдруг не решите зачем-то из FPGA сделать тоже процессор общего назначения — ну вдруг вам скучно сегодня, или мало ли какие причины на это могут быть).
А почему вы дали ссылку на Altera 100G, а не на, например, Porsche 911? Последнее ещё дороже и к вашему изначальному тезису имеет примерно такое же отношение.
Не понял, какие десятки тысяч?
Первая ссылка в гугле по «STM32F7 price» — https://www.digikey.com/en/product-highlight/s/stmicroelectronics/stm32-f7 , 7-18 долларов.
Я смотрел спеку на CPU-ядра. Почему на них смотреть не надо?
Я открываю спеки на SoC, и… что же это такое?
Оооой, а это? Это что?
Что это такое, а? гусь.png
Походу @Siemargl прав, и вы дилетант, сорян.
При прочих равных.
А прочие равные — это и скорость самой железки (216 мегагерц судя по беглому гуглу? очень смешная шутка), и наличие дров для сетевых карточек, которые делают много интересных вещей на своём уровне (привет solarflare), и так далее.
Да, впервые. Особенно учитывая разницу на порядок в одной лишь частоте, и на два порядка — если учесть архитектурные особенности (под x86_64 я могу написать хешмапу, которая за счёт avx512 проверяет 16-32 элемента за раз, под это недоразумение для данной задачи — нет).
Не видел ни одного HFT-шопа, где использовали бы подобные МК, а я общался с кучей разных, от всяких стартапов «под радаром» до чуваков из гордых золотых спонсоров cppcon (три из четырёх, лол).
А HFT — это предельно конкурентная среда, и если бы можно было обыграть людей, выкинув x86 и поставив пердюшку за 10 баксов, люди бы это давно уже сделали. Но они этого почему-то не делают.
Только если в функции оптимизации знаки перепутать.
В этих МК невозможно запрограммировать алгоритм на уровне железа/вентилей, и невозможно быстро считать более сложные модели, чтобы управлять FPGA'шкой с простой моделью (стандартный финт: на FPGA делается линеаризованная модель с околонаносекундным временем отклика, константы которой подсчитываются и обновляются на большой x86-машине, стоящей рядом, требования по латентности к которой меньше, но более быстро считаемая более сложная модель всё равно означает больше денег).
Оператор — это функция (о, ФП!) с особых образом ограниченным (о, типы!) доменом, кодоменом, и ограничениями (больше типов!) на собственное поведение. Здесь нет нужды в ООП.
Во всём остальном, о чём вы пишете, тоже нет нужды в ООП на уровне задачи.
Более того, это единственная естественная спецификация.
Вы тут тоже, как и предыдущий оратор, боретесь с соломенными чучелами: во-первых, смысл обсуждаемой функциональщины не в отсутствии всяких сайд-эффектов, а в их выражении в типах. Во-вторых, компилятору никто не мешает заметить, что предыдущая версия структуры не используется, и свести реализацию к инплейс-апдейтам. В-третьих, вы что-нибудь слышали про линейные типы?
Почему?
Открыл произвольный файл, попал на это. Ну, чтобы далеко не ходить, публичный API «класса» выглядит так:
Что это такое? Это тупо функция
Всё остальное в этом классе — как в той шутке, замыкания для бедных.
Может,
Wavefunctionдля полиморфизма используется? Ну, класс переопределяет толькоcompute_energy, который не используется в базовом классе, поэтому не кастомайзит поведение, поэтому это, опять же, просто реюз кода и выражение идеи «у меня тут есть функция с возвращаемым параметромDouble».Тем временем базовый класс:
Господи, как же это всё тошнотворно. У меня ПТСР от этой фигни вообще, потому что лет 10 назад один мой рабочий проект сводился к тому, чтобы переписать такой написанный «учёными» (аспирантом по матстатам, проходившим стажировку в компании и написавшим прототип детектора аномалий во временных рядах) код, написанный в ровно том же стиле: один класс с
.cpp-файлом на несколько тыщ строк, который по факту является скоупом для всей программы (использовать глобальные переменные было бы честнее), и где всё взаимодействие между разными частями кода происходит через одинstd::map<std::string, std::string>, типаtheMap["sigmaCoeff3_after2"] = std::to_string(computedSigma);, ну и потом парсить обратно. Ну, в этом psi4 хотя бы значения не теряют типы — видимо, код писали не аспиранты, а постдоки, а, может, и целые tenured-профессора.Тот проект до меня, кстати, пытались переписать двое, но не смогли разобраться в хитросплетениях потока данных. Я за несколько календарных месяцев тоже не смог, поэтому решил, что это дело гиблое, и подошёл к коду как к чёрному ящику: накидал в него разных сгенерированных временных рядов, посмотрел, где оно находит аномалии, потом сделал сам пару алгоритмов (ну там, gauss changepoint detection, всякое такое), посмотрел, какой из них ближе всего к исходной реализации и к здравому смыслу, и просто заменил этим алгоритмом.
Потому что его смысл — участвовать в торгах на бирже с максимальной скоростью. Никто не торгует высокочастотно на бирже с STM32F7. С FPGA — торгуют, с обычных x86_64 — торгуют. С армов когда-нибудь торговать могут, если уже не. С таких железок — нет, потому что в чём смысл?
Я — с достаточной точностью знаю. Например, класс для описания соединения с биржей со специальными для HFT финтифлюшками вряд ли будет использован на ESP32.
Более того, весь этот тред очень ироничный: «использование на $device» отождествляется с «отладкой бизнес-логики на $device», но превратить это в шутку о качестве кода и количестве багов в нём у среднего плюсиста читателю предлагается в качестве самостоятельного упражнения.
Походу надо пойти вернуть деньги людям, платившим мне за работу на хаскеле.
Основная проблема с утверждениями вроде вашего в таких тредах: их невозможно проверить и опровергнуть (ссылки на достаточно крупные проекты вроде тех же блокчейн-сред, или использование хаскеля в банке Mercury, или использование диалекта хаскеля в Standard Chartered, или использование хаскеля в фейсбуке, или использование хаскеля для верификации seL4, или да мало ли, будут отвергнуты, конечно, с той или иной формой сдвига гоалпостов). Но такие тезисы, как ваш, впрочем, и не предназначены для передачи информации о наблюдаемом мире: они предназначены для поддержания дискурсного консенсуса.
Но чаще этот приём используется в политических дискуссиях, конечно.
А сколько ООП там будет? Будете каждому числу в матрице посылать сообщение «умножь себя на вон то и сложись с аккумулятором», как Кей завещал, или таки будет что-то адекватное?
ООП у вас там будет использоваться только как довольно хреновая замена системе модулей и неймспейсов.
Ещё раз, мой тезис: большинство программистов не способно создавать программные системы. И да, это же большинство неспособно разобраться в квантовой химии, да и с хорошими бизнес-идеями (выше уровня пельмешек и когтеточек) там будет туговато, боюсь, но в бизнесе не шарю уже я, чтобы говорить про это конструктивно. Ваш тезис не противоречит моему, более того, они в каком-то смысле друг друга подтверждают.
Нет, конечно, не помогает. Помогает domain-driven design, который в ФП реализуется куда проще и понятнее, чем в ООП.
А потом у вас будет синглтон-менеджер фабрик элементарных частиц. Очень понятно.
Содержимое учебников по квантам спокойно перекладывается на функциональный стиль по построению: есть данные (состояние частиц), на них действуют какие-то функции, получаются новые состояния. Перекладывать это всё в ООП… не, спасибо, я лучше слесарем сортиры прочищать пойду.
Какой там сильный ФП-уклон? Функции в функции можно передавать, как в любом другом языке, созданном за последние 30 лет?
По-моему, там как раз императивный, ООП-уклон, и результат немного предсказуем.
Только для программирования нужна точность, а не красота и нарративность. Красота и нарративность хорошо подходят для книжки, почитать на ночь там что-нибудь этакое.
Блин, я даже не знаю, какой вариант ответа на это выбрать:
Большинство людей не может создавать работающие программные системы, это просто медицинский факт. Когда мы пытаемся идти против этого факта, то получаем жрущий полтора гигабайта рамы у меня сейчас gmail, тормозящее дерьмо на электроне, приложения сбера на гигабайты, и регулярно сломанную форму и страницу комментариев на хабре.
Неужели держать в уме всю сеть взаимодействий между разными объектами и их методами когнитивно проще, чем когда побольше ограничений выражено в типах, и три четверти багов устраняется ещё при написании, даже до сохранения файла на диск, рефакторинг простой и понятный, и контрибьютить в очень нетривиальные кодовые базы можно на второй день?
Впрочем, эти варианты не являются взаимно противоречащими, поэтому можно выбрать их оба сразу. Пожалуй, так и поступлю!
Моя голова устаёт, когда надо разбираться в ООП-лапше, потому что меняешь что-то здесь, а разваливается там.
А в случае ФП я могу прийти в новый нетривиальный проект вроде компилятора и продуктивно в него контрибьютить в первый же день. В худшем случае, в случае написанного в ФП-стиле кода на императивном языке, какого-нибудь там HFT-пайплайна на плюсах — в первую неделю.
А онбоардинг в ООП-проект может занимать месяц-другой, даже если его intrinsic-сложность на порядки меньше, и это не компилятор целого языка с тайпчекером, оптимизациями и доказательством корректности учёта газа (привет блокчейн), а, ну, не знаю, абсолютно простая хрень вроде «получи новость от Reuters и ещё десятка источников, сделай из неё bag-of-words-кодировку, посчитай расстояние Хэмминга с центрами имеющихся кластеров, найди ближайший, обнови». Это 500 строк на хаскеле в худшем случае, которые в ООП-стиле превращаются в 50 тыщ макаронов.
Я же явно написал «попытки разной степени успешности выйти из императивно-детализированной концепции в декларативную» (в прошлый раз без жирного, но, может, вы в этот раз заметите?). То есть, в сторону повышения способов выразить, что надо делать, а не как. Потому что когда вы пишете в своём императивном ООП
animal.makeSound(), вы описываете, что надо сделать. Читатель этого кода не знает деталей реализацииmakeSound, процесса вывода байтиков на экране и смены состояния TTY, конкретного животного, да и особенностей работы виртуальных функций вообще и в данном конкретном случае тоже знать не обязан.Но в сторону ФП тоже движение есть, что самое смешное, хотя я об этом не говорил! Оно настолько общепринято, что говорить об ФП в стиле 50-х, в смысле лиспа и «уау функции высшего порядка», в 2026-м не имеет смысла: это есть в подавляющем большинстве языков. И движение туда происходит в самых-самых мейнстримных иимперативных языках, начиная от евнух-версии в виде указателей на функции в C, и заканчивая делегатами в сишарпе, функторами в C++98 и целым STL, построенным на «в функцию-алгоритм передаётся произвольная функция», лямбдами в C++11, етц.
kekw
Или нету никаких изменений, а есть только функция
s = s(x⃗, t).Вы ещё не свыклись с мыслью, что вы просто живёте в четырёхмерном пространстве-времени (реальнее некуда)? А этой мысли уже больше ста лет.
Смысл не в чистоте функций, а в том, что в типе функций указаны её эффекты.
Мастурбация на чистоту — это действительно молоток в руках вчера его освоившего.