Документирование не должно ограничиваться голыми блоками комментариев. Это поняли, например, создатели и многочисленные пользователи утилиты Doxygen. Фактически подготовка документации представляет собой тот же самый синтаксический разбор с генерацией текста по результатам. Это возможно сделать средствами самого языка.
Комментарии и описания не обязательно должны быть особыми встроенными в ядро языка синтаксическими конструкциями, как это сделано в подавляющем числе языков. Они вполне могут быть сделаны через общие средства, которыми также можно анализировать и обрабатывать их.
Пусть А — объект, S — селектор сообщения. Диспетчеризация представляет собой операцию M = A S, где M — метод, т. е. исполнимый объект, выполняемый при посылке сообщения объекту.
Посылка сообщения в виде A S X = (A S) X, где X — параметры, обеспечивает разделение операций диспетчеризации и собственно обработки параметров сообщения.
Smalltalk предоставляет хороший способ именования методов: части имени рассеиваются между аргументами как бы именуя их.
cond IfTrue: x IfFalse: y
Где IfTrue:IfFalse:
— название метода.
Логика синтаксического разбора достаточно проста: в один идентификатор собираются куски, завершающиеся двоеточием до появления ограничивающего токена.
Набор данных может иметь несколько различных представлений. Так, например, машинное слово может быть как целым числом, так и последовательностью разрядов (битов). Как правило работа с различными представлениями идёт через разные интерфейсы. Но иногда бывает удобно использовать один интерфейс. Для этого ссылка на объект должна в себе содержать как адрес данных, так и идентификатор интерфейса.
5 -> a a + 9 # 14 a bits + 9 bits # 1, 0, 1, 0
Традиционно языки используют операцию присвоения «справа налево» (a ← b), то есть значение правого аргумента присваивается левому. С точки зрения логики вычислений более подходило бы присвоение «слева направо» (b → a).
Часто можно обнаружить, что у разнородных объектов существуют операции, которые вне отношения к роду объектов обладают сходными свойствами.
Обобщённые типы операций, которые можно применить на множестве типов:
Для многих объектов можно найти набор операций, аналогичных четырём арифметическим.
Пусть существует бинарная операция, которая обладает следующими свойствами:
и возможно следующими:
Такую операцию назовём умножением.
Пусть существует операция, обладающая следующими свойствами:
а также возможно следующими:
Такую операцию назовём сложением.
Пусть существует операция, обратная умножению, то есть:
где равенство возможно выполняется с некоторой погрешностью представления. Такую операцию назовём делением.
Возможно таких операций две (для девого и правого операнда умножения):
Пусть существует операция, обратная делению, то есть:
Назовём такую операцию вычитанием.
Свойство упорядоченности — наличие у объекта четырёх взаимоисключающих отношений:
>
),
<
),
=
),
Определение порядка определяется следующими операциями:
<
, =
, >
), возвращающие истину, если реализовано соответствующее соотношение,
⇐
, <>
, >=
, <>=
), возвращающие истину, если реализовано любое из указанных соотношений (меньше или равно, меньше или больше, больше или равно, меньше или больше или равно),
~<
, ~>
, ~=
, ~⇐
, ~<>
, ~>=
, ~<>=
), отличаются тем, что при неопределённом опрядке позвращают истину.
Операции <>=
и ~<>=
фактически определяют наличие упорядоченности элементов
Если порядок полный (соотношение «не определено» не реализуется), то для операций выполняются следющие соотношения:
<>=
всегда возвращает истину, а ~<>=
всегда возвращает ложь;
<
и ~>=
, >
и ~⇐
, =
и ~<>
, ⇐
и ~>
, >=
и ~<
, <>
и ~=
.
Максимумом назовём такой элемент, который больше или равен двум другим и не существует элемента меньшего таковому с указанными свойствами. Если такой элемент существует и единственен, то операцию, возвращающую его назовём max.
Аналогично с минимумом.
Нет ничего зазорного в том, чтобы традиционные функции определять через лямбда-операции, т. е. вместо
писать
(где → — операция присвоения)