Надёжная Debian 12
От: B0FEE664  
Дата: 15.10.24 14:55
Оценка: :))

sudo date --set="2040-12-13 10:09:08"
sudo hwclock --systohc --noadjfile --utc


и всё. приплыли.
А почему? А потому, что опытные программисты знают как там оно на самом деле устроено и кастят time_t к int.
И каждый день — без права на ошибку...
Re: Надёжная Debian 12
От: Shmj Ниоткуда  
Дата: 15.10.24 15:10
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>и всё. приплыли.

BFE>А почему? А потому, что опытные программисты знают как там оно на самом деле устроено и кастят time_t к int.

А Ubuntu так же себя ведет? Другие версии Linux?
Re: Надёжная Debian 12
От: Философ Ад http://vk.com/id10256428
Дата: 15.10.24 15:52
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>А почему? А потому, что опытные программисты знают как там оно на самом деле устроено и кастят time_t к int.


А time_t в линухе не 8 байт? Почему кастят?
Блин, прибил бы автора слова "int" — не понятно же, какого размера...

UPD: проверил — действительно 8 байт, как и в винде. А как они это кастят? Почему кастится?
Всё сказанное выше — личное мнение, если не указано обратное.
Отредактировано 15.10.2024 15:57 Философ . Предыдущая версия . Еще …
Отредактировано 15.10.2024 15:56 Философ . Предыдущая версия .
Re[2]: Надёжная Debian 12
От: B0FEE664  
Дата: 15.10.24 16:35
Оценка: :)
Здравствуйте, Shmj, Вы писали:

S>А Ubuntu так же себя ведет?

Не знаю. Попробуй.

S>Другие версии Linux?

Debian 10 на все даты уходящие за 2038 год говорил, что формат даты не правильный. А в версии 12 ядро подправили и теперь этот порог можно преодолеть, но к такому остальные части системы не готовы...
И каждый день — без права на ошибку...
Re: Надёжная Debian 12
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.10.24 16:46
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>

BFE>sudo date --set="2040-12-13 10:09:08"
BFE>sudo hwclock --systohc --noadjfile --utc
BFE>


BFE>и всё. приплыли.


Куда приплыли-то? Подробности расскажи.

BFE>А почему? А потому, что опытные программисты знают как там оно на самом деле устроено и кастят time_t к int.


А там в хардварии сколько битов-то?
Re[2]: Надёжная Debian 12
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.10.24 16:49
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Блин, прибил бы автора слова "int" — не понятно же, какого размера...


Удобного для процессора. На PDP/11 вообще 16 бит было. И на 16-битном 8086 тоже.

Автор-то уже помер, поди. Наверное, это был Денис Ричи.

Ф>UPD: проверил — действительно 8 байт, как и в винде. А как они это кастят? Почему кастится?


Мне интересно, тот регистр в железе, куда они это пишут, там-то сколько бит?
Re[2]: Надёжная Debian 12
От: B0FEE664  
Дата: 15.10.24 17:03
Оценка:
Здравствуйте, Философ, Вы писали:

BFE>>А почему? А потому, что опытные программисты знают как там оно на самом деле устроено и кастят time_t к int.

Ф>А time_t в линухе не 8 байт? Почему кастят?
Ф>Блин, прибил бы автора слова "int" — не понятно же, какого размера...

Ф>UPD: проверил — действительно 8 байт, как и в винде. А как они это кастят?


Никогда не видели кода:
    int n = time(NULL);

?

Ф>Почему кастится?

by designe

Причём с gcc опции -Wall -Wpedantic -Wextra не спасут. Нужно дополнительно -Wconversion и только тогда будет предупреждение.

Но это ещё цветочки.
Я не знаю кто и что в недрах gcc или Linux что-то такое предусмотрел, но приложение в конторе (что я консультирую) падает не доходя до main. Причём с какой-то совершенно невнятной диагностикой про размер файла.
И каждый день — без права на ошибку...
Re[2]: Надёжная Debian 12
От: B0FEE664  
Дата: 15.10.24 17:34
Оценка: 1 (1) :))) :)
Здравствуйте, Pzz, Вы писали:

