*** ВНИМАНИЕ: Блог переехал на другой адрес - demin.ws ***

среда, 17 августа 2011 г.

Приведение к неполному типу в C и С++

В режиме С и С++ компилируется без ошибок:

void* p = (struct this_does_not_exist *) -1;

Убираем "struct" для С++ и получаем:

cast.cpp
cast.cpp(1) : error C2065: this_does_not_exist: необъявленный идентификатор
cast.cpp(1) : error C2059: синтаксическая ошибка: )

Теперь добавляем forward declaration:

class this_does_not_exist;
void* p = (this_does_not_exist *) -1;

Тут все честно и компилируется без ошибок.

Скорое всего тут везде все по стандарту, но первый пример все-таки какой-то странный.

GCC хотя бы предупреждение выдает.

вторник, 9 августа 2011 г.

Языковые kernel и user space


Пришла мне тут в голову забавная аналогия – если человек постоянно живет или работает в стране или среде с неродным языком вокруг, то можно считать, что родной язык – это  kernel space, неродной – user space.

Сложные, связанные с использованием почти всех ресурсов вычисления происходят в kernel space – читай: когда нужно максимально точное понимание действительности, или надо изложить запутанную мысль в каскаде таких же запутанных мыслей, то это однозначно происходит на родном языке, и только в самом конце результат уходит на вывод (читай: перевод на язык среды) в user space.

Простые, бытовые вещи могут обрабатываться без перевода (на неродном языке) и по мере увеличения знаний и опыта в нем, сложность возможной обработки в user space может увеличиваться, тем самым разгружая процессор.

Есть также люди, имеющие несколько родных языков. У таких людей просто многоядерный или многопотоковый процессор и более сложное ядро, умеющее распределять задачи между двумя или более языковыми потоками (читай: языками).

Можно пойти немного дальше.

Если человек живет и работает в родной языковой среде – он работает в командном процессоре, когда входная и выходная обработка данных весьма простая. В неродной среде – это работа в сложном UI, когда данные проходят длинный путь окон, локализации и разнообразных преобразований, чтобы поспасть на обработку в kernel space и в конце быть доставленными обратно на экран (читай: во внеший мир).