🔥 在浏览器实时运行 C/C++ 代码!

2023-07-24 08:20:49 +08:00
 darkce

简介

目前有很多在浏览器运行 Python 的库。运行 C/C++ 库几乎没有,所以研究了下如何在浏览器运行 C/C++,开源了相应的 JS 库。
clang.js 一个在浏览器编译、链接、运行 C/C++ 代码的 JS 库。支持 C/C++ 标准库。完全在本地编译,无需网络即可工作。

原理

首先把 Clang 和 LLD 编译为 WebAssembly 使其运行在浏览器中。然后使用 WebAssembly 版本 Clang 把 C/C++ 代码编译为 WebAssembly ,最后通过浏览器 API 运行 WebAssembly 。

示例

https://clangjs.netlify.app

应用场景

GitHub

https://github.com/luoxuhai/clang.js

5233 次点击
所在节点    程序员
31 条回复
x77
2023-07-24 11:57:11 +08:00
@vincent20
相对于主机原生运行 C/C++ 来说牺牲效能
x77
2023-07-24 12:01:34 +08:00
希望我的贴文不要影响作者的积极性 ^^,我本意是希望大家正确看待 WASM ,其实用来搞 C/C++ 教培、线上 C/C++ 考试都挺不错。
dayeye2006199
2023-07-24 12:31:25 +08:00
WASM 还是挺有用的。
最近 LLM 出来之后,有不少工作是在把模型 port 到浏览器客户端执行(配合 webGPU 和 ML compiler )。
lynan
2023-07-24 14:04:24 +08:00
http://www.compumuseum.com/
之前收藏的一个好玩的页面,也是用 WebAssembly 实现,可以在线体验一些经典操作系统。
xjqxz2
2023-07-24 16:56:34 +08:00
多个 C++文件也行吗?
learningman
2023-07-24 17:05:08 +08:00
三年前搞过,那个时候没有移植编译器,是在后端用 emscripten 编译成 wasm 的。
然后用 atomic wait 来模拟 stdio 的阻塞
icyalala
2023-07-24 17:13:26 +08:00
@vincent20 wasm 一般能达到 native 的 1/2 到 1/3 性能吧
jones2000
2023-07-24 23:13:49 +08:00
@tool2d 用 electron , 还不如直接用 CEF 。
tianshilei1992
2023-07-24 23:49:38 +08:00
鼓励楼主把这玩意儿给贡献到 LLVM 社区 :-)
horou
2023-07-25 16:36:37 +08:00
@x77 wasm 最大的作用还是可以复用现有的 c/c 艹/rust 开发的与平台无关的库,还有就是性能会相较 js 好很多。比如 ffmpeg ,和各大模拟器都可以编译成 wasm 在浏览器上直接运行。
vincent20
2023-07-27 19:06:18 +08:00
@icyalala 好的,性能没有变差应该是指迁移到 js 的过程中相比直接写 js 做了些优化吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/959093

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX