【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

访谈:Didier Girard,GWT 和 Volta 是 Web 上的 GCC 吗?

  • 2008-03-17
  • 本文字数:2695 字

    阅读完需:约 9 分钟

微软上个月发布 Volta 预览版。很多人都对这项新技术和架构营造(Architecture Factoring)的概念发表了评论。一些人将它与GWT( Google Web Toolkit )进行了对比。James McKay 对这些新的抽象持怀疑态度,因为JavaScript 的开发环境已经在逐步得到改善。Ray 正在开发Chronoscope 项目,他对 GWT 和 Volta 的启动时间进行了比较。Didier Girard 是巴黎一家名为 SFEIR 的咨询公司的 CTO, 他一直在 OnGWT.com 上写有关 GWT 的博客。InfoQ 也就此问题与他进行了一番讨论。

InfoQ: GWT 快两岁了,您从一开始就在跟踪使用这项技术,它现在发展情况如何,能不能简单介绍一下?

Didier: GWT 是一项可以用来开发富因特网应用程序(Rich Internet Applications ,RIA)的技术。RIA 技术目前可以分为两大类。第一类是用于开发传统意义下的信息系统的技术,GWT 就属此类;而第二类技术将重点放在多媒体领域(如 Flash, SilverLight 等)。

基于 GWT 的应用不再以页面导航的方式工作,它们被称作单页面程序,更准确的说就是只通过单个 URL 就能完整访问的应用程序。此类框架的优点是免部署和浏览器兼容,目的之一是达到桌面应用般的用户体验。

目前 SFEIR 正在开发五个基于 GWT 的应用程序,而且已经有几款推向市场的产品。最近我们用 GWT 成功开发了一款外联网(extranet)应用,这个应用受到了包括客户全公司上下的欢迎,这些也正是缘于用户良好的体验。RIA 特别是 GWT 就用户体验和开发体验来说确实可以称得上是一场革命!

我们的通常的做法是在 Windows 平台进行开发,针对 Internet Explorer 和 Firefox 上进行了大量的 QA,同时也在 Opera 和 Safari 上进行验证。

InfoQ: 这项技术对 Web 应用的架构意味着什么?特别是你能否对 MVC 模式在其上的适用性做一些评论?

Didier:GWT 非常容易上手,一个 Java 程序员几乎不用学习什么新东西就可以开发基于其上的 Web 应用了。在这一点上 GWT 有点类似于 VB。会用 Java 开发用户界面的程序员很快就能学会使用 GWT。

在 MVC 体系中,GWT 属于视图(View)部分,对模型(Models)和控制器(Controllers)部分,GWT 并没有什么硬性规定。对一个比较基础的应用来说,有视图部分就足够了。如果是一个复杂的应用,还是推荐利用传统的 MVC 方式解决问题。在实际中我们采用的是 MVC 模式的一个变种,即层级 MVC 模式( Hierarchical MVC pattern ,HMVC)。在这个变种中,每个图形组件自身就是一个 MVC 元组(tuple)我们通过事件来进行状态变化广播并建立起每个图形组件的“行为(behavior)”。我们还专门建立了一个框架来简化此种模式的实现 ( GDF ),大家能在 Google Code 上找到它。此框架不太像传统框架那样着眼在防止开发者犯错,它更像是对最佳实践的指导和演示。

InfoQ: Volta 发布后就经常被拿来与 GWT 对比,您对这个问题是怎么看的呢?

Didier: 目前,Volta 只是一个试验性的概念,它的目的是使大家了解未来微软产品中的一些方向。但 Volta 的愿景显然已经远远超过了 GWT。GWT 仅仅是一个将 Java 编译成 Javascript 的编译器。而对 Volta 来说,首先,它本身是独立于编程语言的,一个程序员可以根据自己的喜好选择编程语言,然后将写好的代码编译为 Javascript。先开发出一个应用程序后然后再决定在哪里执行它,其实这才是 Volta 真正想做的事情。这确实应该算作一个雄心勃勃的计划。

Volta 的第一项本领(多语言)当然是有用的,而第二项(先开发再决定运行环境)在我看来还只是理论上的。目前还没有足够的数据来对其实际的可行性进行判断。

举个例子来说明我的观点吧。在 Javascript 中是不存在 long 类型的,因此通常用 float 来替代,这是以牺牲精度为代价的。正是由于这类原因,架构营造(Architecture factoring)变得比较困难。有选择的余地看起来确实是好事,但是为了使选择切实可行,你还是必须提前做足功课。事实的本质是语言是无法把自身直接映射成另外一种语言的。语言到语言的编译过程实质上是一种映射:在此过程中会有语义的损失。

InfoQ: 诸如 GWT 和 Volta 之类的技术以后会向什么方向发展呢?

Didier: 就目前看情况看趋势是开发语言与执行语言的分离。理解这一点很重要。Javascript 程序员对这句话可能会有抵触情绪,但是要知道 Javascript 确实是非常强大的语言,甚至强大到难以掌握,想想它可是要兼容四个不同的浏览器啊!我喜欢把浏览器比作处理器,GWT 或者 Volta 所作的就是产生针对这些处理器优化过的代码,开发人员通常不用再回头优化这些代码了。这就是这些编译器能有助于高效地建立复杂 Web 应用的原因。我们应该将 GWT 或者 Volta 看作 Web 上的 GCC,并且忘掉 Javascript 是一种编程语言而将其看作通用的 Web 运行时。

