Pull to refresh

Comments 14

Жуткий перевод.
Что-то гуглетранслейт не в ударе сегодня.

Это из какого года статья?
Я точно помню, что впервые, как я посмотрел на errno, это уже был макрос на функцию. Так что никаких проблем с многопоточностью.
Если я правильно понял man7.org/linux/man-pages/man7/signal-safety.7.html, там явно указано, что надо сохранить errno и восстановить, если хотите вызывать функции из разрешённого списка, устанавливающие errno.
Какая разница какого года статья, если в ней обсуждается “единый UNIX”, каким он был до седьмой версии (то есть до 1980го года).
А как-то сомневаюсь, что вам повезло с ним в те годы познакомиться. Разве что вы ДЕМОС застали (я про него только в книжках читал).
Я точно помню, что впервые, как я посмотрел на errno, это уже был макрос на функцию. Так что никаких проблем с многопоточностью.
Ну да, только куча проблем с эффективностью.

Вообще на 32-битных системах это плохой интерфейс. Применямый в Linux (всё что от -4095 до -1 — ошибка, вне этого диапазона — возвращаемое значение) гораздо удобнее.

Ваш man в отношение к обсуждаемой статье — это что-то из далёкого “светлого” будущего.

С многопоточностью проблемы errno вполне решаемы (главное чтоб кто-то захотел их решать). Просто тред-зависимую переменную сделать и всё.

UFO just landed and posted this here

видимо не везде, раз статьи вот такие появляются

UFO just landed and posted this here

я тоже не слышал, может автор нам пример приведёт?

А вас не смутило что в статье обсуждается Unix 30-летней давности, нет?

Современный C способен на такие фокусы, как возврат двухэлементной структуры в паре регистров

Никогда не видел такого :/ Это время уже прошло или ещё не наступило?

UFO just landed and posted this here
Аааа… мои глаза! Это что за компилятор у вас такую дичь нагенерил? Нормальный же код большая четвёрка порождает.

Но тут у вас один регистр. Чтобы два было нужно, скажем, указатель и код ошибки вернуть

Но главная проблема с обсуждаемыми временами — это даже не то, что структуру нельзя вернуть эффективно, а то, что её нельзя вернуть вообще. K&R C этого не поддерживает. Хотя C89 поддерживает и многие компиляторы так умели уже в 80е… но не в обсуждающиеся в статье 70е!
UFO just landed and posted this here
-O3

В GCC с ним осторожнее надо. Вот именно потому что оно побуждает всё агрессивно векторизовать, засовывать в SIMD'ы, что далеко не всегда приводит к выигрышу в скорости и почти всегда — к проигрышу в размере кода.

Но это как раз потому что в один регистр упаковывать в обычных регистрах не так удобно, когда нужны именно два регистра таких чудес нету.
Sign up to leave a comment.