Spec-Zone.ru › OCaml 5.0

Содержание

  • Часть I Введение в OCaml
    • Глава 1 Ядро языка
      • 1.1 Основы
      • 1.2 Типы данных
      • 1.3 Функции как значения
      • 1.4 Записи и варианты
        • 1.4.1 Разрешение неоднозначности записей и вариантов
      • 1.5 Императивные особенности
      • 1.6 Исключения
      • 1.7 Ленивые выражения
      • 1.8 Символьная обработка выражений
      • 1.9 Красивая печать
      • 1.10 Форматы Printf
      • 1.11 Программы OCaml в качестве самостоятельных программ
    • Глава 2 Система модулей
      • 2.1 Структуры
      • 2.2 Подписи
      • 2.3 Функторы
      • 2.4 Функторы и абстракция типов
      • 2.5 Модули и компиляция по частям
    • Глава 3 Объекты в OCaml
      • 3.1 Классы и объекты
      • 3.2 Непосредственные объекты
      • 3.3 Ссылка на себя
      • 3.4 Инициализаторы
      • 3.5 Виртуальные методы
      • 3.6 Приватные методы
      • 3.7 Интерфейсы классов
      • 3.8 Наследование
      • 3.9 Многократное наследование
      • 3.10 Параметризованные классы
      • 3.11 Полиморфные методы
      • 3.12 Использование приведений типов
      • 3.13 Функциональные объекты
      • 3.14 Клонирование объектов
      • 3.15 Рекурсивные классы
      • 3.16 Бинарные методы
      • 3.17 Друзья
    • Глава 4 Именованные аргументы
      • 4.1 Необязательные аргументы
      • 4.2 Метки и вывод типов
      • 4.3 Рекомендации по именованию
    • Глава 5 Полиморфные варианты
      • 5.1 Базовое использование
      • 5.2 Расширенное использование
      • 5.3 Слабые стороны полиморфных вариантов
    • Глава 6 Полиморфизм и его ограничения
      • 6.1 Слабый полиморфизм и мутации
        • 6.1.1 Слабо полиморфные типы
        • 6.1.2 Ограничение по значению
        • 6.1.3 Смягченное ограничение по значению
        • 6.1.4 Вариативность и ограничение по значению
        • 6.1.5 Абстрактные типы данных
      • 6.2 Полиморфная рекурсия
        • 6.2.1 Явно полиморфные аннотации
        • 6.2.2 Более подробные примеры
      • 6.3 Полиморфные функции высшего порядка
    • Глава 7 Обобщенные алгебраические типы данных
      • 7.1 Рекурсивные функции
      • 7.2 Вывод типов
      • 7.3 Случаи опровержения
      • 7.4 Расширенные примеры
      • 7.5 Существующие имена типов в сообщениях об ошибках
      • 7.6 Явное именование сущностей
      • 7.7 Уравнения для нелокальных абстрактных типов
    • Глава 8 Расширенные примеры с классами и модулями
      • 8.1 Расширенный пример: банковские счета
      • 8.2 Простые модули в качестве классов
        • 8.2.1 Строки
        • 8.2.2 Hashtbl
        • 8.2.3 Множества
      • 8.3 Паттерн наблюдатель/субъект
    • Глава 9 Параллельное программирование
      • 9.1 Области
        • 9.1.1 Объединение областей
      • 9.2 Domainslib: Библиотека для вложенного параллельного программирования
        • 9.2.1 Параллелизация Фибоначчи с помощью domainslib
        • 9.2.2 Параллельные конструкции итерации
      • 9.3 Параллельный сбор мусора
      • 9.4 Модель памяти: Легкие части
      • 9.5 Блокирующая синхронизация
        • 9.5.1 Взаимодействие с systhreads
      • 9.6 Взаимодействие с C-связями
      • 9.7 Атомарные операции
        • 9.7.1 Безблокирующая стековая структура
    • Глава 10 Модель памяти: Сложные части
      • 10.1 Почему слабо согласованная память?
        • 10.1.1 Оптимизации компилятора
        • 10.1.2 Оптимизации оборудования
      • 10.2 Свобода от гонок данных подразумевает последовательную согласованность
        • 10.2.1 Местоположения в памяти
        • 10.2.2 Взаимосвязанные отношения
        • 10.2.3 Гонка данных
        • 10.2.4 DRF-SC
      • 10.3 Выводы с использованием DRF-SC
      • 10.4 Локальная свобода от гонок данных
      • 10.5 Операционный взгляд на модель памяти
        • 10.5.1 Неатомарные местоположения
        • 10.5.2 Области
        • 10.5.3 Доступ к неатомарным местоположениям
        • 10.5.4 Доступ к атомарным местоположениям
        • 10.5.5 Выводы с использованием семантики
      • 10.6 Несоответствующие операции
  • Часть II Язык OCaml
    • Глава 11 Язык OCaml
      • 11.1 Лексические соглашения
      • 11.2 Значения
        • 11.2.1 Базовые значения
        • 11.2.2 Кортежи
        • 11.2.3 Записи
        • 11.2.4 Массивы
        • 11.2.5 Значения вариантов
        • 11.2.6 Полиморфные варианты
        • 11.2.7 Функции
        • 11.2.8 Объекты
      • 11.3 Имена
      • 11.4 Типовые выражения
      • 11.5 Константы
      • 11.6 Шаблоны
      • 11.7 Выражения
        • 11.7.1 Приоритет и ассоциативность
        • 11.7.2 Базовые выражения
        • 11.7.3 Структуры управления
        • 11.7.4 Операции над структурами данных
        • 11.7.5 Операторы
        • 11.7.6 Объекты
        • 11.7.7 Принуждения
        • 11.7.8 Другое
      • 11.8 Определения типов и исключений
        • 11.8.1 Определения типов
        • 11.8.2 Определения исключений
      • 11.9 Классы
        • 11.9.1 Типы классов
        • 11.9.2 Выражения классов
        • 11.9.3 Определения классов
        • 11.9.4 Спецификации классов
        • 11.9.5 Определения типов классов
      • 11.10 Типы модулей (спецификации модулей)
        • 11.10.1 Простые типы модулей
        • 11.10.2 Подписи
        • 11.10.3 Типы функторов
        • 11.10.4 Оператор with
      • 11.11 Выражения модулей (реализации модулей)
        • 11.11.1 Простые выражения модулей
        • 11.11.2 Структуры
        • 11.11.3 Функторы
      • 11.12 Единицы компиляции
    • Глава 12 Расширения языка
      • 12.1 Рекурсивные определения значений
      • 12.2 Рекурсивные модули
      • 12.3 Типы с ограниченным доступом
        • 12.3.1 Типы вариантов и записей с ограниченным доступом
        • 12.3.2 Сокращения типов с ограниченным доступом
        • 12.3.3 Типы строк с ограниченным доступом
      • 12.4 Локально абстрактные типы
      • 12.5 Модули первого класса
      • 12.6 Получение типа модуля
      • 12.7 Подстановка в подпись
        • 12.7.1 Деструктивные подстановки
        • 12.7.2 Объявления локальных подстановок
        • 12.7.3 Подстановки типов модулей
      • 12.8 Модульные псевдонимы на уровне типов
      • 12.9 Переопределение в операторах open
      • 12.10 Обобщенные алгебраические типы данных
      • 12.11 Синтаксис доступа к Bigarray
      • 12.12 Атрибуты
        • 12.12.1 Встроенные атрибуты
      • 12.13 Узлы расширений
        • 12.13.1 Встроенные узлы расширений
      • 12.14 Расширяемые типы вариантов
        • 12.14.1 Типы расширяемых вариантов с ограниченным доступом
      • 12.15 Генеративные функторы
      • 12.16 Синтаксис расширений
        • 12.16.1 Операторы расширений
        • 12.16.2 Литералы расширений
      • 12.17 Встроенные записи
      • 12.18 Комментарии документации
        • 12.18.1 Плавающие комментарии
        • 12.18.2 Комментарии к элементам
        • 12.18.3 Комментарии к меткам
      • 12.19 Расширенные операторы индексирования
        • 12.19.1 Многоиндексная запись
      • 12.20 Пустые типы вариантов
      • 12.21 Предупреждения
      • 12.22 Обобщенные операторы open
      • 12.23 Операторы связывания
        • 12.23.1 Краткая запись для связывания переменных (let-punning)
        • 12.23.2 Обоснование
      • 12.24 Обработчики эффектов
        • 12.24.1 Основы
        • 12.24.2 Конкурентность
        • 12.24.3 Потоки пользовательского уровня
        • 12.24.4 Инверсия управления
        • 12.24.5 Семантика
        • 12.24.6 Поверхностные обработчики
  • Часть III Инструменты OCaml
    • Глава 13 Партия компиляции (ocamlc)
      • 13.1 Обзор компилятора
      • 13.2 Параметры
      • 13.3 Модули и файловая система
      • 13.4 Распространённые ошибки
      • 13.5 Справочник по предупреждениям
        • 13.5.1 Предупреждение 6: Метка опущена в применении функции
        • 13.5.2 Предупреждение 9: Недостающие поля в шаблоне записи
        • 13.5.3 Предупреждение 52: Ненадёжный шаблон констант
        • 13.5.4 Предупреждение 57: Двусмысленные переменные в шаблоне «или» под условием
    • Глава 14 Система верхнего уровня или REPL (ocaml)
      • 14.1 Параметры
      • 14.2 Директивы верхнего уровня
      • 14.3 Верхний уровень и система модулей
      • 14.4 Распространённые ошибки
      • 14.5 Создание пользовательских систем верхнего уровня: ocamlmktop
        • 14.5.1 Параметры
      • 14.6 Родной верхний уровень: ocamlnat (экспериментально)
    • Глава 15 Система выполнения (ocamlrun)
      • 15.1 Обзор
      • 15.2 Параметры
      • 15.3 Динамическая загрузка общих библиотек
      • 15.4 Распространённые ошибки
    • Глава 16 Компиляция кода нативном языке (ocamlopt)
      • 16.1 Обзор компилятора
      • 16.2 Параметры
      • 16.3 Распространённые ошибки
      • 16.4 Запуск исполняемых файлов, сгенерированных ocamlopt
      • 16.5 Совместимость с байткодовым компилятором
    • Глава 17 Генераторы лексических и синтаксических анализаторов (ocamllex, ocamlyacc)
      • 17.1 Обзор ocamllex
        • 17.1.1 Параметры
      • 17.2 Синтаксис определений лексических анализаторов
        • 17.2.1 Заголовок и подвал
        • 17.2.2 Использование имён для регулярных выражений
        • 17.2.3 Точки входа
        • 17.2.4 Регулярные выражения
        • 17.2.5 Действия
        • 17.2.6 Переменные в регулярных выражениях
        • 17.2.7 Обработчики перезагрузки
        • 17.2.8 Зарезервированные идентификаторы
      • 17.3 Обзор ocamlyacc
      • 17.4 Синтаксис определений грамматик
        • 17.4.1 Заголовок и подвал
        • 17.4.2 Объявления
        • 17.4.3 Правила
        • 17.4.4 Обработка ошибок
      • 17.5 Параметры
      • 17.6 Полный пример
      • 17.7 Распространённые ошибки
    • Глава 18 Генератор зависимостей (ocamldep)
      • 18.1 Параметры
      • 18.2 Типичный Makefile
    • Глава 19 Генератор документации (ocamldoc)
      • 19.1 Использование
        • 19.1.1 Вызов
        • 19.1.2 Объединение информации о модулях
        • 19.1.3 Правила кодирования
      • 19.2 Синтаксис комментариев документации
        • 19.2.1 Размещение комментариев документации
        • 19.2.2 Специальный комментарий Stop
        • 19.2.3 Синтаксис комментариев документации
        • 19.2.4 Форматирование текста
        • 19.2.5 Теги документации (@-теги)
      • 19.3 Пользовательские генераторы
        • 19.3.1 Модули генераторов
        • 19.3.2 Обработка пользовательских тегов
      • 19.4 Добавление параметров командной строки
        • 19.4.1 Компиляция и использование
    • Глава 20 Отладчик (ocamldebug)
      • 20.1 Компиляция для отладки
      • 20.2 Вызов
        • 20.2.1 Запуск отладчика
        • 20.2.2 Файл инициализации
        • 20.2.3 Выход из отладчика
      • 20.3 Команды
        • 20.3.1 Получение справки
        • 20.3.2 Доступ к состоянию отладчика
      • 20.4 Выполнение программы
        • 20.4.1 События
        • 20.4.2 Запуск отлаживаемой программы
        • 20.4.3 Выполнение программы
        • 20.4.4 Перемещение во времени
        • 20.4.5 Прерывание программы
      • 20.5 Точки останова
      • 20.6 Стек вызовов
      • 20.7 Просмотр значений переменных
      • 20.8 Управление отладчиком
        • 20.8.1 Установка имени и аргументов программы
        • 20.8.2 Загрузка программ
        • 20.8.3 Путь поиска файлов
        • 20.8.4 Рабочий каталог
        • 20.8.5 Включение и выключение обратного выполнения
        • 20.8.6 Поведение отладчика относительно fork
        • 20.8.7 Остановка выполнения при загрузке нового кода
        • 20.8.8 Взаимодействие между отладчиком и программой
        • 20.8.9 Тонкая настройка отладчика
        • 20.8.10 Пользовательские принтеры
      • 20.9 Разнообразные команды
      • 20.10 Запуск отладчика в Emacs
    • Глава 21 Профилирование (ocamlprof)
      • 21.1 Компиляция для профилирования
      • 21.2 Профилирование выполнения
      • 21.3 Вывод информации о профилировании
      • 21.4 Профилирование по времени
    • Глава 22 Взаимодействие C с OCaml
      • 22.1 Обзор и информация о компиляции
        • 22.1.1 Объявление примитивов
        • 22.1.2 Реализация примитивов
        • 22.1.3 Статическая компоновка кода C с кодом OCaml
        • 22.1.4 Динамическая компоновка кода C с кодом OCaml
        • 22.1.5 Выбор между статической и динамической компоновкой
        • 22.1.6 Создание автономных систем выполнения пользовательского кода
      • 22.2 Тип value
        • 22.2.1 Целочисленные значения
        • 22.2.2 Блоки
        • 22.2.3 Указатели за пределами кучи
      • 22.3 Представление типов данных OCaml
        • 22.3.1 Атомарные типы
        • 22.3.2 Кортежи и записи
        • 22.3.3 Массивы
        • 22.3.4 Конкретные типы данных
        • 22.3.5 Объекты
        • 22.3.6 Полиморфные варианты
      • 22.4 Операции со значениями
        • 22.4.1 Тесты типа
        • 22.4.2 Операции с целыми числами
        • 22.4.3 Доступ к блокам
        • 22.4.4 Выделение блоков
        • 22.4.5 Возбуждение исключений
      • 22.5 Совместимость с сборщиком мусора
        • 22.5.1 Простой интерфейс
        • 22.5.2 Низкоуровневый интерфейс
        • 22.5.3 Ожидающие действия и асинхронные исключения
      • 22.6 Полный пример
      • 22.7 Дополнительная тема: обратные вызовы из C в OCaml
        • 22.7.1 Применение замыканий OCaml из C
        • 22.7.2 Получение или регистрация замыканий OCaml для использования в функциях C
        • 22.7.3 Регистрация исключений OCaml для использования в функциях C
        • 22.7.4 Основная программа на C
        • 22.7.5 Встраивание кода OCaml в код C
      • 22.8 Расширенный пример с обратными вызовами
      • 22.9 Дополнительная тема: пользовательские блоки
        • 22.9.1 struct custom_operations
        • 22.9.2 Выделение пользовательских блоков
        • 22.9.3 Доступ к пользовательским блокам
        • 22.9.4 Написание пользовательских функций сериализации и десериализации
        • 22.9.5 Выбор идентификаторов
        • 22.9.6 Блоки с finalizers
      • 22.10 Дополнительная тема: Bigarrays и интерфейс OCaml-C
        • 22.10.1 Файл заголовков
        • 22.10.2 Доступ к OCaml bigarray из C или Fortran
        • 22.10.3 Оборачивание массива C или Fortran как OCaml Bigarray
      • 22.11 Дополнительная тема: более быстрый вызов C
        • 22.11.1 Передача необработанных значений
        • 22.11.2 Прямой вызов C
        • 22.11.3 Пример: вызов функций библиотеки C без косвенности
      • 22.12 Дополнительная тема: многопоточность
        • 22.12.1 Регистрация потоков, созданных из C
        • 22.12.2 Параллельное выполнение длительно работающего кода C с systhreads
      • 22.13 Дополнительная тема: взаимодействие с Windows Unicode API
      • 22.14 Создание смешанных библиотек C/OCaml: ocamlmklib
      • 22.15 Предупреждения: внутренний API времени выполнения
        • 22.15.1 Внутренние переменные и CAML_INTERNALS
        • 22.15.2 Макросы версии OCaml
    • Глава 23 Оптимизация с Flambda
      • 23.1 Обзор
      • 23.2 Флаги командной строки
        • 23.2.1 Указание параметров оптимизации по раундам
      • 23.3 Встраивание
        • 23.3.1 Классический эвристический подход к встраиванию
        • 23.3.2 Обзор эвристических подходов к встраиванию “Flambda”
        • 23.3.3 Обработка специфических конструкций языка
        • 23.3.4 Отчеты о встраивании
        • 23.3.5 Оценка выгоды от встраивания
        • 23.3.6 Управление спекуляцией
      • 23.4 Специализация
        • 23.4.1 Оценка выгоды от специализации
      • 23.5 Значения параметров по умолчанию
        • 23.5.1 Параметры на уровне оптимизации -O2
        • 23.5.2 Параметры на уровне оптимизации -O3
      • 23.6 Ручное управление встраиванием и специализацией
      • 23.7 Упрощение
      • 23.8 Другие преобразования перемещения кода
        • 23.8.1 Поднятие констант
        • 23.8.2 Поднятие связываний let на верхнем уровне
      • 23.9 Преобразования разворачивания
        • 23.9.1 Разворачивание переменных замыканий
        • 23.9.2 Разворачивание специализированных аргументов
        • 23.9.3 Разворачивание замыканий
      • 23.10 Удаление неиспользуемого кода и значений
        • 23.10.1 Удаление избыточных выражений let
        • 23.10.2 Удаление избыточных конструкций программы
        • 23.10.3 Удаление неиспользуемых аргументов
        • 23.10.4 Удаление неиспользуемых переменных замыканий
      • 23.11 Другие преобразования кода
        • 23.11.1 Преобразование невыходящих ссылок в переменные со значением
        • 23.11.2 Подстановка переменных замыканий для специализированных аргументов
      • 23.12 Обработка эффектов
      • 23.13 Компиляция статически выделенных модулей
      • 23.14 Ингибирование оптимизации
      • 23.15 Использование небезопасных операций
      • 23.16 Словарь
    • Глава 24 Fuzzing с afl-fuzz
      • 24.1 Обзор
      • 24.2 Генерация инструментации
        • 24.2.1 Расширенные параметры
      • 24.3 Пример
    • Глава 25 Отслеживание выполнения с событиями выполнения
      • 25.1 Обзор
      • 25.2 Архитектура
        • 25.2.1 Сбор данных
        • 25.2.2 Передача событий
      • 25.3 Использование
        • 25.3.1 С помощью API OCaml
        • 25.3.2 С помощью инструментов
    • Глава 26 Преобразование программы «Хвост по модулю конструктора»
      • 26.1 Разрешение неоднозначностей
      • 26.2 Опасность: выход за пределы преобразования хвостового модуля
      • 26.3 Подробности о преобразовании
      • 26.4 Текущие ограничения
  • Часть IV Библиотека OCaml
    • Глава 27 Базовая библиотека
      • 27.1 Встроенные типы и предопределенные исключения
      • 27.2 Модуль Stdlib: модуль, открытый по умолчанию
    • Глава 28 Стандартная библиотека
    • Глава 29 Фронтальный модуль компилятора
    • Глава 30 Библиотека unix: системные вызовы Unix
    • Глава 31 Библиотека str: регулярные выражения и обработка строк
    • Глава 32 Библиотека runtime_events
    • Глава 33 Библиотека потоков
    • Глава 34 Библиотека dynlink: динамическая загрузка и линковка объектных файлов
    • Глава 35 Недавно удаленные или перемещенные библиотеки (Graphics, Bigarray, Num, LablTk)
      • 35.1 Библиотека Graphics
      • 35.2 Библиотека Bigarray
      • 35.3 Библиотека Num
      • 35.4 Библиотека Labltk и OCamlBrowser
  • Часть V Индексы

© 1995-2022 INRIA.
https://v2.ocaml.org/releases/5.0/htmlman/manual001.html

Spec-Zone.ru

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