Язык Scheme традиционно имеет достаточно хорошую поддержку Emacs. Эта поддержка реализуется набором пакетов, которые могут работать как с произвольными реализациями этого языка (scheme-mode, cmuscheme, quack), так и поддерживать только конкретные реализации (xscheme, gds, bee-mode, gambit). Как правило, поддержка конкретных реализация имеет несколько больше возможностей по сравнению с пакетами, ориентированными на поддержку всех реализаций.
Данная статья старается охватить все вопросы поддержки программирования на Scheme, и повествование сначала ведется про общие для всех реализаций вещи, а уж затем рассматриваются пакеты, реализующие поддержку конкретных версий языка.
Scheme-mode поставляемый в поставке дистрибутивов Emacs является модификацией lisp-mode для работы с исходным кодом на языке Scheme. Данный пакет реализует следующую функциональность:
На базе scheme-mode создано несколько других пакетов — cmuscheme, xscheme и другие, которые расширяют его функциональность добавлением функций для выполнения кода прямо из буфера Emacs, и т.п. вещей.
Поскольку scheme-mode основан на коде lisp-mode, то он имеет те же команды редактирования текста, что и оригинальный пакет, поэтому смотрите их описание в соответствующем разделе этой статьи.
Данный режим включается автоматически для файлов, использующих стандартные расширения для
файлов с исходными текстами на Scheme —
.scm
, .ss
и т.п. Чтобы включить данный режим для
других файлов, добавьте в свой файл инициализации следующий код (заменив .scm
на нужное
расширение):
(add-to-list 'auto-mode-alist '("\\.scm$" . scheme-mode))
Если вы хотите изменить поведение пакета, то вы можете задать параметры в функции, которая
будучи добавлена к переменной scheme-mode-hook
, будет вызвана при включении режима в
конкретном буфере. Кроме того, некоторые параметры можно установить через стандартные
средства настройки. Соответствующая группа настройки называется scheme
.
Пакет cmuscheme был написан Olin Shivers много лет назад, но до сих пор является одним из основных пакетов, обеспечивающих работу со Scheme. Данный пакет реализует интерактивную работу с интерпретаторами языка Scheme. Взаимодействие с интерпретатором реализуется за счет использовании возможностей пакета comint, входящего в поставку Emacs.
Настройка пакета достаточно проста — поместите в свой файл инициализации следующий код
(autoload 'run-scheme "cmuscheme" "Run an inferior Scheme" t) (setq scheme-program-name "mzscheme")
и пакет будет автоматически загружен при первом запуске функции run-scheme
. Вторая строка
в этом примере используется для указания имени интерпретатора Scheme, которое вы можете
заменить на свой любимый диалект. Все настройки данного пакета также доступны для
интерактивной настройки через группу настройки cmuscheme
.
В буфере интерпретатора, создаваемом пакетом, используется специальный режим —
inferior-scheme-mode
, который можно настроить используя хук inferior-scheme-mode-hook
.
Кроме того, если существует файл ~/.emacs_SCHEMENAME
или ~/.emacs.d/init_SCHEMENAME.scm
(где SCHEMENAME
— название интерпретатора), то они будут выполнены сразу после загрузки
интерпретатора.
Основной функцией пакета является функция run-scheme
, которая запускает выбранный
интерпретатор языка Scheme и позволяет производить интерактивное выполнение кода не
покидая Emacs.
При этом вы можете управлять тем, какая часть кода (выделенный блок, определение функции
или отдельное выражение) будет выполнена путем использования разных функций, определенных
пакетом — функция scheme-send-definition
(сочетания клавиш C-c C-e
или C-M-x
) передает
для выполнения интерпретатору текущее определение; функция scheme-send-region
(C-c C-r
)
позволяет выполнить выделенный кусок исходного кода; функция scheme-send-last-sexp
(C-x
C-e
) используется для вычисления выражения, которое находится перед курсором; а функция
scheme-load-file
(C-c C-l
) позволяет загрузить в интерпретатор файл целиком (она позволяет
выполнить код из любого файла, указанного пользователем, а не только из текущего буфера).
Интерпретатор Scheme выполняется в отдельном буфере с именем *scheme*
1, куда также
выводятся и результаты вычисления выражений и функций. Для быстрого переключения в этот
буфер из буфера с исходным текстом, существует отдельная функция switch-to-scheme
(C-c
C-z
). Кроме того, поскольку часто требуется выполнить код и просмотреть результаты, то в
пакете также определены две функции, которые отправляют интерпретатору код для выполнения,
и переключаются в буфер *scheme*
—
scheme-send-definition-and-go
(C-c M-e)
для вычисления
текущего определения и scheme-send-region-and-go
(C-c M-r
) для вычисления выделенного
исходного кода.
Для работы с макросами пакет предоставляет функцию scheme-expand-current-form
(C-c C-x
),
которая позволяет раскрыть определение текущего макроса в соответствующий код на Scheme.
Раскрытие кода производится интерпретатором и выводится в буфер *scheme*
. А при работе с
реализациями Scheme, которые поддерживают компиляцию исходного кода, пользователь может
воспользоваться функциями scheme-compile-file
(C-c C-k
) и scheme-compile-definition
(C-c
M-c
), которые соответственно выполняют компиляцию файла или текущего определения.
Как отмечалось выше, в буфере интерпретатора действует специальный режим —
inferior-scheme-mode
в котором работают все команды режима comint, а также следующие
команды cmuscheme —
scheme-compile-file
(C-c C-k
), scheme-load-file
(C-c C-l
),
scheme-send-last-sexp
(C-x C-e
) и scheme-send-definition
(C-M-x
).
Пакет Quack является расширением для пакета cmuscheme и реализует следующие дополнительные возможности (многие из них в первую очередь относятся к работе с PLT Scheme):
run-scheme
, которая знает имена команд популярных
интерпретаторов Scheme, а также запоминает последний запущенный вариант интерпретатора;switch-to-scheme
;.plt
коллекций и команды для открытия буфера Dired
для нужной коллекции.Пакет написан Neil Van Dyke, и доступен для загрузки с сайта автора. Пакет устанавливается путем копирования в каталог, где Emacs сможет найти его, и загружается командой:
(require 'quack)
Все настройки пакета могут быть заданы используя группу настройки quack
, или используя
меню Quack
. Эти настройки включают в себя адреса руководств и SRFI, определение
префиксного сочетания клавиш, используемого пакетом и т.п.
Пользователям PLT Scheme рекомендуется скачать руководства по данному интерпретатору с
сайта проекта и установить их в коллекцию doc. Нахождение коллекций PLT Scheme
определяется либо переменной quack-pltcollect-dirs
, в которой можно перечислить все
каталоги с рабочими коллекциями, либо переменными среды PLTHOME
и/или PLTCOLLECTS
.
Также для работы пакета требуется наличие программы wget
, которая будет использоваться для
доступа к SRFI.
После загрузки пакета, в дополнение к функциям cmuscheme и scheme-mode становятся
доступными функции, определенные пакетом. Пользователь может выполнять эти функции либо
используя стандартные механизмы (сочетания клавиш и/или запуск по имени функции), либо
используя меню Quack
.
Просмотр документации осуществляется с помощью нескольких функций. Функция
quack-view-manual
(C-c C-q m
) используется для просмотра документации в веб-браузере. Эта
команда позволяет просматривать как базовую документацию по языку Scheme, так и
документацию по конкретным реализациям. Для просмотра SRFI определена отдельная команда
—
quack-view-srfi
(C-c C-q s
), которая запрашивает номер нужного документа и открывает
его в браузере. А для пользователей PLT Scheme еще доступна и команда
quack-view-keyword-docs
(C-c C-q k
), которая показывает документацию для заданного
ключевого слова (работа этой команды зависит от правильной установки документации PLT
Scheme).
Как уже отмечалось выше, пакетом реализована функция run-scheme
(C-c C-q r
), которая
позволяет запускать интерпретаторы языка Scheme, выбирая их из списка известных (включая
запуск с нужными опциями), а также запоминает последний выбор пользователя.
Для пользователей PLT Scheme также определены удобные функции для работы с коллекциями.
Функция quack-find-file
(C-c C-q f
) открывает файл, используя данные из текущего контекста
для получения имени файла. Например, если вы используете эту функцию в то время как
курсор находится на коде (require (lib "list.ss"))
, то вам будет предложено открыть файл
list.ss
из коллекции mzlib. Кроме того, определена функция quack-dired-pltcollect
,
которая позволяет открыть буфер Dired для нужной коллекции PLT Scheme (при задании имени
пользователь может использовать автодополнение имени коллекции).
Данный пакет также реализует несколько функций, которые изменяют форматирование кода,
делая его более удобным для использования. Функция quack-tidy-buffer
(C-c C-q t
) заново
расставляет отступы в коде, заменяет знаки табуляции на пробелы, удаляет лишние пустые
строки, удаляет заключительные пробельные символы в строках, а также добавляет знак
перевода строки в конце файла, если его нет. Функция quack-toggle-lambda
(C-c C-q l
)
изменяет объявление текущей функции с (define (func args) ...)
на (define func (lambda (args)
..))
, что позволяет показывать знак лямбда в коде (при включенной опции отображения
данного символа). Например, вот так:
GCA — пакет предназначенный для эффективной работы с исходным кодом Scheme. Он разрабатывался для поддержки Gauche Scheme, но может использоваться и с другими диалектами. Как и quack, он расширяет функции пакета cmuscheme.
Данный пакет имеет следующие возможности:
Скачать пакет можно с сайта автора, но к сожалению для него практически нет документации, а имеющаяся написана на японском. На английском есть очень краткое описание в виде примера конфигурации и ссылок на архив с пакетом и видео, содержащего пример работы с gca
Пакет gds является расширением пакета cmuscheme и реализует следующие дополнительные возможности:
help
& apropos
;Пакет разрабатывался для работы с Guile Scheme, и сильно зависит от специфических для Guile возможностей. Подробную информацию об этом пакете можно найти в руководстве Guile.
Данный пакет имеет некоторые архитектурные отличия от других пакетов — вместо взаимодействия с интерпретаторами используя стандартный ввод и вывод, данный пакет использует простой сетевой протокол для передачи данных. Данный подход позволяет выполнять большее количество задач, но сильно зависит от реализации интерпретатора и требует отдельного процесса Scheme (сервера gds), который будет использоваться взаимодействия с другими процессами.
Пакет gds поставляется вместе с последними версиями Guile, так что вам необходимо лишь добавить файлы с исходными текстами Emacs Lisp в пути поиска Emacs, и вписать в файл инициализации следующую строчку:
(require 'gds)
Данная команда приводит к загрузке пакета и запуска отдельного процесса, который будет
отвечать за взаимодействие с интерпретаторами Scheme. Стоит отметить, что для работы
пакета необходимо наличие отдельного пакета на Scheme в путях поиска Guile. Если пакет
находится в нестандартном месте, то вы можете указать его расположение с помощью
переменной gds-scheme-directory
, иначе, при отсутствии этого пакета, загрузка пакета не
будет произведена полностью.
Остальные настройки могут быть заданы используя группу настройки gds
.
Пакет gds для вычисления кода использует те же сочетания клавиш, что и cmuscheme.
Исключением является функция gds-eval-expression
(C-c C-e
), которая вычисляет выражение
введенное в мини-буфере.
Одним из приятных добавлений, реализованных gds является дополнение имен функций и переменных, а также получение справки о конкретных символах и/или поиск символа по имени.
Дополнение имен производится функцией gds-complete-symbol
(сочетание клавиш M-TAB
),
которая старается найти все известные символы, чьи имена соответствуют тем буквам, которые
находятся перед курсором. Если найдено одно имя, то оно вставляется сразу, но если есть
несколько вариантов, то будет показано новое окно, в котором пользователь может выбрать
нужное имя.
Получение справки на конкретный символ производится с помощью функции gds-help-symbol
(C-h
g
), которая выдает те же результаты, что и запуск команды (help SYMBOL)
в интерактивной
среде Guile. Имя символа запрашивается у пользователя через мини-буфер, но в качестве
значения по умолчанию используется имя, на котором находится курсор. Если вы не помните
точное имя символа, то вы можете воспользоваться функцией gds-apropos
(C-h G
), которая
аналогична выполнению (apropos REGEXP)
в Guile, и которая выводит список символов, чьи
имена соответствуют введенному регулярному выражению.
Разработчик программ может явно управлять запуском gds из отлаживаемой программы. Для этого, он должен добавить некоторый код в свою программу, который приведет к передаче данных серверу gds. Более подробно об этом вы можете прочитать в руководстве Guile.
Для использования возможностей gds в процессе интерактивной работы, пользователь все равно должен явно указать модули, которые будут обеспечивать работу с gds. Например, использование следующего кода загружает все необходимые для работы модули:
(use-modules (ice-9 gds-client debugging traps)) (named-module-use! '(guile-user) '(ice-9 session)) (gds-accept-input #f)
После этого, вы можете работать с gds. Для установки точки остановки в процедуре
proc_name
, используется следующий, вычисляемый в буфере с исходным кодом:
(install-trap (make <procedure-trap> #:behaviour gds-debug-trap #:procedure proc_name))
и после вызова указанной процедуры, в получите в буфере gds примерно следующее:
Calling procedure: => s [proc_name] s [primitive-eval (proc_name)] --:** PID XXXXX (Guile-Debug)--All--------
в этом буфере вы можете перемещаться по стеку, просматривать его состояние, продолжать выполнение программы, и/или пошаговое выполнение. Работа в буфере стека обеспечивается за счет использования некоторого количества команд, привязанных к отдельным клавишам.
Для перемещения по стеку вызовов функций могут использоваться следующие клавиши: u
, C-p
и
стрелка вверх используются для перемещения вверх по стеку вызовов и выбора этого фрейма
(функция gds-up
), d
, C-n
и стрелка вниз — для перемещения вниз (gds-down
), а клавиша RET
используется для выбора фрейма на котором находится курсор.
Выбор фрейма стека приводит к показу соответствующей части исходного кода. Кроме того, некоторые функции также будут использовать окружение, относящиеся к выбранному фрейму, при своем выполнении.
К дополнительным функциям, работающим в буфере стека относятся следующие:
gds-evaluate
(клавиша e
)gds-frame-info
(i
)gds-frame-args
(A
)gds-proc-source
(S
)<procedure #f (...)>
, что
не делает понятным, что будет выполнено дальше.Для продолжения выполнения прерванной программы, gds реализует следующие функции:
gds-go
(g
, c
или q
)gds-step-file
(SPC
)gds-step-into
(i
)gds-step-over
(o
)Пользуясь всеми этими функциями разработчик может получать детальную информацию о состоянии программы, и получает возможность нахождения и исправления ошибок.
scheme48 — еще один пакет основанный на cmuscheme, но реализующий расширенную поддержку реализации Scheme48. Данный пакет добавляет поддержку font-lock для ключевых слов и операторов, специфических для Scheme48, а также дополнительные привязки клавиш для команд вычисления выражений.
Скачать пакет можно с EmacsWiKi, и устанавливается он как и другие пакеты — копированием его в каталог, где его может найти Emacs, и прописыванием команды загрузки в файл инициализации.
Пакет xscheme во многом похож на cmuscheme — он позволяет производить вычисление кода не покидая буфер. Кроме этого, он позволяет просматривать содержимое стека вызовов функций в том случае если произошла ошибка.
Данный пакет работает только с MIT Scheme, поскольку используются некоторые возможности, присущие только этому пакету. Пакет идет в поставке Emacs и для того, чтобы воспользоваться его возможностями необходимо его загрузить с помощью команды:
(require 'xscheme)
После загрузки пакета, пользователь может запустить интерпретатор с помощью команды
start-scheme
и использовать его функции для передачи исходного кода интерпретатору. Для
передачи выражения перед курсором могут использоваться либо функция
advertised-xscheme-send-previous-expression
(C-x C-e
), либо функция
xscheme-send-previous-expression
(M-RET
). А функции xscheme-send-definition
(C-M-x
или
M-z
), xscheme-send-region
(C-M-z
) и xscheme-send-buffer
(M-o
) передают интерпретатору
соответственно текущее определение, выделенный регион кода или весь буфер. Для перехода в
буфер интерпретатора может использоваться функция xscheme-select-process-buffer
(C-c C-s
).
Для диалекта Gambit Scheme также имеется отдельный пакет, основанный на cmuscheme, и реализующий несколько операций, поддерживаемых только Gambit — отладка, компиляция и т.п. Пакет называется gambit, и поставляется вместе с дистрибутивом Gambit Scheme. Дополнительную информацию о Gambit Scheme, и пакете gambit вы можете найти в документации.
Процедура установки этого пакета стандартна — поместите gambit.el
в место, где его найдет
Emacs, и добавьте следующие строки в файл инициализации:
(autoload 'gambit-inferior-mode "gambit" "Hook Gambit mode into cmuscheme.") (autoload 'gambit-mode "gambit" "Hook Gambit mode into scheme.") (add-hook 'inferior-scheme-mode-hook (function gambit-inferior-mode)) (add-hook 'scheme-mode-hook (function gambit-mode)) (setq scheme-program-name "gsi -:d-")
Интерпретатор Gambit запускается с помощью функции run-scheme
, реализованной в cmuscheme,
но gambit добавляет к ней процедуры фильтрации вывода, что позволяет пакету получать
информацию о местоположении в исходном файле. После запуска интерпретатора, пользователь
получает возможность использовать стандартные сочетания клавиш cmuscheme для выполнения и
компиляции кода —
C-x C-e
, C-c C-l
, C-c C-k
и т.д.
В дополнение к функциям cmuscheme, пакет gambit предлагает несколько функций, предназначенных для отладки исходного кода:
gambit-continue
(F8
или C-c c
),c
интерпретатора;gambit-crawl-backtrace-newer
(F9
или C-c ]
),-
интерпретатора;gambit-crawl-backtrace-older
(F10
или C-c [
),+
интерпретатора;gambit-step-continuation
(F11
или C-c s
),s
интерпретатора;gambit-leap-continuation
(F12
или C-c l
),l
интерпретатора;gambit-kill-last-popup
(C-c _
)Существуют и более короткие сочетания клавиш для этих команд: M-c
, M-[
, M-]
,
M-s
, M-l
и M-_
, но они по умолчанию не активированы, поскольку они не совсем соответствуют
соглашениям, принятым для сочетаний клавиш в Emacs. Чтобы разрешить их использование, вам
необходимо выполнить следующую команду (или поместить ее в файл инициализации):
(setq gambit-repl-command-prefix "\e")
bmacs — это реализация интегрированной программной среды для работы с Bigloo Scheme. Данный пакет реализует следующие возможности:
Для работы этого пакета требуется наличие некоторого количества дополнительных утилит, большинство из которых поставляется вместе с Bigloo. Документацию можно найти на сайте проекта, либо в составе дистрибутива.
Данный пакет поставляется в составе Bigloo Scheme и находится в подкаталоге bmacs
дистрибутива. Для установки пакета надо перейти в этот каталог и там выполнить команду:
make
make install EMACSDIR=<your site lisp>
которая установит необходимые файлы в то место, которое вы указали. После этого, вы можете добавить следующие строки в ваш файл инициализации для автоматической загрузки пакета при открытии файлов с исходными текстами2:
(autoload 'bdb "bdb" "bdb mode" t) (autoload 'bee-mode "bee-mode" "bee mode" t) (setq auto-mode-alist (append '(("\\.scm$" . bee-mode) ("\\.sch$" . bee-mode) ("\\.scme$" . bee-mode) ("\\.bgl$" . bee-mode) ("\\.bee$" . bee-mode)) auto-mode-alist))
Настройки пакета могут быть установлены используя группу настройки bee
, которая
обеспечивает задание настроек для bee-mode, и групп dbg & bug, используемых для задания
настроек отладчика.
После загрузки bee-mode пользователь может выполнять основные команды используя
соответствующие иконки тулбара, или выбирая нужные пункты из меню Bee
, которое появляется
при запуске режима.
Для расстановки отступов в соответствии с принятыми для Bigloo соглашениями, пакет
bee-mode определяет несколько функций: bee-indent-sexp
(C-M-q
) расставляет отступы для
текущего выражения, bee-indent-define
(C-c TAB C-d
) делает это для текущего определения
функции, bee-indent-last-sexp
(C-c TAB C-l
) расставляет отступы для выражения перед
курсором и т.д.
Очень важный набор функций, используемых при работе с исходным кодом, это функции поиска
определений функций и переменных. Чтобы найти определение переменной, вы можете
воспользоваться функцией bee-tags-find
(C-x 5 .
) или bee-tags-find-variable
(C-c C-d f
).
А для поиска определения модуля существует функция bee-find-module
(C-c C-d m
). Кроме
того, bee-mode переопределяет два сочетания клавиш —
M-.
& M-,
, которые привязываются к
функциям bee-tag-find
и bee-tags-find-next
, что позволяет находить определения функций и
классов.
Для упрощения работы с модулями, bee-mode определяет набор функций, которые управляют
списком модулей импортируемых текущим исходным кодом — функция bee-import-binding
(C-c
RET i
), а также списком функций и переменных, экспортируемых из текущего модуля —
bee-export-function
(C-c RET f
) и bee-export-variable
(C-c RET v
). Кроме того, существует
отдельная функция, которая позволяет импортировать символы из файлов на языке C —
bee-import-c-file
(C-c RET c
), а также она обновляет Makefile
, добавляя зависимость для
компиляции соответствующего кода.
Пакет также обеспечивает некоторую поддержку так называемого грамотного программирования
(literate programming). Реализуемая поддержка не является полной, но по крайней мере
позволяет вставлять в код ссылки на описания модулей и функций. Это достигается за счет
использования ключевых слов @path
, @node
& @deffn
в комментариях для модуля и описаний
функций. Ключевые слова @path
& @node
определяют файл и раздел документации, описывающих
данный модуль и указываются в комментарии для объявления модуля. А ключевое слово @deffn
указывается в комментарии для функции. Используя эти ключевые слова, разработчик получает
возможность быстрого перехода к соответствующим разделам и описаниям функций, что
позволяет улучшить документирование кода.
Также как и другие пакеты, bee-mode позволяет выполнять код Scheme непосредственно из
буфера Emacs. Для запуска интерпретатора необходимо выполнить функцию
ude-repl-other-frame
(C-c C-r C-r
), выбрать соответствующую иконку тулбара (Repl), или
соответствующий пункт меню.
И после загрузки интерпретатора, пользователь может выполнять код используя следующие функции:
ude-repl-send-buffer
(C-c C-r b
) передает для вычисления весь буфер;ude-repl-send-region
(C-c C-r r
), передает интерпретатору выделенный блок кода;bee-repl-send-define
(C-c C-r d
) используется для выполнения текущего определения
(define
);bee-repl-send-last-sexp
(C-c C-r l
) вычисляет значение выражения перед курсором;bee-repl-send-toplevel-sexp
(C-c C-r t
) используется для вычисления всего текущего
выражения.Очень часто при использовании макросов необходима возможность их раскрытия. Также как и для работы с обычным кодом, bee-mode реализует набор функций для раскрытия макросов в вашем коде (при этом, весь буфер будет просканирован на предмет наличия определений макросов):
bee-expand-buffer
(C-c C-e C-e
) приводит к раскрытию макросов в текущем буфере;bee-expand-region
(C-c C-e C-r
) раскрывает макросы в выделенном коде;bee-expand-define
(C-c C-e C-d
) раскрывает макросы в текущем определении (define
)bee-expand-last-sexp
(C-c C-e C-l
) производит раскрытие макросов в выражении перед
курсором;bee-expand-toplevel-sexp
(C-c C-e C-t
) раскрывает макросы в текущем выражении.Для компиляции программ необходимо наличие файла Makefile
, который описывает зависимости
между модулями и указывает флаги компиляции. Для проекта необходимо наличие так
называемого корневого каталога —
bee-mode пытается определить корневой каталог проекта
путем поиска одного из файлов Makefile
, .afile
или .etags
, или корневой каталог может быть
установлен с помощью функции ude-user-set-root-directory
(C-c C-p C-r
) или соответствующей
кнопки тулбара.
После того, как корневой каталог задан, Makefile
может быть сгенерирован с помощью функции
ude-generate-makefile
(C-c C-c a
или C-c C-c C-l
), которая запросит у пользователя имя
исполняемого модуля, в который будет скомпилирован данный исходный код. В том случае,
если Makefile
уже существует, то эти же сочетания клавиш обновляют его, а также
перестраивают файлы .afile
и .etags
. Кроме того, имеется набор функций для
редактирования Makefile
—
ude-edit-makefile
(C-c C-c e
), обновления Makefile
—
ude-update-makefile
(C-c C-c u
), переключения между отладочной и окончательной версиями
программы —
ude-makefile-debug-mode
(C-c C-c C-d
) & ude-makefile-final-mode
(C-c C-c C-f
)
и другие.
Когда Makefile
существует, то появляется возможность компиляции кода с помощью функции
ude-mode-compile-from-menu
(C-c C-c C-c
)3. Прервать компиляцию можно с помощью функции
kill-compilation
(C-c C-c k
).
И после того, как компиляция закончится, можно выполнить исполняемый модуль с помощью
функции ude-execute
(C-c C-c C-r
).
Вместе с пакетом Bigloo поставляется и отладчик, который позволяет производить отладку на
уровне исходного кода. bee-mode поддерживает взаимодействие с этим отладчиком в Emacs.
Для запуска отладчика надо выполнить функцию bee-debug
(C-c C-b C-b
) или выбрать
соответствующую иконку тулбара, или пункт меню. Но запуск отладчика не приводит к
автоматическому подключению к нему, поэтому необходимо явно выполнить функцию
bee-toggle-connect-buffer
(C-c C-b c
) чтобы связать текущий буфер с отладчиком, что
позволит устанавливать точки останова и выполнять прочие задачи находясь в буфере с
исходным текстом.
Профилирование программ поддерживается автоматически, если вы пользуетесь генерацией
Makefile
. Чтобы провести профилирование кода, необходимо его сначала скомпилировать с
поддержкой профилирования, что выполняется функцией bee-profiler-start
(C-c C-p c
). А
после компиляции, вы можете выполнить функцию bee-profiler-inspect
(C-c C-p i
), что
приведет к запуску программы, и затем к запуску утилиты bglprof
, которая соберет данные о
выполнении, и вы получите их в удобном для анализа виде.
Пакет предоставляет возможности по получению справочной информации. Это может быть
сделано путем запуска функции bee-doc-visit
(C-c C-d i
) или нажатия на иконку Info
в
тулбаре. Эта функция ведет себя по разному в зависимости от текущего положения курсора —
если курсор находится на идентификаторе, то выдается документация для данного
идентификатора, если выделен регион кода, то будет выдана документация для данного
региона. В противном случае, у пользователя будет запрошено имя интересующего раздела
документации, и показан выбранный раздел.
Информация, показываемая пользователю берется из файлов в формате Info, которые поставляются вместе с Bigloo. Кроме того, документация ищется в каталогах текущего проекта, и они добавляются автоматически. Кроме того, пользователь может указать дополнительные файлы документации, в которых будет производиться поиск.
Пакет bmacs также представляет некоторое количество функций для работы с системами контроля версий, которые позволяют оперировать данными на уровне проектов. Но в связи с появлением новых систем контроля версий, и соответствующих интерфейсов для них, эти функции становятся не особо востребованными.
Кроме того, существует множество дополнительных функций, реализованных данным пакетом, например, поддержка работы с кодом, написанным на языке C, и т.п., но описание этих возможностей лежит за границами данной статьи.
Замечательный пакет SLIME, созданный для работы с кодом на языке Lisp, также имеет рудиментальную поддержку работы с языком Scheme. В настоящий момент поддерживаются лишь два диалекта Scheme — Kawa & MIT Scheme. Для остальных диалектов поддержка может быть добавлена реализацией протокола, используемого SLIME для общения с конкретной реализацией языка4.
Для использования SLIME со Scheme, вам необходимо выполнить базовую настройку пакета, как это описано в разделе посвященном этому пакету, а затем загрузить необходимые компоненты5. В общем виде это делается следующим образом:
(add-hook 'slime-load-hook (lambda () (require 'slime-scheme)))
Эта команда установит хуки необходимые для работы со SLIME, но для каждого из
поддерживамых диалектов вам может понадобиться выполнить дополнительную настройку в
соответствии с инструкциями, изложенными в соответствующем файле —
swank-kawa.scm
или
swank-mit-scheme.scm
.
А все остальное, касающееся работы со SLIME, описано в соответствующем разделе.
1. По умолчанию разрешается иметь только один запущенный процесс Scheme. Но вы можете воспользоваться пакетом scheme-here.el, если вам необходимо выполнение нескольких процессов одновременно.
2. Кроме того, в поставке bmacs также имеются пакеты cee, предназначенный для редактирования кода на языке C, используемого для написания расширений Bigloo, <em>bug-mode, обеспечивающий поддержку отладчика Bigloo, и ude (Unix Development Environment), реализующий поддержку компиляции, и различных утилит, используемых в работе с Bigloo.
3. Стоит отметить, что если Makefile
не существует, то эта функция приводит к запуску
компиляции исполняемого модуля из одного файла.
4. Так называемый swank-модуль.
5. Все компоненты, относящиеся к Scheme, находятся в подкаталоге contrib
дистрибутива
<em>SLIME, так что не забудьте добавить его в пути поиска.
Last change: 05.03.2013 16:54