50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

Adam Granicz 聊 WebSharper

  • 2012-08-04
  • 本文字数:3008 字

    阅读完需:约 10 分钟

InfoQ:2011 是 WebSharper 的重要一年。哪些成就是你最感到自豪的?

绝对是这样!2011 年 WebSharper 发生了很多事情,项目开源绝对是其中我们最为自豪的一件事。借着这股势头,我们彻底翻新编译器,调整翻译流程,输出更漂亮的 JavaScript 去提高可读性和降低调试难度。另外我们投入了巨大的资源和精力在工具支持和 HTML5 支持两个方面,此外还有开发和更新各种 WebSharper 扩展。现在已经能够兼容二、三十种主流的 JavaScript 库,其领域涵盖高级的可视化、图表绘制、用户界面控制、GIS 等等,基于 HTML5 的移动应用开发也包括在内。

基于 Web 的移动应用现在是移动开发者的新宠,它以坚实的标准和多目标平台为前提,提供了一种相对无痛苦的开发途径。WebSharper 让你用相同的 F#代码同时开发出 Android 和 Windows Phone 应用。如果需要支持更多的目标平台,挂接其他打包技术也不困难。

总地来说,WebSharper 稳固了它在 F# web 开发领域的第一名位置,还证明用 F#开发基于 Web 的移动应用完全可行。我们对于现在的发展方向很满意。

InfoQ:你可以具体说一下工具支持的方面吗?你们现在提供哪些东西?

WebSharper 的工具支持一向很充分,它和 Visual Studio 紧密集成,开发者可以获得无缝的构建集成和一键部署功能,项目模板也很丰富。最近我们又增加了一套方便的函数式测试框架,对服务端和客户端代码都适用。也就是说,开发者除了用现有的单元测试框架对服务端代码进行单元测试,还可以在各种客户端上,用 F#编写的规格说明去检验生成的 JavaScript 代码。这种功能在为 JavaScript 库开发扩展的时候特别有用,也适合用来对客户端功能和用户交互做详细测试。

另外,我们现在支持各种云上的.NET 环境,可以自动部署到 AppHarbor 等服务,WebSharper 应用通过云来扩大规模是很方便的。这是一项重要改进,迁移 WebSharper web 应用和移动应用到云上已经没有障碍。我们会继续增加这方面的投入,目前有一个基于云的 WebSharper IDE 正在开发当中,以后开发团队不需要安装软件,在 Web 上就可以同时参与多个项目的协作开发。WebSharper IDE 的第一个 beta 测试版将在 2012 年第三季度面世。

InfoQ:与早期的 WebSharper 相比,现在对 HTML5 的支持有什么进展吗?

任何 JavaScript 库都可以开发相应的 WebSharper 绑定,各种针对 HTML5 的 JavaScript API 也不例外。在最新的版本里面,我们加强了 HTML 组合子语言,让它适应 HTML5 的 DOM 结构(如 data attributes 等等),还按照最新的 API 规范更新了 HTML5 绑定,其中最重要的部分是针对 WebSockets 的更新。所以 WebSharper 的 HTML5 支持与最新的 HTML5 规范保持同步。

InfoQ:能否解释一下 F#-JavaScript 转换器的工作原理?

WebSharper 一直以来都依赖 F#生成的 assembly,F#编译器会在里面嵌入特殊的元数据。这种元数据类似于类型化的 AST,我们可以利用里面的信息,对应每个 assembly 里面的客户端内容,生成模块化的 JavaScript 代码。相对于以站点为单位来生成脚本,采取翻译 assembly 的方式,便于在 WebSharper 应用之间共享各种库,重用一些客户端功能。重用组件可以用.NET assembly 的形式交付,兼容的 WebSharper 项目只要引用一下就行了,非常方便。

我们在即将发布的 3.0 版中提供另一种编译路径,从依赖 F#元数据改为基于.NET IL 字节码。这样做是为了允许开发者用 C#或者别的.NET 语言来开发组件和整个 WebSharper 应用,同时 F#作为一种客户端和服务端都适用的优秀选项,被保留下来。

