Spec-Zone.ru › OCaml

Система OCaml, выпуск 5.5

Июнь 2026 года

Содержание

  • Часть I. Введение в OCaml
    • Глава 1 Основной язык
      • 1 Основы
      • 2 Типы данных
      • 3 Функции как значения
      • 4 Записи и варианты
        • 4.1 Разрешение неоднозначности записей и вариантов
      • 5 Императивные конструкции
      • 6 Исключения
      • 7 Ленивые выражения
      • 8 Символьная обработка выражений
      • 9 Форматированный вывод
      • 10 Форматы Printf
      • 11 Автономные программы на OCaml
    • Глава 2 Система модулей
      • 1 Структуры
      • 2 Сигнатуры
      • 3 Функторы
      • 4 Функторы и абстракция типов
      • 5 Модули и раздельная компиляция
    • Глава 3 Объекты в OCaml
      • 1 Классы и объекты
      • 2 Непосредственные объекты
      • 3 Ссылка на себя
      • 4 Инициализаторы
      • 5 Виртуальные методы
      • 6 Приватные методы
      • 7 Интерфейсы классов
      • 8 Наследование
      • 9 Множественное наследование
      • 10 Параметризованные классы
      • 11 Полиморфные методы
      • 12 Использование приведений типов
      • 13 Функциональные объекты
      • 14 Клонирование объектов
      • 15 Рекурсивные классы
      • 16 Бинарные методы
      • 17 Дружественные классы
    • Глава 4 Именованные аргументы
      • 1 Необязательные аргументы
      • 2 Имена аргументов и вывод типов
      • 3 Рекомендации по именованию аргументов
    • Глава 5 Полиморфные варианты
      • 1 Основное использование
      • 2 Расширенное использование
      • 3 Недостатки полиморфных вариантов
    • Глава 6 Полиморфизм и его ограничения
      • 1 Слабый полиморфизм и мутация
        • 1.1 Слабополиморфные типы
        • 1.2 Ограничение значений
        • 1.3 Ослабленное ограничение значений
        • 1.4 Вариантность и ограничение значений
        • 1.5 Абстрактные типы данных
      • 2 Полиморфная рекурсия
        • 2.1 Явные полиморфные аннотации
        • 2.2 Другие примеры
      • 3 Полиморфные функции высших рангов
    • Глава 7 Обобщённые алгебраические типы данных
      • 1 Рекурсивные функции
      • 2 Вывод типов
      • 3 Случаи опровержения
      • 4 Расширенные примеры
      • 5 Имена экзистенциальных типов в сообщениях об ошибках
      • 6 Явное именование экзистенциальных типов
      • 7 Уравнения для нелокальных абстрактных типов
      • 8 Типы, используемые в качестве индексов GADT
        • 8.1 Прежнее поведение: типы в текущем модуле
    • Глава 8 Расширенные примеры с классами и модулями
      • 1 Расширенный пример: банковские счета
      • 2 Простые модули в роли классов
        • 2.1 Строки
        • 2.2 Hashtbl
        • 2.3 Множества
      • 3 Шаблон «субъект/наблюдатель»
    • Глава 9 Параллельное программирование
      • 1 Домены
        • 1.1 Объединение доменов
      • 2 Domainslib: библиотека для вложенного параллельного программирования
        • 2.1 Параллельный расчёт чисел Фибоначчи с помощью domainslib
        • 2.2 Конструкции параллельной итерации
      • 3 Параллельная сборка мусора
      • 4 Модель памяти: простые аспекты
      • 5 Блокирующая синхронизация
        • 5.1 Взаимодействие с systhreads
      • 6 Взаимодействие с привязками C
      • 7 Атомарные операции
        • 7.1 Стек без блокировок
        • 7.2 Атомарные поля записей
    • Глава 10 Модель памяти: сложные аспекты
      • 1 Зачем нужна слабо согласованная память?
        • 1.1 Оптимизации компилятора
        • 1.2 Аппаратные оптимизации
      • 2 Отсутствие гонок данных гарантирует последовательную согласованность
        • 2.1 Области памяти
        • 2.2 Отношение «происходит до»
        • 2.3 Гонка данных
        • 2.4 DRF-SC
      • 3 Рассуждения на основе DRF-SC
      • 4 Локальное отсутствие гонок данных
      • 5 Операционный взгляд на модель памяти
        • 5.1 Неатомарные области памяти
        • 5.2 Домены
        • 5.3 Неатомарный доступ
        • 5.4 Атомарный доступ
        • 5.5 Рассуждения с использованием семантики
      • 6 Несоответствующие требованиям операции
  • Часть II. Язык OCaml
    • Глава 11 Язык OCaml
      • 1 Лексические соглашения
      • 2 Значения
        • 2.1 Базовые значения
        • 2.2 Кортежи
        • 2.3 Записи
        • 2.4 Массивы
        • 2.5 Вариантные значения
        • 2.6 Полиморфные варианты
        • 2.7 Функции
        • 2.8 Объекты
      • 3 Имена
      • 4 Выражения типов
      • 5 Константы
      • 6 Шаблоны
      • 7 Выражения
        • 7.1 Приоритет и ассоциативность
        • 7.2 Основные выражения
        • 7.3 Управляющие конструкции
        • 7.4 Операции над структурами данных
        • 7.5 Операторы
        • 7.6 Объекты
        • 7.7 Приведения типов
        • 7.8 Локальные элементы структур
        • 7.9 Прочее
      • 8 Определения типов и исключений
        • 8.1 Определения типов
        • 8.2 Определения исключений
      • 9 Классы
        • 9.1 Типы классов
        • 9.2 Выражения классов
        • 9.3 Определения классов
        • 9.4 Спецификации классов
        • 9.5 Определения типов классов
      • 10 Типы модулей (спецификации модулей)
        • 10.1 Простые типы модулей
        • 10.2 Сигнатуры
        • 10.3 Типы функторов
        • 10.4 Оператор with
      • 11 Выражения модулей (реализации модулей)
        • 11.1 Простые выражения модулей
        • 11.2 Структуры
        • 11.3 Функторы
      • 12 Единицы компиляции
    • Глава 12 Расширения языка
      • 1 Рекурсивные определения значений
      • 2 Рекурсивные модули
      • 3 Приватные типы
        • 3.1 Приватные варианты и типы записей
        • 3.2 Приватные сокращённые обозначения типов
        • 3.3 Приватные строковые типы
      • 4 Локально абстрактные типы
      • 5 Функции, зависящие от модулей, и модули первого класса
        • 5.1 Введение
        • 5.2 Справочник
      • 6 Получение типа модуля
      • 7 Подстановка внутри сигнатуры
        • 7.1 Разрушающие подстановки
        • 7.2 Объявления локальной подстановки
        • 7.3 Подстановки типов модулей
      • 8 Псевдонимы модулей на уровне типов
      • 9 Переопределение в операторах open
      • 10 Обобщённые алгебраические типы данных
      • 11 Синтаксис доступа к Bigarray
      • 12 Атрибуты
        • 12.1 Встроенные атрибуты
      • 13 Узлы расширений
        • 13.1 Встроенные узлы расширений
      • 14 Расширяемые вариантные типы
        • 14.1 Приватные расширяемые вариантные типы
      • 15 Генеративные функторы
      • 16 Синтаксис только для расширений
        • 16.1 Операторы расширений
        • 16.2 Литералы расширений
      • 17 Встроенные записи
      • 18 Комментарии к документации
        • 18.1 Свободно расположенные комментарии
        • 18.2 Комментарии к элементам
        • 18.3 Комментарии к меткам
      • 19 Расширенные операторы индексирования
        • 19.1 Обозначение с несколькими индексами
      • 20 Пустые вариантные типы
      • 21 Предупреждения
        • 21.1 Пометка компонента
        • 21.2 Управление включёнными предупреждениями
        • 21.3 Сокращённый синтаксис для пометки устаревших элементов
      • 22 Обобщённые операторы open
      • 23 Операторы связывания
        • 23.1 Примеры
        • 23.2 Соглашения
        • 23.3 Общие правила десахаризации
        • 23.4 Краткая запись связывания переменных (сокращённая запись let)
      • 24 Обработчики эффектов
        • 24.1 Основы
        • 24.2 Параллелизм
        • 24.3 Потоки пользовательского уровня
        • 24.4 Инверсия управления
        • 24.5 Семантика
        • 24.6 Поверхностные обработчики
      • 25 Разрешение неоднозначности литералов массивов на основе типов
      • 26 Именованные кортежи
      • 27 Внешние типы
  • Часть III. Инструменты OCaml
    • Глава 13 Пакетная компиляция (ocamlc)
      • 1 Обзор компилятора
      • 2 Параметры
      • 3 Модули и файловая система
      • 4 Распространённые ошибки
      • 5 Справочник по предупреждениям
        • 5.1 Предупреждение 6: метка пропущена при применении функции
        • 5.2 Предупреждение 9: в шаблоне записи отсутствуют поля
        • 5.3 Предупреждение 52: хрупкий шаблон-константа
        • 5.4 Предупреждение 57: неоднозначные переменные or-шаблона в условии-стражe
        • 5.5 Предупреждение 74: сопоставление с шаблоном сведено к частичному.
    • Глава 14 Система верхнего уровня или REPL (ocaml)
      • 1 Параметры
      • 2 Директивы верхнего уровня
      • 3 Система верхнего уровня и система модулей
      • 4 Распространённые ошибки
      • 5 Создание пользовательских систем верхнего уровня: ocamlmktop
        • 5.1 Параметры
      • 6 Нативная система верхнего уровня: ocamlnat (экспериментальная)
    • Глава 15 Система времени выполнения (ocamlrun)
      • 1 Обзор
      • 2 Параметры
      • 3 Динамическая загрузка разделяемых библиотек
      • 4 Распространённые ошибки
    • Глава 16 Компиляция в машинный код (ocamlopt)
      • 1 Обзор компилятора
      • 2 Параметры
      • 3 Распространённые ошибки
      • 4 Запуск исполняемых файлов, созданных ocamlopt
      • 5 Совместимость с компилятором байт-кода
    • Глава 17 Генераторы лексеров и парсеров (ocamllex, ocamlyacc)
      • 1 Обзор ocamllex
        • 1.1 Параметры
      • 2 Синтаксис определений лексера
        • 2.1 Заголовок и заключительная часть
        • 2.2 Именование регулярных выражений
        • 2.3 Точки входа
        • 2.4 Регулярные выражения
        • 2.5 Действия
        • 2.6 Переменные в регулярных выражениях
        • 2.7 Обработчики пополнения буфера
        • 2.8 Зарезервированные идентификаторы
      • 3 Обзор ocamlyacc
      • 4 Синтаксис определений грамматики
        • 4.1 Заголовок и заключительная часть
        • 4.2 Объявления
        • 4.3 Правила
        • 4.4 Обработка ошибок
      • 5 Параметры
      • 6 Полный пример
      • 7 Распространённые ошибки
    • Глава 18 Генератор зависимостей (ocamldep)
      • 1 Параметры
      • 2 Типичный Makefile
    • Глава 19 Генератор документации (ocamldoc)
      • 1 Использование
        • 1.1 Вызов
        • 1.2 Объединение информации о модулях
        • 1.3 Правила оформления кода
      • 2 Синтаксис комментариев документации
        • 2.1 Размещение комментариев документации
        • 2.2 Специальный комментарий Stop
        • 2.3 Синтаксис комментариев документации
        • 2.4 Форматирование текста
        • 2.5 Теги документации (теги @)
      • 3 Пользовательские генераторы
        • 3.1 Модули-генераторы
        • 3.2 Обработка пользовательских тегов
      • 4 Добавление параметров командной строки
        • 4.1 Компиляция и использование
    • Глава 20 Отладчик (ocamldebug)
      • 1 Компиляция для отладки
      • 2 Вызов
        • 2.1 Запуск отладчика
        • 2.2 Файл инициализации
        • 2.3 Выход из отладчика
      • 3 Команды
        • 3.1 Получение справки
        • 3.2 Доступ к состоянию отладчика
      • 4 Выполнение программы
        • 4.1 События
        • 4.2 Запуск отлаживаемой программы
        • 4.3 Выполнение программы
        • 4.4 Перемещение во времени
        • 4.5 Завершение программы
      • 5 Точки останова
      • 6 Стек вызовов
      • 7 Просмотр значений переменных
      • 8 Управление отладчиком
        • 8.1 Задание имени программы и аргументов
        • 8.2 Загрузка программ
        • 8.3 Путь поиска файлов
        • 8.4 Рабочий каталог
        • 8.5 Включение и выключение обратного выполнения
        • 8.6 Поведение отладчика при вызове fork
        • 8.7 Остановка выполнения при загрузке нового кода
        • 8.8 Обмен данными между отладчиком и программой
        • 8.9 Точная настройка отладчика
        • 8.10 Определяемые пользователем средства вывода
      • 9 Различные команды
      • 10 Запуск отладчика в Emacs
    • Глава 21 Отладка машинного кода (gdb, lldb)
      • 1 Обзор
        • 1.1 DWARF
        • 1.2 Искажение имён
        • 1.3 Указатели кадров стека
      • 2 Компиляция для отладки
      • 3 Использование GDB
        • 3.1 Команды GDB
      • 4 Использование LLDB
        • 4.1 Команды LLDB
    • Глава 22 Профилирование (ocamlprof, perf)
      • 1 Профилирование количества выполнений с помощью ocamlprof
        • 1.1 Компиляция для профилирования
        • 1.2 Профилирование выполнения
        • 1.3 Вывод информации профилирования
      • 2 Профилирование времени с помощью Linux perf
        • 2.1 Предварительные сведения
        • 2.2 Компиляция для профилирования
        • 2.3 Профилирование выполнения
        • 2.4 Отображение информации профилирования
        • 2.5 Заключение
      • 3 Профилирование времени с помощью Instruments в macOS
      • 4 Глоссарий
    • Глава 23 Взаимодействие C с OCaml
      • 1 Обзор и сведения о компиляции
        • 1.1 Объявление примитивов
        • 1.2 Реализация примитивов
        • 1.3 Статическая компоновка кода C с кодом OCaml
        • 1.4 Динамическая компоновка кода C с кодом OCaml
        • 1.5 Выбор между статической и динамической компоновкой
        • 1.6 Создание автономных пользовательских систем времени выполнения
      • 2 Тип value
        • 2.1 Целочисленные значения
        • 2.2 Блоки
        • 2.3 Указатели за пределами кучи
      • 3 Представление типов данных OCaml
        • 3.1 Атомарные типы
        • 3.2 Кортежи и записи
        • 3.3 Массивы
        • 3.4 Конкретные типы данных
        • 3.5 Объекты
        • 3.6 Полиморфные варианты
      • 4 Операции над значениями
        • 4.1 Проверки вида значения
        • 4.2 Операции над целыми числами
        • 4.3 Доступ к блокам
        • 4.4 Выделение блоков
        • 4.5 Возбуждение исключений
      • 5 Согласованная работа со сборщиком мусора
        • 5.1 Простой интерфейс
        • 5.2 Низкоуровневый интерфейс
        • 5.3 Ожидающие действия и асинхронные исключения
      • 6 Полный пример
      • 7 Дополнительная тема: обратные вызовы из C в OCaml
        • 7.1 Вызов замыканий OCaml из C
        • 7.2 caml_result: освобождение ресурсов при исключениях OCaml
        • 7.3 Получение или регистрация замыканий OCaml для использования в функциях C
        • 7.4 Регистрация исключений OCaml для использования в функциях C
        • 7.5 Главная программа на C
        • 7.6 Встраивание кода OCaml в код C
      • 8 Расширенный пример с обратными вызовами
      • 9 Дополнительная тема: пользовательские блоки
        • 9.1 struct custom_operations
        • 9.2 Выделение пользовательских блоков
        • 9.3 Доступ к пользовательским блокам
        • 9.4 Написание пользовательских функций сериализации и десериализации
        • 9.5 Выбор идентификаторов
        • 9.6 Финализированные блоки
      • 10 Дополнительная тема: Bigarray и интерфейс OCaml–C
        • 10.1 Файл включения
        • 10.2 Доступ к большому массиву OCaml из C или Fortran
        • 10.3 Обёртывание массива C или Fortran в Bigarray OCaml
      • 11 Дополнительная тема: более дешёвый вызов C
        • 11.1 Передача неупакованных значений
        • 11.2 Прямой вызов C
        • 11.3 Пример: вызов функций библиотеки C без косвенного обращения
      • 12 Дополнительная тема: многопоточность
        • 12.1 Регистрация потоков, созданных из C
        • 12.2 Параллельное выполнение длительного кода C с systhreads
      • 13 Дополнительная тема: взаимодействие с API Unicode в Windows
      • 14 Создание смешанных библиотек C/OCaml: ocamlmklib
      • 15 Предостережение: внутренний API системы времени выполнения
        • 15.1 Внутренние переменные и CAML_INTERNALS
        • 15.2 Макросы версии OCaml
    • Глава 24 Оптимизация с помощью Flambda
      • 1 Обзор
      • 2 Параметры командной строки
        • 2.1 Задание параметров оптимизации по этапам
      • 3 Встраивание
        • 3.1 Классическая эвристика встраивания
        • 3.2 Обзор эвристик встраивания «Flambda»
        • 3.3 Обработка отдельных языковых конструкций
        • 3.4 Отчёты о встраивании
        • 3.5 Оценка пользы от встраивания
        • 3.6 Управление спекуляцией
      • 4 Специализация
        • 4.1 Оценка пользы от специализации
      • 5 Значения параметров по умолчанию
        • 5.1 Параметры при уровне оптимизации -O2
        • 5.2 Параметры при уровне оптимизации -O3
      • 6 Ручное управление встраиванием и специализацией
      • 7 Упрощение
      • 8 Другие преобразования перемещения кода
        • 8.1 Вынесение констант
        • 8.2 Вынесение связываний let верхнего уровня
      • 9 Преобразования распаковки
        • 9.1 Распаковка переменных замыкания
        • 9.2 Распаковка специализированных аргументов
        • 9.3 Распаковка замыканий
      • 10 Удаление неиспользуемого кода и значений
        • 10.1 Удаление избыточных выражений let
        • 10.2 Удаление избыточных конструкций программы
        • 10.3 Удаление неиспользуемых аргументов
        • 10.4 Удаление неиспользуемых переменных замыкания
      • 11 Другие преобразования кода
        • 11.1 Преобразование неэкранирующих ссылок в изменяемые переменные
        • 11.2 Подстановка переменных замыкания вместо специализированных аргументов
      • 12 Обработка эффектов
      • 13 Компиляция статически размещаемых модулей
      • 14 Отключение оптимизации
      • 15 Использование небезопасных операций
      • 16 Глоссарий
    • Глава 25 Фаззинг с помощью afl-fuzz
      • 1 Обзор
      • 2 Генерация инструментированного кода
        • 2.1 Дополнительные параметры
      • 3 Пример
    • Глава 26 Трассировка выполнения с помощью событий времени выполнения
      • 1 Обзор
      • 2 Архитектура
        • 2.1 Источники событий
        • 2.2 Передача событий
      • 3 Использование
        • 3.1 С помощью API OCaml
        • 3.2 С помощью инструментов
      • 4 Пользовательские события
        • 4.1 Обзор
        • 4.2 Трассировка пользовательских событий: пример
    • Глава 27 Преобразование программы «Хвост по модулю конструктора»
      • 1 Разграничение понятий
      • 2 Опасность: выход из режима «хвост по модулю конструктора»
      • 3 Подробности преобразования
      • 4 Текущие ограничения
    • Глава 28 Обнаружение гонок данных во время выполнения с помощью ThreadSanitizer
      • 1 Обзор и использование
      • 2 Влияние на производительность
      • 3 Ложноотрицательные и ложноположительные результаты
      • 4 Параметры времени выполнения
      • 5 Рекомендации по компоновке
      • 6 Изменения в доставке сигналов
  • Часть IV Библиотека OCaml
    • Глава 29 Основная библиотека
      • 1 Встроенные типы и предопределённые исключения
      • 2 Модуль Stdlib: модуль, открываемый изначально
    • Глава 30 Стандартная библиотека
    • Глава 31 Внешний интерфейс компилятора
    • Глава 32 Библиотека unix: системные вызовы Unix
    • Глава 33 Библиотека str: регулярные выражения и обработка строк
    • Глава 34 Библиотека runtime_events
    • Глава 35 Библиотека потоков
    • Глава 36 Библиотека dynlink: динамическая загрузка и компоновка объектных файлов
    • Глава 37 Недавно удалённые или перенесённые библиотеки (Graphics, Bigarray, Num, LablTk)
      • 1 Библиотека Graphics
      • 2 Библиотека Bigarray
      • 3 Библиотека Num
      • 4 Библиотека Labltk и OCamlBrowser
  • Часть V Указатели
ГлавнаяПредисловие »
Авторское право © 2026 Национальный институт исследований в области информатики и автоматизации

© 1995-2026 INRIA.
https://ocaml.org/manual/5.5/manual001.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API