avva: (Default)
avva ([personal profile] avva) wrote2007-10-11 08:31 pm

вот вам и совместимость

(эта запись будет понятна только программистам)

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

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

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

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

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

[identity profile] amarao-san.livejournal.com 2007-10-11 06:43 pm (UTC)(link)
Да, да, а ещё земляным червяком! Т.е. до сих пор есть в серверных процессорах команда "перепаковать число в форме для показа на девятисегментном индикаторе".
netch: (Default)

[personal profile] netch 2007-10-13 06:13 pm (UTC)(link)
Во-первых, эти индикаторы были семисегментными (у некоторых - точка, восьмым сегментом). Во-вторых, десятичная арифметика нужна не только для индикаторов.

[identity profile] os80.livejournal.com 2007-10-11 06:45 pm (UTC)(link)
А эта запись всем программистам понятна?

[identity profile] avva.livejournal.com 2007-10-11 06:51 pm (UTC)(link)
Не знаю, но для тех, кто не понимает, могу ссылочку подкинуть.
spamsink: (Default)

[personal profile] spamsink 2007-10-11 06:52 pm (UTC)(link)
С этой стороны как раз все в порядке. А вот когда на 32-битной машине пишут long, рассчитывая на его 32-битность, то на 64-битной как жахнет!

[identity profile] itman.livejournal.com 2007-10-11 07:07 pm (UTC)(link)
Зато у нас есть u_int64_t!
spamsink: (Default)

[personal profile] spamsink 2007-10-11 07:24 pm (UTC)(link)
Вот бы им еще и пользовались...

[identity profile] iratus.livejournal.com 2007-10-11 08:29 pm (UTC)(link)
Все ХОРОШИЕ программисты всегда пользуются uint64_t uint32_t и так далее...

[identity profile] lolthv.livejournal.com 2007-10-12 08:35 am (UTC)(link)
это первое, что мне вдолбили в голову на работе - никаких int'ов!

[identity profile] tigra74.livejournal.com 2007-10-12 09:09 pm (UTC)(link)
Хорошие программисты не говорят ВСЕГДА.

Есть типы для вычислений, а есть для представления данных в бинарном виде с сохранением разрядности.

[identity profile] itman.livejournal.com 2007-10-11 09:13 pm (UTC)(link)
Те, кто думают о совместимости именно им и пользуются родимым.

[identity profile] its-probably-me.livejournal.com 2007-10-11 06:58 pm (UTC)(link)
Да-да-да. А еще сыграет свою роль баг со временем в юниксе.

[identity profile] gaius-julius.livejournal.com 2007-10-11 08:23 pm (UTC)(link)
ну будем надеяться что к тому времени все уже успеют на 64-битное время перейти... (-:

[identity profile] zvantsev.livejournal.com 2007-10-11 07:07 pm (UTC)(link)
32-битным... До сих пор постоянно натыкаюсь на чудесное число 65535. И больше - ни-ни.

[identity profile] qehgt.livejournal.com 2007-10-11 07:31 pm (UTC)(link)
хм...

А что, в 64-битном GCC, sizeof(int) - тоже равен 4?

[identity profile] avva.livejournal.com 2007-10-11 07:33 pm (UTC)(link)
Ну да. LP64 называется.

[identity profile] faceted-jacinth.livejournal.com 2007-10-11 07:41 pm (UTC)(link)
А вот не факт.
Если про С или плюсы говорить, то это ужасно плохо из-за pointer arithmetic, в которой получается нечто весьма странное, когда с одной стороны вокруг инты, а с другой -- пойнтеры всё-таки 64битные.

А в жаве или шарпе как-то довольно пофиг. Вот программист захотел сделать массив интов, точно зная, что они 32битные, потому что в стандарте так написано, ну и отлично, значит, ему больше не нужно пока. Иные программисты аж массивы шортов или вообще байтов делают, и ничего.
Стандартную библиотеку можно будет когда-нибудь переписать на лонги и совместимость замечательно сохранится, однако там, где нужно, будет всё хорошо. И интовые константы по дефолту считать лонгами. И тайп инференс очень уместно прокинет изменения дальше, там где он есть, конечно.

[identity profile] deadkittten.livejournal.com 2007-10-11 08:48 pm (UTC)(link)
Дык курите стандарты, как говорится. Там ясно сказано, что пойнтер обязан помещаться в unsigned long, а то что он раньше помещался в int -- не более чем совпадение. (Да и stdint.h и limits -- вещи небесполезные).

[identity profile] execve.livejournal.com 2007-10-12 05:53 am (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.

[identity profile] deadkittten.livejournal.com 2007-10-12 05:57 am (UTC)(link)
Хмм... Перепроверю; может быть, я и ошибся.

[identity profile] deadkittten.livejournal.com 2007-10-12 09:09 am (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" :)

[identity profile] malaya-zemlya.livejournal.com 2007-10-11 07:58 pm (UTC)(link)
Когда Sony впервые выпустила библиотеки для PS3, то там, как это подобрает архитектуре нового поколения, все int-ы были 64-битными. Все честно-благородно. У всех девелоперов, бибилиотеки, естественно, поломались, а сроки поджимают, а консоль без игр никому не нужна. Поднялся такой шум, что Sony в следующем же релизе библиотек вернулась 32-битному int-у.
Так и живем.

[identity profile] kidd79.livejournal.com 2007-10-11 08:37 pm (UTC)(link)
УЖасы какие вы рассказываете.
ak_47: (Default)

[personal profile] ak_47 2007-10-11 08:10 pm (UTC)(link)
Это ещё что. Потом они другим глазом прищурятся хитро и добавят:

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

И вот тут уже не будет нам прощенья. Разверзнутся инопланетные трансглюкаторы и громы с молниями поглотят нерадивое человечество.

[identity profile] alesk.livejournal.com 2007-10-11 08:54 pm (UTC)(link)
Уверен, они и про PHP напомнят

[identity profile] itman.livejournal.com 2007-10-11 09:28 pm (UTC)(link)
Кстати, да, там при переходе с версии на версию (как сейчас помню) какие-то чудеса со знаковой "4-х байтной арифметикой" на 4х байтных машинах наблюдались :-)

[identity profile] oblomov-jerusal.livejournal.com 2007-10-13 05:48 pm (UTC)(link)
ׂПомню, в Watcom C при переходе с одной версии на другую поменяли тип char по умолчанию с signed на unsigned (или наоборот?) и с битовыми полями в структурах что-то подобное.

[identity profile] dzz.livejournal.com 2007-10-11 09:01 pm (UTC)(link)
Ой, я даже знаю, когда это будет! В 2038 году! :)))

