寫插件,擴展Rime的功能

286 views
Skip to first unread message

佛振

unread,
Jan 6, 2014, 4:55:03 AM1/6/14
to rime-...@googlegroups.com
方纔更新了一葉Wiki
https://github.com/lotem/librime/wiki/Sample

這可以叫作「插件」吧。

爲了比較容易地利用 Rime 的框架開發新功能,這一思路允許第三方的開發者省去編譯 librime 及其衆多編譯依賴的步驟,將實現新功能的代碼編譯成一個獨立的模塊。

如此只要以某種方式使輸入法動態加載這個模塊(目前尚未在 ibus-rime 裏實現),即可在輸入方案中像調用內置組件那樣調用新增的功能組件。如這一例:

事實上現有的內置組件也被劃分爲若干模塊,可在構建 librime 時選擇將大部分功能組件拆分到 librime-gears.so ,而保留核心功能於 librime.so。

新組件針對 librime 中的 C++ 接口開發,然而 Windows DLL 默認不導出 C++ 的類,因此這種機制無法用於 Windows。且小狼毫採用靜態鏈接Runtime的方式,還有內存對象跨模塊釋放的問題,亦無法將部分組件從 rime.dll 拆分出來。好在 librime 對外(如 ibus-rime, Squirrel, WeaselServer.exe) 的接口是純 C 的,使其可以相對於外部調用者獨立地升級。

後續將嘗試在 ibus-rime 上找到一種合適的方式,動態加載第三方模塊。

Xiangyan Sun

unread,
Jan 6, 2014, 5:17:52 AM1/6/14
to rime-...@googlegroups.com
现在的schema看起来不仅仅是规则定义,更像是一门简单的脚本语言了。
我考虑着各个模块可不可以用lua来重制。这样不仅用家学习修改起来要比改C++容易很多,而且即便修改“核心”模块也可以省去重复编译的时间。
而模块加载之类的功能就更不是问题了。
一直以来就有这个想法,但是如果真这么做工作量就很大了,趁这个机会说一下,佛振兄考虑考虑吧。


2014/1/6 佛振 <chen...@gmail.com>

--
 
---
您已訂閱「Google 網上論壇」的「rime-devel」群組,因此我們特別傳送這封郵件通知您。
如要取消訂閱這個群組並停止接收來自這個群組的郵件,請傳送電子郵件到 rime-devel+...@googlegroups.com
如需更多選項,請前往:https://groups.google.com/groups/opt_out。

contralisk

unread,
Jan 6, 2014, 6:21:20 AM1/6/14
to rime-...@googlegroups.com
Lua 嘛…

我想還是等待時機,將來直接上V8。

因爲,用HTML5開發客戶端介面的技術已經開始流行,但還比較重。
我在等類似 node-webkit 的技術在不遠的未來變得足夠快速輕便。

那時可以用 JavaScript 寫框架,而效率關鍵代碼如詞典查詢、整句轉換算法等以C++擴展的方式集成進去。
不消說,簡單的組件都可以用 JavaScript 實現了。

特別是介面,從中受惠最多。不僅可以藉助 HTML/CSS 控制候選窗的樣式,而且有可能藉助其腳本能力創造新的交互方式。
比方說鼠標懸上去彈出字詞的釋義啦,打開與關鍵字關聯的網頁啦…好像可以變得很厲害的樣子。

有這樣的期待,於是我對嵌入一個腳本解釋器的主意沒有熱情了——還是在腳本程序中嵌入C++擴展更帥一些!

就算條件不成熟,只要先拿週邊工具練手就沒問題了吧。
如今我又打算要寫「東風破.net」,基於 node-webkit 做一個跨平臺的輸入方案分發工具,兼配置工具。
嘿。

wishstudio於 2014年1月6日星期一UTC+8下午6時17分52秒寫道:

佛振

unread,
Jan 6, 2014, 6:25:33 AM1/6/14
to rime-...@googlegroups.com
如此甚好。那就有勞了。

contralisk於 2014年1月6日星期一UTC+8下午7時21分20秒寫道:

Xiangyan Sun

unread,
Jan 6, 2014, 11:34:17 AM1/6/14
to rime-...@googlegroups.com
我所说的用 lua,是因为现今 lua 已经非轻便和快速了,用 luajit 的话二进制文件增加数百 k,执行效率与 C++ 不相上下。可以说所有核心模块都可以让 lua 来,C++ 只需要负责平台部分。
这里有个别人测试的链接:https://gist.github.com/spion/3049314,加上我自己的使用经验,luajit 很多场合比写的不太好的 C/C++ 要快很多,效率方面如果只是做词典lookup之类的应该不成问题。
而javascript的实现还是显得比较“重量级"了,当然还得看将来的发展,但我觉得不太可能达到 lua 的轻量和快速了。
不过说到如果界面用HTML来的话,用javascript的互操作性可能会好一些……



2014/1/6 佛振 <chen...@gmail.com>
Reply all
Reply to author
Forward
0 new messages