BFE>>

BFE>>sudo date --set="2040-12-13 10:09:08"
BFE>>sudo hwclock --systohc --noadjfile --utc
BFE>>


BFE>>и всё. приплыли.

Pzz>Куда приплыли-то? Подробности расскажи.
Клиенты решили протестировать девайс.
И первым же делом поменяли дату на вышеуказанную (из интерфейса).
И всё, девайс кажет чёрный экран.
Клиент, что характерно, на другом континенте. На этом никому в голову подобное не пришло.
Шев проекта не рискнул повторить трюк, а мне было интересно.
Результат тот же.
По ssh не зайти, девайса в сети нет (хотя ip на нём фиксированный)
Через последовательный порт видно , что загрузка с ошибками, но проходит.
putty подвисает после каждого нажатия enter, так что каждая команда требует переподключения.
Обратно дату на текущую не изменить: команда завершается с ошибкой.
У многих файлов и каталогов дата поменялась на 2040... и именно это приводит к проблемам. Если поменять даты каталогов /etc и /dev на текущие, то кое-что начинает работать.
Я не стал дальше разбираться, а просто переставил систему с флешки.

BFE>>А почему? А потому, что опытные программисты знают как там оно на самом деле устроено и кастят time_t к int.

Pzz>А там в хардварии сколько битов-то?
ARM 64 бита.
И каждый день — без права на ошибку...
Re[3]: Надёжная Debian 12
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.10.24 17:38
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>>>А почему? А потому, что опытные программисты знают как там оно на самом деле устроено и кастят time_t к int.

Pzz>>А там в хардварии сколько битов-то?
BFE>ARM 64 бита.

Это у процессора. Интересно, сколько битов в том месте железа, куда время пишется.

Кстати, раз это ARM, то вся эта дичь в BSP, или в "общем" коде?
Re[3]: Надёжная Debian 12
От: Alekzander  
Дата: 15.10.24 18:52
Оценка: +1
Здравствуйте, Pzz, Вы писали:

Ф>>Блин, прибил бы автора слова "int" — не понятно же, какого размера...


Pzz>Удобного для процессора. На PDP/11 вообще 16 бит было. И на 16-битном 8086 тоже.


Pzz>Автор-то уже помер, поди. Наверное, это был Денис Ричи.


Я слышал, в старые времена железо тормозило на неродной разрядности. Например, задефайнив INT на 16 бит и используя его повсюду, можно было совершенно бесплатно получить просадку производительности на 86 времён, примерно, 9x.

Никогда не любил тестировать подобные штуки, в те времена особенно, но если это так, то это костыль, ныне утративший единственный смысл, который в нём был. Но люди упорно пытаются найти новый (смысл).
I'm a sewer mutant, and my favorite authors are Edgar Allan Poo, H.G. Smells and George R.R. Martin.
Re[4]: Надёжная Debian 12
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.10.24 19:00
Оценка: +1
Здравствуйте, Alekzander, Вы писали:

A>Никогда не любил тестировать подобные штуки, в те времена особенно, но если это так, то это костыль, ныне утративший единственный смысл, который в нём был. Но люди упорно пытаются найти новый (смысл).


В смысле?

Во времена, когда Си был придуман, были 16-битные компьютеры, они аппаратно складывали за раз два 16-битных числа, а вот чтобы сложить два 32-битных числа, требовалось несколько команд, и были 32-битные компьютеры, их команды за раз оперировали 32-битными числами.

Если использовать int по назначению (например, в качестве счетчика цикла), то обычно вообще все равно, 16 он бит или 32. Поэтому тип, достаточно длинный для подобных применений, но при этом без гарантий относительно конкретной длины (1) имеет смысл (2) очень востребован. Даже и до сих пор.
Re[5]: Надёжная Debian 12
От: Философ Ад http://vk.com/id10256428
Дата: 15.10.24 19:45
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Если использовать int по назначению (например, в качестве счетчика цикла), то обычно вообще все равно, 16 он бит или 32...


