# Глава 14. Броузер/редактор (ocamlbrowser)

В этой главе описывается OCamlBrowser, броузер исходных текстов и компилированных интрефейсов, написанный на LablTk. Он полезен для программиста.

Функции OCamlBrowser таковы:

- Навигация по модулям Objective Caml (через компилированные интерфейсы).

- Редактирование, проверка типов и просмотр исходного текста.

- Интегрированная оболочка Objective Caml, работающая как дочерний процесс.

## 14.1 Запуск

Броузер запускается командой `ocamlbrowser`:

    ocamlbrowser options

Он распознает следующие параметры командной строки:

-I directory

  Добавляет указанный каталог к списку поиска компилированных файлов. По умолчанию используется только каталог стандратной библиотеки, но он может быть также изменен переменной среды `OCAMLLIB`.

-nolabels

  Игнорировать неопциональные метки в типах. В этом случае метки не могут использоваться в приложениях, и порядок аргументов становится строгим.

-oldui

  Старый многооконный интерфейс. По умолчанию используется более близкий к броузеру классов Smalltalk.

-rectypes

  Разрешает во время проверки типа произвольные рекурсивные типы. По умолчанию поддерживаются только рекурсивные типы с рекурсией по типу объекта.

-w warning-list

  Включает или выключает предупреждения согласно аргументу `warning-list`.

Большинство параметров также изменяется внутри приложения командами `Modules - Path editor` и `Compiler - Preferences`. Они наследуются при запускe интерактивной оболочки.

## 14.2 Просмотр

Это первое окно, выводимое при запуске OCamlBrowser. В нем находится поле поиска и список модулей из пути загрузки. В верхней части окна расположена строка меню:

- `File - Open` и `File - Editor` открывают редактор.

- `File - Shell` запускает дочерний процесс интерпретатора Objective Caml.

- `View - Show all defs` выводит сигнатуру выбраного модуля.

- `View - Search entry` выводит или скрывает поле поиска под меню.

- `Modules - Path editor` изменяет путь загрузки. `Modules - Reset cache` повторно просмартивает путь загрузки и обнуляет кэш модулей. Это полезно, если какой-то интрефейс перекомпилировался, или неизвестно, что в данный момент находится в кэше.

- `Modules - Search symbol` позволяет искать символ либо по имени, либо по типу. `Exact type` ищет тип с точно такой же информацией как образец (переменные совпадают только с переменными) `Included type` позвоялет вводить неполные данные: будут найдены так же типы, принимающие больше аргументов или возвращающие больше данных, а переменные в образце совпадают с чем угодно. В обоих случаях аргументы и порядок кортежа не играют роли1, и аргументы без метки в образце подходят для любой метки.

- Поле `Search` под строкой меню обеспечивает поиск во всех модулях по идентификатору (разрешены шаблоны "?" и "*"). Если выбрать параметр `type`, поиск ведется по включению типа (cp. `Search symbol - Included`).

- Кнопка `Close all` закрывает все окна, созданные кнопкой `Detach`. При двойном щелчке на ней закрывается броузер.

## 14.3 Просмотр модулей

Модуль выбирается в крайнем слева списке либо щелчком на нем, либо нажатием клавиши Enter при выбранном модулей. В любом поле можно быстро получить доступ к любому элементу, набрав первые несколько букв нужного имени. Двойной щелчок или два нажатия на Enter приводит к выводу полной сигнатуры модуля.

Идентификаторы, определенные в модуле, отображаются слева от первого списка. Если щелкнуть на идентификатору, то, в случае субмодуля, его содержание будет отображено в следующем списке, а в противном случае в поле под списками появится его сигнатура.

Сигнатуры также можно выбирать. Двойной щелчок левой кнопкой мыши на идентификаторе внутри сигнатуры дает сигнатруру идентификатора. Щелчок правой кнопой мыши выводит меню, отображающее декларацию типа идентификатора. Ее заговолок, если он доступен для выбора, опять-таки позволяет перейти к сигнатуре.

В нижней части окна в зависимости от контекста находятся различные кнопки:

- `Detach` копирует сигнатуру, выведенную в данный момент, в новое окно.

- `Impl` и `Intf` выводят реализацию и интерфейс текущей сигнатуры, если они есть.

Комбинация `Control-S` позволяет искать строку в сигнатуре.

## 14.4 Редактор

Если вы не привыкли к Emacs, можно редактировать файлы в OCamlBrowser. Если же привыкли, используйте OCamlBrowser как броузер, от случая к случаю внося в тексты небольщие изменения.

Меню `Edit` включает команды для перехода (`C-g`), поиска (`C-s`) и передачи текущей фразы интрепретатору (`M-x`). Что касается последнего, то его можно выбрать в диалоговом окне.

Главные функции находятся в меню `Compiler`.

- `Preferences` открывает диалоговое окно с настройками редакторы и системы проверки типов.

- `Lex` добавляет подсветку по лексическим категориям.

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

  После проверки типов шелчок правой кнопкой мыши выводит меню с типом выбранного выражения и, если это возможно, несколькими ссылками.

- `Clear errors` удаляет сообщения об ошибках и предупреждения системы проверки типов.

- `Signature` выводит сигнатуру текущего файла (после проверки типов).

## 14.5 Интерпретатор

При вызове интерпретатора появляется диалог, позволяющий задать команду для запуска и заголовок интерпретатора (чтобы удобнее было выбирать сеанс в редакторе).

Интерпретор получает текущие пути библиотек.

- `File` включает исходный текст или загружает байткод. Кроме того, в интерпретатор можно импортировать пути броузера.

- `History`. Комбинации `M-p` и `M-n` позволяют вызывать предыдущую и последующую фразы в истории, соотвественно.

- `Signal`. `C-c` прерывает интерпретатор, кроме того, можно остановить его работу.

### Примечания

Примечание 1

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