Home
Somehow Keats will survive without you - вот вам и совместимость [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

вот вам и совместимость [Окт. 11, 2007|08:31 pm]
Previous Entry в избранное рассказать другу Next Entry
(эта запись будет понятна только программистам)

В общем, вот как оно будет. Прилетят к нам пришельцы, довольно скоро, ну и как водится будут с нам воевать. Пришельцы-то будут не так чтобы намного круче нас. Более развитая, конечно, технология, но не на сотни лет вперед ушли, на десятки. Мы поднатужимся, всей планетой объединимся, изо всех сил будем стараться их догонять - да еще к тому же нас больше, и у нас преимущество своего поля.

Так что война будет почти на равных. Долгая, кровопролитная, тяжелая. И в конце концов... они нас победят.

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

И тогда инопланетяне посмотрят на нас, прищурятся хитро и скажут:

"А помните, когда вы на 64-битные компьютеры перешли, а int 32-битным оставили?"
ссылкаОтветить

Comments:
[User Picture]From: [info]amarao_san
2007-10-11 06:43 pm none (UTC)

(Link)

Да, да, а ещё земляным червяком! Т.е. до сих пор есть в серверных процессорах команда "перепаковать число в форме для показа на девятисегментном индикаторе".
From: [info]netch
2007-10-13 06:13 pm none (UTC)

(Link)

Во-первых, эти индикаторы были семисегментными (у некоторых - точка, восьмым сегментом). Во-вторых, десятичная арифметика нужна не только для индикаторов.
[User Picture]From: [info]os80
2007-10-11 06:45 pm none (UTC)

(Link)

А эта запись всем программистам понятна?
[User Picture]From: [info]avva
2007-10-11 06:51 pm none (UTC)

(Link)

Не знаю, но для тех, кто не понимает, могу ссылочку подкинуть.
[User Picture]From: [info]spamsink
2007-10-11 06:52 pm none (UTC)

(Link)

С этой стороны как раз все в порядке. А вот когда на 32-битной машине пишут long, рассчитывая на его 32-битность, то на 64-битной как жахнет!
[User Picture]From: [info]itman
2007-10-11 07:07 pm none (UTC)

(Link)

Зато у нас есть u_int64_t!
[User Picture]From: [info]spamsink
2007-10-11 07:24 pm none (UTC)

(Link)

Вот бы им еще и пользовались...
[User Picture]From: [info]iratus
2007-10-11 08:29 pm none (UTC)

(Link)

Все ХОРОШИЕ программисты всегда пользуются uint64_t uint32_t и так далее...
[User Picture]From: [info]lolthv
2007-10-12 08:35 am none (UTC)

(Link)

это первое, что мне вдолбили в голову на работе - никаких int'ов!
[User Picture]From: [info]tigra74
2007-10-12 09:09 pm none (UTC)

(Link)

Хорошие программисты не говорят ВСЕГДА.

Есть типы для вычислений, а есть для представления данных в бинарном виде с сохранением разрядности.
[User Picture]From: [info]itman
2007-10-11 09:13 pm none (UTC)

(Link)

Те, кто думают о совместимости именно им и пользуются родимым.
[User Picture]From: [info]its_probably_me
2007-10-11 06:58 pm none (UTC)

(Link)

Да-да-да. А еще сыграет свою роль баг со временем в юниксе.
[User Picture]From: [info]gaius_julius
2007-10-11 08:23 pm none (UTC)

(Link)

ну будем надеяться что к тому времени все уже успеют на 64-битное время перейти... (-:
[User Picture]From: [info]zvantsev
2007-10-11 07:07 pm none (UTC)

(Link)

32-битным... До сих пор постоянно натыкаюсь на чудесное число 65535. И больше - ни-ни.
[User Picture]From: [info]qehgt
2007-10-11 07:31 pm none (UTC)

(Link)

хм...

А что, в 64-битном GCC, sizeof(int) - тоже равен 4?
[User Picture]From: [info]avva
2007-10-11 07:33 pm none (UTC)

(Link)

Ну да. LP64 называется.
[User Picture]From: [info]faceted_jacinth
2007-10-11 07:41 pm none (UTC)

(Link)

А вот не факт.
Если про С или плюсы говорить, то это ужасно плохо из-за pointer arithmetic, в которой получается нечто весьма странное, когда с одной стороны вокруг инты, а с другой -- пойнтеры всё-таки 64битные.

А в жаве или шарпе как-то довольно пофиг. Вот программист захотел сделать массив интов, точно зная, что они 32битные, потому что в стандарте так написано, ну и отлично, значит, ему больше не нужно пока. Иные программисты аж массивы шортов или вообще байтов делают, и ничего.
Стандартную библиотеку можно будет когда-нибудь переписать на лонги и совместимость замечательно сохранится, однако там, где нужно, будет всё хорошо. И интовые константы по дефолту считать лонгами. И тайп инференс очень уместно прокинет изменения дальше, там где он есть, конечно.
[User Picture]From: [info]deadkittten
2007-10-11 08:48 pm none (UTC)

(Link)

Дык курите стандарты, как говорится. Там ясно сказано, что пойнтер обязан помещаться в unsigned long, а то что он раньше помещался в int -- не более чем совпадение. (Да и stdint.h и limits -- вещи небесполезные).
[User Picture]From: [info]execve
2007-10-12 05:53 am none (UTC)

(Link)

> пойнтер обязан помещаться в unsigned long

?

ISO/IEC 9899:1999 6.3.2.3.6.
Any pointer type may be converted to an integer type. Except as previously specified, the
result is implementation-defined. If the result cannot be represented in the integer type,
the behavior is undefined. The result need not be in the range of values of any integer
type.
[User Picture]From: [info]deadkittten
2007-10-12 05:57 am none (UTC)

(Link)

Хмм... Перепроверю; может быть, я и ошибся.
[User Picture]From: [info]deadkittten
2007-10-12 09:09 am none (UTC)

(Link)

Перепроверил для С++; был неправ, извиняюсь...

4 A pointer can be explicitly converted to any integral type large enough to hold it. The mapping function is
implementationdefined
[Note: it is intended to be unsurprising to those who know the addressing structure
of the underlying machine. ]
5 A value of integral type or enumeration type can be explicitly converted to a pointer.60) A pointer converted
to an integer of sufficient size (if any such exists on the implementation) and back to the same pointer type
will have its original value; mappings between pointers and integers are otherwise implementationdefined.

Особенно примечание понравилось -- "to be unsurprising" :)
[User Picture]From: [info]malaya_zemlya
2007-10-11 07:58 pm none (UTC)

