Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
377 - Telegram Web
Telegram Web
Наткнулся тут на статью с провокационным названием "C is NOT a Low-level language". Она простая и научно-популярная, заканчивается откровенно политическими лозунгами, прославляющими Erlang, но в целом декларирует интересную мысль.

Мысль, что зачастую C, как язык, восхваляют за "близость к железу", дескать системный программист, глядя на свой код на С, легко поймет в какие ассемблерные инструкции этот код будет превращен. И так оно и было лет 50 назад, когда таргетом был PDP-11, а компиляторы были значительно проще (лет так на 50 непрерывной разработки многими поколениями писателей компиляторов), а оптимизаций было не так много. А вот в современном мире есть множество факторов, которые делают C куда более абстрактным и на самом деле далеким от железа.

Часть аргументов в статье кивает на сложность современного железа (instruction-level parallelism, который делает идею последовательного исполнения абстрактной; иерархию кэшей, про которую ничего не говорит язык, декларирующий flat memory model, и знание про которую разработчику приходится держать в голове). В принципе справедливо, но не сказать, что у вас есть полный контроль над этими вещами, когда вы пишите на асме (хотя, на x86, например, есть movntdq и прочие non-temporal hint инструкции).

Другая же часть статьи поинтереснее: она про то, насколько оптимизации в современных компиляторах могут поменять ожидаемый разработчиком сгенерированный код. Среди примеров там довольно вольное обращение с паддингами при scalar replacement структур; замена мертвого кода на явное UB при loop unswitching (хе-хе, это прикольно), и удаление налчека после безусловного разыменования (компилятор может себе это позволить, т.к. если это таки был NULL, то мы уже на территории UB, а значит может произойти все, что угодно). Почти все примеры корректны с точки зрения С, что-то неожиданное может произойти только тогда, когда в коде уже и так UB, а на что тогда пенять? Ведь это одна из причин существования UB - дать простор оптимизациям.



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

Во-первых, как системный программист, я довольно хорошо понимаю авторов на уровне эмоций. Мне тоже часто хочется сказать: "что этот компилятор себе позволяет, прикрываясь UB?". Ну т.е. если я хочу разыменовать в коде указатель, полученный из литеральной константы, значит мне это зачем-то нужно. Значит я реально хочу исполнить mov rax, [rax], когда в rax физически лежит 42, вот я его только что туда и положил. Не хочу я слушать про UB, я хочу получить трап, который потом будет обработан в рантайме. Но головой я понимаю, почему в язык введено UB, и что без него половина оптимизаций бы не работала, а перфоманс был бы как в 70-ые. ↓

#дух_машины
👍7🔥4🆒3👎1
Во-вторых, авторы, кажется, слона то и не заметили. С тех пор, как для C/C++ появилась формальная модель памяти (а если точнее разные memory order), аргумент про "что этот компилятор себе позволяет" стали просто пугающе правдивыми. Известно, что C11 memory model отличается от Java memory model тем, что гонки по данным означают UB. По мне, так это очень хорошее изменение, которое делает понимание модели памяти куда проще. Ноооо, это ведь только когда мы говорим про конкурентный доступ к обычным переменным и полям. А вот если мы говорим про атомики, то все сильно сложнее: поведение при гонках полностью определено и сильно зависит от memory order.

Так вот есть другая, прекрасная статья (с еще более броским названием Common Compiler Optimisations are Invalid
in the C11 Memory Model and what we can do about it
), в которой автор показывает, что безобидные вроде бы оптимизации* компилятора могут полностью поменять семантику программы и изменить множество потенциально наблюдаемых результатов при гонке на атомиках 🤯 Там много примеров, но все начинается с тривиального: когда код, исполняемый изначально в двух тредах просто выполняется в результате оптимизации последовательно в одном треде (и это меняет семантику!). Все это при условии гонки на атомиках с relaxed mo с участием третьего треда. Если не хотите читать полную статью и разбирать матан, то есть короткая преза про это от того же автора.

*речь про source-to-source оптимизации, либо отдельные фазы, до кодегена, понятно, тут дело не доходит, иначе было бы все хорошо.



В общем, аргументы любителей C в духе "я понимаю, в какой асм это будет скомпилировано" в современном мире звучат как-то слегка высокомерно. Между сишным кодом и получившимся асмом настоящая бездна, 50 лет разработки оптимизирующих компиляторов и слегка так сломанная модель памяти (бывает, че). Да и вообще, на это указывает само существование undefined behavior в спецификации языка. Так что стоит признать, что программирование на C тоже подразумевает некоторый абстрактный (а не железный) исполнитель, на котором исполнение этого кода и происходит.

Кстати, если хотите послушать про эволюцию моделей памяти в Java и не только (и вот в том числе про отличие JMM от C11 MM), то приходите на SnowOne на доклад Саши Ланцова 1 марта, который так и будет называться "Эволюция моделей памяти". Именно прогон черновой версии этого доклада меня и отправил в чтение статьи про сломанную модель памяти в сишечке нашей любимой. Рекомендую, доклад будет огонь!

