Spec-Zone.ru › Octave 6

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

"Сумма человеческой мудрости не содержится ни в одном языке"

— Эзра Паунд

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

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

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

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

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

  • Код полностью оптимизирован для Octave?

    Если производительность является проблемой, вы всегда должны начинать с методов в языке для повышения производительности. Одним из важнейших является векторизация (см. Векторизация и Ускорение выполнения кода), которая не только делает код более лаконичным и понятным, но и улучшает производительность (в 10-100 раз). Если необходимо использовать циклы, убедитесь, что выделение памяти для переменных происходит вне циклов с помощью присваивания матрице нужного размера или нулей.

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

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

  • Написание динамически связанной функции представляет собой полезное вложение вашего времени по сравнению с оставанием в 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–2022 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/v6.4.0/External-Code-Interface.html

Spec-Zone.ru

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