Fable 1.0 Beta提供更好的工具集成、全新项目格式等改进

栏目: ASP.NET · 发布时间: 7年前

内容简介:Fable 1.0 Beta提供更好的工具集成、全新项目格式等改进

F#到JavaScript的编译器Fable近日发布了 1.0 Beta 版,该版本改进了相关工具,提供了更简洁的项目格式,以及更好的代码生成能力。

Fable现已实现了与dotnet SDK的集成,这意味着该产品已可通过nuget使用,同时开发者可以使用 dotnet CLI工具管理自己的项目。例如,我们可以这样新建一个Fable项目:

mkdir myfableapp
cd myfableapp
dotnet new fable ## create the project files from a template
dotnet restore   ## install nuget deps
npm install      ## install nmp deps
dotnet fable add 

  ## add a library to the project

此外Fable还实现了与Webpack的集成。实际上,Fable编译器的JavaScript组件已成为一种 Webpack加载器 ,因此可定义能与其他语言的加载器进行集成的构建工作流,例如TypeScript。只需通过 dotnet fable start 启动,即可让Fable Webpack加载器与Fable服务器通信。

如上文所述,新的项目格式是1.0版的另一个重要改进,现在我们可以通过一个简单的XML文件按顺序列出项目需要包含的所有依赖项和文件。这种新格式的主要优势在于,相比原本臃肿的格式,可以更轻松地修改项目,而无须承受项目受损等风险。然而目前仅可以使用 Ionide 编辑器修改这种新格式的项目。

Fable 1.0还改进了代码生成能力,这一能力主要源自 ncave 在使用Fable 将F#编译器移植至JavaScript 的过程中所做的工作。除了可以驱动 完全在浏览器中实现的Fable REPL ,为此类大型项目使用Fable可以帮助我们更好地发现有待优化的地方或可能存在的Bug。

InfoQ采访了Fable的创建者和维护者Alfonso García-Caro,此人还与人合作撰写了PACKT Mastering F# 一书。

InfoQ曾在2016年8月报道过Fable,您能否为我们的读者总结一下自那时之后语言方面有什么变化?

Fable可兼容标准的F#,因此Fable语言的大部分新功能都来自F#本身。然而Fable还通过一些额外的新功能改进了与JavaScript的交互,例如Erased union、String enums,或动态编程。Fable 1.0在代码生成方面最重要的变化之一在于,F#柯里化(Curried)的Lambda已不再作为JavaScript嵌套函数的方式呈现,借此可大幅改进与JavaScript库的交互,并消除开发者将Lambda发送至JavaScript代码过程中遇到的某些常见困扰。

Fable 1.0主要的变化均围绕 工具 和工作流,通过与dotnet SDK和Webpack的集成,以及新增的更简单的F#项目格式,这方面能力获得了显著提高。Fable的相关文档很快也将更新为最新版本。

与JavaScript代码交互的Fable模型到底是什么?如何用于管理类型/非类型边界?

Fable的指导原则之一是让其与JavaScript的交互尽可能简单。因此F#生成的代码和JavaScript原生代码之间没有边界。相比其他可编译为JavaScript的函数程序,这样的设计确实会对类型安全产生一定的影响,但与此同时我们将可以使用更多现有工具,并以任何JavaScript环境作为目标,而不仅仅是浏览器。尽管还处在早期阶段,但Fable已经可以支持Node、GitHub Electron、React Native、Fuse或Visual Studio Code扩展。与JavaScript的集成可通过配合使用ES2015导入以及动态编程或类型接口的方式实现,此时还可将自定义的或通过Typescript生成的声明文件与ts2fable解析器配合使用。

总的来说,Fable有着与.NET领域的F#类似的基本原则:在缺乏空值(Null)的情况下可为F#代码提供极高程度的类型安全,以及其他高级类型,例如通过可分辨的Union代表不可变的状态和首选项,但与此同时如果需要涉及与C#或JavaScript库的交互,就无法提供类似的帮助了。我觉得借此可以极大地提升生产力,让我们无须用F#重写一切,即可充分利用现有工具。

是否有什么成功故事可以分享给我们?

目前有很多公司,例如msu solutions GmbH或德国的NSYNK,以及加拿大的Prolucid,还有很多独立开发者,均已将Fable应用运用在生产环境中。让人最为印象深刻的是Tomas Petricek发起的Gamma项目,以及目前最棒的F# IDE之一:Ionide(一种VS Code和Atom扩展),这些都是通过Fable构建的。另一个比较有趣的例子是Fable REPL,完全运行在浏览器中,没有使用任何后端即可使用Fable将F#编译器本身转换为JavaScript。

您对Fable 1.0的成熟度是怎么看的?适合用于生产环境吗?Fable未来的发展路线图是怎样的?

当前发布的Fable 0.7版其实已经适合用于生产环境了,该版本发布于几个月之前,一直没有出现过什么重大问题。Fable 1.0目前还处于Beta测试状态,主要是供Fable的高级用户尝试和体验并向我们提供反馈。一旦我们确信在工具和代码生成方面的各种问题已经顺利解决,我们会将其作为稳定版本发布,希望这一切能在未来几周里完成。

Fable 1.0 RTM顺利发布之后,我们会将重心转向Fable生态:更全面也更优质的库、范例、教程,以及对ts2fable解析器的进一步完善。当然,我们也会继续完善Fable,使其能够兼容F#包含的更多新功能(例如Promising anonymous record)。我们还打算将Fable REPL于Lonide-web结合在一起,让整个F# IDE能够完全在浏览器中运行,无须后端,无须任何安装操作。

如果希望尝试Fable,可在安装 dotnet SDK 后运行:

dotnet new -i Fable.Template::*

该命令可安装Fable模板,随后即可按照上文列出的方法创建项目。

阅读英文原文: Fable 1.0 Beta Brings Better Tooling Integration, New Project Format, and More


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Agile Web Development with Rails, Third Edition

Agile Web Development with Rails, Third Edition

Sam Ruby、Dave Thomas、David Heinemeier Hansson / Pragmatic Bookshelf / 2009-03-17 / USD 43.95

Rails just keeps on changing. Rails 2, released in 2008, brings hundreds of improvements, including new support for RESTful applications, new generator options, and so on. And, as importantly, we’ve a......一起来看看 《Agile Web Development with Rails, Third Edition》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

URL 编码/解码
URL 编码/解码

URL 编码/解码