Сообщение высшего порядка - Higher order message

А сообщение высшего порядка (HOM) в компьютере язык программирования это форма программирование высшего порядка что позволяет сообщениям, которые имеют другие сообщения в качестве аргументов. Концепция была представлена ​​на MacHack 2003[1][2] от Марсель Вейхер и представлен в более полной форме в 2005 году Марселем Вайхером и Стефан Дюкасс.[3] Циклы могут быть написаны без именования зацикленных коллекций, сообщения более высокого порядка можно рассматривать как форму безточечных или молчаливое программирование.

Примеры

В обычном Болтовня код, без использования HOM, получение коллекции сотрудников с зарплатой 1000 будет достигнуто с помощью следующего кода:

 наемный := сотрудники Выбрать: [ :каждый | каждый hasSalary: 1000 ]

Однако, используя HOM, это можно выразить следующим образом:

 наемный := сотрудники Выбрать hasSalary: 1000.

Вот, Выбрать сообщение более высокого порядка, и hasSalary: предполагается, что он вызывается в самом сообщении выбора, а не в его результате. Язык Smalltalk не был изменен для реализации этой возможности. Вместо, Выбрать возвращает сообщение, которое овеществляет то Выбрать send, который затем интерпретирует hasSalary: сообщение.

Другой пример - использование будущих сообщений в Крокет Проект:[4]

 (куб будущее:1000) addRotationAroundY:10.

В этом примере будущее: сообщение вызывает addRotationARoundY: сообщение, которое будет отправлено объекту куба через 1 секунду.

Принятие

Эталонная реализация в Цель-C использует черту, что в Objective-C объекты, которые не понимают отправленное им сообщение, по-прежнему доставляют его с помощью специального метода перехвата, называемого вперед:. Обмен сообщениями высшего порядка был реализован на нескольких языках, которые разделяют эту функцию, включая Рубин и Smalltalk.[5]

Документация по прокси-серверам ECMAScript Harmony специально упоминает сообщения более высокого порядка как приложение для их прокси-серверов Catchall.[6]

Подобные концепции на других языках

Язык программирования J различает глаголы и наречия. Наречия изменяют действие глаголов. Это похоже на сообщения высшего порядка (наречия), изменяющие последующие сообщения (глаголы). В приведенном выше примере крокета addRotationAroundY:. сообщение по-прежнему отправляется и имеет свое обычное значение, но его доставка изменяется будущее: 1000 сообщение, оно будет отправлено когда-нибудь в будущем.

использованная литература

  1. ^ Презентация MacHack HOM
  2. ^ Статья O'Reilly macdevcenter
  3. ^ ProceedingDLS '05 Труды симпозиума 2005 г. по динамическим языкам [1]
  4. ^ «Обзор системы крокета, стр. 6» (PDF). Архивировано из оригинал (PDF) на 2012-04-26. Получено 2012-05-18.
  5. ^ [2], [3] В архиве 2012-02-03 в Wayback Machine
  6. ^ [4]