(Link)

Когда Sony впервые выпустила библиотеки для PS3, то там, как это подобрает архитектуре нового поколения, все int-ы были 64-битными. Все честно-благородно. У всех девелоперов, бибилиотеки, естественно, поломались, а сроки поджимают, а консоль без игр никому не нужна. Поднялся такой шум, что Sony в следующем же релизе библиотек вернулась 32-битному int-у.
Так и живем.
[User Picture]From: [info]kidd79
2007-10-11 08:37 pm none (UTC)

(Link)

УЖасы какие вы рассказываете.
[User Picture]From: [info]ak_47
2007-10-11 08:10 pm none (UTC)

(Link)

Это ещё что. Потом они другим глазом прищурятся хитро и добавят:

"А помните, когда вы на 64-битные компьютеры перешли, вы ещё long 32-битным оставили?"

И вот тут уже не будет нам прощенья. Разверзнутся инопланетные трансглюкаторы и громы с молниями поглотят нерадивое человечество.
[User Picture]From: [info]alesk
2007-10-11 08:54 pm none (UTC)

(Link)

Уверен, они и про PHP напомнят
[User Picture]From: [info]itman
2007-10-11 09:28 pm none (UTC)

(Link)

Кстати, да, там при переходе с версии на версию (как сейчас помню) какие-то чудеса со знаковой "4-х байтной арифметикой" на 4х байтных машинах наблюдались :-)
From: [info]oblomov_jerusal
2007-10-13 05:48 pm none (UTC)

(Link)

ׂПомню, в Watcom C при переходе с одной версии на другую поменяли тип char по умолчанию с signed на unsigned (или наоборот?) и с битовыми полями в структурах что-то подобное.
[User Picture]From: [info]dzz
2007-10-11 09:01 pm none (UTC)

(Link)

Ой, я даже знаю, когда это будет! В 2038 году! :)))
[User Picture]From: [info]slobin
2007-10-12 10:44 pm none (UTC)

(Link)

Вы меня опередили! ;-)

... Оловянный пацифистик ...

[User Picture]From: [info]omnibee
2007-10-11 11:57 pm none (UTC)

