2012-01-09 7 views
13

Недавно я задал этот вопрос https://softwareengineering.stackexchange.com/questions/129076/go-instead-of-c-c-with-cgo и получил очень интересный ввод. Однако в моем вопросе есть ошибка: я предположил, что cgo также может использоваться для доступа к C++-коду, но это невозможно. Вместо этого вам нужно использовать SWIG.заменить C++ go + swig

ходу чаво говорит: «Программа ОЦП обеспечивает механизм для„внешней функции интерфейса

моего вопрос“, чтобы обеспечить безопасное призвание библиотек C от Go кода SWIG расширяет эту возможность для библиотек C++..»: Возможно ли получить доступ к высокоуровневым фреймворкам C++, таким как QT, с помощью SWIG + Go и получить производительность? Я хотел бы использовать Go как «язык сценариев» для использования библиотек C++.

Есть ли у вас опыт работы с go и swig? Есть ли подводные камни, о которых я должен знать?

Update/Ответ: Я спросил это через IRC тоже, и я думаю, что вопрос решается:

SWIG довольно чистый способ взаимодействия C++ кода из других языков. К сожалению, сопоставление типов C++ с чем-то вроде go может быть очень сложным, и в большинстве случаев вы должны сами указывать отображение. Это означает, что SWIG - это хороший способ использовать существующую кодовую базу для повторного использования уже написанных алгоритмов. Однако сопоставление библиотеки, такой как Qt, приведет вас к возрасту. Разумеется, это возможно, но вы не хотите этого делать.

Те из вас, кто пришел сюда для программирования gui с помощью go, могут попробовать попробовать go-gtk или версию wxWidgets.

+2

Это относится к stackoverflow. Проголосовал за закрытие/перемещение. –

+2

Это смешно: сначала я попросил http://programmers.stackexchange.com/questions/129076/go-instead-of-c-c-with-cgo в stackoverflow и был перенесен в programers.stackexchange. Теперь обновленный вопрос переместится от программистов назад. – lhk

+4

Я думаю, что абсурдно, что кто-то хотел перенести этот вопрос на программистов. Кажется, мне нравится именно такой вопрос, для которого предназначен Stackoverflow. Я ошибаюсь? –

ответ

5

Возможно ли это? Да.

Можно ли сделать это за достаточно короткий промежуток времени? №

Если вы вернетесь и посмотрите на другие проекты, которые сделали большие рамки и попытались наложить на них слой абстракции, вы найдете большинство из них «неполными». Вероятно, вы можете начать довольно неплохо и получить начальные обертки на месте, но, как правило, даже работа по решению простых случаев требует времени, когда есть много базового кода для переноса, даже с помощью автоматизированных инструментов (которые помогают, но никогда не является полным решением). И затем ... вы доберетесь до неприятных оставшихся 10%, которые заставят вас навсегда (ну, по крайней мере, действительно очень долгое время). А потом подумайте о том, как это меняющаяся цель в первую очередь. Например, Qt собирается выпустить следующий крупный переписать.

Как правило, безопаснее всего придерживаться языка фреймворка, для которого был разработан каркас. Хотя многие из них имеют языковые расширения внутри самого проекта. Например, для Qt вы должны проверить QML, который обеспечивает (среди многих других) привязку javascript к Qt. Вроде. Но это может удовлетворить ваши требования к сценарию.

+1

+1 и принят как ответ. Первые два предложения, вероятно, будут хорошим ответом на половину вопросов о stackoverflow;) – lhk

+0

Ha! (кстати, вы не приняли его как ответ на самом деле ...) –

2

Соответствующее обновление по этой проблеме: теперь можно взаимодействовать с C++ с помощью cgo с this CL, который объединяется для Go 1.2. Тем не менее, он ограничен C-подобными вызовами функций, а классы, методы и свойства C++ не поддерживаются (надеюсь, надеюсь).

+0

интересно, спасибо за информацию – lhk

Смежные вопросы