Pull to refresh
1

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

1,4
Rating
30
Subscribers
Send message

все перейдут на диагональное программирование

К сожалению, вы опоздали. Диагональный функтор Δ = x ↦ (x, x) : 𝒞 → 𝒞 × 𝒞 на самом деле роляет в программировании и вылезает что в языках с субструктурными системами типов (раст и боров чекер или linear haskell, где он соответствует процедуре удваивания ресурсов), что в семантике обычных языков (копирование данных), что в формализациях некоторых конструкций вроде параллельных вычислений.

Попробуйте программирование змейкой.

А чем создание матрицы состояний не является функциональным подходом? На хабре в своё время была статья про расстояние Левенштейна на хаскеле, и там достаточно оптимальный код на плюсах работал, скажем, секунду, а достаточно идиоматичный код на хаскеле — 1.3 секунды. У вас (императивный же) питон или js будут работать в разы, если не на порядки дольше.

Более того, неидиоматичный, но всё ещё функциональный (мутабельность локальная и проверяемая компилятором) код там оказывался быстрее плюсов.

Справедливости ради, типизация везде дает эффект лучшей предсказуемости. Но не настолько крутой, чтобы вообще не писать тесты. Кстати, как выглядят тесты на Haskell, они вообще бывают нужны?

Да, особенно если речь о взаимодействии с внешним миром и/или об интеграционных тестах.

Для внутренней, чистой логики их нужно сильно меньше, потому что много чего ловится типами. Хаскель же по большому счёту популяризовал property-based testing, и, например, либа quickcheck — про них. Вы пишете выражение вроде \list → reverse (reverse list) === list, а либа сама генерирует примеры, проверяет выражение, и в случае нахождения контрпримера пытается его уменьшить. Где-то рядом model-based-тесты, где у вас есть медленная, но легко понимаемая и проверяемая модель вашей логики, и есть оптимизированная, но тяжёло проверяемая. Вы аналогично пишете prop-тесты, что их результаты совпадают.

Чтобы тесты (особенно property-based) на внутреннюю логику не писать и довериться тайпчекеру на все 100%, нужны ещё более сильные системы типов, вроде идриса или агды.

ИМХО хорошим ресурсом на тему будет книжка Сэнди Магвайра «Algebra-driven design». Там мало формальной теории (и её можно скипать), но идеи она передаёт выразимые и в более мейнстримных языках.

Понимание теорката для ФП нужно настолько же, насколько понимание теории вокруг машины Тьюринга, умение доказать существование универсальной МТ и неразрешимость, и всё такое, нужны для вашего среднего императивного программирования.

ИМХО интро-статья про ФП, говорящая про теоркат, делает услугу только своему автору, который осилил узнать прочитать на википедии про функторы и теперь обязан их ввернуть, потому что это якобы показывает его понимание теорката. Хотя функтор — это примерно второй раздел первой главы в любом, даже самом простом учебнике теорката, сразу после определения категории, а до третьего раздела первой главы, с естественными преобразованиями (без которых, кстати, монаду определить невозможно), автор дочитать уже не смог. Всем остальным в целевой аудитории таких статей упоминание теорката только вредит.

Никто же не объясняет каррирование через декартово замкнутые категории, power objects, экспоненциирование и сопряжение функторов B × — и (—)^B? Не объясняет, конечно. Так и с функторами и монадами это всё не нужно.

Функторы и монады — это не штука из теорката. Функторы и монады — это просто такие интерфейсы вроде «ассоциативный контейнер». Функтор — это штука, которая умеет map с определёнными законами. Если ваш тип умеет map , удовлетворяющий этим законам, то он функтор. Если ваш тип умеет bimap с похожими законами, то он бифунктор (как пара из двух элементов, например). Из бифунктора и подходящего объекта можно сделать функтор. Из двух функторов можно сделать бифунктор. Всякое такое вот.

А если серьёзно, ну давайте лучше с процедурным программированием сравним и ответим честно на 2 вопроса: что нельзя написать процедурно?

Любой алгоритм можно написать процедурно. И λ-исчисление, и машина Тьюринга, собсна, Тьюринг-полны.

В чём отличие, кроме "красоты"?

Отличие в том, какую информацию о функции даёт её тип, и, соответственно, что нельзя написать (а я утверждаю, что современное ФП — это не про «передачу функции в функции», что умеют почти все языки, а про выражение семантики в типах).

