Contents
Part I Основы языка
Chapter 1 Функциональное программирование
1.1 Функциональное ядро Objective CAML
1.1.1 Значения, функции и базовые типы
1.1.2 Структуры условного контроля
1.1.3 Объявление значений
1.1.4 Функциональное выражение, функции
1.1.5 Полиморфизм и ограничение типа
1.1.6 Примеры
1.2 Объявления типов и сопоставление с образцом
1.2.1 Сопоставление с образцом
1.2.2 Декларация типов
1.2.3 Записи
1.2.4 Тип сумма (sum)
1.2.5 Рекурсивный тип
1.2.6 Параметризованный тип
1.2.7 Видимость описания
1.2.8 Функциональные типы
1.2.9 Пример: реализация деревьев
1.2.10 Не функциональные рекурсивные значения
1.3 Типизация, область определения и исключения
1.3.1 Частичные функции и исключения
1.3.2 Определения исключения
1.3.3 Возбуждение исключения
1.3.4 Перехват исключения
1.4 Полиморфизм и значения возвращаемые функциями
1.5 Калькулятор
1.6 Резюме
Chapter 2 Императивное программирование
2.1 Физически изменяемые структуры данных
2.1.1 Векторы
2.1.2 Строки
2.1.3 Изменяемые поля записей
2.1.4 Указатели
2.1.5 Полиморфизм и изменяемые значения
2.2 Ввод/Вывод
2.2.1 Каналы
2.2.2 Чтение/запись
2.2.3 Пример Больше/Меньше
2.3 Структуры контроля
2.3.1 Последовательность
2.3.2 Циклы
2.3.3 Пример: реализация стека
2.3.4 Пример: расчет матриц
2.4 Порядок вычисления аргументов
2.5 Калькулятор с памятью
2.6 Резюме
Chapter 3 Функциональный и императивный стиль
3.1 Сравнение между функциональным и императивным стилями
3.1.1 С функциональной стороны
3.1.2 Императивная сторона
3.1.3 Рекурсия или итерация
3.2 Какой стиль выбрать?
3.2.1 Последовательность или композиция функций
3.2.2 Общее использование или копии значений
3.2.3 Критерии выбора
3.3 Смесь стилей
3.3.1 Замыкание и побочные эффекты
3.3.2 Физическое изменение и исключения
3.3.3 Изменяемые функциональные структуры данных
3.3.4 Пассивные изменяемые структуры
3.4 Поток данных
3.4.1 Конструкция
3.4.2 Деструкция и сопоставление потока
3.5 Резюме
Chapter 4 Графический интерфейс
4.1 Использование библиотеки Graphics
4.2 Основные понятия
4.3 Графический вывод
4.3.1 Ориентир и графический контекст
4.3.2 Цвета
4.3.3 Рисунок и заливка
4.3.4 Текст
4.3.5 Bitmaps
4.3.6 Рисование рельефных блоков
4.4 Анимация
4.5 Обработка событий
4.5.1 Тип и функции событий
4.5.2 Скелет программы
4.5.3 Пример: telecran
4.6 Графический калькулятор
4.7 Резюме
Chapter 5 Программы
5.1 Запросы базы данных
5.1.1 Формат данных
5.1.2 Чтение базы из файла
5.1.3 Общие принципы работы с базой данных
5.1.4 Критерии выборки
5.1.5 Обработка и вычисление
5.1.6 Пример
5.1.7 Дополнительные возможности
5.2 Интерпретатор языка BASIC
5.2.1 Абстрактный синтаксис
5.2.2 Вывод программы на экран
5.2.3 Лексический анализ
5.2.4 Синтаксический анализ
5.2.5 Вычисление
5.2.6 Последние штрихи
5.2.7 Что дальше?
5.3 Minesweeper
5.3.1 Абстрактное минное поле
5.3.2 Игровой интерфейс
5.3.3 Взаимодействие между программой и игроком
Part II Средства разработки
Chapter 6 Компиляция и переносимость
6.1 Этапы компиляции
6.1.1 Компиляторы Objective CAML
6.1.2 Описание байт–код компилятора
6.2 Типы компиляции
6.2.1 Названия команд
6.2.2 Элементы компиляции
6.2.3 Расширения файлов Objective CAML
6.2.4 Байт–код компилятор
6.2.5 Нативный компилятор
6.2.6 Интерактивный интерпретатор
6.2.7 Создание интерпретатора
6.3 Автономный исполняемый файл
6.4 Переносимость и эффективность
6.4.1 Автономность и переносимость
6.4.2 Эффективность выполнения
Chapter 7 Библиотеки
7.1 Классификация и использование библиотек
7.2 Автоматически загруженные библиотеки
7.3 Стандартная библиотека
7.3.1 Утилиты
7.3.2 Линейные структуры данных
7.3.3 Ввод/Вывод
7.3.4 Persistence
7.3.5 Системный интерфейс
7.4 Другие библиотеки дистрибутива
7.4.1 Точная арифметика
7.4.2 Динамическая загрузка кода
7.5 Упражнения
7.6 Резюме
Chapter 8 Автоматический сборщик мусора
8.1 Введение
8.2 План главы
8.3 Программа и память
8.4 Выделение и освобождение памяти
8.4.1 Явное выделение памяти
8.4.2 Явное освобождение памяти
8.4.3 Неявное освобождение памяти
8.5 Автоматическая сборка памяти
8.5.1 Счетчики ссылок
8.5.2 Алгоритм–разведчик
8.5.3 Mark&Sweep
8.5.4 Stop&Copy
8.5.5 Другие GC
8.6 Управление памятью в Objective Caml
8.7 Модуль GC
8.8 Модуль Weak
8.9 Резюме
Chapter 9 Средства анализа программ
9.1 Введение
9.2 План главы
9.3 Средства отладки
9.3.1 Trace
9.3.2 Отладка программ
9.3.3 Контроль над выполнение программы
9.4 Профайлер
9.4.1 Комманды компиляции
9.4.2 Выполнение программы
9.4.3 Представление результата
9.5 Резюме
Chapter 10 Средства лексического и синтаксического анализа
10.1 Введение
10.2 План главы
10.3 Лексика
10.3.1 Модуль
Genlex
10.3.2 Использование потоков
10.3.3 Рациональные выражения
10.3.4 Библиотека
Str
10.3.5 Инструмент Ocamllex
10.4 Синтаксис
10.4.1 Грамматика
10.4.2 Порождение и распознавание
10.4.3 Нисходящий анализ
10.4.4 Восходящий анализ
10.4.5 Инструмент
ocamlyacc
10.4.6 Контекстная грамматика
10.5 Пересмотренный Basic
10.5.1 Файл
basic_parser.mly
10.5.2 Файл basic_lexer.mll
10.5.3 Компиляция, компоновка
10.6 Резюме
Chapter 11 Взаимодействие с языком C
11.1 Введение
11.2 План главы
11.3 Передача информации между Objective CAML и C
11.3.1 Внешние декларации
11.3.2 Декларация C функций
11.3.3 Редактирование связей с C
11.3.4 Смешивание операций ввода/вывода в C и Objective CAML
11.4 Анализ значений Objective CAML в C
11.4.1 Классификация значений
value
11.4.2 Доступ к непосредственным значениям
11.4.3 Дискриминация структурных значений
11.4.4 Вызов замыкания Objective CAML в C
Chapter 12 Программы
Part III Устройство программы
Chapter 13 Модульное программирование
Chapter 14 Объектно-ориентированное программирование
Chapter 15 Сравнение моделей устройств программ
Chapter 16 Программы
Part IV Параллелизм и распределение
Chapter 17 Процессы и связь между процессами
Chapter 18 Программирование одновременно–выполняемых задач
Chapter 19 Программирование распределенных задач
Chapter 20 Программы
Chapter 21 Разработка программ с помощью Objective CAML
Part V Annexes