(Link)

Ужос. Сколько программирую, а в инте 64битном необходимости не испытывал :)
[User Picture]From: [info]syarzhuk
2007-10-16 06:16 pm none (UTC)

(Link)

Было дело. У нас в базе хранился размер файла. Оказалось, бывают видеофайлы больше 4 гигабайт.
[User Picture]From: [info]omnibee
2007-10-16 09:51 pm none (UTC)

(Link)

Не, ну никто не говорит что 64битные скаляры не нужны. У меня тоже размеры файлов и смещения в них хранятся в 64 битах, но это же не int, а совсем другой тип, ну и пусть он будет другим. А int пусть остается для тех вычислений, которые спокойно в 32бита умещаются. В 99% случаях этого хватит, а для остальных случаев есть другие типа.

Если бездумно сделать все intы 64битными, памяти слишком много зря будет расходоваться. Сплошные нули...
[User Picture]From: [info]msh
2007-10-12 12:08 am none (UTC)

(Link)

Ну откуда ж у них более развитая технология, если они используют int там где важна разрядность? Да уже многие земляне types.h освоили!
[User Picture]From: [info]dejavit
2007-10-12 01:15 am none (UTC)

(Link)

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

[User Picture]From: [info]kot_ivanovich
2007-10-12 04:18 am none (UTC)

(Link)

Ну так наоборот еще хуже бы получилось. Берём старую программу (не такую, где всё посвящено обработке строчек, а чтобы считала что-нибудь) перекомпилируем – и из-за int и указателей рабочее множество возрастает почти в два раза. Что, скорее всего, означает, что она становится медленнее в два раза – в наше время CPU занят в основном тем, что ждёт память... И вообще по идее int – не самое большое, а самое быстрое (и не очень маленькое) целое в данной архитектуре. 32 бита на эту роль IMHO лучше подходят.

Мудаков, которые писали for (int i = strlen(s); ... или указатель на int кастили, конечно, жалко, но ведь мудак он всё равно найдёт способ как убиться, какой длины ты ему int ни приделывай. Так что войну с пришельцами мы и так и так проиграем :(
[User Picture]From: [info]pod_otkos
2007-10-12 06:02 am none (UTC)

(Link)


Софт для боевых роботов следует писать на ассемблере)
From: [info]tantv
2007-10-12 06:33 am none (UTC)

(Link)

Лучше на brainfuck-е
[User Picture]From: [info]pod_otkos
2007-10-12 07:22 am none (UTC)

(Link)


И сразу сдаваться.
[User Picture]From: [info]nebenbei
2007-10-20 11:11 am none (UTC)

(Link)

в плен, ага. этих роботов. и пленившие их пришельцы сойдут с ума
[User Picture]From: [info]v743
2007-10-12 09:03 am none (UTC)

(Link)

Можно подумать, что int на хотя бы только 32-битных компьютерах совместимости добавляет :)) int - зло ;)
[User Picture]From: [info]lykac
2007-10-13 03:07 pm none (UTC)

(Link)

А вы подскажите мне, где можно почитать документацию по ассемблеру для 64 разрядных компов на русском?
From: [info]netch
2007-10-13 06:15 pm none (UTC)

(Link)

И правильно сделали, что оставили.
Потому что пора понимать, что нефиг держать один int на все случаи жизни...

... и вообще думать на всяких там сях.
From: [info]risecomplete
2007-10-18 08:35 am none (UTC)

(Link)

ждем начала 38-го года...

From: (Anonymous)
2007-10-18 08:43 am none (UTC)

в догонку

(Link)

mysql> select UNIX_TIMESTAMP('2037-12-31 23:59:59');
+---------------------------------------+
| UNIX_TIMESTAMP('2037-12-31 23:59:59') |
+---------------------------------------+
| 2145909599 |
+---------------------------------------+
1 row in set (0.00 sec)

mysql> select UNIX_TIMESTAMP('2038-01-01 00:00:00');
+---------------------------------------+
| UNIX_TIMESTAMP('2038-01-01 00:00:00') |
+---------------------------------------+
| 0 |
+---------------------------------------+
1 row in set (0.00 sec)

а ведь 107-й год на дворе!

From: (Anonymous)
2007-10-21 03:16 pm none (UTC)

(Link)

Вообще-то с переходом на 64-битные процессоры программисты могут совладать используя Viva64.