LINUX.ORG.RU

Создание интерфейса между программами на С/С++ и скриптовыми языками при помощи SWIG

 ,


0

0

Сегодня языки сценариев пользуются большой популярностью. В этой статье мы не будем рассуждать о причинах данного явления, так как достоинства интерпретируемых языков вполне очевидны. Вместо этого поговорим об их недостатках, точнее – об устранении этих недостатков. Как известно, скрипты выполняются значительно медленнее откомпилированных программ, что вполне естественно. Можно пытаться писать быстрые интерпретаторы, но вряд ли когда-нибудь удастся получить сравнимую скорость. Кроме того, из языков сценариев сложно получить доступ к оборудованию, для этого необходимы специальные расширения (драйверы). О написании подобных расширений и пойдет речь в нашей статье. Писать их мы будем на С; кроме того, нам понадобится SWIG.

>>> Подробности

★★★

Проверено: svu ()

Отлично! Всегда хотел почитать про SWIG, а тут такое

yoghurt ★★★★★
()

Хорошо и как-то однобоко )

Несколько разбавим для Tcl:

 #!/bin/sh

 rm factorial.* 2>/dev/null
#-------------------------------------------------------------------------
# 1. создаем файл factorial.c
(
 cat <<'EOF'

unsigned long  fact(unsigned long n) {
	if (n <= 1) return 1;
	else return n*fact(n-1);
}

EOF
) > factorial.c
#-------------------------------------------------------------------------
# 2 . создаем файл factorial.h
 (
 cat <<'EOF'
 unsigned long    fact(unsigned long);
EOF
 ) > factorial.h

#-------------------------------------------------------------------------
# 3. создаем интерфейсный файл  factorial.i
(
cat <<'EOF'
%module factorial
%{
       #include "factorial.h"
%}
%include factorial.h
EOF
) > factorial.i
#-------------------------------------------------------------------------
# 4 . собираем все
swig -tcl factorial.i
gcc -c -fpic factorial.c factorial_wrap.c -I/usr/include/tcl8.4
gcc -shared factorial.o factorial_wrap.o -o factorial.so

#-------------------------------------------------------------------------
# 5. тестируем
tclsh <<'EOF'
load ./factorial.so
	puts  "ddd [fact 10 ]"
EOF

elipse ★★★
()

С++ тут только в заголовке, в тексте им и не пахнет.

Хотя было бы интересно как они, например, дадут доступ protected функции или когда при создании класса надо передавать предку ссылку на static const функцию создаваемую на этапе запуска программы, а у нас то интерпретатор.

vadiml ★★★★★
()
Ответ на: комментарий от vadiml

>> Хотя было бы интересно как они, например, дадут доступ protected функции или когда при создании

...необходимы специальные расширения (драйверы). О написании подобных расширений и пойдет речь в нашей статье. Писать их мы будем на С..."

не пишите драйверы на С++. Не давайте доступ к protected функциям (IMHO не представляю ситуацию, где это не только нужно, но и необходимо. при чём именно доступ и извне из скриптового языка). вообще кто-нибудь из разносемейных языков (не таких как scala & java, например) допускает наследование от классов друг друга?

hawai
()
Ответ на: комментарий от hawai

Их бы энергию да в мирные цели.
Не лучше ли помочь разработке C/C++ интерпретатора
на основе LLVM - cling (former CINT), который авоматически
позволяет вставлять скомпилируемые модули в
C/C++ scripts. Компиляция (создание DLL) может производиться на лету.

Valeriy_Onuchin ★★
()
Ответ на: комментарий от Valeriy_Onuchin

Не лучше ли помочь разработке C/C++ интерпретатора

и на какой оно надо? изначально интерпретируемых языков мало?!

erfea ★★★★★
()
Ответ на: комментарий от Valeriy_Onuchin

>C/C++ интерпретатора

ужос-то какой!

Компиляция (создание DLL) может производиться на лету.

ява тоже не тормозит

annulen ★★★★★
()

У меня есть библиотека на си, нужна привязка к питону. Сейчас привязка использует ctypes, но как-то мне не очень нравится этот путь. Что мне необходимо почитать?

anonymous
()

>языки сценариев

для этого необходимы специальные расширения (драйверы)


Интересно кто это пишет.

r ★★★★★
()

хорошая, интересная статья

Genuine ★★★
()

ни разу не пользовался. для связки C++ и Tcl есть C++/Tcl, для связки C и Tcl особой магии, как правило, не надо

jtootf ★★★★★
()

Я не понял, этим придуркам из «рашн ибм», им что - доплачивают за идиотские статьи об очевидном? За частичный перевод англоязычных мануалов?

Или, наоборот, чувакам на жаловании от ИБМ срезают зарплату, если они не напишут хоть одну статью в месяц про то, что и так всякий Гугл находит за 2 секунды?

Или, альтернативно, И-Бэ-Мэ приплачивает ЛОРу за ссылки на такую ламерскую хреноту?

С пионерским приветом. Можете меня обосрать за то, что ЯЩИТАЮ что ИБМ - это второе вселенское зло после мелкософта. Причем, гораздо более старое.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.