Re[3]: оператор ?. не работает с option
От: Uriel Россия  
Дата: 12.12.11 06:21
Оценка: 3 (1)
Здравствуйте, _Claus_, Вы писали:

_C_>но ессно option[T] должна быть структурой по реализации, даже если ее удобно показывать как вариант.

_C_>иначе накладные расходы и странности в использовании.

Заинтересовался вопросом накладных расходов на класс по сравнению со структурой ещё из прошлого обсуждения в какой-то другой теме.
В некоторых модулях в рабочем проекте (правда на C#) активно используется самодельный Option вида:

public abstract class Option<T>: IEnumerable<T> {
    public abstract bool HasValue { get; }
    public abstract T Value { get; }
}

public sealed class Some<T>: Option<T> {
    ...
}

public sealed class None<T>: Option<T> {
    ...
}


Из любопытства проверил следующие варианты:
1. Option в реализации, приведённой выше
2. Option без наследования (то есть пустое поле под Value будет даже у None)
3. Option в виде структуры
4. Алгоритм вообще без Option

Дело было недели 3 назад, поэтому конкретных цифр, к сожалению, не осталось.
В целом, первые три варианта отличались совсем незначительно и по большей части разница была только в объёме используемой памяти и количестве сборок мусора.
Можно даже сказать, что вариант со структурами был несколько медленнее с точки зрения затраченного времени, но эффективнее в плане нагрузки на память и сборщик.
Вариант без Option'ов работал где-то процентов на 30-40 быстрее, чем с оными, но код при этом стал раза в 3 страшнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.