Perl+XS(一)

以下是perl+xs的系列篇幅,主要详细介绍perl一些底层上的东西以及如何使用XS接口编程语言来实现perl的扩展。

一、首先要了解的东西

1,创建perl模块

Package Example;

1;

2,配置、构造、测试和安装perl模块

配置、构造、测试和安装perl模块目前可以有三种实例来选择:

1ExtUtils-MakeMaker

ExtUtils-MakeMaker是写安装、测试一个不错的选择,常用工具h2xs一次性的创建一个实例,比如:

h2xs -X -n Foo::Bar

如果要创建一个XS的组件,则需要将选项-X换成-A

另外,此种实例也可以用module-starter Module-Starter)或modulemakerExtUtils-ModuleMaker)工具来生成,注意选项选择--builder=ExtUtils::MakeMaker—eumm

2Module-Build

Module-Build和以往Makefile.PL文件不一样,是一个纯perl的实例,不需要通过make来进行构造、测试和安装,但其基本方式和Makefile.PL一样,如下所示:

Perl Build.PL

./Build

./Build test

./Build install

此种实例可以使用module-starter Module-Starter)或modulemakerExtUtils-ModuleMaker)工具来生成。

3Module-Install

Module-InstallExtUtils-MakeMaker的高级版本。在ExtUtils-MakeMaker之上封装了一层,且增加了一些特征。

此种实例目前在CPAN上尤其最多,常用module-starter工具来生成。

3XS的基本介绍

XS(xsub)perl调用c/c++语言的一个接口编程语言。像这样的类似的接口编程语言还有SWIGSimplified Wrapper and Interface Generator)、JNIJava Native Interface)等。XS可以方便的写出perl扩展,一般编写perl扩展有三种方式,其中二种与XS有关:

1)模板

比如用一些工具h2xsmodule-starter来生成模板,开发者关注于XS本身,相对来说灵活多用;

2Inline模块

perl模块可以让用户在perl程序中直接内嵌其他语言的代码,这些其他语言的代码会自动编译,然后在运行的时候自动加载。本质上Inline也是基于XS

perl代码调用C函数时,XS的基本工作模式如下:

XSperl的堆栈里面获取参数并转化成C语言识别的格式

将转化后的参数传递给C函数并执行

C函数的返回类型转化成perl的基本数据类型,压入 Perl 堆栈供程序读取,或者直接修改 Perl 所提供的变量值。

Perl提供了更多的变量定义和调用规则,相对来说更加灵活,但是也要和C语言一样考虑多种异常、内存的管理等等。

XS语言本身提供了编译器叫xsubpp,它根据typemaps来确定perlC之间函数参数和返回值的基本数据类型转换。

Monthly Archives

Pages

Powered by Movable Type 7.7.2

About this Entry

This page contains a single entry by Cnangel published on August 31, 2009 1:29 AM.

项目框架设计模式 was the previous entry in this blog.

Perl+XS(二) is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.