Информация о книге

978-5-97060-102-0

Главная  » Научно-техническая литература » Информационные технологии. Компьютеры » Программирование » Java » Программирование на языке OCaml

Мадхавапедди А., Мински Я., Хикки Д., Программирование на языке OCaml


серия: Функциональное программирование
ДМК-Пресс, 2014 г., 978-5-97060-102-0


Описание книги

Эта книга введет вас в мир OCaml, надежный язык программирования, обладающий большой выразительностью, безопасностью и быстродействием. Пройдя через множество примеров, вы быстро поймете, что OCaml - это превосходный инструмент, позволяющий писать быстрый, компактный и надежный системный код. Вы познакомитесь с основными понятиями языка, узнаете о приемах и инструментах, помогающих превратить OCaml в эффективное средство разработки практических приложений. В конце книги вы сможете углубиться в изучение тонких особенностей инструментов компилятора и среды выполнения OCaml.

Ключевые слова

Поделиться ссылкой на книгу



Содержание книги

Вступление
Часть I. Основы языка
Глава 1. Введение
OCaml как калькулятор
Функции и автоматический вывод типов
Автоматический вывод типов
Автоматический вывод обобщенных типов
Кортежи, списки, необязательные значения и
сопоставление с образцом
Кортежи
Списки
Необязательные значения
Записи и варианты
Императивное программирование
Массивы
Изменяемые поля записей
Ссылки
Циклы for и while
Законченная программа
Компиляция и запуск
Что дальше
Глава 2. Переменные и функции
Переменные
Сопоставление с образцом и let
Функции
Анонимные функции
Функции нескольких аргументов
Рекурсивные функции
Префиксные и инфиксные операторы
Объявление функций с помощью ключевого слова
function
Аргументы с метками
Необязательные аргументы
Глава 3. Списки и образцы
Основы списков
Использование сопоставления с образцом для
извлечения данных из списка Ограничения (и
благословения) сопоставления с образцом
Производительность
Определение ошибок
Эффективное использование модуля List
Другие полезные функции из модуля List
Хвостовая рекурсия
Компактность и скорость сопоставления с образцом
Глава 4. Файлы, модули программы
Программы в единственном файле
Программы и модули из нескольких файлов
Сигнатуры и абстрактные типы
Конкретные типы в сигнатурах
Вложенные модули
Открытие модулей
Подключение модулей
Типичные ошибки при работе с модулями
Несовпадение типов
Отсутствие определений
Несоответствие определений типов
Циклические зависимости
Проектирование с применением модулей
Старайтесь не экспортировать конкретные типы
Продумывайте синтаксис вызовов
Создавайте однородные интерфейсы
Определяйте интерфейсы до реализации
Глава 5. Записи
Сопоставление с образцом и полнота
Уплотнение полей
Повторное использование имен полей
Функциональные обновления
Изменяемые поля
Поля первого порядка
Глава 6. Варианты
Универсальные образцы и рефакторинг
Объединение записей и вариантов
Варианты и рекурсивные структуры данных
Полиморфные варианты
Пример: и снова о цветных терминалах
Когда следует использовать полиморфные
варианты
Глава 7. Обработка ошибок
Типы возвращаемых значений с признаком ошибки
Кодирование ошибок в результате
Error и Or_error
Функция bind и другие идиомы обработки ошибок
Исключения
Вспомогательные функции для возбуждения
исключений
Обработчики исключений
Восстановление работоспособности после
исключений
Перехват определенных исключений
Трассировка стека
От исключений к типам с информацией об ошибках
и обратно
Выбор стратегии обработки ошибок
Глава 8. Императивное программирование
Пример: императивные словари
Элементарные изменяемые данные
Данные в формах, подобных массивам
Изменяемые поля записей и объектов и ссылочные
ячейки
Внешние функции
Циклы for и while
Пример: двусвязные списки
Изменение списка
Итеративные функции
Отложенные вычисления и другие благоприятные
эффекты
Мемоизация и динамическое программирование
Ввод и вывод
Терминальный ввод/вывод
Форматированный вывод с помощью printf
Файловый ввод/вывод
Порядок вычислений
Побочные эффекты и слабый полиморфизм
Ограничение значений
Частичное применение и ограничение значения
Ослабление ограничения значений
В заключение
Глава 9. Функторы
Простейший пример
Более практичный пример: вычисления с
применением интервалов
Создание абстрактных функторов
Совместно используемые ограничения
Деструктивная подстановка
Использование нескольких интерфейсов
Расширение модулей
Глава 10. Модули первого порядка
Приемы работы с модулями первого порядка
Пример: фреймворк обработки запросов
Реализация обработчика запросов
Диспетчеризация запросов по нескольким
обработчикам
Загрузка и выгрузка обработчиков запросов
Жизнь без модулей первого порядка
Глава 11. Объекты
Объекты OCaml
Полиморфизм объектов
Неизменяемые объекты
Когда следует использовать объекты
Подтипизация
Подтипизация в ширину
Подтипизация в глубину
Вариантность
Сужение
Подтипизация и рядный полиморфизм
Глава 12. Классы
Классы в OCaml
Параметры класса и полиморфизм
Типы объектов и интерфейсы
Функциональные итераторы
Наследование
Типы классов
Открытая рекурсия
Скрытые методы
Бинарные методы
Виртуальные классы и методы
Создание простых фигур
Инициализаторы
Множественное наследование
Как выполняется разрешение имен
Примеси
Отображение анимированных фигур
Часть II. Инструменты и технологии
Глава 13. Отображения и хэш-таблицы
Отображения
Создание отображений с компараторами
Деревья
Полиморфные компараторы
Множества
Соответствие интерфейсу Comparablc.S
Хэш-таблицы
Соответствие интерфейсу Hashable.S
Выбор между отображениями и хэш-таблицами
Глава 14. Анализ командной строки
Простейший анализ командной строки
Анонимные аргументы
Определение простых команд
Выполнение простых команд
Типы аргументов
Определение собственных типов аргументов
Необязательные аргументы и аргументы по
умолчанию
Последовательности аргументов
Добавление поддержки передачи именованных
флагов в командной строке
Группировка подкоманд
Расширенное управление парсингом
Типы в основе Command.Spec
Объединение фрагментов спецификаций
Интерактивный запрос ввода
Добавление аргументов с метками в функции
обратного вызова
Автодополнение командной строки средствами
Bash
Создание фрагментов автодополнения
Установка фрагмента автодополнения
Альтернативные парсеры командной строки
Глава 15. Обработка данных JSON
Основы JSON
Парсинг данных в формате JSON с помощью Yojson
Выборка значений из структур JSON
Конструирование значений JSON
Использование нестандартных расширений JSON
Автоматическое отображение JSON в типы OCaml
Основы ATD
Аннотации ATD
Компиляция спецификаций ATD в код на OCaml
Пример: запрос информации об организации в GitHub
Глава 16. Парсинг с помощью OCamllex и Menhir
Лексический анализ и парсинг
Определение парсера
Описание грамматики
Парсинг последовательностей
Определение лексического анализатора
Вступление
Регулярные выражения
Лексические правила
Рекурсивные правила
Объединяем все вместе
Глава 17. Сериализация данных с применением
s-выражений
Основы использования
Преобразование типов OCaml в s-выражения
Формат Sexp
Сохранение инвариантов
Вывод информативных сообщений об ошибках
Директивы sexp-преобразоваиий
sexp_opaque
sexp_list
sexp_option
Определение значений по умолчанию
Глава 18. Конкурентное программирование с
помощью Async
Основы Async
Ivar и upon
Примеры: эхо-сервер
Усовершенствование эхо-сервера
Пример: поиск определений с помощью DuckDuckGo
Обработка URI
Парсинг строк J SON
Выполнение запроса HTTP
Обработка исключений
Мониторы
Пример: обработка исключений при работе с
DuckDuckGo
Тайм-ауты, отмена и выбор
Работа с системными потоками
Защищенность данных в потоках и блокировки
Насть III. Система времени выполнения
Глава 19. Интерфейс внешних функций
Пример: интерфейс к терминалу
Простые скалярные типы языка С
Указатели и массивы
Выделение памяти для указателей
Использование представлений для отображения
составных значений
Структуры и объединения
Определение структуры
Добавление полей в структуры
Незавершенные определения структур
Определение массивов
Передача функций в код на С
Пример: быстрая сортировка в командной строке
Дополнительная информация о взаимодействии с
кодом на С
Организация структур в памяти
Глава 20. Представление значений в памяти
Блоки и значения OCaml
Различение целых чисел и указателей во время
выполнения
Блоки и значения
Целые числа, символы и другие простые типы
Кортежи, записи и массивы
Вещественные числа и массивы
Варианты и списки
Полиморфные варианты
Строковые значения
Нестандартные блоки памяти
Управление внешней памятью средствами Bigarray
Глава 21. Сборка мусора
Алгоритм сборки мусора
Сборка мусора с разделением на поколения
Быстрая вспомогательная куча
Выделение памяти во вспомогательной куче
Основная куча долгоживущих блоков
Выделение памяти в основной куче
Стратегии распределения памяти
Маркировка и сканирование кучи
Компактификация кучи
Указатели между поколениями
Подключение функций-финализаторов к значениям
Глава 22. Компиляторы: парсинги контроль типов
Обзор инструментов компилятора
Парсинг исходного кода
Синтаксические ошибки
Автоматическое оформление отступов в исходном
коде
Автоматическое создание документации на основе
интерфейсов
Препроцессинг исходного кода
Использование Camlp4 в интерактивной оболочке
Запуск Camlp4 из командной строки
Препроцессинг сигнатур модулей
Дополнительные источники информации о Camlp4
Статическая проверка типов
Демонстрация типов, выводимых компилятором
Вывод типов
Модули и раздельная компиляция
Упаковка модулей вместе
Сокращение путей к модулям в сообщениях об
ошибках
Типизированное синтаксическое дерево
Использование ocp-index для поддержки
автодополнения
Непосредственное исследование типизированного
синтаксического дерева
Глава 23. Компиляторы: байт-код и машинный код
Нетипизированная lambda-форма
Оптимизация сопоставлений с образцом
Оценка производительности сопоставления с
образцом
Переносимый байт-код
Компиляция и компоновка байт-кода
Выполнение байт-кода
Встраивание байт-кода OCaml в программы на С
Компиляция быстрого машинного кода
Исследование ассемблерного кода
Отладка двоичных выполняемых файлов
Профилирование машинного кода
Встраивание машинного кода в программы на С
Сводка по расширениям имен файлов
Алфавитный указатель


