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之间函数参数和返回值的基本数据类型转换。

Categories

| | 评论(0)

发表评论

June 2011

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

关于此日记

此日记由 Cnangel 发表于 August 31, 2009 1:29 AM

此Blog上的上一篇日记项目框架设计模式

此Blog上的下一篇日记Perl+XS(二)

首页归档页可以看到最新的日记和所有日记。

归档

Powered by Movable Type 5.11