Andy Melnikov (nponeccop) wrote,
Andy Melnikov
nponeccop

Объекты и метаобъекты в HN/SPL

В HN/SPL значения являются объектами, а константы и типы - метаобъектами.

ТипыЗначенияКонстанты
Функциональныезамыканияопределения функций, имена функций
Скалярныескалярныелитералы и библиотечные конcтанты (elist, true)
Структурныеструктурныеконструкторы и акцессоры
(Модульные)(нет)определения модулей, имена модулей

Строго говоря, замыканиям соответствуют не определения функций, а либо определения функций, либо "метазамыкания" - пары "(определение функции, определение контекста)". Так как функции в SPL - первоклассные сущности, система типов SPL построена так, что определения функций и метазамыкания имеют один и тот же тип, и для SPL различия между функциями и метазамыканиями несуществeнны. Однако при компиляции в языки типа С++ в системе типов HN может быть полезным различать отдельные типы замыкания и свободной функции, и генерировать для этих двух случаев разный код. Но пока HN и SPL используют одну и ту же систему типов.

Модули - особые синтаксические конструкции, содержащие лишь константы и типы и не содержащие значений. Таким образом, модули являются четвертым типом метаобъектов в SPL.

При параметризации модулей другими метаобъектами (любыми константами и типами) не происходит потери производительности. Поэтому параметрами в шаблонах C++ могут выступать как раз константы и типы. Но SPL может разрешить в качестве фактических параметров модулей другие виды констант - например, CAF и вообще любые выражения, не содержащие свободных переменных.

Таким образом у нас появятся определения модулей, аналогичные лямбда-абстракциям \ x y z -> ( f a = ... , g = ...x ... ) и инстанцирование модулей, аналогичное вызову функции ( f a = ... , g = ...x ... ) 2 (list int) (\z -> ...)
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments