Предупреждение: у нас есть цензура и предварительный отбор публикуемых материалов. Анекдоты здесь бывают... какие угодно. Если вам это не нравится, пожалуйста, покиньте сайт. 18+

История №364063

Цитата с БашОрга:
< Зелибоба > прикинь как будут праздновать 2048 й год ;-)
< Зелибоба > особенно программисты
< prizrak > а как праздновали 1024!

А вы знаете, что за 10 лет до этого, в 2038 году, наступит апокалипсис
для всех программ, написанных на С и С++?
Дело в том, что в языке С есть встроенный таймер, который отсчитывает
время в секундах от 00.00 01.01.1970 - так когда-то решили изобретатели
языка С Керниган и Ричи. А размерность таймера составляет 31 разряд, то
есть 2147483648 с = 2^31 - 1 с.
Я специально только что посчитал - счетчик переполнится через 68 лет, 35
суток, 3 ч 14 мин 7 сек, то есть 4 февраля 2038 г в 3 ч ночи.
Кто не верит, можете вычислить сколько это - 2147483648 с.
+28
Проголосовало за – 175, против – 147
Статистика голосований по странам
Статистика голосований пользователей
Чтобы оставить комментарии, необходимо авторизоваться. За оскорбления и спам - бан.
35 комментариев, показывать
сначала новые

Mike2208.10.08 17:46

Абориген СРР:
Еще есть парадокс нужности. Когда я пишу быстро мелкую утилитку, я вполне могу написать и read(time,4) - для себя ж пишу, а так короче.
Парадокс в том, что как раз подобные мелкие утилитки, порой удивительно долгоживучи и расползаются по по коду любимым китайским методом copy/paste.

+0
ответить

Mike2208.10.08 09:32

111222333:
> Язык С как и С++ не может иметь таймер
А так же не может записывать в файл (этим занимается диск и ОС), рисовать картинки (этим занимается графическая карта и монитор), перемножать два числа (этим занимается процессор) и т.д.
И сидишь ты не в здании, а в своих брюках, наверняка.
Не выебывайся, железячник.

> и продолжать считать, что в компайлере вшит страшный секретный код таймера
Повторю, не выебывайся дебил. Ниже написали про быдлокодеров. Но даже при небыдлокодерах останется проблема совместимости старых данных и новых. А небыдлокодеров - крайне мало.

Gyn:
Угу. Хранится у тебя в файлике время записи, скажем, рождения ребенка '1223443659', что суть сегодняшняя дата. Сместил ты точку отсчета на 50 лет (для красоты), и вуаля, у записи не 2008г, а 2058г. Правда, здорово? Снова в Армию можно. А такое представление времени - дохера где используется.

+0
ответить

11122233307.10.08 21:59

Интересно, кто выпрямил все извилины студентам программистам?
Уебок.
Язык С как и С++ не может иметь таймер. Таймер - это физическая железяка впаяная в компутер, и считающая колличество секунд прошедших с твоей даты, до текущего времени. А в языке есть функция, которая обращается к этой цифири, и предлогающая ее тебе.
И как только ты завьешь себе хотя бы одну извилину, ну с помощью паяльника, например, то ты поймешь, что вот уже лет как 5 все компы 64 битные, и собрать мамку, где таймерный контролер будет хранить цифирку не в 32 битном, а в 64 битном варианте, уже как-то сподобились. Как и прописать в новой версии билиотеки time вариант, когда определен 64 процессор, выдавать значение 64 битного регистра.
Но если хочешь, можешь обидется и продолжать считать, что в компайлере вшит страшный секретный код таймера.

+0
ответить

Gyn07.10.08 14:18

ну обнулится и по второму кругу пойдет, не один хер - откуда отсчитывать ?

+0
ответить

Абориген СРР07.10.08 11:24

Блят, до проблеммы ещё тридцать лет!!! Тридцать!!! Кто из васпомнит что было тридцать лет назад??? Вот и через тридцать лет никто и не вспомнит об этом ибаном счётчике!!!

Hyde

+++++
Ты не одинок.
Те, кто писал на Коболе в 1970м году, тоже не думали о "проблеме 2000", когда выделяли на год две цифры. И, как выяснилось, зря: кое-какие (причем довольно критические) приложения таки дожили до этой проблемы к полному изумлению своих создателей.

=====
Коснётся только виндусов, и только тех для них программ, которые не используют 64-битный таймер.

И причём тут С++?
+++++

Абисняю популярно:

