Приведение типа – для компиляторов, не для акторов

Когда я писал программы много лет назад, я часто использовал одну полезную возможность компилятора – приведение типа. Существует два основных типа языков программирования – (со строгим контролем типов и с динамическим контролем типов).  В языках со строгим контролем типов – в компиляторах Pascal и FORTRAN – функция приведения типа позволяет в интересах дела преобразовать один тип данных в другой.  В языках с динамическим контролем типов – например, C и C++ – можно выполнять преобразование неявным образом.  Другими словами, компилятор C не выкажет недовольства, если вы броситесь с обрыва.  Для языков со строгим контролем типов вам придется сообщить компилятору: "Да, я знаю, что я делаю, дай мне броситься с обрыва."   Ценность приведения типа в том, что это создает "дополнительный" этап и заставляет задуматься о преобразовании.  Если бы для преобразования не был использован операнд приведения типа, компилятор сообщил бы об ошибках несоответствия типов данных.

Ниже приведен фрагмент программы из операционной системы реального времени VAXELN.  Компилятор назывался EPASCAL и поддерживал приведение типа, как и многие другие расширения для работы в реальном времени.  Приведение типа обозначено операндом «::».

procedure search_id(var header:queue_entry; id_in:integer; var found:boolean);
var walk:^queue_entry;
begin
    walk:=header.flink;
        repeat
            if walk::^store^.id=id_in
            then begin
                error ();
                walk:=address(header);
                found:=true;
                    end
            else
                walk:=walk^.flink;
        until walk = address(header);
end;    

Для меня в профессиональном плане это имеет значение при написании качественной программы.  Имеет смысл искать ошибки и сбои, особенно неявные, уже на ранних стадиях разработки.  Сколько раз число уровней косвенности было слишком большим или слишком маленьким с этим указателем (^), что имело разрушительные последствия?  Прекрасно, когда компилятор может обработать «умный» код, но код должен быть без ошибок и прост для понимания благодаря самодокументированию.  Сохраните «умную» часть проекта в алгоритме и (или) в разработке.  Код должен быть ясным и понятным.  Качество и стабильность также играют роль.  Поинтересуйтесь у клиента, работающего с вашей программой…

Typecasting – is for compilers not actors in English

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s