InfoQ:F#-JavaScript 转换器是否可以独立出来,成为开发者的试验工具?

现在还不行,但我们正努力去除各种限制,让它可以用在 WebSharper 项目之外的地方。我们从.NET assembly 生成 JavaScript 代码的能力是占优势的,我们有能力处理命名空间、类、函数等更小的代码单元,甚至处理任意.NET 语言的任意代码段。我们的翻译已经不是幼稚的、代码到代码的翻译,里面牵涉到大量的分析,例如计算外部资源依赖(如样式表、外部 JavaScript 文件等),大规模的转换场景还会涉及其他必不可少的元信息。以上能力,以及别的一些好处,很快会作为独立 API 提供给大家。除此之外,下一版的元编程能力值得大家期待。

InfoQ:你为什么决定将 WebSharper 变成开源项目?

首先,开源的举动是我们持续有意识提高项目透明度的结果。我们面对着非常困难的挑战:虽然 F#的用户数量增长很快也很稳定,但其中的 web 开发者相对较少,而愿意为一个昂贵产品付费的就更少了。开源之后,我们有机会通过一套开源免费的创作软件争取更多的 F#开发者,既引导更多 web 开发者接触 F#,又转化更多 F#开发者成为 web 开发者。我们相信开源项目会衍生出足够维持自身发展的商业机会,让我们摆脱单纯的产品销售模式,围绕 WebSharper 建立更有价值的培训、技术支持,以及其他创新的付费服务。

WebSharper 原本只是一家小公司的一个封闭、不透明的产品,曾经有大企业、财富 500 强企业表达过这样的担忧,它们的管理思路难以接受小公司、新产品、新开发方式带来的风险。开源解除了这方面的限制。项目公开透明,用户不用担心产品突然消失掉。我们也获得成长空间去尝试一些创新思路,建立更多周边服务。

InfoQ:能否解释一下,为什么 WebSharper 选择附带条款的 AGPL 作为许可协议?其中的例外条款应该怎么理解?

WebSharper 是框架也是 SDK,一方面它帮助和简化 web 应用、基于 web 的移动应用的开发工作,与此同时,它和别的库一样,会有一部分代码会成为应用的一部分。

大多数 WebSharper 用户把它当作工具和库来使用:编译和构建 F#代码,这是它的工具用途,被包含在应用里面,这是它的库用途。应用直接受益于 WebSharper 的代码。那么开发者就有两个选择:第一种选择,他们可以按照 GNU AGPL v3 或者例外条款中允许的其他许可协议,将整个应用开源;第二种选择,保证每一个参与应用开发的人员,都持有有效的开发者许可证,在此前提下,可以保持闭源。

双重许可同时满足开源和闭源开发者的需要,在类似项目中是一种常见的许可模型。AGPL 修补了 GPL 在服务端使用场景,如 CS 结构 web 应用等场景下的重要漏洞。假如开发者不喜欢 AGPL,或者组织明确排除 AGPL,那么也可以选择让应用整体代码适用例外条款中列出的其他许可种类,只有应用内包含的 WebSharper 代码和相关库组件必须遵守 AGPL.

有一种重要的例外情况并不包含在双重许可的范围内——在 WebSharper 的基础上构建其他开发框架,必须先取得特别许可。这种要求是有先例的,有些开源项目通过类似的规定来保护成果不被恶意利用。

InfoQ:现在对源码公开和开发公开的区别有不少讨论。开发公开说的是项目接受来自公众的代码贡献。你认为 WebSharper 会采取开发公开的运作模式吗?

长期来说,肯定会的。WebSharper 社群的人数和发展势头都很健康,新的扩展和库一直冒出来,很多人热心地开发各种扩展和新功能。像保持同步更新 jQuery 等库对应的内建扩展,增加对.NET 语言和库的覆盖,改善不同场景下的翻译效果,对接 web 服务,支持 ORM 和其他数据抽象,这些事情都有人在做。

