Perl Hackers Hub
第53回 Cを用いたPerl拡張入門―Inline::Cで体験してみよう!(1)
本連載では第一線のPerlハッカーが回替わりで執筆していきます。今回のハッカーは上川慶さんで,
本稿のサンプルコードは,
Cを用いたPerl拡張入門
筆者たちPerl Mongerは先人たちが築き上げてきたモジュールを使いながらPerl製のプログラムを作成します。しかしながら,
Cを用いてPerlを拡張する理由
ではなぜ,
ホットスポットの改善
ホットスポットとは,
Perlゆえにパフォーマンスが落ちる処理について,
ライブラリとのCバインディング
たとえばある画像をPerlから簡単かつ高速に処理したい場合,
- 注1)
- プログラミング言語からCやC++で記述されたライブラリが提供するAPIを呼び出せるようにすることを指します。
Cを用いてPerlを拡張する方法
Cを用いてPerlを拡張する方法は2つあります。一つは,
XSはCで作成した関数をPerlから呼び出すインタフェースとしての役割を持ちます。主にXSモジュールを作成するために用いられ,.xs
ファイルへ記述します。記述したCの関数をPerlで呼び出すために,.pm
ファイル内で利用してCの関数をロードします。
Inline::CはPerlでCを記述するために利用されるモジュールです。そのためXSとは対照的にモジュール化を必要とせず,
本稿ではXSモジュールを作成するための準備として,
- 注2)
- 言語と聞くとまったくの独自言語を想像するかもしれませんが,
実際はPerl APIが使えるC言語です。
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.122
2021年4月24日発売
B5判/168ページ
定価1,628円
(本体1,480円+税10%)
ISBN978-4-297-12119-8
- 特集1
上から下まで全レイヤ解説! 複雑化した世界を体系的に学ぶ
Web技術総整理 - 特集2
新バージョン登場! PythonによるWeb開発の基本
はじめてのDjango - 特集3
Rustで実装!
作って学ぶRDBMSのしくみ
バックナンバー
Perl Hackers Hub
- 第65回 依存モジュールの更新 ―update-cpanfile,GitHub Actionsで実現!(2)
- 第65回 依存モジュールの更新 ―update-cpanfile,GitHub Actionsで実現!(1)
- 第64回 少しマニアックなPerlのテクニック―特殊変数,低レベルの標準関数を使いこなす(2)
- 第64回 少しマニアックなPerlのテクニック―特殊変数,低レベルの標準関数を使いこなす(1)
- 第63回 PPIとPerl::Tidyを組み合わせて作るコード整形ツール(2)
- 第63回 PPIとPerl::Tidyを組み合わせて作るコード整形ツール(1)
- 第62回 Perl歴史散策 ―インタプリタの実装と,構文の進化をたどる(3)
- 第62回 Perl歴史散策 ―インタプリタの実装と,構文の進化をたどる(2)
- 第62回 Perl歴史散策 ―インタプリタの実装と,構文の進化をたどる(1)
- 第61回 GitHub ActionsとAmazon ECSを使ったDockerアプリケーションの自動デプロイ(3)