Spec-Zone.ru › Octave 9

Приложение A Интерфейс внешнего кода

«Вся мудрость человечества не заключена в одном языке»

— Эзра Паунд

Octave — замечательный язык для решения многих задач в науке и инженерном деле. Однако это не единственный язык программирования, и иногда возникает необходимость использовать код, написанный на других языках. Для этого есть веские причины: 1) не изобретать велосипед; хорошим примером могут служить существующие библиотеки функций, которые тщательно протестированы и отлажены, или крупные кодовые базы для моделирования; 2) использовать уникальные возможности другого языка; например, хорошо известные функции регулярных выражений Perl (но не делайте этого, потому что regexp уже есть в Octave).

Как правило, не следует использовать скомпилированные расширения ради производительности. Хотя скомпилированные расширения могут работать быстрее, особенно если они заменяют цикл в коде Octave, почти всегда это не лучший путь. Во-первых, существует множество способов повысить производительность Octave, не выходя за пределы языка. Во-вторых, Octave — язык высокого уровня, упрощающий выполнение распространённых математических задач. Отказ от этого означает, что вместо решения реальной задачи придётся решать задачу программирования. Это означает возвращение к низкоуровневым конструкциям, таким как указатели, управление памятью, математическое переполнение/потеря точности и т. д. Из-за низкоуровневого характера таких конструкций и того, что скомпилированный код выполняется вне Octave, существует вполне реальная вероятность аварийного завершения интерпретатора и потери результатов работы.

Прежде чем продолжить, сначала выясните, действительно ли вам необходимо писать код вне Octave.

  • Можно ли получить ту же функциональность, используя только язык сценариев Octave?

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

  • Достаточно ли хорошо оптимизирован код для Octave?

    Если производительность важна, всегда начинайте с использования встроенных в язык средств для её повышения. Главное из них — векторизация (см. Векторизация и ускорение выполнения кода), которая не только делает код более лаконичным и понятным, но и повышает производительность в 10–100 раз. Если без циклов не обойтись, выделяйте память для переменных вне циклов, присваивая им матрицу нужного размера или используя zeros.

  • Максимально ли эффективно код использует существующие встроенные библиотечные функции?

    Эти функции хорошо оптимизированы, и многие из них не несут накладных расходов, связанных с интерпретацией.

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

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

Тем не менее Octave предлагает универсальный интерфейс для включения фрагментов скомпилированного кода в виде динамически связанных расширений. Такие динамически связанные функции можно вызывать из интерпретатора так же, как обычные функции. Интерфейс двунаправленный, и внешний код может вызывать функции Octave (например, plot), разработка которых иным способом может быть очень сложной.

Интерфейс ориентирован на поддержку языков C++, C и Fortran. Сама Octave написана на C++ и может вызывать внешний код на C++/C через собственный интерфейс oct-файлов. Язык C также поддерживается через интерфейс mex-файлов для совместимости с MATLAB. К коду на Fortran проще всего обращаться через интерфейс oct-файлов.

Поскольку многие другие языки предоставляют API на C или C++, создание связей между Octave и другими языками относительно просто. Это также способ взаимодействия с аппаратными ресурсами, драйверы устройств для которых часто написаны на C.

  • Oct-файлы
  • Mex-файлы
  • Автономные программы
  • Интерфейс Java

© 1996–2026 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v9.4.0/External-Code-Interface.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API