在使用ruby/rails的过程中,确实发现有时性能不尽人意,如生成一个拥有600项的item的3层树形结构目录要花去20ms,为提高性能在学习用c/c++写ruby模块的过程中,认识了swig,rubyInline等一系列帮助编写c/c++来提升ruby性能的辅助工具。
rubyInline用于内嵌c/c++程序,简单快捷。
swig则帮助我们更容易地用c/c++写出独立的ruby模块。
swig的入门使用方法
目标:用swig/c++编写一个ruby模块Test,并提供add方法作加法运算。
相关文件:
test.i 接口
test.h 头文件
test.cxx 函数实现
extconf.rb 用于生成makefile
(自动)test_wrap.cxx swig生成的test封装
(自动)Makefile Makefile文件由ruby extconf.rb得到
(自动)test.so ruby模块 由make得到
1、建立接口文件test.i
%module test
%{
//包含头文件
#include "test.h"
%}
//接口add
int add(int,int);
2、生成wrap文件
swig -c++ -ruby test.i
得到test封装文件 test_wrap.cxx
//test.h
#ifndef _TEST_TEST_H
#define _TEST_TEST_H
extern int add(int,int);
#endif
//test.cxx
#include "test.h"
int add(int left,int right)
{
return left+right;
}
4、编写extconf.rb用于快速生成makefile
require 'mkmf'
dir_config 'test'
#stdc++库,add函数未用到
$libs = append_library $libs,'stdc++'
create_makefile 'test'
运行 ruby extconf.rb 得到 Makefile 文件
5、生成test模块
运行 make 得到模块 test.so
6、测试
irb
irb(main):001:0> require 'test'
=> true
irb(main):002:0> Test.add 3,4
=> 7
irb(main):003:0> Test.add 3333333333333333333333,44444444444444444
TypeError: Expected argument 0 of type int, but got Bignum 3333333333333333333333 in SWIG method 'add' from (irb):3:in `add' from (irb):3 from :0
irb(main):004:0>
测试成功
7、swig
swig支持很多c++的高级特性来编写ruby的模块,如类,继承,重载,模板,stl等。
8、相关链接
swig
swig/ruby 文档
作者的blog
-------------------------------------------
注:本文为antter即本文博主原创,非转载。欢迎大家交流。
分享到:
- 2009-01-16 18:50
- 浏览 1163
- 评论(0)
- 论坛回复 / 浏览 (0 / 2207)
- 查看更多
相关推荐
在使用ruby/rails的过程中,确实发现有时性能不尽人意,如生成一个拥有600项的item的3层树形结构目录要花去20ms,为提高性能在学习用c/c++写ruby模块的过程中,认识了swig,rubyInline等一系列帮助编写c/c++来提升...
使用Swig转换C++库到C#示例代码, 包含了示例的动态库和对应的代码 打包了应用程序 示例用法,提供参考
* 使用SWIG:使用SWIG命令生成wrapper,例如生成Python wrapper:`swig -python example.i` * Testing:使用SWIG生成的wrapper进行测试和调试。 SWIG的高级特性 * 非侵入式接口构建:SWIG可以生成非侵入式的接口,...
swig使用手册,swig使用必备必备
另一个 koa swig 扩展与 koa-modules/koa-swig 的比较来源: exports = module . exports = extendexports . swig = swigexports . setDefaults = swig . setDefaultsexports . setFilter = swig . setFilter 由于它...
使用以下模块扩展swig: var swig = require ( 'swig' ) ; require ( 'swig-react' ) . useTag ( swig ) ; 例子 现在,您可以在swig模板中使用react标签。 以下示例使用此组件: var FruitGreeting = React . ...
SWIG-4.0.2官方版本,由于有时官网上不了,放在这里方便使用 SWIG Version 4.0.2 Compiled with i686-w64-mingw32-g++ [i686-w64-mingw32] Configured options: +pcre
本文档深入浅出的说明了SWIG的使用,通过该例子读者能够快速入门SWIG。
android studio 使用NDK和swig编译c++示例。使用swig可以自动化编译c++函数。比较方便。http://blog.csdn.net/qq_16064871
C 和 C++ 被公认为(理当如此)创建高性能代码的首选平台。对开发人员的一个常见要求是向脚本语言接口...本文使用 Ruby 作为公开 C/C++ 功能的首选脚本接口。要理解本文,您必须具备 C/C++ 与 Ruby 方面的相应知识。
配置环境变量JAVA_BIN和JAVA_INCLUDE。比如: JAVA_BIN:C:\Program Files\Java\jdk-12.0.2\bin JAVA_INCLUDE:C:\Program Files\Java\jdk-12.0.2\include 进入Examples\java\simple目录,用VS2019打开example.dsp。...
SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, Tcl, Ruby and PHP。支持语言列表中也包括非脚本...
SWIG工具
cygwin+swig生成Android库并使用的例子 C/C++转变为Android使用的接口
swig-4.0.2-windows版本安装包
android swig编译工具下载,关于android studio 使用swig相关网站:http://www.sureshjoshi.com/mobile/android-ndk-in-android-studio-with-swig/;swig的官方下载:http://www.swig.org/download.html;我的博客...
使用swig&VS2010编译C&Cpp文件成pyd库
早年写过用C++ + SWIG写Ruby插件的文,但实际中还是以原生C++写Ruby扩展,因为也相当简单。但长久没用还是会忘记,不得不翻以前的老代码回忆,写下这篇博文,若下次再忘记,也不至于去翻仓库。 建立 extconf.rb ...
用于使用swig模板和使用boost的电子邮件友好内联CSS呈现电子邮件的Node.js模块。
android ndk swig例子。