Чайник из Юты
121 subscribers
216 photos
3 videos
6 files
144 links
Не смешно
Download Telegram
Forwarded from mizinov.pro
https://rationalnumbers.ru/?go=all/effekt-danninga-kryugera-avtokorrelyaciya/

Так любимый нами (несомненно, настоящими интеллектуалами 🧐) Эффект Даннинга-Крюгера оказался пустышкой из-за некомпетентности его авторов в вопросах статистического анализа. Что может быть более ироничным, точнее автоироничным?! 😅

#всяправда
В кукисы суют прям полноценную дату в Expiry атрибут. А что по поводу формата этой самой даты? Ну, того самого, с которым всегда и у всех была пизда. Ну, у нас их три. И все три эквивалентно валидны. Пони, блядь
Чайник из Юты
В кукисы суют прям полноценную дату в Expiry атрибут. А что по поводу формата этой самой даты? Ну, того самого, с которым всегда и у всех была пизда. Ну, у нас их три. И все три эквивалентно валидны. Пони, блядь
Ладно, деды были молоды, горячи, глупы. Сейчас настойчиво склоняют к использованию только одного формата, остальные два признали устаревшими
https://sqlite.org/draft/whybytecode.html

Недавно у автора SQLite спросили: а почему у вас байткод? Остальные базы данных ведь преимущественно используют деревья для представления запроса. Ну а он не растерялся, и выкатил статью, где расписал, почему он думает, что байткод лучше.

От себя докину: с компиляцией в байткод можно очень много приколях придумать. Самое банальное - jit, который ложится идеально при наличии своей ВМ. Опционально можно в самом фронтэнде "запекать" квери - компилировать раз, и дальше использовать из кэша, подставляя значения
Я вам запрещаю х87

Во-первых, оказывается, современные компиляторы С используют для умножения двух флоатов SSE вместо х87. SSE, если что - набор инструкций для SIMD операций. Мол, оно и работает шустрее, и умножает более предсказуемо (х87 под капотом для операций расширяет флоаты до 80-битных, отсюда и вытекают ошибки округления), да и для компилятора проще - консистентнее, авось еще между делом чего векторизировать удастся. Да и куча других нюансов (как будто и без того мало).

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

https://github.com/golang/go/blob/master/src/runtime/slice.go#L165
Чайник из Юты
героев нужно знать в лицо https://github.com/golang/go/blob/master/src/runtime/slice.go#L165
Там ниже, кстати, есть весьма занимательный ишшуй: github.com/golang/go/issues/67401

tl;dr всякие неприятные личности слинковались с интерналами стд либы, из-за чего изменение в них ведет к сломанной обратной совместимости. goccy/go-json, например, так сломался, а от него сам кубернетес зависит. В общем, один негодяй где-то в самом внизу пищевой цепочки ломает добрый пласт всей экосистемы просто из-за того, что в рантайме компилятора где-то что-то немного поменялось.

Поэтому, линкнейм будут потихоньку сворачивать. Оставят возможность для существующих функций (и заморозят их сигнатуры), но не дадут опираться на это для всех последующих. Список имен, доступных для linkname'a, кстати, будет выбран весьма интересным способом: rsc планирует пройтись по ВСЕМ опенсорс проектам на го (неужели даже на индигу взор обратят), и грепнуть все линкнеймы. Это и будет вайтлист (который может расширяться по индивидуальным запросам, но должен быть из списка тех, которые существовали еще до такого решения).

Надо будет вообще со всем слинковаться в индиге, что ли. Пусть попотеют
👍1
Ну нихуя себе
На удивление, на С очень легко пересесть. Накодил пока всего 35 часов (что на 5 часов больше раста, хы), но успел сорвать бинго: сегфолт, ошибка арифметики, память повреждал (пытался деаллоцировать буфер на стэке), даже в глибц маллок паниковал (ассерт проваливался). Никакие строки тебе не пишут, где это произошло, просто грустный Segmentation fault (core dumped). Ну, поплачь, мол. Но у тебя всегда есть valgrind, который тебе даст полный расклад таро: и утечки (даже расскажет, что еще можно спасти, а что уже навечно проебано), и сколько байт суммарно аллоцировано было, и где у тебя аномальное поведение (чтения out of bounds, откуда seg* прилетают - вот тут уже с файлами и строчками!), что спасает примерно всегда. CMake так и не осилил, зато есть прекрасный meson, в котором и тесты есть (в тестах тащу ассерты из unity нет, не тот, что игровой движок). Нюансы, конечно, остаются с внешними зависимостями - я пока обхожусь .wrap-файлами месона (по сути, в файлик кидаешь линк на репозиторий, и при билде тебе его склонируют и докинут к компиляции). И, собственно... А жить-то можно!

Да, еще остаются УБ, которые так с первого взгляда и не назовешь. Приколы препроцессора, от которых даже варнингов нет, и которые нужно просто понимать. Не очень удобно с отсутствием неймспейсов, у тебя по итогу вырабатывается жава-стиль с длинными именами. Но это и правда простой язык. Он учится за пару дней, и ты можешь просто сесть, и начать на нем программировать. Из нюансов, правда, я часа 2 над месоном сидел, пытался заставить его работать, но это, по сути, единоразовая инвестиция.

А вот интеграция с ИДЕ хуйня - цлион регулярно перезапускать приходится, потому что этот гидроцефал в очередной раз не может понять, откуда берется юнити в тестах.
❤1
Forwarded from localhost
Наглядное сравнение превосходства нового Intel 12900K над AMD 5950X

IT-юмор | Чат | Предложка
🔥1
Последний щитпост, честно
Фанфакт: под линупсом, socket() возвращает файловый дескриптор, равный наименьшему незанятому числу для процесса

иными словами, я могу завести просто массив для подключений, и адресовать его файловым дескриптором! Просто охуенно.
👍1
https://idea.popcount.org/2016-11-01-a-brief-history-of-select2/

Там даже гоферов упоминают. Правда, в сравнении с 3BSD, которая вышла, когда ещё мой дед родиться не успел
Оказывается, thread-local переменные как понятие появились из Итаниумов (тех самых интеловских VLIW процов, которые по итогу обосрались), и только потом распространилось на другие архитектуры
В С, способ хранения строковых констант зависит от имплементации. Ну, то есть, они все хранятся в data-секции (text?), но вот как именно - уже зависит. Например, с некоторыми компиляторями (в некоторых ситуациях), одинаковые строковые литералы в разных местах могут ссылаться на одно и то же место. В таком случае, код
char* str1 = "Hey";
str1[1] = 'o';
puts("Hey");

может вывести как Hey, так и Hoy, в зависимости от компилятора и/или флагов компиляции.

Вот такие пироги.
Чайник из Юты
В С, способ хранения строковых констант зависит от имплементации. Ну, то есть, они все хранятся в data-секции (text?), но вот как именно - уже зависит. Например, с некоторыми компиляторями (в некоторых ситуациях), одинаковые строковые литералы в разных местах…
упд: под линуксом (по крайней мере, арчем) это выдает сегфолт, потому что секция readonly. Вероятно, можно это поведение настроить. Не знаю, как ещё обстоят дела на других ядрах - нт и бсд. Но сука интересно
Собственно, вот пилю я вебсервер на С. Пришлось мне свой ивентлуп возводить, сделал простенькую схему и обернул это дело в еполл. Потом думаю ещё io_uring в эту схему добавить.

А мне вот что интересно стало: чисто технически, у меня, при ебанутой нагрузке, спокойно может аллокатор отъебнуть. Ну, то есть, маллок просто нулевой указатель вернёт, скорее всего, по причине недостатка памяти. И произойдет это прямо в ивентлупе. Что делать?

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

Но у меня появилась вот какая идея: войти в некий temporary emergency state. Это когда прекращается обработка всех запросов, просто реаллоцируется вообще всё, чтобы оптимизировать неиспользуемое пространство когда-то выросших буферов, да и в целом память дефрагментировать (ведь, скорее всего, проблема именно в этом). Если требуется агрессивная чистка, то дополнительно столько-то процентов подключений поубивать.

Думается мне, может сработать. Ведь просто уходить в ребут - идея тоже так себе, потому что, как минимум, если такое произошло - ко мне практически сразу завалится большая часть оравы обратно. Вот уж accept-loop охуеет. Равно как и счастливчики, которые успели подключиться первыми, я-то буду занят исключительно тем, чтобы и остальных принять)

В общем, задачка интересная.