iPhone迎来Squeak Smalltalk和Seaside

一直以来,iPhone平台上活跃的语言就只有Javascript和Objective-C。不过最近开始有其他语言加入这一队伍。利用Mono的预编译,.net的应用程序也可以编译通过并在iPhone上运行了。四月RhoMobile发布了Rhodes,Rhodes支持构建包括iPhone及其他系统上的smartphone应用。

我们对John M McIntosh进行了采访,就如何在iPhone上运行Squeak,以及使用什么样的编程模型进行了探讨。

InfoQ: 据说您现在正在使用Squeak实现一个基于HTML/Javascript的GUI,可以跑在iPhone的浏览器控件上,是这样的吗?

实际上要复杂得多,绝不仅仅是使用Webview。例如,WikiServer的Wiki入口需要展示一个多行文本框,然后是标准键盘和键盘控件条,用于输入特殊字符以及取消或确定指令。虽然Wiki信息是通过Webview方式来展现的,我们却需要通过UIKit来管理四种不同的屏幕。由于不得不使用定制的Objective-C类来做这件事以及编译VM,所以你可以选择一部分工作使用Smalltalk来做,而另一部分交给Objective-C。技术上来说,你可以用Smalltalk做任何工作,但实际上会存在性能问题,所以没有什么实质上的收益。

由于UI在iPhone的唯一性,所以需要将可视层与领域模型剥离开来,这也是基本的MVC逻辑。事实上,WikiServer最初是一个自带控制屏的蹩脚应用,有人就质疑:难道我们就不能直接在设备上编辑内容么?不过,后来我们也没有采用构建通用UI层启用平台特定实现的方法,因为那样的工作量要大得多。这里我要提一下 http://news.squeak.org/2009/01/08/squeak-goes-to-mars,Esteban Lorenzano已经实现了一个Cocoa UI框架,旨在iPhone应用。此外我也注意到其他诸如Cincom的Visualworks这样的Smalltalk系统,它使用的是原生窗口部件,不过启用这个系统还是很费劲的,现在我们还不想做此努力。

InfoQ: 你用什么来实现web应用?Seaside吗?

Seaside用于提供网页,然后是UIWebView,这是一种用Mobile Safari渲染网页的UIView。理论上讲,任何大小适中的seaside应用都可以跑在iPhone上。

InfoQ: 你能在iPhone上使用Squeak映像么?在其他系统上是否能够修改并且保存呢?比如说,桌面系统上也可以么?

有了isqueak.org上提供的基本软件,iphone开发者就可以选择自己想要的映像来构建一个squeak。更新一下映像,就可以引入multi-touch逻辑以及Objectiv-C的接口。通过触摸与Squeak桌面的交互,你也可以选择保存映像。

我们的Swirl应用http://www.mobilewikiserver.com/Swirl.html就展示了Squeak桌面,其中触摸功能禁用了。我们使用UIKit的Alert对话框来获取信息。

我们的Fration应用http://www.mobilewikiserver.com/Fraction.html很像WikiServer,它包括两个UIKit屏幕,通过触摸交互将计算请求发送给计算引擎,这个计算引擎是不知道UI存在的,它只是接受击键并更新文本串。

InfoQ: 目前的应用大小大概是16/7MB,有可能进一步优化大小么?

SqueakDocs和ST80Docs比这个数大多了,因为他们是压缩过的,而且包括四月份左右发布的基于Web的Squeak和Pharo开发映像的源代码。一旦安装到iPhone上他们就需要54MB的闪存空间。这个数字和RAM的大小不是一回事:大约10MB的RAM用来装载VM和Mobile Safari(如果没有safari会少几MB),然后是映像,所以他们一共需要大概35MB的随机内存。

WikiServer所需的随机内存要小得多,14MB,不过这可是精心调优后的结果。

InfoQ: Pharo和Squeak版本的差异是什么?

Squeak版本是基于Web开发的开发者映像,通过squeak.org就可以获取。我们从WikiServer中补充了一些功能进来,包括支持web view,状态以及信息屏等。除了我们提供的补充和少量的一些加快启动速度的小改动之外,和你下载下来的映像没有什么差异了。Pharo版本是Pharo团队的产品,他们想让这个映像更商业化,而不是为了提供开发学习,所以很多Morphic和eToys都已经裁剪掉了。而且他们有更加活跃的更新流以及积极主动的方法去及时修正bug。

InfoQ: 是否有可能通过精简映像元素来减小映像大小?还是这已经是精简后的版本了?

我会在 http://www.esug.org/Conferences/2009/Current+List+of+Talks/Smalltalk+on+iPhone中详细探讨这个问题。

基本的Pharo映像大约是22MB,我们删除了其中12MB的代码,这样WikiServer所用到的差不多是10.5MB。Swirl不包括Seaside,大约是6MB。这还有进一步降低的可能,我们会利用Craig Latta在小型映像上所做的工作 http://netjam.org/projects/spoon/,我们也利用iPhone上的虚存管理器,做到只有当网页确实被请求执行时才交换到RAM。对于WikiServer而言,差不多4M的映像数据在应用执行是完全不需要的。

Apple AppStore上已经有基于Squeak的商用应用提供,包括WikiServer(注:ITunes链接,另外还有一个Mobile Wiki Server站点)、SqueakDocs using Squeak(注:ITunes链接)以及SqueakDoc using Pharo(注:ITunes链接)等。

查看英文原文:Squeak Smalltalk and Seaside come to the iPhone

你可能感兴趣的:(iPhone迎来Squeak Smalltalk和Seaside)