Gestalt:使用 Ruby,Python 和 XAML 编写网页脚本

  • 赵劼

2009 年 8 月 5 日

话题:.NETRuby编程语言Python语言 & 开发

最近微软在Mix 在线实验室上发布了一个名为 Gestalt 的项目,希望借助高级语言与编译器的强大功能,在保留前端开发人员原有工作方式与习惯(编写 => 保存 => 刷新)的同时,提高构建复杂 AJAX 或 RIA 应用程序的生产力。在 Gestalt 网站中写到

我们创建 Getalt 项目是因为它符合MIX Online 的精神。我们会在 Web 领域中挑选有趣的场景或问题,然后设法为它创建一些应用程序、服务,或提出一些解决方案的建议——Gestalt 也是这么一回事儿。我们发现,Web 开发人员经常会在基于标准的前端 Web 开发以及 RIA(如 Flash/Silverlight)两种开发模型之间摇摆不定,Gsstalt 的目标便是解决这个问题。值得一提的是,选择 Ruby 和 Python 作为脚本语言,也是未来浏览器中有趣的话题之一。

Gestalt 主要有以下几个特点:

  • 使用 Ruby 和 Python 作为前端脚本语言:有了 Gestalt,开发人员便可以在页面中添加 <script language="ruby"> 或 <script language="python"> 标签,并使用 Ruby 或 Python 语言编程。与原有的 JavaScript 语言相比,Ruby 和 Python 所带来的强大生产力有助于开发人员编写和管理复杂的逻辑。Ruby 和 Python 代码同样可以与页面中的 DOM 元素,甚至是 HTML 5 的 canvas 元素进行交互。例如在 Gestalt 的入门示例中便包含这样的代码:
  • <input id="say_hello" type="button" value="Say, Hello!" />
    <script language="ruby">
        document.say_hello.onclick do |s,e|
            window.alert "Hello, World!"
        end
    </script>
    
  • 透明编译,高速运行:借助 Silverlight 中DLR的强大动态编译功能,gestalt.js 可以在页面加载完成后动态获取其中的 Ruby 或 Python 代码,并使用 IronRuby 或 IronPython 加以编译执行。与 JavaScript 相比,Ruby 和 Python 代码在加载时会有毫秒级别的延迟,但是页面的整体性能(尤其对长时间运行的页面而言)则会有显著的提高。
  • 使用 XAML 应对复杂样式需求:面对如今愈发复杂的应用程序,HTML 和 CSS 已经略显疲态。在 Gestalt 中,开发人员可以为页面从外部引入 XMAL 文件,或使用内嵌 XAML 的方式来开发复杂的交互式应用程序。Gestalt 网站建议使用Expression Blend编辑 XAML 程序,并提供了Adobe Illustrator 的 XAML 生成插件TextMate Bundles来辅助其他工具或平台上的 XAML 开发。
  • 天然 SEO 支持:与传统 HTML 页面相同,所有的代码和文字都显示在页面上。因此,开发人员无须任何额外的工作,便可以将所有的页面信息暴露给搜索引擎。
  • 自由的开发和运行环境:只要一个文本编辑器(如记事本或TextMate),开发人员便可以在任意的平台上编写 Gestalt 网页,而 Gestalt 网页其实也只是一个最为普通的 (X)HTML 页面而已。Gestalt 借助 Silverlight 插件中的 DLR 来执行 Python 或 Ruby 代码,这意味着 Gestalt 页面也可以在多种平台上运行。

Gestalt 也有一些问题需要解决,例如:

Gestalt 基于传统的前端开发模型,页面会像执行 JavaScript 那样执行 Python 和 Ruby 脚本,但目前还不支持 import 和 require 的功能。如果您想从外部引入 Python 和 Ruby 类库,可能就要通过内嵌 XAP 的 Silverlight 模型来实现了。我们对于您理想中的 require 或 import 的方式非常感兴趣,请给我们反馈。

至于 Gestalt 是否最终会成为一个成熟的产品,MIX Online 团队认为

(产品化)并不是我们的目标,但是你永远无法知道它是否会融入某个应用或概念之中。目前我们感兴趣的是推广 Gestalt,并希望从社区中获取灵感。这也是我们公开 Gestalt 源代码的原因。我们希望您可以下载 Gestalt 类库并把玩一番,再把您的看法告诉我们。

您可以访问 Gestalt 的主页获取更多信息,或下载其类库示例进行更深入的尝试。

.NETRuby编程语言Python语言 & 开发