-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Требуется усилить уникальность HashAddress #29
Comments
Предлагается добавить |
@nazarovsa "семечко" остаётся для инициализации и вычисления хешкода, а гуидник создаётся внутри для того, чтобы два экземпляра, созданных с одним сидом были не равны: |
@Stepami Для чего делать Guid, почему просто не проверить ссылки? |
@nazarovsa Как будто история с |
Возможно, но это дополнительный оверхед на память. А этих экземпляров будет много, насколько я понимаю. protected bool Equals(HashAddress other)
{
return _seed == other._seed;
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != this.GetType()) return false;
return Equals((HashAddress)obj);
} Кажется, что этого достаточно. |
думаю, что беспокоиться о памяти излишне - скрипты до 100 строк => экземпляры адресов исчисляются порядком 10-100 основное требование: new HashAdress(seed: 1).Equals(new HashAdress(seed: 1)).Should().BeFalse() |
Я подготовил два МРа для сравнения. Выбери, что бы ты хотел видеть. |
@nazarovsa Однозначно nazarovsa#1 ) Это ещё понадобится для #30, чтобы использовать гуидник в наименовании адреса (+ уникальность) переоткрой пожалуйста PR'ы так, чтобы они метили в мою репу, а не в форк |
Сейчас уникальность генерируемого адреса базируется лишь на
seed
, передаваемом в конструктор:В качестве
seed
используется хэш-код инструкции, которой присваивается адрес:instruction.GetHashCode()
.Поскольку
GetHashCode
не переопределён в иерархии инструкций, то по сути это отражение выделения памяти.В любом, случае чем больше будет инструкций, тем больше вероятность того, что произойдёт коллизия, и для два экземпляра
HashAddress
с одинаковымseed
будут означать один и тот же адрес.Это поведение нужно исправить.
Предлагается добавить приватное поле
Guid _id = Guid.NewGuid()
The text was updated successfully, but these errors were encountered: