2009-06-01 20 views

risposta

13

Non sono particolarmente appassionato di SWIG e preferisco scrivere da solo il codice di interfaccia. Perl viene fornito con una sorta di pseudo linguaggio chiamato 'XS' per l'interfacciamento con C o C++. Sfortunatamente, per poterlo usare, è necessario conoscere almeno C, Perl, e poi imparare qualcosa anche sull'API dell'interprete. Se conosci già bene Perl e C, non è il tale un grande passo. Date un'occhiata ai seguenti documenti fondamentali su XS:

  1. perlxstut (XS tutorial)
  2. perlxs (riferimento XS)
  3. perlapi (API Interpreter)

Inoltre, c'è un sacco di tutorial e how-to su internet.

Ora, l'interfacciamento a C++ tramite XS richiede alcuni passaggi aggiuntivi. All'inizio può essere un po 'frustrante allenarsi, ma dopo averlo capito, si adatta perfettamente. A questo proposito, la documentazione di base è scarna al meglio. Ma non tutto è perduto. Mattia Barbon, il creatore dei binding wxWidgets per Perl, ha scritto un ottimo strumento "XS ++" che rende questo quasi quasi semplice (o semplice come XS). È incluso in Wx, ma stiamo lavorando per suddividerlo nella sua distribuzione. Questo è un lavoro in corso. Puoi trovare Mattia's XS++ code e un modified version of mine su github.

A meno di un rilascio di una XS standalone ++ per CPAN, vorrei suggerire di imparare a scrivere XS per C++ da altre risorse:

  • Molto molto tempo fa, John Keiser ha scritto un eccellente tutorial on XS and C++. Include inoltre ulteriori indicazioni su strumenti e documentazione utili.
  • Ho imparato XS & C++ da quel tutorial e alcuni esempi che ho trovato su CPAN. Non ricordo cosa ho visto allora. Ma ora posso indicare il mio lavoro come esempio (buono o cattivo, non so): Math::SymbolicX::FastEvaluator.
  • Analogamente, la distribuzione XS ++ pianificata contiene un complete (albeit pointless) example di utilizzo di XS ++ per interfacciare C++ e Perl. Poiché XS ++ è tradotto in semplice XS, è possibile utilizzarlo su generare esempi.

PS: C'è anche il modulo Inline :: CPP. Se funziona, è probabilmente la soluzione più semplice. Dubito che possa gestire i modelli, però.

+0

Ho dimenticato un piccolo dettaglio: il tutorial di John Keizer ha un link alla directory CPAN di Dean Roehrich. Il collegamento è verso uno specchio CPAN stantio. Prova questo: http://search.cpan.org/CPAN/authors/id/DMR/ – tsee

+0

XS ++ è stato rilasciato come ExtUtils :: XSpp a CPAN: http://search.cpan.org/dist/ExtUtils-XSpp È ancora ai suoi esordi, ma con esso ho costruito con successo Wx.pm. – tsee

10

Controllare http://www.swig.org:

"SWIG è uno strumento di sviluppo software che collega i programmi scritti in C e C++ con una varietà di alto livello linguaggi di programmazione SWIG è usato con diversi tipi di linguaggi. compresi i linguaggi di scripting comuni come Perl, PHP, Python, Tcl e Ruby. "

7

Normalmente sceglierei XS, come tsee, ma c'è anche Inline::C (o Inline::CPP in questo caso).Non mi piace SWiG e tendono ad evitare i pacchetti costruiti attorno ad esso.

+2

L'OP probabilmente vuole Inline :: CPP. – runrig

+0

Certamente vero. Personalmente non ero nemmeno a conoscenza di quello. – jettero

+1

+1 I moduli 'Inline' rendono davvero molto più semplice l'integrazione di codice estraneo in Perl. – mob

Problemi correlati