AI Pulse
📡 X 信号

跨语言调用实战:用Swift调JS、Rust调JS解决客户端开发难题

跨语言调用实战:用Swift调JS、Rust调JS解决客户端开发难题

开发者HiTw93在X平台分享了客户端研发中跨语言调用的实战经验,核心思路是不局限于单一主语言,而是根据场景选择最合适的语言,通过中间层实现不同语言间的通信,弥补主语言的短板。

6年前开发原生Mac Markdown笔记应用妙言时,主语言是Swift,但Swift手写Markdown格式化能力难度极高。他想到调用JavaScriptCore执行JS,将杂乱的Markdown字符串传入,输出规范化的Markdown字符串后再解析渲染,效果接近VS Code中Prettier的格式化效果,在没有AI的时代大幅节省了开发时间。

开发桌面打包工具Pake时,主语言是Rust,但当时Rust生态不完善,缺少成型的Toast组件。他通过Rust调用JS,让JS生成document容器塞入Web,消息通知时由Rust触发JS渲染,既不影响性能,又能实现美观的提示效果。同时Web渲染层需要下载能力时,还能反向调用Rust的系统下载能力,提升性能。

妙言的分栏编辑功能也用到了跨语言通信:一边是原生Markdown编辑器,一边是Webview预览。Markdown解析用GitHub开源的C语言库cmark-gfm,它能在每块HTML上标记对应原文的行号,预览里的JS读取标记计算滚动行号,再通过消息通道告诉Swift,让编辑区同步滚动,实现了两边预览的高度同步。

终端工具Kaku中,用户输入#加自然语言回车,就能快速生成可执行终端命令。实现上利用终端转义序列将这句话发给Kaku,内部Lua脚本接收后交给Rust层请求AI模型,生成的命令再由Lua回填到命令行,整个过程在用户未察觉时完成,相当于一句话在zsh、Lua、Rust间走了一圈。

HiTw93认为,前AI时代工程师最有意思的地方就是把各种语言当工具,基于场景选择而非凭喜好。现在AI时代,这类手写解决难题的场景变少,但了解各语言特性,能在AI跑偏时提醒它尝试对应语言的特性或库,帮助产品少走弯路。他作为AI乐观派,认为编码本身会变得没意思,但会有更多未知的新东西值得探索。

查看 X 原帖

订阅 AI Pulse

每天 08:00 · 12:30 · 18:30 · 23:50 更新