C言語/C++/Cuda Perlバインディング入門

C言語/C++をPerlからバインディングするためのサイトです。C言語の入門的な記事とそれをPerlの関数として呼び出せるようにする方法について解説します。

Perlは、C言語で実装されており、C言語はPerlの基盤となっています。比較演算子の優先順位がC言語と同じ、if分やfor文などのブロック構文「{}」がC言語と同じなど、C言語ユーザーが慣れ親しんだ文法で、記述できることが特徴です。

Perlは、C言語の文法の些細な欠点を指摘し続ける(本当にそれが欠点かどうかもよくわかりませんが)というよりも、C言語に慣れ親しんだユーザーが、Perlを使ったときに、同じように使えるということが意識されています。

C++言語は、名前の点で、ベターC言語だと感じられるかもしれませんが、特にそのようなことはないです。MicrosoftがヘビーなC++ユーザー(Visual C++)であったため、多くのライブラリがC++用に開発されてきたというだけなのかもしれません。

このサイトでは、C言語とC++言語は、Perlからバインディングできるという点では、対等に扱われます。ただし、C++には名前解決のマングリング問題があること、PerlがC言語で実装されているので、C言語バインディングが一番素直な方法であることなどから、主にC言語のバインディングについての解説を行い、そこから応用としてC++のバインディングの解説をするという流れになります。

GPU計算を行うためのCudaのバインディングについても解説予定です。CUDAバインディングはすでに試していて、バインディングできることに関しては確認済みです。

C99規格に対応したC言語入門

XSを使ったバインディング

XSを使ったバインディング手法があります。Perlにおけるもっとも標準的な方法です。型変換は手動で、XSのAPIを覚えることが必要で、C言語をバインディングするPerlモジュールとして作成する必要があります。

Inlineモジュールを使ったバインディング

Inlineモジュールを使ったバインディング手法があります。C言語のランタイム実行が可能です。型変換は手動です。

Inline::C Inline::CPP

FFIライブラリを使ったバインディング

FFIライブラリを使ったバインディング手法があります。C言語のランタイム実行が可能です。FFI仕様に基づいた呼び出しで、直接共有ライブラリ(.so)を呼び出すことができます。型変換は手動です。

FFI, FFI::Raw, FFI::Platypus

SPVMを使ったバインディング

SPVMを使ったバインディング手法があります。SPVMは、Perlバインディングのいくつかの課題を解決するためにPerl総合研究所が作成している2020年11現在、完成を目指して頻繁に更新されている開発段階のPerlモジュールです。完成度は、95%を超えていますが、試験段階で仕様上の問題点がいくつかでてきたり、実現したい必要な機能がいくつか足りない、ドキュメントが不正確という状況です。

SPVM

C言語/C++/CUDA GPU Perlバインディング入門のご紹介

コンテンツ