Возможность расширять типы в FORTRAN 2003 (EXTENDS)

Kirill Mavrodiev (Intel) (22 пост(а)) 22.07.2009 23:03

Раз уж затронул тему новых фич в фортране, то стоит рассказать о возможности расширять типы EXTENDS.

Еще в F95 появилась возможность помещать типы в уже созданные пользовательские типы, но в этом случае надо четко помнить и осознавать структуры типов. Теперь в F2003 можно просто расширять имеющийся тип, что приводит к уменьшению количества рабочих строк в сорсах. ВАЖНО: Эта фиса работает только с расширяемыми типами, т.е. не работает со спецификаторами SEQUENCE и BIND. Рассмотрим пример:


MODULE TYPES

TYPE ANIMAL
CHARACTER (LEN=25) VAR_NAME
END TYPE ANIMAL

TYPE, EXTENDS (ANIMAL) :: ANIMALS_COLOR
CHARACTER (LEN=25) VAR_COLOR
END TYPE ANIMALS_COLOR

TYPE, EXTENDS(ANIMALS_COLOR) :: ANIMALS_SOUND
CHARACTER (LEN=25) VAR_SOUND
END TYPE ANIMALS_SOUND

END MODULE TYPES

PROGRAM MAIN

USE TYPES

TYPE(ANIMALS_SOUND) ZOO

ZOO%VAR_NAME = "CTHULHU"
ZOO%VAR_COLOR = "green"
ZOO%VAR_SOUND = "KREVETKO"

PRINT *, 'I am ', ZOO%VAR_COLOR, ZOO%VAR_NAME
PRINT *, ZOO%VAR_SOUND

END PROGRAM MAIN

Также хорошей новой фишкой стандарта можно считать появление селектора типов: SELECT TYPE. Рассмотрим расширенный предыдущий пример:


PROGRAM MAIN

USE TYPES

TYPE(ANIMALS_COLOR), TARGET :: DUMB_ZOO
TYPE(ANIMALS_SOUND), TARGET :: TALKING_ZOO
CLASS(ANIMAL), POINTER :: ZOO

ZOO => DUMB_ZOO

SELECT TYPE ( FOREST => ZOO )
TYPE IS (ANIMALS_COLOR )
PRINT *, FOREST%VAR_NAME, FOREST%VAR_COLOR ! This block gets executed
TYPE IS ( ANIMALS_SOUND )
PRINT *, FOREST%VAR_NAME, FOREST%VAR_COLOR , FOREST%VAR_SOUND
END SELECT

END PROGRAM MAIN

Ну очень похожа на сишный CASE. Ведь так?
С первого взгляда бесполезная фича, т.к. она плодит лишние ветвления, что в свою очередь понижает производительность. Но с другой стороны, позволяет вместо написания н-ого количества подпрограмм(subroutine) только описать одну универсальную. Ну если хот спот попадает именно на эту функцию, то из двух зол придется выбирать меньшее....

Категории: Intel Software Network, Разработка софта
Метки: ,

Пожалуйста, обратитесь к странице Уведомление об оптимизации для более подробной информации относительно производительности и оптимизации в программных продуктах компании Intel.

Комментарии (0)

Обратная ссылка (0)


Оставить комментарий  

Для получения технической помощи посетите сайт службы поддержки.
Имя (обязательно)*

Электронная почта (обязательно; не будет отображено на этой странице)*

Ваш URL-адрес (необязательно)


Комментарий*