Если у меня в хаскеле написано foo :: Int → String, то я знаю (при некоторых дополнительных не важных для принципа вводных), что эта функция не общается с внешним миром, не отправляет запрос к БД, не читает и не пишет в глобальные переменные, и не отправляет мой ~/.bitcoin/wallet на сервер злоумышленника. Если у меня в плюсах написано std::string foo(int), то эта функция может делать всё что угодно.

Соответственно, рефакторить типизированный код куда проще и одно удовольствие. В моей практике хаскеля там действительно работает «if it compiles after refactoring, it works», в моей практике плюсов это не работает почти никогда.

Короче, отличие в том, что о коде проще рассуждать, и компилятор проверяет больше вещей.

Хотите красоты - делаете DSL, не пытаясь решать сразу все проблемы мира

Кстати, и eDSL, и DSL на хаскеле и подобных языках делать — одно удовольствие.

Из практических соображений имеет смысл не отрицание (как в Haskell)

Так хаскель не отрицает. Хаскель как раз за счёт системы типов проверяет, что всё нормально раскинуто либо в чистые, либо в

эффектные слои

А «99%» избирателей придаёт несоразмерно большой вес тому, что они услышали по СМИ. А там уже и деньги помогут.

Более того, они прямо поддерживают демпартию США. Зачем им сгоняться в какие-то новые партии?

Конституция США интерпретируется так, что ex post facto-законы запрещены только для криминальной ответственности. Гражданские они не запрещают, равно как и не запрещают некоторые другие некриминальные.

Например, в United States v. Carlton в налоговый кодекс в 1987-м была добавлена статья, инвалидирующая причины для списания этим Карлтоном налогов за 1986-й, и налоговики потребовали деньги обратно. Суд утвердил, что они имеют право их требовать обратно. Мотивация прикольная, кстати:

Under the applicable standard, a tax statute's retroactive application must be supported by a legitimate legislative purpose furthered by rational means.

Успехов с определением «legitimate legislative purpose» и, тем более, «rational means».

Или, например, ретроактивный закон в Аляске о регистрации секс-преступников был признан не нарушающим ex post facto (Smith v. Doe, 538 U.S. 84 (2003)).

Есть ещё подобные прецеденты, но мне они в память не запали. Суть, в общем, такова, что регуляции и гражданская ответственность вполне могут повышаться ретроактивно.

Контролировать отрыв спины от спинки сильно проще, чем, например, контролировать правильное положение спины при приседе.

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

Мы всё ещё про бассейн или про плавание в открытом море с акулами?

Про бассейн. 4 тыщи смертей в год в бассейнах.

В бассейне спасатель так-то имеется

Во-первых, далеко не везде.

Во-вторых, это читерство: вы жалуетесь, что в тренажерке без тренера никуда, а потом говорите, что в бассейне эквивалентная роль есть, поэтому там всё норм. Вам не кажется это несколько непоследовательным?

И огромное количество видосиков с происшествиями на ютубе почему-то из качалок, а не из бассейнов.

Скажи мне, что не понимаешь «per capita», не говоря, что не понимаешь «per capita».

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

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

Да фигня вопрос. Я тут попытался найти в почти миллионнике рядом спортивные бассейны (а не бассейны при жилых комплексах попить там коктейль летом) — их сильно, более чем на десятичный порядок меньше, чем тренажерок. Что ещё раз намекает, что знаменатели для вычисления шансов на травму несопоставимы.

Ты в Гальвестон ездил?

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

Несложным расспросом легко выяснить, что физика «реального мира», как они её видят — это ньютоновская механика.

«как они её видят» — ну правильно! В реальной жизни мы другого и не видим.

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

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

Но изменится их интерпретация нанимающей стороной.

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

И, короче, она вполне успешно сейчас работает уже в третьей своей компании, в фаанге, и во всех трёх компаниях в вакансии были требования «B.S. in computer science or a related field», тогда как на интервью в фаанг, например, ей прямо ответили на её замечание, что диплома у неё нет, не будет ли это проблемой, что «ну вообще нам пофиг, мы на это не смотрим, главное чтоб человек был хороший». Надо, кстати, спросить, как там у них дела, чё-т давно не общался с ними, а кулстори из фаанга раньше доставлялись прям кулсторевые.

И я сам пару лет назад из своего резюме упоминание вышки и диплома тоже выпилил, кстати, ради интереса. Конверсия не изменилась вообще никак.

гораздо опаснее нахождения в дружелюбной среде в состоянии почти полной невесомости.

Да. Потерял сознание ⇒ захлебнулся ⇒ умер. Свело ногу ⇒ потерял плавучесть ⇒ захлебнулся ⇒ умер. Очень дружелюбная среда!

