Россия, Петерубрг, СПБ-ГПУ, 1998 |
Опубликован: 19.09.2008 | Уровень: специалист | Доступ: платный
Лекция 12:
Указания компилятору (псевдокомментарии)
< Лекция 11 || Лекция 12 || Лекция 13 >
Аннотация: Некоторые реализации компилятора поддерживают указания компилятору - псевдокомментарии, которые используются, чтобы передать дополнительные указания или подсказки компилятору, но не являются частью свойства языка Haskell и не меняют семантику программы. Эта лекция резюмирует эту существующую практику. Не требуется, чтобы реализация соблюдала любой псевдокомментарий, но псевдокомментарий должен игнорироваться, если реализация не готова его обработать. С лексической точки зрения, псевдокомментарии выглядят как комментарии, за исключением того, что заключаются в {-# #-}
11.1 Встраивание
Перевод:
объявление | {-# INLINE список-квалифицированных-переменных #-} | |
объявление | {-# NOINLINE список-квалифицированных-переменных #-} |
Псевдокомментарий INLINE указывает компилятору генерировать указанные переменные на месте их использования. Компиляторы будут чаще автоматически генерировать (встраивать) простые выражения. Это можно предотвратить с помощью псевдокомментария NOINLINE.
11.2. Специализация
Перевод:
объявление | {-# 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, которая не затрагивает перегруженные числовые операции.
< Лекция 11 || Лекция 12 || Лекция 13 >