是否可以直接在浏览器中运行C代码?

时间:2009-09-18 10:20:00

标签: c++ c objective-c web-applications

除了性能方面的考虑,是否有任何已知的方法来获取现有的C,C ++或Objective C代码并直接在浏览器中运行它?例如,编译器将所有代码转换为可在浏览器中运行的某种解释语言。像Javascript,Actionscript和Flash播放器,或者我想Java和JVM。

我认识到像Haxe这样的高级语言可以编译到不同的目标。而另一方面,像Cappuccino和GWT这样的项目试图使Javascript开发更像传统的桌面开发。

但是我想知道你是否有一个在桌面上工作的应用程序或用C,C ++或Objective C完成的现有代码库可以很容易地转换为基于Web的应用程序吗?

这方面是否有工作要做?这有什么实际的理由吗?基本上将浏览器变成操作系统?

除了性能问题和操作系统供应商的巩固之外,还有任何技术原因无法实现吗?是否可以将这种类似C的代码插入到浏览器中托管的虚拟机中?

10 个答案:

答案 0 :(得分:16)

谷歌的Native Client(NaCl)使用经过调整的编译器来创建x86目标代码,该代码可由浏览器验证并在沙箱中运行,而不会产生重大性能影响 - 非常酷的东西。他们在它下面编译了Quake。

这个Matasano article对其运作方式有很好的影响。

答案 1 :(得分:6)

这是一个C编译器,它针对许多其他语言,包括Javascript:

http://cowlark.com/clue/

不确定它处于什么状态 - 最后我与作者交谈,它处理纯C89(受编译器前端的限制)。 AFAIK没有计划支持GUI。

我想知道你是否有一个在桌面上工作的应用程序或用C,C ++或Objective C完成的现有代码库可以很容易地将它转换为基于Web的应用程序吗?

这就是Silverlight的用途(当然是C#而不是Objective-C),因为它使.NET运行时可用。移植桌面应用程序通常与GUI有关,关于语言 - 如果你有一个Cocoa应用程序并且你想将它移植到另一个环境(无论是浏览器还是Windows),那么你需要的不仅仅是一个Objective-C交叉编译器,你需要Application Kit等等。 WINE是一个值得注意的反例,这些特定于操作系统的库很少在其他平台上可用,更不用说有效了。即使它们可用,但当一个UI的约定用螺栓固定在另一个UI之上时,存在外观和可用性问题。因此人们倾向于使用可移植框架开始,或者完全重写应用程序的表示层。

基本上将浏览器变为操作系统?

有几个项目正在进行,以便将浏览器转变为应用程序的全功能环境(不确定这是否是“OS”的意思)。 Flash和AIR,Silverlight,HTML 5.据我所知,他们都没有计划将C作为编程语言。

答案 2 :(得分:3)

我认为你最接近的是Google Native Client。但它仍处于早期发展阶段。

答案 3 :(得分:3)

Emscripten允许您将代码编译为javascript,然后是平台和浏览器独立的。

答案 4 :(得分:2)

您可能对低级虚拟机LLVM感兴趣。可以在Java applet,Flash applet中实现LLVM,甚至可以在Javascript中实现(如果有人还没有完成上述部分或全部内容,我也不会感到惊讶。)

转换现有的应用程序是一个完全不同的鱼群。用户交互的范例在“桌面”应用程序和“浏览器”应用程序之间完全不同,在端口合理之前,很多都需要重新设计。

答案 5 :(得分:2)

查看Adobe Alchemy(以前称为FlaCC),它使用LLVM将C / C ++编译为Flash。

答案 6 :(得分:1)

这可以通过ActiveX控件实现,但这仅适用于Microsoft Internet Explorer。

答案 7 :(得分:0)

http://code.google.com/p/cibyl/wiki/Cibyl可以创建Java源代码,因此您可以在浏览器中为Java插件编译它。鉴于现在Java插件不太常见,使用可编译为Javascript的解决方案可能会更好。

答案 8 :(得分:-1)

在我看来,主要挑战与使用的语言无关。我怀疑C在JavaScript中是一种非常难以实现的语言,但它是可能的。 这对我来说似乎是一个坏主意。

首先,我不会在C中编写桌面应用程序,更不用说Web应用程序了。其次,Web应用程序需要与桌面应用程序完全不同的架构。简单地交叉编译桌面应用程序不会使它成为Web应用程序。如果它是您正在寻找的可移植性,我建议使用针对JVM的高级语言。

答案 9 :(得分:-1)

也许您应该考虑http://ideone.com在浏览器中编译c ++?你也可以编译或解释其他语言,我个人使用它而不是更奇特的语言 - 我的PC上有c和c ++:)