Для сравнения, когда я только начал делать силовые и не очень понимал пределы своего организма, то когда мне стало хреновасто от слишком глубоких приседов, я просто взял и посидел на скамеечке вот прям там, и всё прошло.

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

Да и просто по логике

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

Но такой статистики мне найти не удалось, потому что с бассейнами есть только статистика по общему количеству утопленников в год (4 тыщи на США или около того), где невозможно отделить умершего по пьяни в личном бассейне во дворе в свой выходной от плавающего «ради физкультуры». Более того, эти абсолютные цифры невозможно нормировать на количество ходящих в бассейн ради физкультуры, потому что это количество неизвестно.

Но ведь в ньютоновской механике ∇ × g = 0 (что, кстати, является самым простым доказательством невозможности этой картинки).

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

Мне повезло писать тексты в основном без иллюстраций, диаграмм и прочего (а где они были, было достаточно обычного figure по центру). Но даже тогда всё равно что-то куда-то разъезжалось.

Минус в том, что латех достаточно неплох и достаточно давний для того, чтобы занять нишу, и ничего лучше уже не появилось.

Простите! Имею в виду не движки браузеров, а движки, на которых работают сайты, сиречь CMS. Прошу прощения за непонятную реплику.

А, это была моя альтернативная гипотеза. Но давайте откроем статистику по доле сайтов. Топовая — на wordpress, чья разработка вполне себе коммерциализирована (и если вы читаете тот же opennet, то можете наблюдать за драмами в той экосистеме за последний год, ровно вокруг зарабатывания бабла), и где есть рынок работы разработки тем и плагинов.

Это что угодно, но не «без коммерческой составляющей».

Вы ругаете латех за то, что он не форматирует по-браузерному. Это правда!

Я ругаю латех за то, что он совмещает в себе худшие черты декларативного и абсолютного форматирования.

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

Кому должна?

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

Ну либо скажите, что латех — только для оформления книг. А для оформления черновиков статей, подобных вот решений, и тому подобного — латех не годится.

Да, через такую-то матерь и хардкод абсолютных значений ширины (для каждой диаграммы и текста слева от неё — свой) получается сделать что-то такое:

но если я вдруг чутка изменю шрифт, или отступы у списка (эта стрелка — это \item[fbox{$⇒$}]), то это всё поедет нафиг.

При этом адекватных средств отладки, кстати, чтобы посмотреть, какие bounding box'ы у каких объектов хотя бы, у латеха тоже нет.

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

Что легче читать и править (вы же читаете и правите, что пишете?),

Let $φ₁, φ₂ : ℤ ≅ G$ and denote $φ₁(1) = g₁, φ₂(1) = g₂$.

или

Let $\varphi_1, \varphi_2 : \mathbb{Z} \cong G$ and denote $\varphi_1(1) = g_1, \varphi_2(1) = g_2$.

?

Вы называете это париться, а я называю это сотворять книгу.

Страдания очищают, понимаю.

Например, поля и шрифты должны быть определены за несколько недель до начала вёрстки...

Вы когда-нибудь писали статьи для научных журналов?

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

Тогда как то же плаванье нагружает очень большое количество мышц и не травмоопасно.

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

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

И вообще, пишут, что, главным образом, на продолжительность жизни влияет то, как при рождении в генетическую лотерею повезёт.

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

А на внешний вид так уж точно, многим и физическая форма молодого Шварценеггера в этом плане не зарешает.

Дело не во внешности. Это тяжело объяснить, но регулярное тягание железа поднимает что-то в окрестности самооценки, уверенности в своих силах, и так далее.

Ты делаешь какие-то вещи. Они неприятные и местами болезненные, их лень делать, но ты их всё равно делаешь. И, сюрприз, через некоторое время ты видишь, что эти действия имеют вполне ощутимый эффект, от роста самих весов, до отсутствия одышки, или до простого тягания тяжестей в бытовых задачах, или вот у меня группы у́же стали при стрельбе стоя. Более того, ты смотришь назад и понимаешь, что ты смог преодолеть себя и делать неприятные, болезненные вещи ради профита в долгосрочной перспективе.

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

А насколько там конкретно бицуха выросла, и насколько девчонки на вас больше стали на улице вешаться — это так, мелочи. У меня визуально мало что изменилось, что не мешает наслаждаться эффектами выше.

Скрытый текст

В тексте выше расставьте «для большинства людей», «в среднем» и прочие подобные модификаторы по вкусу.

Information

Rating
1,864-th
Registered
Activity