August 9th, 2011

ДР Цертуса 2011

(no subject)

У моего О2-шного телефона полностью вышел из строя зарядник, телефон полностью разряжен и ещё несколько дней так пробудет. Доступен по старому номеру Simyo. Но на живом аппарате нет телефонной книжки. Сам я практически никому позвонить не могу, потому что телефонов не помню и централизованно они нигде не записаны.

Доброе утро.
ДР Цертуса 2011

Стрелки

В императивных языках программирования вроде Си словом «функция» называют не совсем то, что под этим словом понимают математики. Функцией называют подпрограмму: алгоритм, принимающий какой-то набор данных фиксированных типов, совершающий некие действия и возвращающий какой-то набор данных фиксированных типов, причём производимые действия могут кроме собственно вычисления результатов иметь т.н. побочные эффекты, к которым причисляют взаимодействие со внешней средой: считывание, сохранение или вывод сохранение какой-то дополнительной информации, например.

В функциональных языках программирования действует принцип строгого отделения мух от котлет и функциями называют алгоритмически заданные функции, а для «функций с побочными эффектами» используется другое название: стрелки. На самом деле, понятие стрелки несколько общее: оно включает не только подпрограммы, но в вообще любые data processing circuits.

Функции «живут» в категории Func, где объекты — типы данных, а переходы — как раз таки алгоритмически заданные функции, вычисляющие из одних данных другие.

Стрелки «живут» в категориях стрелок. Характер побочных эффектов бывает разный, поэтому для детализированного подхода нам понадобятся много разных категорий. Например если кроме проведения вычислений допускается только выводить какую-то информацию в лог, то это будут т.н. LogWriter-стрелки. Если допускается записывать и считывать набор переменных s, то это будут State(s)-стрелки; cчитывание из базы данных или потокового устройства — Reader(db)-стрелки; доступ к базе данных или устройству аналогичного интерфейса — Accessor(db), взаимодействие со стандартными устройствами ввода вывода — IO-стрелки и т.д. Всё это может комбинироваться, поверх указанных типов можно допустить Suspended/OutOfOrder-execution, это будут например Cont(IO|Accessor(db)|Throws(exceptionList))-стрелки.Collapse )