我去年这阵子写了个专门用于注音输入法开发的「铁恨」注拼引擎模组,这个模组专门用来处理注音并击。产品名称取自「齐铁恨」人名,因为是他在台澎金马被国民政府接管之后、将纯正的北京口音的汉语广播在这个被殖民五十年左右的土地上。
这个引擎一开始是用 Swift 写的,后来陆续出了 C# 版和 C++ 版。
Swift: https://github.com/vChewing/Tekkon
CSharp: https://github.com/vChewing/TekkonNT
Cpp17: https://github.com/vChewing/TekkonCC
一开始以为 C# 能开发 Windows 平台的输入法,才写了 C# 版。
后来才知道似乎只能用 C / C++ / Rust ,所以就硬着头皮写了 C++ 版。
因为我分身乏术+对 Windows / Linux 平台的输入法开发严重缺乏了解+实在学不来用不来 C++,所以威注音输入法到现在都只有 Swift 版。
但是,现在,这 C++ 版我做不下去了。
很多在其他语言里面轻车熟路的东西,在 C++ 里面都得造轮子,而且可能还会造出不知什么时候才会爆炸的不定时炸弹,哪怕我没用到任何指针。
1.4.0 版之后,我对 Swift 版和 C# 版当中的一些与复合注音排列有关的共用处理逻辑做了一些错误纠正,但这些修改反而导致 C++ 版无法通过单元测试了。
这边 Swift v1.4.2 版之后、我昨天又 refactor 了一下逻辑。今天我手把手将这些同步到 C++ 版(见 dynamicLayoutFix 分支),还是无法通过单元测试。
我现在就觉得很可能就是我在造轮子的时候的某些轮子成了炸雷。
为什么 Windows 和 Linux 的开发就不能直接使用 Swift 或者 C# 呢?或者「纯」 Rust 也行呢?为什么一定得 C / C++ 呢?输入法这种可能与任何可接受文字输入的 App 互动的东西,如果只能用这些「稍不留神就可能留下资安缺陷」的语言的话,窃以为真的很危险。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.