Новогоднее настроение чувствуется уже несколько дней. Когда садишься поздно вечером программить обнаруживаешь, что под окнами взрываются петарды, нестройный хор пьяных голосов орет "Belle" и становиться ясно, что поработать не удастся и придется праздновать.
Итак, с Новым Годом! Который непременно принесет новые успехи, достижения, кучу денег и мешок счастья.
И напоследок бодрящий анекдот. Он не новогодний, а просто прикольный:
Two strings walk into a bar. The first one says, “Bartender! Bartender! I want a drink!”
The second one says, “Bartender! Bartender! I want a drink too! blaaaaaaaaah Eeeeeeeek yaaaaaaak oooooooh.”
The first one says, “Please excuse my friend. He isn't null terminated.”
суббота, декабря 31, 2005
С Новым Годом!
Категории: fun
среда, декабря 28, 2005
Ожил блог My own little DirectX FAQ
Блог My own little DirectX FAQ посвящен, как следует из названия, DirectX. Он не обновлялся с 2003 года, но в этом месяце его автор, Tom Forsyth, написал несколько новых постов, и, надеюсь, его энтузиазм на этом не иссякнет. Том работает в RAD Game Tools и занимается разработкой утилит для разработчиков игр. Также советую заглянуть на домашнюю страничку Тома, там есть его публикации и слайды с различных выступлений.
Категории: gamedev
суббота, декабря 24, 2005
C++0x
Update 27.12.2005: По поводу названия, почему C++0x. x будет заменен на номер года выхода стандарта. Это будет C++07, C++08, что-нибудь в этом роде. Разработка нового стандарта началась не недавно, о том, что принимаются предложения, было объявлено несколько лет назад. Процесс идет неспешно, сначала предложения копились, теперь рассматриваются...
"Упрочить доказанные достоинства C++ и двигаться вперед" - под таким девизом Бьерн Страуструп написал статью про разработку нового стандарта C++, C++0x.
C++0x планируется сделать почти на 100% совместимым с текущим стандартом, C++98. "Почти" потому что совсем на 100% сделать не получится. Страуструп в качестве примера приводит добавление нового ключевого слова. Код, который раньше использовал такое слово, уже не будет соответствовать новому стандарту.
Страуструп настивает на том, что C++ останется языком общего назначения. Более-менее специализированные вещи будут внесены в Стандартную Библиотеку.
Будет уделено внимание поддержке новичков. Сейчас, по мнению Страуструпа, язык больше ориентирован на экспертов и начинать на нем программировить довольно тяжело. Язык должен помогать новичку, защищать от внесения ошибок. Предназначенные для этого конструкции не должны стоять особняком, нужно чтобы они органично вписались в язык.
Сейчас можно отключить потенциально дорогие фичи, например RTTI, что положительно сказывается на производительности. Страуструпу очень нравится эта возможность и он пишет, что в C++0x в этом отношении ничего не изменится.
Я просмотрела по диагонали неполный список предложений по языку и список предложений по Стандартной библиотеке. Это именно предложения, не факт, что они буду включены в язык. Вот некоторые из них.
Неполный список предложений по языку:
- Возможность переопределения новых приведений типов static_cast, dynamic_cast, это может оказаться удобным при использовании умных указателей (smart pointers).
- Свойства (properties) в стиле Delphi/C#.
- Опциональная сборка мусора.
- Использование строк в switch.
bool f(string s)
{
switch(s) {
case "yes": return true;
case "no": return false;
default: throw Unexpected_string();
} - Ключевое слово final, которое в сочетании с виртуальной функцией, запретит дальнейшее перекрытие этой функции.
Список пожеланий для Стандартной библиотеки:
- Простой способ выводить на зкран содержимое контейнеров в красиво отформатированном виде. То есть cout << x должно "просто работать" для контейнеров.
- XML парсер
- Хорошая библиотека линейной алгебры (матрицы, векторы). Отдельно есть предложение по библиотеке для кватернионов специально для тех, кто разрабатывает 3Д игры.
- Библиотека для работы с графами.
- Паттерны проектирования. Особенно просят Singleton.
Ссылки по теме:
The C++ Standards Committee
Boost C++ Libraries
Категории: cpp
среда, декабря 21, 2005
has-a отношение и IIITO
В ООП есть два родственных термина, которые разные люди понимают по-разному. Термины эти has-a отношение (иногда пишут HASA) и IIITO (Is Implemented In Terms Of). Вроде как оба они означают владение. И оба можно выразить через приватное наследование или через делегирование.
//Приватное наследование
class CB : private CA
{
//...
}
//Делегирование
class CB
{
private:
CA* pA;
//...
}
В различных источниках я читала разное мнение по их поводу. Что IIITO - это и приватное наследование, и делегирование, а has-a - это только приватное наследование. Или что has-a - это и приватное наследование, и делегирование, а IIITO - это только делегирование. В итоге о чем именно идет речь приходится понимать из контекста.
Ссылки по теме:
GotW#60: Exception-Safe Class Design, Part 2: Inheritance
comp.object IS A and HAS A relationships
is-a отношение
Категории: programming
вторник, декабря 13, 2005
3D шутер на языке Haskell
Haskell - это язык функционального программирования. О функциональном программировании я имею весьма смутное представление, но я всегда думала, что оно предназначено для решения математических задач. Ан нет, умельцы могут на нем и игры писать. 3D шутер под названием Frag - это наиболее впечатляющий пример.
Он в исходниках и, честно говоря, мне было лень что-либо ставить, чтобы их скомпилять, так что в движении я его так и не посмотрела. Написан он с помощью Yampa - по документации "Yampa - это язык, встроенный в Haskell, предназначенный для описания реагирующих систем". В документации по Yampa рассказывается как с его помощью написать Space Invaders.
Вот еще игры на Haskell'е. Сайт, увы, на японском.
Это, судя по всему, аркада.
А это похоже на паззл.
Думаю, что эти игры вызывают скорее академический, нежели практический интерес. Но все равно, забавно.
По ссылкам с блога GrammerJack: "Arcade Games in Haskell"
Категории: gamedev, programming
среда, декабря 07, 2005
is-a отношение
is-a отношение - это термин из теории объектно-ориентированного программирования. Кто-то считает, что этот термин не совсем корректный, да и вообще устаревший (В comp.object Роберт Мартин как-то бухтел по этому поводу). Но я натыкалась на него несколько раз, также как и на has-a. Про второе чуть позже, сегодня про is-a (иногда пишется ISA).
Если есть два объекта: A и B, то можно сказать, что B is-a A, если в программе везде, где используется A, можно использовать B. Несмотря на мудреное определение, все просто. Если у меня есть базовый класс CPrinter и я от него наследую CEpson, CHP и т.п., то логично будет чтобы функция, которая принимает в качестве параметра CPrinter, могла работать с любым отнаследованным принтером, поскольку по логике вещей CEpson is-a CPrinter.
Есть такое хорошее правило, если в программе есть публичное наследование, то оно должно являть собой is-a отношение. И это та вещь, которую компилятор не сделает автомагически, ответственность за то, чтобы публичное наследование было is-a отношением лежит на программисте. Например:
Если я где-то определила публичное наследование вида:
class CBase
{
public:
virtual void VirtFunc();
// ...
};
class CDerived : public CBase
{
public:
virtual void VirtFunc();
// ...
};
void SomeFunc( const CBase& );
То я фактически говорю, что CDerived is-a CBase, а значит, что в функцию SomeFunc можно передавать как экземпляры CDerived, так и CBase, и они должны обрабатываться корректно. А если я реализовала функцию VirtFunc таким образом, что передавать в SomeFunc экземпляр CDerived по каким-либо причинам нельзя, то это как минимум странно.
Ссылки по теме:
comp.object IS A and HAS A relationships
GotW #40: Controlled Polymorphism
Категории: programming