В послужном списке Алексея Пахунова, известного как «Not a kernel guy», более семи лет работы в трех подразделениях Microsoft (Office, OSD и MSR), участие в двух крупных проектах (Axapta и Windows) и нескольких мелких. Текущее место работы – Google. Низкоуровневая разработка, “серьезность” разработчика, тестирование Windows и Chrome, “шерифы” в Google, TDD “по-взрослому”, время-качество-деньги, импровизация как причина авралов – вот некоторые темы нашей беседы.
понедельник, июня 18, 2012
Интервью Алексея Пахунова на OpenQuality.ru
Хорошее интервью и название правильное: Нужно дело делать, а не языком трепаться
понедельник, июня 11, 2012
Обзор исходников Doom3
Некоторое время назад исходники Doom3 были выложены в открытый доступ. Но в исходниках без доков разбираться довольно тяжело. Так вот, Фабьен Санглар написал по ним обзор со схемами, картинками, видео. Также он позадавал вопросы Кармаку по исходникам. Если вы мечтаете писать игры, но не знаете с чего начать, то Фабьен сделал вам прекрасный подарок.
Несколько фактов оттуда:
Несколько фактов оттуда:
- Впервые в истории id Software код написан на С++, а не на С
- В коде широко используются абстракция данных и полиморфизм
- Темплейты используются только для низкоуровневого кода
- По мнению Фабьена это вторая по качеству кодобаза от id Software после Doom iPhone
- Благодаря инкапсуляции код легко читать
- Дни оптимизации ассемблерного кода на низком уровне прошли
понедельник, июня 04, 2012
Статья Hash Functions for C++ Unordered Containers
И еще одна интересная проблема из переписки. С ней сталкиваются все, кто более-менее серьезно пытается использовать хэш-контейнеры в С++.
Итак, вы пытаетесь положить свой класс в, скажем, unordered_map. И получаете сообщение об ошибке примерно такого вида:
О том как это сделать есть хорошая подробная статья Hash Functions for C++ Unordered Containers.
Пример оттуда с самым простым способом определить хэш-функцию
cannot convert from 'const Name' to 'size_t'
Это крайне невразумительное сообщение об ошибке означает, что вы должны определить хэш-функцию для своего класса, чтобы можно было его использовать с данным контейнером.О том как это сделать есть хорошая подробная статья Hash Functions for C++ Unordered Containers.
Пример оттуда с самым простым способом определить хэш-функцию
//
// This program uses a simple user-defined function
// to provide a hash function for use in unordered_map
//
// Compile this example with Visual Studio 2010
// or g++ 4.5 using -std=c++0x
//
#include <iostream>
#include <unordered_map>
#include <string>
#include <functional>
using namespace std;
typedef pair<string,string> Name;
size_t name_hash( const Name & name )
{
return hash<string>()(name.first) ^ hash<string>()(name.second);
}
int main(int argc, char* argv[])
{
unordered_map<Name,int,decltype(&name_hash)> ids(100, name_hash );
ids[Name("Mark", "Nelson")] = 40561;
ids[Name("Andrew","Binstock")] = 40562;
for ( auto ii = ids.begin() ; ii != ids.end() ; ii++ )
cout << ii->first.first
<< " "
<< ii->first.second
<< " : "
<< ii->second
<< endl;
return 0;
}