А что, во время 16-битных регистров мегабайтных файлов ещё не было? Или никто последовательно не вычитывал сотни тысяч элементов структуры? Вроде когда C придумали, уже юникс был — уже должны были быть подобные задачи, тем более Масачусетском универе.
Я не сишник, если что.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[5]: Надёжная Debian 12
От: Alekzander  
Дата: 15.10.24 19:47
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Во времена, когда Си был придуман, были 16-битные компьютеры, они аппаратно складывали за раз два 16-битных числа, а вот чтобы сложить два 32-битных числа, требовалось несколько команд, и были 32-битные компьютеры, их команды за раз оперировали 32-битными числами.


Что происходило с производительностью, если на тех 16-битных компьютерах ты складывал два 8-битных числа?

Допустим, ты портировал код с 8-битной платформы и поэтому точно знал, что диапазона тебе хватит. Получал ли ты выигрыш по скорости, заменив безо всякого прикладного смысла все переменные на 16-битные?

Я, к сожалению, так давно не живу. Почитываю иногда старые статьи, и не уверен, что понимаю их правильно.
I'm a sewer mutant, and my favorite authors are Edgar Allan Poo, H.G. Smells and George R.R. Martin.
Re[6]: Надёжная Debian 12
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.10.24 19:52
Оценка: +1
Здравствуйте, Философ, Вы писали:

Pzz>>Если использовать int по назначению (например, в качестве счетчика цикла), то обычно вообще все равно, 16 он бит или 32...


Ф>А что, во время 16-битных регистров мегабайтных файлов ещё не было? Или никто последовательно не вычитывал сотни тысяч элементов структуры? Вроде когда C придумали, уже юникс был — уже должны были быть подобные задачи, тем более Масачусетском универе.

Ф>Я не сишник, если что.

Для этого был тип long.
Re[6]: Надёжная Debian 12
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.10.24 19:55
Оценка:
Здравствуйте, Alekzander, Вы писали:

A>Что происходило с производительностью, если на тех 16-битных компьютерах ты складывал два 8-битных числа?


A>Допустим, ты портировал код с 8-битной платформы и поэтому точно знал, что диапазона тебе хватит. Получал ли ты выигрыш по скорости, заменив безо всякого прикладного смысла все переменные на 16-битные?


Не знаю. Думаю, для разных машин разный ответ.

Но в целом, во времена засилия 16-битных машин памяти было очень мало. Поэтому тратить при работе со строками по 16 бит на символ было бы расточительством; возможность напрямую работать с 8-битными значениями была важна.

Так что я думаю, с 8-ю битами все было ОК.
Re[3]: Надёжная Debian 12
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.10.24 20:01
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Никогда не видели кода:

BFE>
BFE>    int n = time(NULL);
BFE>

BFE>?

Я видел код, в котором в int запихивали указатель. А потом рассчитывали его оттуда достать, в целости и сохранности.

Собственно, даже во времена MS-DOS это было дикостью, потому что int был 16-битным, а far pointer — нет. Но на VAX-е, где родился BSD UNIX, все было 32-битным, очень удобно, пока кому-нибудь не придет в голову такой код куда-нибудь спортировать.

BFE>Я не знаю кто и что в недрах gcc или Linux что-то такое предусмотрел, но приложение в конторе (что я консультирую) падает не доходя до main. Причём с какой-то совершенно невнятной диагностикой про размер файла.


Можно написать функцию, которая исполнится (и упадет) до main-а. В C++ для этого предусмотрены конструкторы статических объектов, для Си в gcc есть специальные расширения.

Ты б дал ему отложить core и посмотрел бы отладчиком на стек...
Re[7]: Надёжная Debian 12
От: Alekzander  
Дата: 15.10.24 20:09
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Но в целом, во времена засилия 16-битных машин памяти было очень мало. Поэтому тратить при работе со строками по 16 бит на символ было бы расточительством