Об авторе


Последние поступления в рубрике "Java"



Java. Задачи по основам программирования. Более 600 задач, около 150 задач с решениями Java. Задачи по основам программирования. Более 600 задач, около 150 задач с решениями Канель Е.

Предлагаемый задачник адресуется тем, кто решил освоить основы программирования на языке Java — как в рамках коллективных занятий (на уроках, факультативах или кружках), так и при самостоятельном индивидуальном обучении. Задачник содержит более 600......

Head First. Паттерны проектирования. Обновленное юбилейное издание Head First. Паттерны проектирования. Обновленное юбилейное издание Фримен Э.

Больше 12 лет прошло с момента выхода первого издания книги, но она продолжает оставаться актуальной. Основные идеи не изменились, но изменился язык Java, например, появились лямбда-выражения. Поэтому авторы приняли решение обновить легендарную книгу......

Java Concurrency на практике Java Concurrency на практике Гетц Б.

Потоки являются фундаментальной частью платформы Java. Многоядерные процессоры — это обыденная реальность, а эффективное использование параллелизма стало необходимым для создания любого высокопроизводительного приложения. Улучшенная виртуальная машина......

Если Вы задавались вопросами "где найти книгу в интернете?", "где купить книгу?" и "в каком книжном интернет-магазине нужная книга стоит дешевле?", то наш сайт именно для Вас. На сайте книжной поисковой системы Книгопоиск Вы можете узнать наличие книги Мадхавапедди А., Мински Я., Хикки Д., Программирование на языке OCaml в интернет-магазинах. Также Вы можете перейти на страницу понравившегося интернет-магазина и купить книгу на сайте магазина. Учтите, что стоимость товара и его наличие в нашей поисковой системе и на сайте интернет-магазина книг может отличаться, в виду задержки обновления информации.