Spec-Zone.ru › OCaml

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

Февраль, ‍2024

Содержание

  • Часть ‍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 Расширенные примеры с классами и модулями
      • 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 Бесблочная очередь
    • Глава 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 Другие
      • 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 Модули первого класса
      • 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 Предупреждения
      • 22 Обобщенные операторы open
      • 23 Операторы связывания
        • 23.1 Примеры
        • 23.2 Соглашения
        • 23.3 Общие правила разборки
        • 23.4 Краткая запись для привязок переменных (let-punning)
      • 24 Обработчики эффектов
        • 24.1 Основы
        • 24.2 Конкурентность
        • 24.3 Потоки пользовательского уровня
        • 24.4 Инверсия управления
        • 24.5 Семантика
        • 24.6 Поверхностные обработчики
  • Часть III Инструменты OCaml
    • Глава 13 Партионная компиляция (ocamlc)
      • 1 Обзор компилятора
      • 2 Опции
      • 3 Модули и файловая система
      • 4 Распространённые ошибки
      • 5 Справочник по предупреждениям
        • 5.1 Предупреждение 6: Метка опущена в применении функции
        • 5.2 Предупреждение 9: Отсутствующие поля в шаблоне записи
        • 5.3 Предупреждение 52: Хрупкий шаблон констант
        • 5.4 Предупреждение 57: Двусмысленные переменные в шаблонах «или» под охраной
    • Глава 14 Система toplevel или REPL (ocaml)
      • 1 Опции
      • 2 Директивы toplevel
      • 3 Toplevel и система модулей
      • 4 Распространённые ошибки
      • 5 Создание пользовательских систем toplevel: ocamlmktop
        • 5.1 Опции
      • 6 Нативный toplevel: 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 Компиляция и использование
END_OF_DOCUMENT_MARKER
    • Глава 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 Профилирование (ocamlprof)
      • 1 Компиляция для профилирования
      • 2 Профилирование выполнения
      • 3 Вывод информации о профилировании
      • 4 Профилирование по времени
    • Глава 22 Интерфейс 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 Получение или регистрация OCaml-замыканий для использования в функциях C
        • 7.3 Регистрация OCaml-исключений для использования в функциях C
        • 7.4 Главная программа на C
        • 7.5 Встраивание кода OCaml в код C
      • 8 Расширенный пример с обратными вызовами
      • 9 Расширенная тема: пользовательские блоки
        • 9.1 struct custom_operations
        • 9.2 Выделение пользовательских блоков
        • 9.3 Доступ к пользовательским блокам
        • 9.4 Написание пользовательских функций сериализации и десериализации
        • 9.5 Выбор идентификаторов
        • 9.6 Окончательно завершенные блоки
      • 10 Расширенная тема: Bigarrays и интерфейс OCaml-C
        • 10.1 Файл заголовков
        • 10.2 Доступ к OCaml bigarray из C или Fortran
        • 10.3 Обёртка массива C или Fortran в качестве OCaml Bigarray
      • 11 Расширенная тема: более быстрый вызов C
        • 11.1 Передача необработанных значений
        • 11.2 Прямой вызов C
        • 11.3 Пример: вызов функций C-библиотеки без косвенности
      • 12 Расширенная тема: многопоточность
        • 12.1 Регистрация потоков, созданных из C
        • 12.2 Параллельное выполнение длительных задач C-кода с systhreads
      • 13 Расширенная тема: взаимодействие с API Windows Unicode
      • 14 Создание смешанных C/OCaml библиотек: ocamlmklib
      • 15 Предупреждения: внутренний API runtime
        • 15.1 Внутренние переменные и CAML_INTERNALS
        • 15.2 Макросы версии OCaml
    • Глава 23 Оптимизация с 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 Поднятие связанных выражений toplevel 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 Словарь
    • Глава 24 Мутация с afl-fuzz
      • 1 Обзор
      • 2 Генерация инструментирования
        • 2.1 Расширенные параметры
      • 3 Пример
    • Глава 25 Трассировка во время выполнения с событиями runtime
      • 1 Обзор
      • 2 Архитектура
        • 2.1 Источники событий
        • 2.2 Передача событий
      • 3 Использование
        • 3.1 С использованием API OCaml
        • 3.2 С помощью инструментов
      • 4 Пользовательские события
        • 4.1 Обзор
        • 4.2 Отслеживание пользовательских событий: пример
    • Глава 26 Преобразование программы «Tail Modulo Constructor»
      • 1 Разъяснение
      • 2 Опасность: выход за пределы tail-mod-cons
      • 3 Детали преобразования
      • 4 Текущие ограничения
    • Глава 27 Обнаружение гонок данных во время выполнения с помощью ThreadSanitizer
      • 1 Обзор и использование
      • 2 Последствия для производительности
      • 3 Ложноположительные и ложноотрицательные результаты
      • 4 Параметры во время выполнения
      • 5 Руководство по связыванию
      • 6 Изменения в передаче сигналов
  • Часть IV Библиотека OCaml
    • Глава 28 Базовая библиотека
      • 1 Встроенные типы и предопределенные исключения
      • 2 Модуль Stdlib: начальный открытый модуль
    • Глава 29 Стандартная библиотека
    • Глава 30 Фронтальный модуль компилятора
    • Глава 31 Библиотека unix: системные вызовы Unix
    • Глава 32 Библиотека str: регулярные выражения и обработка строк
    • Глава 33 Библиотека runtime_events
    • Глава 34 Библиотека threads
    • Глава 35 Библиотека dynlink: динамическая загрузка и компоновка объектных файлов
    • Глава 36 Недавно удаленные или перемещенные библиотеки (Graphics, Bigarray, Num, LablTk)
      • 1 Библиотека Graphics
      • 2 Библиотека Bigarray
      • 3 Библиотека Num
      • 4 Библиотека Labltk и OCamlBrowser
  • Часть V Индексы
  • ГлавнаяВступление »
  • Copyright © 2024 Institut National de Recherche en Informatique et en Automatique

    © 1995-2024 INRIA.
    https://ocaml.org/manual/5.2/manual001.html

    Spec-Zone.ru

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