社区里面表现出来的热情和努力,代表了这个平台被激发出来的的巨大能量。甚至有人打算让 WebSharper 应用运行在新的 web 容器里面,集成 OWIN、Web.API 等未来标准。

随着我们按照自己的步骤拥抱开放的开发模式,可以预期社区贡献会在一种可控的模式下,进入 WebSharper 的主代码库。

查看英文原文: Talking WebSharper with Adam Granicz

2012-08-04 02:061763
用户头像

发布了 225 篇内容, 共 74.0 次阅读, 收获喜欢 52 次。

关注

评论

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

百度百舸万卡集群的训练稳定性系统设计和实践

百度Geek说

集群 AI 搜索引擎

试验协同管理平台(源码+文档+讲解+演示)

深圳亥时科技

DeepSeek黑科技加持 嘉为蓝鲸WeOps V5.0让运维预见未来

嘉为蓝鲸

智能运维 产品发布 嘉为蓝鲸 #WeOps

如何开始搭建一个交易所软件?从规划到上线的完整指南

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 交易所开发代币开发

运维人的福音!嘉为蓝鲸OpsPilot V3.2 联网检索功能,让问题解决快人一步!

嘉为蓝鲸

智能运维 产品发布 嘉为蓝鲸 #WeOps

特斯拉、宇树、Figure AI 核心供应链企业梳理与商业化壁垒,「汇丰银行」人形机器人研报解读

机器人头条

科技 大模型 人形机器人 具身智能

智慧环保系统(源码+文档+讲解+演示)

深圳亥时科技

智能车间管理系统(源码+文档+讲解+演示)

深圳亥时科技

AI口语机器人的功能规划

北京木奇移动技术有限公司

软件外包公司 AI口语练习 AI英语学习

Cloud Ace 宣布成为 Langfuse 亚太地区首个代理商,提供 LLM 全链路方案

Cloud Ace 云一

LLM LLMOps 生成式 AI 应用 Langfuse

显存也能叠叠乐,双 Intel Arc A770 显卡低成本部署 DeepSeek R1 32B 蒸馏模型体验

E科讯

故障隔离与防护架构设计

FunTester

无人值守收入核算,无需下班的“AI收入会计”

用友智能财务

AI 数字化 财务 会计

数据线良率总上不去?MES系统教你3招把不良率砍半!

万界星空科技

数字化 mes 万界星空科技 制造业工厂 数据线工厂

AI Day引爆测试圈:你的测试工具该升级了,手工测试到AI智能测试

测试人

人工智能

垂域大模型时代 | 专业数据铸就行业智能底座

数据堂

人工智能 金融 数据集 大模型 垂域模型

从协作视角看银行 SRE 转型:与虚拟 IT 组织的创新联动

嘉为蓝鲸

AIOPS SRE 银行运维

数据安全,信息安全解决方案,信息安全实施方案

金陵老街

信息安全 数据安全

魔搭×通义灵码:0代码基础、0门槛在线编程做应用

阿里巴巴云原生

阿里云 云原生 通义灵码

突破续航瓶颈:数字样机技术引领新能源汽车复合制动新方向

DevOps和数字孪生

1688店铺所有商品列表接口全攻略

tbapi

1688API 1688店铺所有商品接口 1688店铺商品采集

《Operating System Concepts》阅读笔记:p359-p388

codists

操作系统

这款流行 AI 工具被盗用挖取加密货币,这些隐患你需要知道

阿里巴巴云原生

阿里云 云原生 Higress

AI口语陪练APP的核心功能

北京木奇移动技术有限公司

软件外包公司 AI口语练习 AI英语学习

商家域稳定性建设之原理探索|得物技术

得物技术

魔搭×通义灵码:0代码基础、0门槛在线编程做应用

阿里云云效

阿里云 云原生 通义灵码

DApp用户激励机制设计:从代币经济到行为心理学的深度解构

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 公链开发代币开发

智能制造:数字工时解决方案

积木链小链

数字化 数字工厂 智能制造

Adam Granicz聊WebSharper_.NET_Jonathan Allen_InfoQ精选文章