June 30th, 2010

ДР Цертуса 2011

C++ & properties

В узких кругах хорошо известно, что в C++ можно изготавливать properties. Насколько я понимаю, наиболее правильный способ состоит в том, чтобы создать в библиотеке создаётся класс вида property<T, getter, setter>, работающий как в примере ниже:
class Foo {
  public:
    Property<int, get_alpha, set_alpha> alpha;
    
  private:
    int _alpha;
    int get_alpha() {
        return _alpha;
    }
    void set_alpha(const int &new_value) {
        preprocess();
        _alpha = new_value;
        postprocess();
    }
}

Геттер и сеттер можно сделать virtual и тогда с наследованием тоже всё будет в порядке. Ещё можно отнаследовать property<T, getter, setter> от какого-нибудь characteristic<T, getter> (штука с геттером и без сеттера). Определение класса property должно выглядеть примерно так:
template <typename T, T get(), void set(const T&)> class Property {
  public:
    T & operator = (const T &new_value) {
        set(new_value)
        return new_value;
    }
    template <typename T2> T2 & operator = (const T2 &new_value) {
        T2 &guard = new_value;
        throw guard; // Never reached.
    }
    operator T const & () const {
        return get();
    }
};

Оно всё замечательно заинлайнивается и упрощается во время компиляции, в результате чего использование properties не вносит никакого замедления в работу программы. Единственные недостатки — сообщения об ошибках у компилятора из-за странных типов получаются иногда нечитабельными, да IDE иногда с типами начинает путаться.

Теперь вопрос к аудитории: в какой стандартной библиотеке это уже сделано? Не создавать же свой велосипед каждый раз?

Upd: Да, сигнатура property должна быть, конечно же, хитрее. Мы же туда не указатели на функции суём, а указатели на методы. Что-то там типа T (O::*get)() и void (O::*set)(const T&) должно быть. И указатель на свой this пропертя должна помнить, так что совсем уж без доп.расходов не получится. Видимо, потому и не используют в C++ обычно properties, что без чрезмерного overhead'а их не сделать.
ДР Цертуса 2011

Next big thing

В принципе, я подозреваю, что OLED не будет окончательным решением для экранов смартфонов и планшетов, а e-Ink для электронных книг. Потому что надо то и другое: экран, который работает и в темноте, и в рефлективном режиме. В этом смысле мне, конечно, симпатичны Pixel Qi, которые делают (в первую очередь, конечно, не делают, а разрабатывают) LCD-дисплеи этого типа. Однако LCD принципиально не способен давать ни рефлективности, ни контраста обычной бумаги (которые > 90% и > 5000:1 соответственно). На данный момент единственная технология, позволяющая чисто в теории получить такое качество белого и чёрного, работать по надобности с дополнительным задним освещением и быть цветной — in-plane electrophoretic CMYK e-paper Philips Research (http://www.technologyreview.com/web/22627/?a=f). Однако это только в теории. На практике они ещё ничего особенно хорошего не сделали и на пути в высоты могут столкнуться с очень тяжёлыми проблемами, по части достижения хорошего белого, хорошего чёрного, хорошей цветопередачи, быстрой смены картинки и ещё чего только не. Опять же, требуется оптическая маскировка стыков пикселей. Это уже делали, это работает, но для этого требуется строить рельеф накрывающего субстрата ультрамногослойной фотолитографией, которая... Не знаю, как сейчас, а когда её впервые для этого применяли 7-9 лет назад, стоила непомерно дорого.
ДР Цертуса 2011

(no subject)

Интересно, насколько дороже стоит трёхполосное шоссе по сравнению с двухполосным? И если не категорически, то отчего не строить магистральные дороги изначально такими?
Вот в Израиле, например, имеются великолепные шоссе, с полосами безопасности, причём зачастую не только справа, но и слева. С карманами, в которых можно иногда остановиться, с отличными бетонными огражденими, с шуршалками на границах регулярной проезжей части, чтобы заснувший водитель имел шанс проснуться. И вся это благодать обычно двухполосная. И естественно она в часы пик (всё утро часа два-три вечером) стоит или движется со скоростью пешехода. Две полосы — это такая штука, которая всегда стоит по поводу и без повода, на двух полосах разумного движения крупного шоссе организовать невозможно. Зная этот элементарный, в общем-то, факт, почему бы изначально не делать дороги трёхполосными? Или просто заменить левую полосу безопасности нормальной полосой.

Пробки — это пожиратель времени граждан. Рабочего, по сути, времени. Час пробки в день — это как лишний выходной по экономическим последствиям. Когда их невозможно избежать — ну что делать. Но Израиль — маленькая страна, в которой можно было бы сделать эту проблему просто не существующей. А ещё заодно разрешить на трёхполосных шоссе в левой полосе скорости километров до 200 в час. Можно не для всех. Можно даже ввести спец.номера и выдавать их только людям, прошедшим дополнительный тренинг вождения по стандартам водителей скорой помощи. И вешать только на современные машины, обеспечивающие должную безопасность, и более строгий тех.осмотр устроить, пожалуйста. Всё-равно это позволит людям экономить их время, драгоценнейший ресурс. Кому надо, тот сделает и будет у него доступ из любого крупного города Израиля в любой за один час, максимум полтора, если это из Наґарии в Беэр-Шеву.