Достаточно какому-нибудь быдлокодеру (http://lurkmore.ru/%D0%91%D1%8B%D0%B4%D0%BB%D0%BE%D0%BA%D0%BE%D0%B4%D0%B5%D1%80#.D0.91.D1.8B.D0.B4.D0.BB.D0.BE.D0.BA.D0.BE.D0.B4.D0.B5.D1.80) написать

size_t time;
myfile->read(&time, 4);

вместо

size_t time;
myfile->read(&time, sizeof(time));

и все - писец. Компиляция под 64 разрядную систему ничего не изменит.

=====
По опыту: перетрясти проект в 140к строк на предмет размерности таймера - 1 человеко/час.

+++++
:-))

+0
ответить

Hyde07.10.08 10:18

Рабинович на лекции с ужасом переспрашивает - Через сколько потухнет солнце? Лектор ему отвечает - Через пять миллиардов!!! Рабинович, вытирая пот со лба, - Фух. А мне послышалось через пять миллионов!!!

Блят, до проблеммы ещё тридцать лет!!! Тридцать!!! Кто из васпомнит что было тридцать лет назад??? Вот и через тридцать лет никто и не вспомнит об этом ибаном счётчике!!!

Расшумелись, бля

+0
ответить

Просто Читатель07.10.08 09:59

Это называется слышу звон но не знаю где он.
Этот таймер вообще-то считает не в секундах, а в милисикундах.
В Виндовсе есть свой таймер, который отсчитывает в миллисекундах время работы виндовс и что? через 49 дней непрерывной работы винда взрывается?
А ещё есть 64-х разрядный счётчик тактов процессора и что из этого... дохрена разных счетчиков...
Автора в опу

+0
ответить

mangust07.10.08 09:47

stranica- esli vam sei4as 30-40 let, v 38 godu budet 70-80. Nekotorye mogut doz't.

+0
ответить

epROMa07.10.08 06:16

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

+0
ответить

Mike2207.10.08 01:50

ktod:
А многие программы вообще вещь в себе - никого из разработчиков не осталось...

Hекий программист-коболист в поте лица трудился над пресловутой проблемой 2000 года. Он чинил программы во многих фирмах и зашибал приличные бабки. Hо по мере приближения роковой даты его все больше охватывал ужас: что будет со всеми этими программами и с ним самим? Hаконец он решил наморозиться и проспать в анабиозе до февраля 2000 года, а там, глядишь, вся свистопляска и уляжется...
... Он проснулся в странном незнакомом помещении, вокруг ликовали люди: "Очнулся, очнулся!".
— Сейчас с вами будет говорить президент Земного Шара.
Hа огромном стереоскопическом экране возник человек, весьма похожий на Билла Гейтса.
— Видите ли, программа вашей камеры при переходе к 2000 году сработала неправильно, и вы проспали почти 8000 лет. Hо вы не волнуйтесь. Hаша жизнь прекрасна. Мы достигли огромных успехов в науке и технике. Мы покорили время и пространство. Мы...
— Hо почему вы меня разморозили?
— Понимаете, приближается 10000 год, а в вашем досье указано, что вы знаете КОБОЛ

+0
ответить

Mike2207.10.08 01:48

ktod:
То-то аврально работающие товарищи из одной очень крупной организации потратили пару месяцев на проблему с NaN... хотя казалось бы, чего там...

+0
ответить

ktod06.10.08 22:18

Дружище, эта проблема только кажется таковой. Софт на месте не стоит - он постоянно обновляется. Уже сейчас многие разрабы применяют в своих разработках u64 для хранения времени. А за 30лет все современные проекты будут 1000 раз пересобраны.
По опыту: перетрясти проект в 140к строк на предмет размерности таймера - 1 человеко/час. И это достаточно легко масштабируется.
Если уж говорить о проблеме в целом, то пожалуй, самое сложное - обновить файловые системы. Но и это выполнимо. Вот, Вы заметили переход с нтфс4 на нтфс5?

+0
ответить

странница06.10.08 21:04

а чего вы, господа, переполошились? Кто из вас доживет до 2038? А кто доживет, тому будет так насрать, что будет с 30-летним софтом! Кто из вас юзает софт 1978 года?

+0
ответить

Mike2206.10.08 21:02

Мефодий1:
int64 не решит проблему работы старых программ.

Хрюш:
Вали обратно в свинарник, чмо.

+0
ответить

Билли06.10.08 20:54

Не ссы чувачок , решим твой апокалипсис.. за небольшие комиссионные ессно

+0
ответить

и_т06.10.08 17:53

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

+0
ответить

sdsdf06.10.08 15:12

64 bit :)

+0
ответить

Мефодий1 06.10.08 14:54

Всем
Таймер, конечно, не в самом языке, а в функции вычисления текущего времени. Такие функции есть во всех языках высокого уровня.
Проблема коснется и виндов, и юниксов, ибо проблема в языке программирования, а не в системе. Компиляторы С во всех системах есть.
Языка С++ проблема тоже коснется, так как в нем эта функция напрямую из С перекочевала.
Наивный
Спасибки за ссылку. Начал пересчитывать и понял, что я дурак - не учел, високосных дней, коих за 68 лет накопится как раз 17. Поэтому событие произойдет не через 68 лет 35 суток, а через 68 лет 18 суток, то есть как раз 19 января.
Mike22
unsigned int32 действительно только отодвинет проблему. А вот int64 решит ее окончательно, потому что ко времени исчерпания этого запаса уже, наверно и языка С не будет как такового.

+0
ответить

Наивный06.10.08 14:34

Ireul
Угу. Можно подумать, что unixов не коснется. И чему только в сейчас институтах учат...

+0
ответить

Mike2206.10.08 14:31

Идиотам, отметившимся ниже:
Конечно, в самом языке таймера нет. Но мало ли, в какой стракт засунут инт32 с текущим временем? Мало ли функций, использующих в качестве параметра для времени тот же инт32? Не, я понимаю, дебилам ничего кроме "хайло уорд" не писавших, этого не понять, но бля... не позорьте звание программиста, мудоиды.

ЗЫ: По теме, думаю, что инт32 почти безболезненно можно в ансигнед инт 32 перевести, что отодвинет проблему еще на 2/3 века.

+0
ответить

Ireul06.10.08 14:29

Коснётся только виндусов, и только тех для них программ, которые не используют 64-битный таймер.

И причём тут С++?

+0
ответить

Keldysh06.10.08 14:13

Бред какой... Секундомер в языке С - это круто :-)))

+0
ответить

661006.10.08 13:37

омг
запостил бы на баш, там таких дебилов дохуя
здесь правда не меньше

ты по обмену?

+0
ответить

юнат ★★06.10.08 12:53

И что?Мы ан.ру читать не сможем?Мню тоже не шарит в ентих заморочках.

+0
ответить

Мобуту Сесе Секо Куку Нгбенду Ва За Банга06.10.08 12:47

Ни фига в этом не шарю...Да и пофиг мне есть такая проблема или нет.
Смеяться то где?

+0
ответить

Гость06.10.08 12:40

Таймер в языке программирования? Как говорил поручик Ржевский, "оргинально..."

+0
ответить

nei06.10.08 12:35

Он хотел написать про 32-х разрядные операционки. Им действительно будет нехорошо, только вот кто на них будет до того времени сидеть?

+0
ответить

Наивный06.10.08 12:13

Мефодий1
Еще вот это прочтите: http://en.wikipedia.org/wiki/Year_2038_problem
Чтобы было о чем писать завтра.

+0
ответить

Офигел06.10.08 12:08

Ептыть, у автора счетчик перепонился...

+0
ответить

Мефодий106.10.08 11:56

NULL
Интересно, а в какой справке ты это прочел? Получается, что таймер еще и с ошибкой, если он даже 31 разряда полностью отсчитать не может.

нахнах
Не в дебелизоре, а в журнале "Upgrade".

+0
ответить

нахнах06.10.08 11:50

в дебелизоре увидал?
ващето креос не хуже седняшней пятикратной кошкойбки, такая же хуйня.

походу моск всех аффтаров колайдером контузило

+0
ответить

Гость06.10.08 11:42

афтор устраивайся на фирму компутерную. Будешь лохов по примеру 2000 разводить

+0
ответить

HY 06.10.08 11:31

автор сука, где смешно то?

+0
ответить

Крендель06.10.08 11:29

ну падишах может и доживет, а мефодий с такими постами - вряд ли

+0
ответить

NULL06.10.08 11:22

Чувак, ты гений, канешна, но прежде чем такие мегавычисления делать -- не помешало бы справку почитать -- знал бы что сие знаменательное событие произойдет January 18, 2038...
Но не все так плохо (прикинь, об этой проблеме до тебя задумались...) -- есть __time64_t -- посчитай-ка когда он дотикает

+0
ответить

Общий рейтинг комментаторов
Рейтинг стоп-листов

Рейтинг@Mail.ru