作者AIGecko (壁虎猫耳控)
看板Ruby
标题[心得] RubyInline新用法
时间Mon May 28 22:22:17 2012
这是我偶然想到的点子
可以把C扩充的原始码用RubyInline藏起来
(有需要的话可以全都用C写再藏
可是这和直接写C有什麽不一样我就不知道了...)
话说平常的用法是将RubyInline用来提升效能或扩充函式库
而要使用的
C原始码 就放在
Ruby原始码 里面
大抵都是这样用:
require 'inline'
#省略...
inline{|builder|
builder.c "
//C原始码
"
}
这个用法大家都知道
用ocra包装也没问题
(请注意
.so 是否包进去)
指令搞语言的麻烦就是动辄暴露原始码
(有些编成java bytecode不算...)
就算是用ocra包装起来
内行人还是找得到你的原始码
(程式执行後会把所有东西吐出来
找到原始码不困难
因为我试过...)
这时RubyInline可以派上用场了
(原本产生的
.so 名称很长
可以通过更改
iniline.rb 缩短
我是把名称後的md5改成现在时间...
反正每个扩充只要编译一次就够了
名称产生的方法是
module_name)
首先另外建立一个档案A
A档案包含了RubyInline扩充的方法
此时必须知道产生的
.so 在哪里
接着在档案B里面引入
.so
(
.so放在原始码附近比较好包装
原本的
.c 也不会一起包进来)
有可能会遇到模组未定义
引入前要先定义好
(这是有点难看的地方...)
档案B并不需要引入RubyInline
可以减少包装後体积
扩充的原始码也变成二进位档了
人类可看的文字不复存在
有人可能会说这和自己写C扩充哪里不一样
答案就是比较方便
不只效能提高
原始码也藏起来了
以上就是我突发奇想的怪点子
有需要的可以用用看
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.232.137.34
※ 编辑: AIGecko 来自: 203.64.138.253 (05/29 12:36)
※ 编辑: AIGecko 来自: 203.64.138.253 (05/31 13:07)