Библиотека оболочки

редактировать

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

  • Чтобы уточнить плохо спроектированный или сложный интерфейс
  • Разрешить совместную работу кода, который в противном случае не может (например, несовместимые форматы данных)
  • Разрешить перекрестный язык и / или время выполнения взаимодействие

Библиотеки оболочки могут быть реализованы с использованием адаптера, фасада и, в меньшей степени, прокси шаблоны проектирования.

Содержание
  • 1 Структура и реализация
    • 1.1 Пример
      • 1.1.1 Интерфейс C
      • 1.1.2 Оболочка C ++
    • 1.2 Оболочки драйверов
  • 2 Межъязыковая совместимость / взаимодействие во время выполнения
  • 3 Существующие библиотеки-оболочки
  • 4 См. Также
Структура и реализация

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

Пример

Ниже приводится общая иллюстрация реализации общей библиотеки-оболочки. В этом примере интерфейс C ++ действует как «оболочка» интерфейса языка C.

C-интерфейс

int pthread_mutex_init (pthread_mutex_t * mutex, pthread_mutexattr_t * attr); int pthread_mutex_destroy (pthread_mutex_t * мьютекс); int pthread_mutex_lock (pthread_mutex_t * мьютекс); int pthread_mutex_unlock (pthread_mutex_t * мьютекс);

оболочка C ++

class Mutex {pthread_mutex_t mutex; общедоступные: Mutex () {pthread_mutex_init (mutex, 0); } ~ Mutex () {pthread_mutex_destroy (mutex); } private: класс друга Lock; void lock () {pthread_mutex_lock (​​mutex); } аннулировать разблокировку () {pthread_mutex_unlock (​​mutex); }}; class Lock {private: Mutex mutex; общедоступные: Блокировка (мьютекс и мьютекс): мьютекс {мьютекс} {mutex.lock (); } ~ Lock () {mutex.unlock (); }};

Исходный интерфейс C может рассматриваться как подверженный ошибкам, особенно в случае, когда пользователи библиотеки забывают разблокировать уже заблокированный мьютекс. Новый интерфейс эффективно использует RAII (получение ресурсов - это инициализация) в новых классах Mutexи Lock, чтобы гарантировать, что Mutexв конечном итоге разблокируются и объекты pthread_mutex_tавтоматически освобождаются.

Приведенный выше код полностью имитирует реализацию boost :: scoped_lockи boost :: mutex, которые являются частью boost :: thread библиотека.

Оболочки драйверов

Межъязыковая совместимость и среда выполнения

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

Для этого в языках вроде Java предусмотрен механизм интерфейс внешней функции, который делает это возможным. Некоторые примеры этих механизмов включают:

Существующие библиотеки-оболочки

Некоторые примеры существующих библиотек-оболочек:

См. Также
Последняя правка сделана 2021-06-21 05:36:30
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте