[心得] RubyInline新用法
這是我偶然想到的點子
可以把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)
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章