Три дня до нового бита

Всего через 4 миллиона новых точек их номера выйдут за пределы 32-битного пространства чисел, что потребует от всех программ умения обработки 64-битных идентификаторов. Пол Норман подсчитал, что это случится в субботу вечером. Предупреждали об этом аж два года назад, а в декабре Фредерик Рамм подготовил набор тестовых данных. Большинство критичных инструментов — JOSM, Potlatch, osm2pgsql, Osmium, Maperitive, — уже готовы к переходу.

Слабым звеном, как обнаружил Сергей Астахов, оказался Osmosis. Классы для хранения списка идентификаторов начнут выбрасывать ошибки из-за слишком больших чисел. Это не помешает репликации, но фильтры по тегам и по полигонам перестанут работать. Как следствие, региональные выгрузки на гис-лабе сломаются. Конечно, если авторы osmosis-а не успеют устранить ограничение, а хранители выгрузок — обновить программу.

Вики-страница 64-bit Identifiers подскажет, какие ещё программы нужно обновить до этих выходных. Для слежения за идентификаторами есть обратный отсчёт.
Поделиться
Отправить
6 комментариев
OverQuantum
> за пределы 32-битного пространства чисел
Ну если быть точным — то за пределы 31-битного. И проблемы начнутся у программ, которые используют знаковые переменные, т. к. именно знак хранится в 32-м бите. Тогда как беззнаковые (unsigned) переменные вполне смогут хранить идентификаторы до 4294967295 включительно.
Илья Зверев
32-битное пространство — это почти во всех программах от -2³¹...2³¹-1. Не путай с «за пределы 2³²». Беззнаковые идентификаторы в OSM никто, вроде, не используем: см. отрицательные идентификаторы в JOSM и API 0.6. Кроме того, даже беззнаковость отсрочит переход максимум на полтора-два года.
OverQuantum
Илья,
32-битная адресация памяти, 32-битный IPv4 адрес — вполне себе беззнаковые. «Почти во всех» — субъективное понятие. ;)
freeExec
Видимо имелось ввиду программах использующих данные OSM. А вот в java как оказалось вообще нет такого понятия как unsigned :(
akks
Там потому и нет unsigned, чтобы все побыстрее перешли на long и не парились :)

Там даже byte b=0; b=b+1; не компилируется т. к. byte+1 = int
Larry0ua
в Java char = unsigned short :)
а вообще да, без этих знаково-беззнаковых извращений жизнь намного проще. Кроме писателей драйверов и прочих низкоуровневых вещей, но кто такое на Java будет делать?
OverQuantum
Вот она
http://www.openstreetmap.org/browse/node/2147483648

Sat, 09 Feb 2013 09:17:24 +0000
Я бы сказал, это скорее утро, чем вечер :)