#дух_машины
🔥7👍5🆒5
Алло, это отладочная?
Ой, все. Какой еще Balur's Gate. Император защищает.
Прошёл!

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

Три мысли:

1) отличная алко-игра: пить каждый раз, когда какой-нибудь спейсмарин говорит: "брат";

2) в первого спейсмарина я, получается, играл 14 лет назад или типа того 🤯. Если темпы разработки сохранятся, то в третью часть сыграю уже под полтинник (пиздец);

3) приятно, что такую игру сделала команда из Питера!

В общем: Император хранит, Кадия стоит (ну, не совсем), Магнус не предавал.
🔥15
ЭЛЕКТРОХИМИЯ [Просто: успех] - Я бы посмотрел.
👍9😁3
С днём резиновой уточки!

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

Собственно, у меня есть гипотенуза гипотеза, что во многом восторг от использования ИИ-чатботов среди нетехнарей оттуда же: практикуется навык объяснения чего же ты хочешь, а с другой стороны полезный, но очень недогадливый собеседник. Тоже польза 💻

Я, кстати, ещё ставлю часто игрушки перед собой когда выступаю на конференции или читаю онлайн-лекцию и знаю, что на ней будут студенты которые не умеют включать камеры. Нужна же хоть какая-то аудитория! На защите кандидатской мне нужна была поддержка и у меня прямо на кафедре вообще лежала игрушка-жирафик, потому что нужен же был какой-то оберег от совета. Мой оппонент, помнится, удивлённо вскинул бровь, когда вышел говорить свою речь, но вида, конечно, не подал :)

Так что, со старым новым годом вас! Ну и с днём резиновой уточки заодно 🙃
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤‍🔥6😁3
Я, впрочем, с неодушевленным предметами обычно не разговариваю, только с другими своими личностями.
👍114💯2
Опять скоро схожу на подкаст => снова скажу что-нибудь, что кого-нибудь не уcтроит => снова словлю хейта. Ну что ж!
🔥141🍾1
День, когда у меня сгорела жопа 🔥
😢17😁3👾2👍1🤣1
Сегфолтнется.
😁11🔥1😱1😐1
Тут ведь как: главное правильно задизайнить балловую систему
15😁11👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Переживаю за сессии наших студентов больше, чем в свое время за свои! Ну, ладно, лукавлю: там я тоже переживал, конечно, просто по-другому и только до определенного семестра, пока переживалка не атрофировалась.

Сегодня в прямом эфире смотрю обновление оценок за экзамены параллельно у трех курсов и эмоции сначала такие ↑
❤‍🔥10
This media is not supported in your browser
VIEW IN TELEGRAM
Зато потом часто вот такие! Особенно, когда у людей продолжается страйк отлов!

Тащат, что тут сказать. Умеют, могут.

*работа абсолютно саботирована сегодня, конечно 🫡
❤‍🔥15🤗2🫡1
Forwarded from Стой под стрелой (Nikita Prokopov)
Банить людей психологически сложно, особенно когда нет принципа. Каждый случай приходится разбирать индивидуально, а это психологически затратно.

Поэтому делюсь принципом. Он очень простой, надо ответить всего лишь на один вопрос: хочу я еще такое видеть или не хочу?

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

Тут важно, что это именно какой-то левый чел, который ничего обо мне не знает, и его мнение никак из поста не следует. Скажем, если бы мой наставник сказал мне «тебе надо подучить то-то и то-то», я бы, конечно, послушал. А когда это абсолютно на пустом месте заявление, да еще и мимо — это просто кому-то нужно место, куда можно выплеснуть свое недовольство жизнью. Я таким местом быть не готов.

Или чел пишет что-то про расовую ненависть (в любую сторону), бросается на людей. Хочу я еще видеть такое под следующими постами? Нет, не хочу. Бан.

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

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

Поэтому баню с легким сердцем и всех люблю.
👍16🤡4
В реальной жизни, кстати, тоже прекрасно работает.

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

Мудаков много, жизнь одна.
💯22❤‍🔥5
Если бы кто-то спросил меня дедовского совета по жизни, то сразу после великого профессоро-фортрановского "нормально делай, нормально будет", я бы точно сказал "не сотвори себе кумира".

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

Заканчивалось это всегда одним из двух способов:

1) Ужасно болезненным разочарованием, когда мой кумир на проверочку оказывался совсем не тем идеалом, который я себе нарисовал в голове. Тогда я чувствовал себя обманутым, раздражался и делал всякие резкие глупости;

2) Либо я просто трезвел и понимал, что да, чел крутой, у него можно многому научиться и вообще, но поклоняться точно не стоит, это ведь просто человек, такой же, как я.

Со временем я все чаще переходил от сценария 1 к сценарию 2, пока не перестал создавать себе кумиров вовсе (закончился этот процесс, кстати, совсем недавно).

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



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

Единственным вашим кумиром должны быть вы сами. Такая вот простая мысль.
15👍1210🤡4💊4
ну один раз поработал, не считается
2025/07/09 14:09:20
Back to Top
HTML Embed Code: