是否有可能用 Python 或 Go 编写一个可以在浏览器中运行的本机客户端应用程序?
4 回答
Go 曾经编译为 NaCl,但 NaCl 一直是一个移动的目标,以至于从 Go 中删除了支持。如果/当 NaCl 稳定下来,它可能会在某个时候复活。
从 Go 1.3 开始(再次)支持 NaCL。
请参阅Golang 1.3 发行说明。
Go 1.2 的过时答案:
据报道,Go 1.3 将支持 NaCl:
引用Go 1.3 Native Client Support文档:
Go 1.3 将支持在 Google 的基于 SFI 的执行沙箱 Native Client 下运行命令行程序。
来自Go Playground Go 博客内部的引述:
Native Client(或“NaCl”),一种由 Google 开发的技术,允许在 Web 浏览器中安全执行 x86 程序。
(这个特殊的工具链将被合并到 Go 1.3 的核心中。要了解更多信息,请阅读设计文档。如果您想在此之前使用 NaCl,可以查看包含所有更改的 fork。)
请参阅Go 1.3 NACL 分叉。
这在架构上是可行的,但据我所知,当前的 SDK 只有 C/C++ 工具链。他们将 Python REPL 作为基于浏览器的客户端运行(配有标准库和 sqlite http://lackingrhoticity.blogspot.com/2009/06/python-standard-library-in-native.html)。
如果你下载 NaCl 工具链,你会看到:
$ ls toolchain/linux_x86/bin
i686-nacl-addr2line i686-nacl-objcopy x86_64-nacl-gcc-4.4.3
i686-nacl-ar i686-nacl-objdump x86_64-nacl-gccbug
i686-nacl-as i686-nacl-ranlib x86_64-nacl-gcov
i686-nacl-c++ i686-nacl-readelf x86_64-nacl-gfortran
i686-nacl-c++filt i686-nacl-size x86_64-nacl-gprof
i686-nacl-cpp i686-nacl-strings x86_64-nacl-ld
i686-nacl-g++ i686-nacl-strip x86_64-nacl-nm
i686-nacl-gcc x86_64-nacl-addr2line x86_64-nacl-objcopy
i686-nacl-gcc-4.4.3 x86_64-nacl-ar x86_64-nacl-objdump
i686-nacl-gccbug x86_64-nacl-as x86_64-nacl-ranlib
i686-nacl-gcov x86_64-nacl-c++ x86_64-nacl-readelf
i686-nacl-gfortran x86_64-nacl-c++filt x86_64-nacl-size
i686-nacl-gprof x86_64-nacl-cpp x86_64-nacl-strings
i686-nacl-ld x86_64-nacl-g++ x86_64-nacl-strip
i686-nacl-nm x86_64-nacl-gcc
注意 gfortran 已经存在。同样,单声道支持可用(参见https://github.com/elijahtaylor/mono),因此任何 .net 语言原则上也是可行的。Unity3d 游戏引擎框架使用 C# 和 mono 并导出到 NativeClient。