Могут ли плагины VPP быть реализованы с помощью Go?

#go #plugins #vector-processing

#Вперед #Плагины #векторная обработка

Вопрос:

VPP предоставляет I / S для разработки пользовательских плагинов, которые могут быть подключены к графу узлов. Я видел только примеры таких плагинов, написанных на языке C, и мне было интересно, можно ли использовать другой язык, например Go, для написания таких плагинов.

Ответ №1:

Я понятия не имею, что такое «VPP», но, тем не менее, ответ: «возможно»; вот почему:

  • Go code способен взаимодействовать с библиотеками C с помощью своего средства, известного как cgo .

    cgo это многогранная вещь: она позволяет вам «экспортировать» определенные функции Go определенным образом, чтобы их можно было вызывать со стороны C, и это позволяет вам вызывать функции со стороны C. Это также позволяет вам писать фрагменты встроенного C-кода, чтобы обеспечить связующее звено для стороны C, когда это необходимо.

  • С некоторых пор набор инструментов для создания Go (по крайней мере, его «эталонная» реализация) обеспечивает компиляцию кода Go в статическую или динамическую библиотеку с C-совместимым API.

    Смотрите это.

Имея это в виду, теоретически, должно быть возможно делать то, что вам нужно. Обратите внимание на некоторые возможные препятствия:

  • В большинстве случаев, если «платформа» позволяет вам написать «плагин» на C, это предполагает, что ваш плагин будет широко использовать собственный API платформы.

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

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

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

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