Речь не про символы, а про счётчики циклов и тому подобное. До сих пор тратить по 16 бит на символ считается расточительством (UTF-8).

Плюс, что тогда было с многозадачностью? Программа начинала требовать больше памяти, но если эта память была увеличена пропорционально разрядности, и никто её больше не тратил, не один ли хрен.
I'm a sewer mutant, and my favorite authors are Edgar Allan Poo, H.G. Smells and George R.R. Martin.
Отредактировано 15.10.2024 20:11 Alekzander . Предыдущая версия .
Re[8]: Надёжная Debian 12
От: Pzz Россия https://github.com/alexpevzner
Дата: 15.10.24 20:54
Оценка:
Здравствуйте, Alekzander, Вы писали:

Pzz>>Но в целом, во времена засилия 16-битных машин памяти было очень мало. Поэтому тратить при работе со строками по 16 бит на символ было бы расточительством


A>Речь не про символы, а про счётчики циклов и тому подобное. До сих пор тратить по 16 бит на символ считается расточительством (UTF-8).


Ну если мы можем вычесть из ASCII-символа цифры '0', чтобы получить ее численное значение, значит, 8-битная арифметика в машине предусмотрена.

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

A>Плюс, что тогда было с многозадачностью? Программа начинала требовать больше памяти, но если эта память была увеличена пропорционально разрядности, и никто её больше не тратил, не один ли хрен.


Если памяти, скажем, 128 килобайт на всех, то не один хрен.

Килобайт, обрати внимание. В килобайте 1024 байта.
Re[9]: Надёжная Debian 12
От: Alekzander  
Дата: 15.10.24 21:51
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Если памяти, скажем, 128 килобайт на всех, то не один хрен.


Pzz>Килобайт, обрати внимание. В килобайте 1024 байта.


128 килобайт было ещё у восьмибитного Спектрума. А Спектрум я уже вполне застал. А у промышленных систем, ну вот я загуглил:

PDP–11/70 – 1975.[15] The 11/45 architecture expanded to allow 4 MB of physical memory segregated onto a private memory bus, 2 KB of cache memory, and much faster I/O devices connected via the Massbus.


Другая известная 16-битная система, 80286 — "640К хватит всем". 640, а не 128.

Я думаю, при переносе восьмибитных программ на практике ты всегда влезал в память, если тупо заменял главный int на 16-битный. Если при этом ты избавлялся от тормозов или ещё какого-нибудь говна, связанного с неродной разрядностью, то в этом и был смысл плавающего размера.
I'm a sewer mutant, and my favorite authors are Edgar Allan Poo, H.G. Smells and George R.R. Martin.
Re[10]: Надёжная Debian 12
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.10.24 04:35
Оценка:
Здравствуйте, Alekzander, Вы писали:

A>128 килобайт было ещё у восьмибитного Спектрума. А Спектрум я уже вполне застал. А у промышленных систем, ну вот я загуглил:


A>

A>PDP–11/70 – 1975.[15] The 11/45 architecture expanded to allow 4 MB of physical memory segregated onto a private memory bus, 2 KB of cache memory, and much faster I/O devices connected via the Massbus.


"Allow" != "installed". 128-256 Kb — вполне нормальная сборка для PDP-ки (вернее, я застал советские PDP, СМ/4). В персоналки (Электронока-60) больше 64К не ставили.

A>Другая известная 16-битная система, 80286 — "640К хватит всем". 640, а не 128.


Это уже была прям продвинутая система.

A>Я думаю, при переносе восьмибитных программ на практике ты всегда влезал в память, если тупо заменял главный int на 16-битный. Если при этом ты избавлялся от тормозов или ещё какого-нибудь говна, связанного с неродной разрядностью, то в этом и был смысл плавающего размера.


Что-то я не припомню, чтобы я куда-нибудь переносил 8-битные программы.

16-битные, с MS-DOS на UNIX переносил, как и в обратном направлении.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.