Google 现在正将浏览器建成为一个“平台”。目前的浏览器是远不完善的,这也是 Google 开发 Gears 的原因。Gears 包括一个本地数据库,工作者池(WorkerPool)和一个本地服务器。这还只是第一步,第二步将定义浏览器和服务间的交互。Google 目前正在开发用于处理同步问题的 API,例如用于缓存和服务间事务性交互的 API。间歇性连接是生活中无法更改的事实,比网络延迟和带宽限制还要难解决。例如,iPhone 手机就不是总处于连接状态。Google 正致力于解决这个问题。许多其他的 Gears API 也不久就会发布:多文件上载 API(multiple files uploading API),加密 API(Crypto API),日志 API(Log API),消息 API(Messaging API),方位 API(Location API),桌面快捷方式 API (Desktop Shortcut API),图像处理 API(Image Manipulation API)(更多信息请查看 Dion Almaer 的博客)。Gears 的美好愿景是它赢得 PCWorld“年度最具创新产品奖”的原因。

在RIA 架构中,我们几乎无一例外地要用到远程服务,而服务经常可能与应用本身的URL 没有什么联系。在编程模型中,服务代理是在本地的,它自然成为架构中管理连接特性的角色。让浏览器更多地充当平台的角色,

已经成为了RIA 框架下一步的目标所在。

以上所述并不适用于目标放在富媒体的第二类架构,其重点更多地放在观众、性能和特别是流的性能上。我们也确实看到了一个富媒体接入市场正在形成。例如, goodOS 刚刚发布了一个面向 Web 的 Linux 系统。传统网络接入点仍将产生内容并且接入点会变得更健壮,但是应该看到一种新型的内容和应用的接入点已经产生了。

InfoQ: 你对一个开发人员和架构师有什么好的建议吗?

Didier: 如果你是一个 Java 程序员,一定要试一下 GWT,你应该会接受它的。如果你试一个.NET 程序员,希望你能时刻关注 Volta 的进展,因为它的确可以算作微软 Web 战略的一个里程碑。

查看英文原文: Interview: Didier Girard, are GWT and Volta GCC for the Web?

2008-03-17 04:161196
用户头像

发布了 23 篇内容, 共 44976 次阅读, 收获喜欢 3 次。

关注

评论

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

Linux下驱动开发_块设备驱动开发(内存模拟存储)

DS小龙哥

10月月更

无法吃午餐的学生数量

掘金安东尼

算法 10月月更

go-zero docker-compose 搭建课件服务(三):编写courseware api服务

六月的

Docker-compose go-zero

react源码分析:babel如何解析jsx

flyzz177

React

CEF | CEF浏览器客户端功能扩展:实现下载列表功能

YOLO.

qt 10月月更 C++

react源码分析:组件的创建和更新

flyzz177

React

数据驱动型企业如何借助「新一代智能协作」提升研发效能?

LigaAI

人工智能 数据驱动 亚马逊云科技 企业号十月PK榜

CEF | CEF浏览器客户端功能扩展:实现前进、后退、刷新、调用控制台、设置cookie、网页自适应窗体大小

YOLO.

qt 10月月更 C++

Linux下IIC驱动编写,介绍IIC子系统框架的使用

DS小龙哥

10月月更

【LeetCode】水果成篮Java题解

Albert

算法 LeetCode 10月月更

Redis是如何保证数据一致性的

芥末拌个饭吧

后端 redis 底层原理 10月月更

go-zero docker-compose 搭建课件服务(二):编写courseware rpc服务

六月的

Docker-compose go-zero

实现etcd服务注册与发现

六月的

Docker-compose go-zero

React面试八股文(第二期)

beifeng1996

React

React组件之间的通信方式总结(上)

beifeng1996

React

掌握这个方法,让工作经验配得上工作时间!

博文视点Broadview

谈谈spark性能调优的方法

芥末拌个饭吧

spark 后端 10月月更

Lerna最佳实践(内含大量代码)

鲸品堂

代码 lerna

react源码中的协调与调度

flyzz177

React

go-zero docker-compose 搭建课件服务(七):prometheus+grafana服务监控

六月的

Docker-compose go-zero

Linux下驱动开发_块设备驱动开发(硬件上采用SD卡+SPI协议)

DS小龙哥

10月月更

一种基于柔性事务的分布式事务解决方案设计探究

京东科技开发者

分布式事务 事务 分布式架构 事务回滚 分布式处理

react源码中的fiber架构

flyzz177

React

OKR之剑·理念篇03:OKR理念认同

vivo互联网技术

团队管理 OKR 目标管理

Java中的接口详解

共饮一杯无

Java 接口 10月月更

部署 SAP UI5 应用到 SAP BTP 时遇到的 error retrieving MTA 错误消息

Jerry Wang

云原生 Cloud 云平台 SAP 10月月更

go-zero docker-compose 搭建课件服务(一):编写服务api和proto

六月的

Docker-compose go-zero

C++中变化布局实现思路

中国好公民st

c++ 布局 10月月更

HashMap源码分析(一)

知识浅谈

hashmap 10月月更

Linux下RTC驱动开发(硬件采用DS1302)

DS小龙哥

10月月更

你知道Redis为什么要设计成单线程吗

芥末拌个饭吧

后端 redis 底层原理 10月月更

访谈:Didier Girard,GWT和Volta是Web上的GCC吗?_Java_Jean-Jacques Dubray_InfoQ精选文章