[identity profile] slobin.livejournal.com 2007-10-12 10:44 pm (UTC)(link)
Вы меня опередили! ;-)

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

[identity profile] omnibee.livejournal.com 2007-10-11 11:57 pm (UTC)(link)
Ужос. Сколько программирую, а в инте 64битном необходимости не испытывал :)

[identity profile] syarzhuk.livejournal.com 2007-10-16 06:16 pm (UTC)(link)
Было дело. У нас в базе хранился размер файла. Оказалось, бывают видеофайлы больше 4 гигабайт.

[identity profile] omnibee.livejournal.com 2007-10-16 09:51 pm (UTC)(link)
Не, ну никто не говорит что 64битные скаляры не нужны. У меня тоже размеры файлов и смещения в них хранятся в 64 битах, но это же не int, а совсем другой тип, ну и пусть он будет другим. А int пусть остается для тех вычислений, которые спокойно в 32бита умещаются. В 99% случаях этого хватит, а для остальных случаев есть другие типа.

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

[identity profile] msh.livejournal.com 2007-10-12 12:08 am (UTC)(link)
Ну откуда ж у них более развитая технология, если они используют int там где важна разрядность? Да уже многие земляне types.h освоили!

[identity profile] dejavit.livejournal.com 2007-10-12 01:15 am (UTC)(link)
Надеюсь, у инопланетных захватчиков те же проблемы. Иначе наше самое главное оружие -- эппловский вирус -- окажется бесполезным.

[identity profile] kot-ivanovich.livejournal.com 2007-10-12 04:18 am (UTC)(link)
Ну так наоборот еще хуже бы получилось. Берём старую программу (не такую, где всё посвящено обработке строчек, а чтобы считала что-нибудь) перекомпилируем – и из-за int и указателей рабочее множество возрастает почти в два раза. Что, скорее всего, означает, что она становится медленнее в два раза – в наше время CPU занят в основном тем, что ждёт память... И вообще по идее int – не самое большое, а самое быстрое (и не очень маленькое) целое в данной архитектуре. 32 бита на эту роль IMHO лучше подходят.

Мудаков, которые писали for (int i = strlen(s); ... или указатель на int кастили, конечно, жалко, но ведь мудак он всё равно найдёт способ как убиться, какой длины ты ему int ни приделывай. Так что войну с пришельцами мы и так и так проиграем :(

[identity profile] dmttrr.livejournal.com 2007-10-12 06:02 am (UTC)(link)

Софт для боевых роботов следует писать на ассемблере)

[identity profile] tantv.livejournal.com 2007-10-12 06:33 am (UTC)(link)
Лучше на brainfuck-е

[identity profile] dmttrr.livejournal.com 2007-10-12 07:22 am (UTC)(link)

И сразу сдаваться.

[identity profile] nebenbei.livejournal.com 2007-10-20 11:11 am (UTC)(link)
в плен, ага. этих роботов. и пленившие их пришельцы сойдут с ума

[identity profile] v743.livejournal.com 2007-10-12 09:03 am (UTC)(link)
Можно подумать, что int на хотя бы только 32-битных компьютерах совместимости добавляет :)) int - зло ;)

[identity profile] lykac.livejournal.com 2007-10-13 03:07 pm (UTC)(link)
А вы подскажите мне, где можно почитать документацию по ассемблеру для 64 разрядных компов на русском?
netch: (Default)

[personal profile] netch 2007-10-13 06:15 pm (UTC)(link)
И правильно сделали, что оставили.
Потому что пора понимать, что нефиг держать один int на все случаи жизни...

... и вообще думать на всяких там сях.

[identity profile] risecomplete.livejournal.com 2007-10-18 08:35 am (UTC)(link)
ждем начала 38-го года...

в догонку

(Anonymous) 2007-10-18 08:43 am (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-й год на дворе!

(Anonymous) 2007-10-21 03:16 pm (UTC)(link)
Вообще-то с переходом на 64-битные процессоры программисты могут совладать используя Viva64.