写点什么

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

  • 2017-03-29
  • 本文字数:2208 字

    阅读完需:约 7 分钟

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 <library> ## add a library to the project
</library>

此外 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

2017-03-29 19:001550
用户头像

发布了 283 篇内容, 共 116.3 次阅读, 收获喜欢 62 次。

关注

评论

发布
暂无评论
发现更多内容

碰到运维难题怎么快速解决?有工具推荐吗?

行云管家

运维 网络运维 IT运维 服务器运维

【Python】此集合非彼集合

謓泽

3月月更

拜托,不用记密码真的超酷好吗?

蚂蚁集团移动开发平台 mPaaS

小程序 移动开发 mPaaS

报名开启 | 3月30日,阿里云-索信达智能金融平台线上发布会

索信达控股

负载均衡,你想了解的全在这里!

博文视点Broadview

【Zeekr_Tech】软件定义汽车之SOME/IP介绍

Zeekr_Tech

中间件 软件架构

【百度智能云X英伟达】直播实录|GPU云产品体系介绍和应用场景分享

百度开发者中心

网络安全Kali之基于SSH、FTP协议收集信息

学神来啦

详细解读开源 PolarDB 三节点高可用的功能特性和关键技术

阿里云数据库开源

数据库 阿里云 开源 polarDB

云原生小课堂|Envoy请求流程源码解析(三):请求解析

York

云原生 网络 envoy Service Mesh (ASM)

云计算时代,好用的IT运维软件我给推荐行云管家!

行云管家

云计算 运维 网络运维 IT运维

开源实践 | OceanBase 在红象云腾大数据场景下的实践与思考

OceanBase 数据库

oceanbase OceanBase 开源 OceanBase 社区版

项目成本管理系统解决方案

低代码小观

资产管理 成本优化 企业管理系统 CRM系统 项目管理软件

怎样做一个知识库网站

小炮

知识库 SaaS平台

【百度智能云X英伟达】直播实录|超大规模AI异构计算集群的设计和优化

百度开发者中心

信创背景下,J2PaaS低代码平台如何支持企业国产化?

J2PaaS低代码平台

信创 低代码平台 J2PaaS 企业国产化 J2PaaS低代码

EMAS 移动推送发布uni-app插件

移动研发平台EMAS

ios 阿里云 Android端 开发与运维 移动推送

《OceanBase 数据库系统概念》首次发布,系统精准定义 OceanBase !

OceanBase 数据库

oceanbase OceanBase 开源 OceanBase 社区版

国产版Postman

Liam

Java Jmeter Postman swagger Mock

让人秒懂的Redis的事件处理机制

Linux服务器开发

redis reactor epoll Linux服务器开发 Linux后台开发

使用vite创建vue3项目

隔壁的猫

前端 Vite2 vue3.2 3月月更

贝壳Flutter UI 自动化测试原理与实践 - 已开源

贝壳大前端技术团队

flutter 测试 UI自动化 贝壳找房

CVE-2021-45232分析(APISIX网关未授权访问)

火线安全

云安全 云安全攻防

什么是持续集成?如何基于Jenkins进行持续集成?

阿里云云效

云计算 阿里云 云原生 持续集成 CI/CD

虎符交易所APP产品UI全新升级 让用户体验更流畅

区块链前沿News

虎符交易所

关于React项目本地开发设置Https的过程

隔壁的猫

前端 React 3月月更

ABAP 常用日期处理

Jasen Ye

Date 日期处理 abap

怎么进行缺陷管理,看完这篇文章,我终于明白了···

阿里云云效

云计算 阿里云 缺陷检测 研发 缺陷管理

手把手带你走进Babel的编译世界

CRMEB

拆分电商系统为微服务

孙强

架构师实战营

4/8 Serverless 技术实践营成都站持续报名中

阿里巴巴云原生

Fable 1.0 Beta提供更好的工具集成、全新项目格式等改进_JavaScript_Sergio De Simone_InfoQ精选文章