html - 在 Windows 8 和 Windows Phone 8 上使用 HTML5/JavaScript 的 F# 可移植库
抱歉,如果这个问题已经有人回答过,但其他相关帖子已经过时了。
我想用 HTML5 和 JavaScript 构建一个 Windows 8 应用程序,并使用 F# 可移植库项目来进行计算密集型任务。这被允许吗?当我尝试从 JS 项目中添加对我的 F# 项目的引用时,VS2012 给了我一个错误,但随后还是让我添加了它,这以后会出问题吗?我还想制作一个 Windows Phone 8 版本。
谢谢
答案#1
据我所知,目前的 F# 编译器无法创建 WINMD 组件(Denis 提到过),所以你无法直接从 JavaScript 调用 F# 代码。可能(但我不确定!)可以将 F# 库创建为可移植库,并从作为 WINMD 组件编译的 C# 项目中引用它,然后再从 JavaScript 引用这个。这增加了一个额外的步骤,所以可能有点不方便。
请将此作为反馈提交到 Visual Studio UserVoice。如果更多人投票明确表示这是他们的重要场景,更有可能被添加!
或者,如Ramon所提到的,有一些工具可以将F#翻译成JavaScript,并允许你将F#代码作为JavaScript运行(并直接从JS调用它):
- WebSharper 是一个商业支持的产品,同时也有基于 AGPL 许可证的开源版本。
- FunScript 是一项最近的开源社区项目,可在 Apache 2.0 下使用
我只使用过 FunScript(它运行得相当好,并且有一些不错的功能),但是 WebSharper 存在的时间更久,所以我想它更稳定。它还增加了基于formlets(以及类似模式)的更复杂的 GUI 框架,而 FunScript 只是通过导入 TypeScript 定义的类型提供程序提供对 JQuery 的类型安全访问。
答案#2
JavaScript Metro 应用不能直接调用 .NET 库。为了使 JavaScript 可以调用你的 F# 库,你应该将其转换为 Windows 运行时组件(winmd)。现在,我不完全确定是否可以使用 F# 制作 winmd,因为官方上微软只支持 C# 和 VB。在 WP8 端,JavaScript 不能直接调用 .NET 或 winmd 库,因此你需要手动桥接 JS 和 .NET。