本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回のハッカーは上川慶さんで、
本稿のサンプルコードは、
Cを用いたPerl拡張入門
筆者たちPerl Mongerは先人たちが築き上げてきたモジュールを使いながらPerl製のプログラムを作成します。しかしながら、
Cを用いてPerlを拡張する理由
ではなぜ、
ホットスポットの改善
ホットスポットとは、
Perlゆえにパフォーマンスが落ちる処理について、
ライブラリとのCバインディング
たとえばある画像をPerlから簡単かつ高速に処理したい場合、
Cを用いてPerlを拡張する方法
Cを用いてPerlを拡張する方法は2つあります。一つは、
XSはCで作成した関数をPerlから呼び出すインタフェースとしての役割を持ちます。主にXSモジュールを作成するために用いられ、.xs
ファイルへ記述します。記述したCの関数をPerlで呼び出すために、.pm
ファイル内で利用してCの関数をロードします。
Inline::CはPerlでCを記述するために利用されるモジュールです。そのためXSとは対照的にモジュール化を必要とせず、
本稿ではXSモジュールを作成するための準備として、
Perlの内部で扱われる型の世界
Cで拡張するために避けて通れないのが型の世界です。なぜなら、
たとえばPerl上でよく表現されるデータタイプとしてスカラがあります。スカラは次のように表現されるものです。
my $i = 10;
my $s = "Hello, World";
Perlの内部でスカラは、
必要最小限の基本型を理解する
Cを用いてPerlを拡張するために最小限に理解しておいたほうがよい型が、
また、
IV──符号付き整数の型
IV
my $iv = 10;
my $iv2 = -10;
UV──符号なし整数の型
UV
my $uv = 1;
NV──倍精度の型
NV
my $nv = 3.333;
PV──文字列の型
PV
my $pv = "Hello, World";
SVとプリミティブな値
SVからプリミティブな値を取得するには、
/* SV* sv = ...; */
IV iv = SvIV(sv);
UV uv = SvUV(sv);
NV nv = SvNV(sv);
PV pv = SvPV_nolen(sv);
プリミティブな値を表すSVを作成したい場合は、
SV* sviv = newSViv(12);
SV* svuv = newSVuv(3);
SV* svnv = newSVnv(3.14);
SV* svpv = newSVpv("hello", 0);
これらの操作を覚えておくことで、
<続きの
本誌最新号をチェック!
WEB+DB PRESS Vol.130
2022年8月24日発売
B5判/168ページ
定価1,628円
(本体1,480円+税10%)
ISBN978-4-297-13000-8
- 特集1
イミュータブルデータモデルで始める
実践データモデリング
業務の複雑さをシンプルに表現! - 特集2
いまはじめるFlutter
iOS/Android両対応アプリを開発してみよう - 特集3
作って学ぶWeb3
ブロックチェーン、スマートコントラクト、NFT