- 1
Политота #36
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
Политота #36
#6: (vanished) https://govnokod.xyz/_26648
#7: https://govnokod.ru/26673 https://govnokod.xyz/_26673
#8: https://govnokod.ru/27052 https://govnokod.xyz/_27052
#9: (vanished) https://govnokod.xyz/_27852
#10: https://govnokod.ru/28060 https://govnokod.xyz/_28060
#11: https://govnokod.ru/28091 https://govnokod.xyz/_28091
#12: https://govnokod.ru/28103 https://govnokod.xyz/_28103
#13: https://govnokod.ru/28144 https://govnokod.xyz/_28144
#14: https://govnokod.ru/28270 https://govnokod.xyz/_28270
#15: https://govnokod.ru/28341 https://govnokod.xyz/_28341
#16: https://govnokod.ru/28379 https://govnokod.xyz/_28379
#17: https://govnokod.ru/28394 https://govnokod.xyz/_28394
#18: https://govnokod.ru/28440 https://govnokod.xyz/_28440
#19: https://govnokod.ru/28572 https://govnokod.xyz/_28572
#20: https://govnokod.ru/28656 https://govnokod.xyz/_28656
#21: (vanished) https://govnokod.xyz/_28666
#22: https://govnokod.ru/28676 https://govnokod.xyz/_28676
#23: https://govnokod.ru/28684 https://govnokod.xyz/_28684
#24: https://govnokod.ru/28691 https://govnokod.xyz/_28691
#25: https://govnokod.ru/28698 https://govnokod.xyz/_28698
#26: https://govnokod.ru/28704 https://govnokod.xyz/_28704
#27: https://govnokod.ru/28711 https://govnokod.xyz/_28711
#28: https://govnokod.ru/28721 https://govnokod.xyz/_28721
#29: https://govnokod.ru/28728 https://govnokod.xyz/_28728
#30: (vanished) https://govnokod.xyz/_28747
#31: https://govnokod.ru/28757 https://govnokod.xyz/_28757
#32: https://govnokod.ru/28770 https://govnokod.xyz/_28770
#33: https://govnokod.ru/28835 https://govnokod.xyz/_28835
#34: https://govnokod.ru/28924 https://govnokod.xyz/_28924
#35: https://govnokod.ru/29080 https://govnokod.xyz/_29080
Этот оффтоп сгенерирован автоматически.
Индекс оффтопов: https://index.gcode.space/.
Зеркала Говнокода и полезные ресурсы:
* https://govnokod.xyz/ (альтернативный Говнокод)
* https://gcode.space/ (read-only зеркало Говнокода)
* https://t.me/GovnokodBot (Говнокод-бот в «Telegram»)
* https://t.me/GovnokodChannel (Тематический канал в «Telegram»)
* https://app.element.io/#/room/#govnokod:matrix.org (резервный чат)
Примечание: автоматические перекаты в настоящее время осуществляются только с аккаунта nepeKamHblu_nemyx.
Остерегайтесь подделок. Берегите себя и своих близких. Кок!
НАТО выразило глубокую озобоченность.
https://truthsocial.com/@realDonaldTrump/posts/115255130298104593
си подобрал трёхзначный пороль от окаунта
А, ну хотя если там в Сигнале обсуждали секретные операции...
Мне кажется пишет спичрайтер, Трампу (или даже его пресс-секратарю) дает на одобрение, и ну и хуяичит, не?
"пи подобрал"
https://www.jpost.com/influencers/50jews-23
на пункте 22 я хрюкнул, а на пункте 52 и вовсе порвался
Прав был Гитлер Франклин - государство в государстве.
https://i2.wp.com/www.occidentaldissent.com/wp-content/uploads/2019/10/charlie-politicon.png
*являются террористическими организациями и запрещены в России
Т. е. пока снова не запретили, можно вступать в «Талибан», главное потом успеть выйти.
Так вот это ущелье расположено на севере региона Кахетия (столица -- город Телави, чье название было поводом для трогательной сцены в фильме "Мимино"), при этом сами кахетинцы (субэтнос грузин) -- православные.
Так что если когда ты говоришь "кахетины" ты имеешь ввиду этничеческую принадложность, то да: они прихожане Грузинской Православной Церкви.
Если же ты имеешь ввиду жителей региона Кахетия, то среди них могут быть кистинцы (грузинские чечены) и они, ожидаемо, мусульмане.
We lost an…
— Benjamin Netanyahu – בנימין נתניהו
Что за два стула? Куда мне подаца, если мне ни хамас, ни путин не нравятся?
> Куда мне подаца
Я бы предложил вариант "дружно, взявшись за руки, нахуй с говнокода".
Бывает тут с Го текут, бывает -- с euphoria, а вот сейчас политоты
Не пройдёт. Найти или выдавить из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь — это требует определённых умственных усилий. Скроллить алгоритмическую ленту, оптимизированную на раскачку дофаминовых качелей с элементами двухминутки ненависти — нет.
> euphoria
Мсье знает толк в извращениях, "зелёный слоник" по японски.
https://govnokod.xyz/_27044/#comment-574542
https://files.catbox.moe/wvfbv2.mp4
> Кандидат обязан принять на себя бремя всех 613 заповедей.
ого, вы там все ненормальные что ли?
* Надевать головной тфилин
* Надевать ручной тфилин
* Делать цицит
* Приносить жертву омер
* Приносить мусаф на 50-й день со дня приношения омера
* Отделять маасер от полученного маасера и отдавать коханим*
* Микра бикурим
как-то сложно, а что-то обычное делать надо?
* Проломить ослёнку затылок, если хозяин не желает выкупить его
блядь как на планету Плюк попал
*любимым отдавать? я так понимаю, яхве был украинцем?
Ну знаешь, как туфелька, отороченная мехом, в хуёвом переводе стала хрустальной туфелькой?
А всякие тфилины мне напоминают культ карго. Знаешь, как дикари из соломы изготавливали нелетающие копии самолётов? Вот и тфилин мне напоминает «соломенную копию» чего-то работающего.
Может быть, когда-то на Земле была высокоразвитая цивилизация, а потом её ёбнул метеорит или вырезали жиды?
187 Истребить и уничтожить семь народов, так как они были источником идолопоклонства (Дв. 20:16-17)
188 Истребить потомков Амалека (Дв. 25:19)
Тянет на 282 УК РФ, если не больше.
177 Ваик. 11:44 Не есть насекомых, размножающихся неполовым путём
178 Ваик. 11:42 Не есть насекомых, которые рождаются внутри семян или плодов, а затем выбираются на поверхность
179 Ваик. 11:43 Не есть любых пресмыкающихся и насекомых
Борхес.
Ну типа
Ездра: не ешьте насекомых, размножающихся не половым путем (что бля???)
Евреи: (едят бабочек)
Ездра: а вот еще что: не ешьте насекомых, которые рождаются внутри цветов
Евреи: (едят навозных мух, заедают жабами)
Ездра: да вы заебали! не ешьте вообще никаких насекомых, и присмыкающихся тоже не ешье
Трупоглазыми?
Когда варкрафтеры говорили, тоже нихуя ен понятно былол
Если ты ее прочитал триста раз, и понял _смысл_, то ты очень крутой
Например:
>>>
«Вспоминали все заповеди Господни», потому что подсчёт гематрии слова ציצית («цицит») — это шестьсот и восемь нитей и пять узлов, получается шестьсот тринадцать.
>>>
или вот
>>>
е) 2 голубых нити и 6 белых, Хинух,
ё) 2 голубых нити и 6 белых, способ Ха-Гра,
ж) 4 голубых нити и 4 белых, способ Раавада,
>>>
The behavior resulting from such a logic error is not specified, but will be encapsulated to the BTreeSet that observed the logic error and not result in undefined behavior. This could include panics, incorrect results, aborts, memory leaks, and non-termination.
То-есть мне гарантируется отсутствие RCE и чтения чужой памяти, а остальное всё можно?
«UB» примечателен тем, что, как только ты его допустил, вся твоя программа зашкваривается, и ты больше не можешь быть уверен, что где-то в совершенно другом месте у тебя проверка прав пользователя внезапно не превратится в «retun true;». В твоей же фразе подчёркивается, что проблемы у тебя будут, но только локальные, а вся остальная программа будет работать корректно.
https://x.com/Rightanglenews/status/1959972631555297540
> Во всех 20 регионах на выборах победили действующие губернаторы
и пока долбоебы радовались победе демократии и предвкушали в каком же ужасе сейчас путин, член партии Миши Педофила съебнул в партию прилепина, и все поели говна, как и ожидалось
Дней "голосования", кстати, 3.
А кто такой Бокчой?
https://pbs.twimg.com/media/G0jyojVWMAAo3aQ?format=jpg&name=large
Фарадж, Ципрас и Шрёдер оказались среди агентов
Англичане: hemisphere
блядь английчский, ты точно германской группы??
https://pbs.twimg.com/media/GzyRmVvXwAEQVga?format=jpg&name=medium
Урааа! Теперь пытки официально разрешены и одобряются!
3oJIoTou_xyu
вот нажимаешь, к примеру, правой кнопкой на текст, хочешь скопировать. А тебе "нашли опечатку?".
Вот тут конечно фронт-эндеру нужно раскалённый свинец в горло, тут уже без вариантов. Но в большинстве случаев человека можно всё таки перевоспитать
ФГМ (для олдов)
https://x.com/grok/status/1970557609385275679
Трамп сказал, что для заключения мира, ХАМАС должен вернуть 20 живых, и 38 мёртвых заложников.
Но у ХАМАСа есть 48 живых, и 28 мёртвых заложников.
Что делать ХАМАСу?
Какой Остер ))
Иронично, что опять голландским, кек
Комбатантов Шрёдингера. Если что, так сразу жертва антисемизма.
Беспорядки после матча «Аякса», как бы...
Дат ду е худ
примерно та же история
*так называемый "пыхомакак-опять-парсит-чото-рагуляркой"
Мб с магазином, но уж никак не машина Тюринга
The two basic technologies behind regular-expr ession engines have the somewhat
imposing names Nondeter ministic Finite Automaton (NFA) and Deter ministic Finite
Automaton (DFA). With mouthfuls like this, you see why I stick to just “NFA” and
“DFA.”
А разгадка проста: человек-резус не эволюционировал бегать быстрее гепарда, не имеет клыков как у саблезуба, он вместо этого эволюционировал под групповое поведение (брать числом), которое требует кооперации. Но чем больше развита кооперация, тем больше профит от паразитирования. Поэтому нельзя быть ни слишком эгоистичным (см. пункт про отсутствие клыков), ни слишком альтруистичным (систематически объегорят и тоже подохнешь). Т.е. любое общество состоит из особей, которые находятся на неко-м спектре эгоизма и альтруизма. Наличие подобного разброса универсально, т.к. оно следует из теории игр и биологии.
Так вот, условные правые и левые окучивают, соответственно, эти две разные группы. Однако их смысл лежит не в какой-то логике и политической теории, а в окучивании. На этой основе окучивать, разделять и властвовать очень safe and effective, т.к. всё на уровне прошивки, а не чего-то что нужно учить на курсах диалектического материализма. В общем, очень умно придумано.
— Странный Вы. Тратите деньги на газеты и даже не читаете...
— Меня интересуют только некрологи.
— Но Вы же просмотрели только первую страницу!
— Тот, кто меня интересует, будет на первой странице.
чёт тут уже хрюкать начал
https://x.com/grok/status/2029235479762051090
https://x.com/grok/status/2029064236056351088
https://x.com/grok/status/2029382969601741145
(натурал, люби Урал)
Платного запутинца Илюшу-дурачка отправили в «жёлтый дом» после того, как он написал, что заебался поддерживать Хуйло:
https://t.me/paperpaper_ru/66747
Как обычно, капо госпитализацию поддержали.
Помнишь крейзи фрога?
nYTNHCKAR_nNDOPBA
https://x.com/andrey_malgin/status/2035072950567673899
думаю вывести сейчас пердолинг с байтами на максимум абсурда, поставив этих двух господ фоном
upd. блядт )))
https://i.postimg.cc/MGbXGL8b/image.png
Кому оно мешало?
Его навалом было —
И вдруг совсем не стало.
Мне надо вымыть руки
И ноги тоже надо.
Верните мыло, суки!
Верните мыло, гады
Согласно предлагаемым изменениям, свежий дуриан из Вьетнама больше не будет нуждаться в дополнительных декларациях в фитосанитарных сертификатах и не будет подпадать под специальные условия импорта.
Это рассматривается как позитивный сигнал для отрасли дуриана Вьетнама, поскольку может способствовать сокращению административных процедур и облегчению экспортных потоков.
Резкое падение цен, убытки фермеров
По словам садоводов, выращивающих дуриан, в последнее время цены на этот фрукт продолжают стремительно снижаться. В настоящее время сорт Ri6 закупается перекупщиками непосредственно в садах всего по 20–25 тысяч донгов за килограмм, тогда как сорт Monthong стоит чуть более 60 тысяч донгов за килограмм. По расчётам, нынешние производственные затраты на выращивание дуриана составляют около 30–40 тысяч донгов за килограмм. При таком уровне цен производители несут убытки в размере 10–15 тысяч донгов на каждом килограмме продукции. Примечательно, что в настоящий момент большая часть урожая реализуется на внутреннем рынке, тогда как экспорт сталкивается с серьёзными трудностями.
В это время во многих населённых пунктах нетрудно увидеть дурианы, сложенные грудами на тележках и продаваемые вдоль дорог по беспрецедентно низким ценам. Дуриан, считавшийся «королём фруктов», особенно сорт Ri6, оказался втянутым в спираль глубокого падения цен, что повлекло многочисленные последствия для фермеров, перекупщиков и экспортных предприятий.
По наблюдениям в специализированных районах выращивания дуриана, таких как Нгухиеп, Лонгтьен, Виньким, Кайбе и других, вдоль провинциальных дорог и участков Национального шоссе №1 плотными рядами появились десятки точек продажи дуриана. Указанные на вывесках цены в основном составляют от 20 до 35 тысяч донгов за килограмм — это самый низкий уровень за многие последние годы.
«В это же время в прошлом году цена составляла около 55–60 тысяч донгов за килограмм, а сейчас — лишь половину этой суммы, а иногда и меньше. При производственных затратах около 40 тысяч донгов за килограмм фермеры несут убытки», — отметил господин Лой.
Он также добавил, что основной причиной резкого падения цен на Ri6 стали перебои в работе лабораторий контроля качества. В сезон сбора урожая достаточно приостановки работы лабораторий всего на три дня, чтобы деятельность по реализации продукции практически парализовалась. В настоящее время цены и сбыт дуриана в значительной степени зависят именно от этого звена.
какой лавкрафт ))
https://xcancel.com/lolekon5/status/2062517170043494611
Хотите, поищу подобное на других платформах?
...И все пользователи хуиттера являются ущербными, и их ущербность распространяется на другие платформы.
Как это работает: у людей есть, грубо говоря, две подсистемы: быстрая и медленная. Медленная подсистема отвечает за сложные и длинные рассуждения. Спланировать проект, устроить длинный срач, выучить имена всех покемонов и т.д.
Быстрая же подсистема является фильтром, защищающим медленную от перегрузки. Быстрая подсистема работает на импульсах: с её помощью человек буквально с полуслова, за миллисекунду ``понимает'', что нечто является не стоящей времени хуитой. К примеру, я сейчас увидел ссылку на хуиттер и не стал её открывать — это сработала быстрая подсистема.
Так в чём же затея твиттера? В том, что он атрофирует медленную подсистему двумя простыми техническими решениями:
1) Ограничение длины поста 120ю символами (или сколько там сейчас). Благодаря ему, никакую сложную мысль там технически невозможно высказать. Если кто-то пытается взломать систему и разбить мысль на несколько постов, ему сразу же указывают на эту ошибку, вытащив любой удобный пост из контекста.
2) Скорость постинга. Само по себе ограничение размера сообщения — это не грех, краткость — сестра таланта и т.д. Но если эти сообщения прут со скоростью пулемёта, то никаким талантом там не пахнет.
В итоге, пользователь хуиттера никогда не думает. Алгоритм его поливает золотым дождём постов, а он за миллисекунды должен решать, бугуртить ему с них или апкаммить. Получается идеальная машина дрессировки людей: очень легко можно их научить выделять желудочный сок, когда звонит калокальчик и загорается зелёная лампочка. Более того, даже в отрыве от хуиттера, человек отвыкает включать медленную подсистему в принципе, и его поведение сводится к ожиданию зелёной лампочки и звоночка. Такие дела.
Так что, отвечая на твой вопрос — нет, можешь не искать.
openresty
Да вы заедали, nitter же нормально работает
1. ADS потеряются.
2. Создадутся отдельные файлы с именами типа ICQ.exe:Zone.Identifier (в ext* двоеточие в имени файла — не проблема).
Есть, конечно, третий вариант, что создадутся расширенные атрибуты (не путать с простыми атрибутами), но это что-то на умном.
но дальше начинается самое смешное:
1. 9P (або редиректор) при чтении из WSL превращает : в код из приватной области (вот буквально FindFirstFile это возвращает)
2. джава хуй соси джава хуй соси джава хуй соси хуй джава а теперь танцуем
https://bugs.java.com/bugdatabase/JDK-8258665
(надо ли говорить что примерно все другие языки как-то Go, Rust, C, C++, Python, и пр этой проблемы не имеют?)
Самое грустное, что это распространённый антипаттерн, касающийся не только имён файлов: говнобиблиотеки зачем-то парсят передаваемые идентификаторы и портят их вместо того, чтобы передать по цепочке как есть.
Всё-таки в GEOS или в MacOS?
Было же время: GEOS, GEM, Desqview, Desqview/X, EPOC, BeOS...
Посол России в США Дарчиев рассказал об особых отношениях Путина и Трампа.
Спасибо, что вернул мне мой 2000-й
Реально так???
Чет в крыму слишком хорошо.
собственно, https://i.postimg.cc/DwkTfWsL/image.png
зато можно кликнуть на emoji и узнать, что он кому-то отправит спасибо
У инфантилов ничего особо не меняется. Жаль, что помирать обычно не им
«Да пох, на этом сайте нарисованы заправки там, где их нет и не нарисованы там, где они есть. Намного надежней местные каналы, там все более объективно.»
«Я вчера открыл приложение Газпром, посмотрел ближайшие заправки, где какой бенз есть по факту(в реальном времени обмен данными) , поехал и заправился.»
Про этот «gdebenz» вообще много народа знает? Это как на «Говнокоде» насрать.
ЛА ЛАЙ ЛА ЛА ЛА
https://youtu.be/eZ7CP-IBzRY
https://youtube.com/shorts/NLHRu1UBiBg
Так это тоже к нам! Конинклйке люхтфаарт маатсхапай знаешь?
И значт мы умрём
хрюкает он, блядь
Но всё равно информация неполная. Как узнать, осталось ли что-нибудь после крайней оплаты? Платили ли картами других банков?
Тут более надёжным источником будут сайты самих заправок, той же Газпромнефти, например.
Если оплата прошла, то и банк, и владелец сети заправок знают номер терминала, в котором прошла эта оплата.
Если не прошла, то... у Гугла, у Эппла и ещё у некоторых китайских производителей смартфонов есть база привязки MAC-адресов точек WiFi и CID базовых станций сотовых сетей к координатам. Откуда у них эта база? Так предыдущие пользователи, сами того не зная, её наполнили, когда работал спутник.
Эта база недоступна только китайским ноунеймам, на которых не установлены Google Play Services + Google Service Framework, но на таких и куча популярных программ не запускается.
К слову, у яндексовских программ геолокатор свой собственный, поэтому они определят твои координаты хоть на Lineage OS, хоть на ноунейме без сервисов Гугла.
А банк всегда знает где стоит каждый терминал оплаты?
сапёры в треде!
По информации собеседников агентства, в результате удара загорелась и была повреждена установка первичной переработки нефти АВТ-10 (CDU-10), на которую приходится около 38% мощности завода.
Остановлена также еще одна установка АВТ-11 (CDU-11), которая обеспечивает 37% мощности предприятия. Это было сделано из-за повреждения инфраструктуры, обеспечивающей ее работу. Установка может восстановить работу в течение нескольких дней.
https://govnokod.xyz/_29177/#comment-1354952
Кстати, ранние двс на спирте работали, можно на него перейти, за одно борьба с алкоголизмом.
Смесь предпочтительнее, потому что её точно никто не отсосёт с проглотом.
>>
Пьют хлорофос и вдыхают бензин
Или бегут за бухлом в магазин
Или мотают БФ на сверло
Иль самогон гонят власти назло
>>
> Бразилия славится
Уникальная страна, конечно: тухлые диктатуры (см "волосатая нога") и вонючие фавеллы соседствуют с самолётостроением (Embraer) и языкостроением (Lua).
В Кызыл главное не езди
https://ria.ru/20210923/kyzyl-1751252684.html
И опять спирт... У монголоидов вроде повышенная чувствительность к алкоголю, им вообще бухать нельзя.
Какая выборка )))
А где ещё могут встретиться резиденты разных стран? В комментариях в Ютубе (от которого значительная часть российской аудитории тоже отвалилась)? В Пейсбуке, где все сидят в своих загонах (и где тоже значительная часть российской аудитории отвалилась)?
Мы даже это обсуждали. БФ-6, который применяют для заклеивания ран, состоит из взвеси фенолформальдегидной смолы в этаноле. Если опустить в него сверло, смола намотается на сверло, а спирт останется в банке.
https://pbs.twimg.com/media/HJF7-IPWwAA9FMS?format=jpg&name=large
?
https://ru.wikipedia.org/wiki/Мистер_Метан
----
На следующей вечеринке обязательно попробую! Уверен, это сделает меня популярным
прекрасная россия будущего
У каждого есть свои сильные стороны, ни один из них нельзя назвать "лучшим" для всех задач. Но заметил одну забавную вещь: спустя какое-то время я снова возвращаюсь к PHP.
спасибо
поищи в той репе такой код
прикольно!
а sole
фасоле мио
Вот прямо буквально в PHP есть функция `password_hash` и там прямо написано что она BCRYPT по умолчанию, и что соль не надо передавать (она сама все сделает)
Об устаревании md5 для паролей написано вот буквально в любой статье, за последние 15 лет выпущенной.
И пыхер умудряется взять md5, вручную добавить sole (чтобы это ни значило) причем еще таким уебищным образом.
Тоесть пыхер пишет хуёво даже по меркам своего ПХП.
Про глобальные переменные, ассоциативнеые массивы вместо структур, и еще один сраный наколенный API к говнобазе я молчу, хотя кавычки там вокруг (удобно!) намекают на отсутствие mysql_real_escape, и стопудово там есть injection в логине.
причем эта хуйня для криптографии используется
https://github.com/ssv32/gy/blob/eaf7599e9f7e7b29d2f1319f0fb1f0cefe701e68/gy/classes/Gy/Core/Crypto.php#L36
ну и конечно какой ПХП без
https://github.com/ssv32/gy/blob/eaf7599e9f7e7b29d2f1319f0fb1f0cefe701e68/gy/classes/Gy/Tools/Pagination.php#L77
и без колес
https://github.com/ssv32/gy/blob/eaf7599e9f7e7b29d2f1319f0fb1f0cefe701e68/gy/classes/Gy/Core/Url.php#L19
https://github.com/ssv32/gy/blob/eaf7599e9f7e7b29d2f1319f0fb1f0cefe701e68/gy/classes/Gy/Core/Security.php#L42
Кстати, шаблонизатор ``Coq'' под названием ``Ltac2'' к переменным приделал доллары. Перевожу один проект на него, и какое-то чувство странное. Прочитал этот пост и всё понял.
Иначе не очень понятно, чем их не устраивает DosBox, и самое главное где они берут HDD для 386-х, и прочие компоненты. Как-то вот HDD мрут со временем, а достать железо 1986-го года выпуска сейчас не просто.
> дискеты
А дискеты они где берут?
а в перле в чем -- знаете?
Круто, а для / и * такого не придумали?
а котлин?
Один хрен, это же энтерпрайзный язык, а шорт сквирт для скриптоблядей
1. Побитовая операция над двоичными числами или логическая (операнды приводятся к виду true/false, сравниваясь с нулём).
2. Приоритет (выше или ниже, чем у сравнения).
3. Короткое вычисление или полное.
4. Возможна совсем другая операция (как в SQL, например, запихнули конкатенацию).
2 да, это в перле
3 да, это в котлине
https://en.cppreference.com/cpp/utility/expected
а паттерн матчинг не завезли?
типа надо вручную не забыть проверить?
Говно в интерфейсе, которым можно так пользоваться. Говно в том, что в одном месте собрались и Either, и исключения и UB.
В треде про Goвно я приводил критерии, согласно котором я оцениваю методы обработки ошибок:
1. Нельзя продолжать работу программы, если её стейт закоррапчен ошибкой
2. "Радиус взрыва" от ошибки должен быть ограничен: если один петушок сломал свой шесток, то не должен рушиться весь курятник
3. Т.к. обработка ошибок, как правило, является наименее оттестированой частью кода, она должна быть максимально стандартизированной и содержать минимальное количество кастомной логики
4. Happy path должен быть чистым, обработка ошибок не должна бросать тень на логику
Что здесь вижу:
1. Fail, интерфейс допускает UB
2. Fail, интерфейс может бросить исключение, которое никто скорее всего ловить не будет, "завезли обработку ошибок" же
3. Fail, интерфейс сложный с кучей вариантов использования, и вместо огромной библиотеки функций для работы с монадами есть четыре джаваменских метода, удачи писать с ними что-то сложное.
4. Без комментариев
Это правда. Нужно форсить матчинг, при котором ты физически не можешь получить значение не проверив тип.
> в одном месте собрались и Either, и исключения и UB.
Да, это зоопарк. По идее исключения должны быть только для ошибок программирования (что в случае С++ обычно приводит к UB, потому не нужны)
> Нельзя продолжать работу программы, если её стейт закоррапчен ошибкой
True, потому я ненавижу catch(Throwable){return null} в джаве
> если один петушок сломал свой шесток, то не должен рушиться весь курятник
Define "курятник": если у меня упала программа целиком, а операционка за ней почистила, но можно ли считать операционку курятником?
Потому что если ты за восстановление из ошибки после покарапченного стейта, то это контрадиктит с предыдущим пунктом
> 4. Happy path должен быть чистым, обработка ошибок не должна бросать тень на логику
Мне кажется тут трейдофф: в нечекд исключениях (питоне, C# и Kotlin) ты можешь не обращать внимание на ошибки, и делать вид, что их нет: хеппи пас у тебя очень чистый, а потом случается ошибка, и пиздец.
В расте ты обязан проверять что у тебя не ошибка (иначе типы не сойдутся) но зато ошибку невозможно проебать.
Если ошибку можно изолировать до функции, её нужно изолировать до функции. Если её можно изолировать до одного клиента из многих, то её нужно изолировать до одного клиента. Если её можно изолировать до одного инстанса... Ну вы понели.
> Потому что если ты за восстановление из ошибки после покарапченного стейта, то это контрадиктит с предыдущим пунктом
Нет.
> в нечекд исключениях (питоне, C# и Kotlin) ты можешь не обращать внимание на ошибки, и делать вид, что их нет: хеппи пас у тебя очень чистый, а потом случается ошибка, и пиздец.
У меня в нечекд исключениях в Erlang случается ошибка и один клиент переподключается к серверу без всякого пиздеца. Нужно смотреть не на отдельные фичи языка, а на то, как спроектирована вся экосистема. Если она с умом спроектирована вокруг исключений (см. Erlang), то можно много-много девяток насобирать.
> В расте ты обязан проверять что у тебя не ошибка (иначе типы не сойдутся) но зато ошибку невозможно проебать.
Уверен, что ротоёб найдёт способ. CloudFlare же нашли.
Например скоупом может быть запрос клиента к веб-серверу. Стейт запроса покоррапчен из за ошибки, мы показали юзеру 500-ю ошибку, и весь запрос теперь надо выкинуть, но другие запросы не пострадали.
Например скоупом может быть весь процесс. Стейт процесса покоррапчен из за General Protection Failure (SEGFAULT, AccessViolation, TheadBadAccess) и операционная система его убивает, чистит за ним, но сама остается работать.
В случае реального режима, и доса, скоупом может быть и весь комптютер (его придется перезагружать)
> CloudFlare же нашли.
Но они сделали это явно. В расте результат нужно явно заматчить, но есть метод `unwrap`. Это способ сказать: в случае ошибки сделай panic. Panic либо развернет тебе стек (как исключение в С++) либо сразу сделает `abort(3)` /`TerminateProcess` (если включишь опцией компилятора).
По сути это конечно должно быть ub, но в сейф расте их нет, потому аборт.
В продакшен коде так делать почти никогда не надо (кроме случаев, когда ты уверен, что файл ессть -- например это часть твоей инсталляции, и обрабатывать отсутствие файла так же глупо как обрабатывать отсутствие libc.so или user32.dll)
Клауд файр зачем-то так сделал
Именно. Какая синтаксическая конструкция или фича рантайма используется для достижения этой цели — с моей точки зрения вещь второстепенная. Но если в языке уже есть зоопарк этих конструкций и фич рантайма, то данной цели ты не достигнешь, добавив новую ``как в Haskell''.
Ок, но смотри: бывает два вида ошибок:
1. программист нарушил контракт (это может быть UB в языках с UB сегфолт, или какой-то NullPointerException в джавах итд)
2. произошла внешняя (IO) ошибка: пользователь вынул флешйку или выключил роутер
В случае 1 мне не важно что произошло: я не обязан отличать разыменовывание нуля от доступа за пределы массива: нужно просто почистить стейт, как мы и говорили выше (можно еще дамп записать, пускай программист разбирается)
В случае 2 я могу осмысленно восстановиться из ошибки, да это даже и не ошибка вовсе, а вполне рядовое событие.
Если функция может вернуть такую ошибку, то она должна сообщать об этом явно, и вызывающая сторона должна либо ее обработать, либо забить хуй превратив ее в случай 1.
Вот синтаксические конструкции языка должны это позволять.
Все эти таггд юнионы и монады either и прочие Result в расте это попытка именно это и выразить
Почему только два? Как насчёт "аллокатор не смог (временно)" выделить память. Это не IO ошибка и не нарушение контракта.
В первом случае, допустим, программист нарушил контракт, не покарраптив неизвестную память (допустим, у нас bounds checking). Этот контракт нарушен для одного запроса/клиента. Ронять приложение с дампом — нарушение пункта 1. Использовать either для возвращаемого значения массива с bounds checking — это нарушение пункта 4. Правильный выбор стула тут неочевиден.
> Все эти таггд юнионы и монады either и прочие Result в расте это попытка именно это и выразить
Это одно из решений, возможных в бесконечном пространстве компромиссов, основанных на неких допущениях, вроде двух типов исключений и т.п.
Приведи реальный примерно когда в системе с MMU и разрядностью памяти 64 бита аллокатор не смог.
Но я бы посмотрел с другой стороны: должен ли ты как-то особенно эту ошибку обработать? Ну кажется что нет (ты не можешь программно добавить памяти системе) потому вероятно это обычное падение (такое же как и доступ за пределы массива при баунд чекинге) , и падение это идет до границы, где мы можем почистить стейт.
> Ронять приложение с дампом — нарушение пункта 1
Если граница очистки стейта проходит по приложению, то почему нет?
Но конечно она может проходить и раньше: например, Far может ругнуться на кривой плагин, и предложить его выгрузить (сам Far при этом будет продолжать работать).
> Правильный выбор стула тут неочевиден.
Я бы сказал так: если программист может in advance что-то проверить, то требовать от него специальной обработки ошибки не надо: не надо из метода получения значения из массива всегда возвращать Either. Пусть заранее пишет код так, чтоб не ходить за границы массива.
А если промазал, то это бага, и ошибка летит до той самой границы, где можно все почистить.
А вот проверить наличие файла или интернета заранее просто невозможно: мир не транзакционен (даже файловые системы не транзакционны, была попытка у NTFS, но она соснула).
Тут конечно нужно что-то такое возвращать, чтобы программист понимал, что это нужно обработать.
echo 2 > /proc/sys/vm/overcommit_memory
> Но я бы посмотрел с другой стороны: должен ли ты как-то особенно эту ошибку обработать?
Допустим, мы как-то рассчитали и ограничили максимальную память на клиента и сделали arena allocation. Если мы не смогли создать новую арену, то дропаем клиента, старых держим. Сложно, но можно.
> Если граница очистки стейта проходит по приложению, то почему нет?
Допустим, у нас какой-нибудь сервер XMPP c миллионом клиентов. Или HTTP сервер с вебсокетами. Зачем чистить стейт всех клиентов, если контракт нарушен только для одного?
> Пусть заранее пишет код так, чтоб не ходить за границы массива.
...Баги писать не нужно, нужно баги не писать, и всё будет пучком ^___~
Если у тебя есть сервер, то границей не является всё приложение, но только лишь запрос.
> ...Баги писать не нужно, нужно баги не писать, и всё будет пучком ^___~
Мне кажется, ты меня не понял.
Пусть есть две функции: чтение файла, и обращение к элементу массива. Пусть наш язык имеет тул который требует от программиста обработать ошибку (checked exceptions, таггд юнион а-ля "монада" either итд)
Должны ли обе функции этот тул использовать?
А оператор разыменовывания должен?
Но у меня психотравма: я очень много видел кода типа
Ну и соответственно обработку
и потом пользователю показывают красивое окошко: "невозможно продолжить, мы разыменовали нуль", а он такой: и что мне делать блядь? sfc /scannow?
Лолшто
что н е так?
Оказывается, так можно ещё в C++11
Rust, Kotlin, Go, Nim, Zig, почивший ActionScript старались повторять порядок Паскаля.
Я вот даже не девочка-волшебница и то в курсе
by taking measures to minimize phishing activities, help to protect the exchange of data between devices and between users, limit opportunities for harassment and combat identity theft, fraudulent activities leading to financial scams and other integrity breaches, reduce the impact of online opinion manipulation and prevent "bot farms" from obtaining verified accounts, and deter user manipulation practices. They will also strengthen the link between individuals and their digital responsibilities and ultimately contribute to protecting online democracy.
By endorsing this declaration, we aim to cultivate a digital sphere characterized by increased safety, security and accountability.
#Теорема Снаута
честному человеку скрывать нечего
Раньше, во времена диалапа, можно было купить карточку с паролем какого-нибудь МТУ, но выходить в сеть приходилось через телефон, номер которого опять же привязан к паспорту.
Есть надежда, что бюрократы обосрутся как бюрократы, и высрут очередный документ на четырестра страниц уровня сообщений про куки и GDPR, и в итоге это все будет обходиться хотя бы на время моей жизни.
Но в конце концов конечно это говно победит, и у каждого прямо в смарфоне будет личный AI-based стукачок