[心得] RubyInline新用法

看板Ruby作者 (壁虎貓耳控)時間12年前 (2012/05/28 22:22), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
這是我偶然想到的點子 可以把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)
文章代碼(AID): #1FmueRu3 (Ruby)
文章代碼(AID): #1FmueRu3 (Ruby)