Описание Haskell 98: Указания компилятору Описание Haskell 98
наверх | назад | вперед | содержание | предметный указатель функций

11  Указания компилятору (псевдокомментарии)

Некоторые реализации компилятора поддерживают указания компилятору --- псевдокомментарии, которые используются, чтобы передать дополнительные указания или подсказки компилятору, но не являются частью свойства языка Haskell и не меняют семантику программы. Эта глава резюмирует эту существующую практику. Не требуется, чтобы реализация соблюдала любой псевдокомментарий, но псевдокомментарий должен игнорироваться, если реализация не готова его обработать. С лексической точки зрения, псевдокомментарии выглядят как комментарии, за исключением того, что заключаются в {-# #-}.

11.1  Встраивание

decl -> {-# INLINE qvars #-}
decl -> {-# NOINLINE qvars #-}

Перевод:
объявление -> {-# INLINE список-квалифицированных-переменных #-}
объявление -> {-# NOINLINE список-квалифицированных-переменных #-}

Псевдокомментарий INLINE указывает компилятору генерировать указанные переменные на месте их использования. Компиляторы будут чаще автоматически генерировать (встраивать) простые выражения. Это можно предотвратить с помощью псевдокомментария NOINLINE.

11.2  Специализация

decl -> {-# SPECIALIZE spec1 , ... , speck #-} (k>=1)
spec -> vars :: type

Перевод:
объявление -> {-# SPECIALIZE спецификатор1 , ... , спецификаторk #-} (k>=1)
спецификатор -> список-переменных :: тип
Специализация используется, чтобы избежать неэффективности, связанной с диспетчированием перегруженных функций. Например,

factorial :: Num a => a -> a
factorial 0 = 0
factorial n = n * factorial (n-1)
{-# SPECIALIZE factorial :: Int -> Int,
               factorial :: Integer -> Integer #-}

при обращениях к factorial компилятор может обнаружить, что параметр имеет тип Int или Integer, но он будет использовать специализированную версию factorial, которая не затрагивает перегруженные числовые операции.


Описание Haskell 98
наверх | назад | вперед | содержание | предметный указатель функций
Декабрь 2002