long id

Oct. 1st, 2015 02:02 pm
juan_gandhi: (VP)
[personal profile] juan_gandhi
I think I got it where all this bs about passing around numerical ids of entities instead of entity references (maybe lazy) come from. It's like 'error code'. It comes from the ancient c programming, where we just could not allocate a string for a readable piece of text, or for the data that may need some efforts to instantiate or allocate.

In short. It's stupid to pass around "ids" in a program.

Date: 2015-10-02 02:39 pm (UTC)
From: [identity profile] juan-gandhi.livejournal.com
Я на самом деле описал три слоя.

1. id вместо сообщения об ошибке (содержащего конкретные детали)
2. перепасовка целых чисел в коде, вместо type-safe конкретных указателей на объекты
3. использование целых чисел для идентификации явлений природы

По третьему вопросу - конечно, нужен способ; но почему именно десятичные цифры, я не понимаю. base36 для меня звучало бы более осмысленно. BC-4KSNL, то ли дело. Запоминается мгновенно, как мем.

Date: 2015-10-03 01:56 am (UTC)
From: [identity profile] microcell.livejournal.com
ах, я не так понял вопрос значит. Ок, отвечу на русском =)

1). В сообщениях об ошибках номер ошибки вместо текста применяется в результате работы исключений. Допустим, где-то глубоко в недрах вашей программы возникло исключение. Исключение - это объект, и его надо создать. Допустим так же, что у вас в программе в этот момент осталось мало памяти. Если вы создаёте объект-исключение и ему не хватило памяти, происходит выброс нового исключения - stack overflow или no enough memory. Если памяти не хватит и ему, будет выбрасываться новое исключение и так без конца. В винде это приводило к зависанию всей системы. Поэтому создавали исключения с кодом ошибки - так оно займёт меньше места и меньше шансов возникновения подобной ситуации.

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

2) Числа с плавающей точкой обрабатываются хранятся в сопроцессоре. Для вывода и ввода в него числа перекодируются float, double или long double форматы. При перекодеровке возможны потеря точности, 1.3 может превратиться в 1.2999999998 или в 1.30000001. Для случаев, когда подобное не желательно, числа преобразут в целое, умнажая на 10^n, где n - точность и округляя к ближайшему целому.

Числа с плавающей точкой нельзя сравнивать из-за потери точности:

float a = 1.3;
float b = a/3;
b *=3;
if (a == b) // может быть не равно

if ((int)(a *100 + 0.5) == (int)(b *100 + 0.5)) // всегда равно

Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

June 2025

S M T W T F S
1 2345 6 7
8 9 10 11 121314
15161718 1920 21
222324252627 28
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 30th, 2025 01:14 pm
Powered by Dreamwidth Studios