Два года с Go

Сейчас подвожу итоги где-то 2-х лет разработки серии проектов на Go и довольно приятно удивляюсь тому, насколько хорошую защиту от дурака имеет Go по-умолчанию. Выстрелить себе в ногу просто невероятно сложно и в общем случае разработчик может просто сконцентрироваться на задаче не думая про UB, особенности move semantic и кучу других вещей, которые постоянно должны быть в голове у C++ разработчика.

Если отбросить очень сильное упрощение языка и попытаться выделить какие же именно решения позволили сильно упростить работу, то я бы отметил два: 1) отсутствие классов и наследования, 2) запрет на циклические импорты.

Continue reading

Выступления Майерса на NDC

Досмотрел лекции Майерса с NDC 2014 (WTF, в Норвегии проходят годные конференции, а у нас нет?!) Effective Modern C++ и CPU Caches and Why You care.

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

Во второй лекции первые 10 минут можно смело проматывать. Что довольно неожиданно, Майерс, в том числе, говорит и о Instruction Cache, чего я не замечал за другими докладчиками/статьями на эту тему. Ну и как всегда, лекцию пронизывает модная на данный момент мысль: массивы хорошо, все остальное так себе. Кстати, если кто-то не знает что такое False Sharing, то в этой лекции можно найти образцово показательное объяснение сего печального явления.

Инициализация статического объекта в GCC

С удивлением узнал о том, что GCC гарантирует атомарность создания статического объекта. Поэтому следующий код будет корректен в многопоточном окружении:

template <typename T>
T& singleton()
{
    static T obj;
    return obj;
}

Если по каким-то причинам такое поведение кажется возмутительным, можно воспользоваться флагом -fno-threadsafe-statics

Кстати, кто знает как обстоят дела с инициализацией статических объектов у других компиляторов?