среда, октября 29, 2008

Опубликован драфт C++0x

Драфт C++0x [.pdf]. В нем будут делаться багфиксы, будут некоторые уточнения, но ничего принципиально нового уже не будет. Герб Саттер говорит, что это что-то вроде бета версии. Планируется, что после нее будет еще одна бета, а потом уже релиз.

пятница, октября 24, 2008

Странные примеры использования const

const - штука хорошая. Благодаря ему мы можем писать const-корректный код и избежать части глюков.

А вот несколько необычные примеры применения const.

1. void MyFunction ( const int var);
2. const int MyFunction();
3. int const MyFunction();

Предлагаю подумать над вопросами "что бы это значило?" и "где это можно применить?". И написать об этом в комментарии, если не лень.

Я свое мнение напишу чуть позже.

Updated
Как и обещала, мое мнение:
1. Нельзя будет поменять переменную var внутри функции. Я не знаю, возможно в чьих-нибудь стандартах кодирования заставляют так делать, но вообще это не принято.

2 и 3, как многие уже заметили, эквивалентны. И бесполезны. Обратите внимание, что возвращаемое значение const int. Если вы возвращаете класс, то смысл в этом будет.
Нет, можно придумать какие-нибудь странные использования этих выражений и даже заставить некоторые компиляторы их проглотить. Но вот Comeau на такое скажет

"ComeauTest.c", line 2: warning: type qualifier on return type is meaningless
const int MyFunction()

И будет прав. Бессмысленны и const, и volatile. Я как-то случайно наткнулась на информацию, что когда-то в gcc было придумано некое расширение и volatile void имело какой-то смысл. Но это было давно и ныне deprecated.

Это к вопросу о применении. А вот вопрос "что это может означать?" - интереснее. Для меня любой из приведенных примеров кода - повод для беспокойства.
Например, вот это:
int const MyFunction()

Это скорее всего кто-то перепутал с
int MyFunction() const


В-общем, это хороший повод пройтись по коммитам, найти автора и спросить "чувак, что ты хотел этим сказать?"

понедельник, октября 20, 2008

Четыре миллиарда рублей

Интересные слухи бродят среди программистов. Все уже, наверное, слышали про 4 миллиарда рублей, которые были начислены по ошибке некоему оперативнику. Который их вернул. Однако, прочитав внимательно заметки об этом удивительном происшествии, вы наверняка найдете упоминания о том, что до начисления у него на счету был "почти ноль". А четыре миллиарда - это примерно 232. Ну дальше рассказывать не надо, я думаю :-).

Metroid Prime 3: Corruption

Довелось мне тут поиграть в Metroid Prime 3: Corruption, это 3Д шутер выпущенный под Wii. Надо сказать, что 3Д шутер на Wii - это в принципе странная идея. Они там попытались как-то использовать возможности Wii'ных контроллеров, но получилось несколько притянуто за уши. Однако в плане программирования и графики игра сделана очень хорошо. Из платформы выжали вообще что только можно было, поэтому игра выглядит весьма достойно.
Игру лучше смотреть в движении, на YouTube есть ролик, но качество оставляет желать лучшего...

суббота, октября 11, 2008

Блог Линуса Торвальдса

Линус Торвальдс начал вести свой блог: Linus' blog. Что приятно, блог на Блоггере.

пятница, октября 10, 2008

Про консоли

Читаю всякое про консоли, расширяю кругозор. Народ в целом единодушен - у PS3 странная архитектура, XBox360 похож на PC, а у Wii контроллеры прикольные.

PS3 к тому же еще самая загадочная платформа. У нее есть 7 периферийных процессоров (хотя но самом деле 6). Разработчикам не скучно.

Что именно я читала:
Про приставки
Заметки о DS для новичков
PS3 и Xbox 360: белые начинают и пока что выигрывают - большое подробное сравнение

Буду благодарна, если порекомендуете еще что-нибудь хорошее прочитать. В смысле не пресс-релизы, а впечатления разработчиков.

четверг, октября 02, 2008

Приключение со строками

Злосчастный код, который похитил у меня несколько часов времени.

char c='0';
string str="Text"+c;

Что будет лежать в str? Отнюдь не "Text0" как можно было бы ожидать.

Здесь к адресу строки "Text" добавляется 48 байт. И конструктор str получает указатель на эту область памяти. По несчастному стечению обстоятельств в этой области памяти у меня была строка "RESTART". И вот с этого момента начались удивительные приключения этого RESTART'а, которые в итоге привели к обращению по нулевому указателю, причины которого мне и пришлось раскапывать.

Компиляторы, которые я смотрела - CodeWarrior и Visual Studio 2005 даже ворнинга в этом случае не дают.