【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

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:001122
用户头像

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

关注

评论

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

华云大咖说 | 华云数据企业开发测试平台解决方案

华云数据

web技术分享| webRTC 媒体流录制

anyRTC开发者

音视频 WebRTC 流媒体 web技术 流媒体录制

TDSQL Inside:从腾讯的分布式数据库能力到行业的能力

腾讯云数据库

数据库 tdsql

「免费开源」基于Vue和Quasar的前端SPA项目crudapi后台管理系统实战之模块管理(十四)

crudapi

Vue API crud crudapi qusar

《联想发布绿色智城解决方案,加速城市绿色低碳转型发展》

科技大数据

月薪10K码农,跳槽到40K架构师,技术学习路线图汇总

小傅哥

Java 学习 运维 大前端 后端

飞桨中国行走进成都 与当地企业共话制造智能化升级

百度大脑

人工智能 飞桨

手撸二叉树之二叉树的直径

HelloWorld杰少

九月

【OpenIM原创】C/C++调用golang函数,golang回调C/C++函数

OpenIM

【Flutter 专题】52 图解可折叠状态栏

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 9月日更

缓存和数据库一致性问题,看这篇就够了

Kaito

数据库 redis 缓存 后端 一致性

西部首个国家级车联网先导区获批,EMQ 联手中国移动打造 5G 交通生态链

EMQ映云科技

自动驾驶 车联网 5G 移动 emq

【架构训练营】模块七作业

zclau

C#多线程开发-任务并行库04

Andy阿辉

C# asp.net 多线程 多线程并发

干货 | TDSQL-A核心架构揭秘

腾讯云数据库

数据库 tdsql

Kubernetes生态系统与演进路线

博文视点Broadview

2021 Atlassian 大中华区用户大会来袭!

Atlassian

DevOps 敏捷 Atlassian Jira 敏捷精益

华为云GuassDB(for Redis)发布全新版本,两大核心特性正式亮相

华为云开发者联盟

数据库 华为云 GuassDB(for Redis) Lua脚本 SSL连接加密

TDSQL-A,全力应对海量数据实时分析需求

腾讯云数据库

数据库 tdsql

特洛伊木马-图解VXLAN容器网络通信方案

Lance

新来的前端小姐姐问:Vue路由history模式刷新页面出现404问题

华为云开发者联盟

node.js Vue hash 404 history 模式

一年数十万次实验背后的架构与数据科学

百度Geek说

人工智能 架构 数据科学

架构实战营 - 模块 7 - 王者荣耀商城异地多活架构设计

雪中亮

架构实战营 #架构实战营

王者荣耀商城异地多活分析-模块7

小牧ah

架构实战营

如何借助腾讯云简单、高效移动开发

腾讯云数据库

数据库 tdsql

企业为什么要建设自有即时通讯软件系统

WorkPlus

阅读

资深Linux系统管理员常用的15个很好用的Cron工作示例

华为云开发者联盟

Linux Linux Cron 工作示例 应用程序 工作调度

架构训练营模块七作业

喻高咏        

架构训练营 模块七

1ms的时延,10Gbps速率…5G通信技术解读

华为云开发者联盟

5G 物联网 通信 网络架构 网络切片

springboot vue二手交易市场毕设源码

清风

毕业设计

【LeetCode】检查平衡性Java题解

Albert

算法 LeetCode 9月日更

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