存在感知,也存在现实。尽管自从互联网泡沫破裂以来,对 Java 的狂热炒作已经消退,但 Java 正在无线领域变得非常流行。有几件事突显了它的崛起。最近,在 12 月,德州仪器在法国开设了一个研究机构,专注于将 Java 应用程序集成到下一代无线设备中。1
纵观 2003 年,Java 的创始者 Sun 微系统公司采取了一些旨在扩展该技术视野的重大举措。与此同时,在开发者社区,开源努力和手机制造商的应用需求正在推动基层项目。
的确,在 Java 经历了多年的沉寂之后,2003 年标志着 Sun 在移动电话和 PDA(个人数字助理)上为 Java 获得了一些重要的技术牵引力。对于开发人员来说,这意味着可以使用更强大的工具来构建基于 Java 的无线应用程序。
用于开发小型设备应用程序的首要 Java 工具是 J2ME(Java 2 平台微型版)。J2ME 被誉为一套工具和一个优化的、开放的 Java 运行时环境,其中包含开发针对消费者无线设备(从电话和 PDA 到智能卡和机顶盒)的 Java 应用程序所需的仿真环境、文档和示例。
开发人员可以从 Sun 免费下载 2.1 beta 版本的工具包,网址为 http://java.sun.com/developer/earlyAccess/j2mewtoolkit/index.html。J2ME 以包含各种配置文件和 API(应用程序编程接口)的包装形式出现。该软件包包含诸如 MIDP 2.0(移动信息设备配置文件)之类的工具,这是一个新的规范/API,支持移动应用程序所需的核心功能,包括用户界面、网络连接和本地存储。J2ME 中的第二个关键配置文件是 CLDC(连接受限设备配置),它处理蜂窝电话的间歇性连接要求。J2ME 组合中还包括诸如 J2ME Web 服务、移动媒体 API 1.1 版和无线消息 API 等配置文件。
一个奇怪的转折——或者可能是 Sun 对现实的认识——是 J2ME 运行的官方支持平台是 Windows XP 和 Windows 2000。J2ME 将在 Linux 和 Sun 自己的 Solaris 上运行,但它在这些 Unix 克隆系统上“未获得官方支持”。(这使无线开发/目标平台等式一分为二;诺基亚使用的 Symbian 操作系统是最流行的手机操作系统,而微软的 Smartphone 系统软件 2 也是市场上的落后者。因此,矛盾的是,手机开发人员最终可能会在 Microsoft PC 上为 Symbian 手机目标创建代码。)
实际上,编写可在异构手机上移植的应用程序的关键是以 MIDlet 的形式编写 Java 代码。这是应用于使用 J2ME 工具包创建并符合 MIDP 2.0 配置文件的移动 Java 应用程序的名称。MIDlet 将在任何实现 MIDP 的设备上运行;这不仅限于蜂窝电话,还包括手持计算机和混合设备。重要的是,与标准的 Symbian 手机应用程序不同,MIDlet 是“沙盒化的”——也就是说,它们的内存使用是隔离的,以防止恶意病毒代码污染。
(在现实世界中,可移植性尚未像承诺的那样普遍。尚未标准化的、资源受限的手机平台的特性——更不用说为微小屏幕量身定制的用户界面的变化——意味着通常需要进行调整。然而,将 MIDlet 文件复制到另一个平台是一个起点,它使您在完成任何端口的道路上走了一半以上。)
工具包随附的 MIDlet 模拟器可能是其核心,也是在将程序部署到目标手机之前测试程序的关键。(通常,诺基亚等第三方会提供单独的实用程序来处理将可执行文件下载到各自的手机。)我发现编码这些应用程序——这几乎是一个普通的流程,即将您的模块加载调用并将参数传递给访问所需功能的 Java 类——需要很大程度上是反复试验的学习曲线。为了加快技能获取,有一些有用的应用程序说明解释了如何编写您的第一个应用程序并在模拟器中运行它。Sun 在 http://wireless.java.sun.com/midp/articles/wtoolkit/ 提供了一个。诺基亚在 http://ncsp.forum.nokia.com/support/?body=detail&aid=183 提供了一个关于移动设备上的 Java 的出色概述,以及如何创建 MIDlet 应用程序的示例和源代码。
在更广泛的软件世界中,无线 Java 的发展非常像一场草根政治运动。考虑到最近成立的 Java.net 社区,这是一个主要由开源项目组成的松散的协作集合(请参阅 https://www.dev.java.net/)。各种各样的程序员都已注册并发布请求,希望人们加入他们提议的工作。
Java.net 上无线工具兴趣的中心是“Java for Communications”子社区 (https://communications.dev.java.net/)。该站点吹捧用于构建 VoIP(IP 语音)应用程序、IM(即时消息)库和其他移动/无线实用程序的 Java 组件的可用性。
该领域的主要项目是 CellphoneJava (https://cellphonejava.dev.java.net/),这是一个巧妙的小程序和组件集合。同样值得关注的是 SIP(会话发起协议)Communicator,这是一个具有媒体和 IM 功能的客户端,支持通过 IPv4 和 IPv6(互联网协议版本 4 和 6)的音频/视频会话。
在企业方面,Sun 和 Oracle 联合起来,竞相争取社区旗帜。3 他们组建了 Java Tools Community,4 该组织旨在争取工具供应商创建一个替代 Microsoft .NET5 和 Visual Studio 集成开发环境的框架。Borland、IBM、SAP 和 SAS 也加入了进来,以添加将支持 Web 服务的工具。
就手机供应商而言,他们拥有最活跃的开发者支持运营,特别是在线论坛的形式,开发者可以在其中向同行提出有关特定手机的问题。正如最大的手机供应商所预期的那样,诺基亚的论坛 (http://ncsp.forum.nokia.com/) 访问量很大。
对于像 Sendo 这样的小型供应商来说,风险可能更高。这家欧洲手机制造商去年退出了微软的 Smartphone 阵营,转而拥抱 Symbian 和 Java,并大力推动说服第三方开发人员创建应用程序,以使其手机声名鹊起。Sendo 为在其网站 http://www.sendo.com/dev/ 免费注册的开发人员提供工具和技巧。
尽管为单个手机编写 J2ME 应用程序是无线编程进程的第一步,但它可能不再是最重要的一步。现在,将支持 J2ME 的设备连接到后端服务变得越来越重要,因为手机应用程序不再孤立存在。
为此,Sun 今年早些时候宣布计划“启动一个端到端的移动企业开发平台,以帮助服务提供商和企业快速将其当前的 IT 投资扩展到 2.5 和 3G 无线网络。”4
作为推动的一部分,Sun 正在重新激发其推广 Jini 的努力,Jini 是一种网络连接软件技术,能够从以太网中挑选无线客户端并将它们连接到后端服务器。
Jini 于 1999 年 1 月发布,被定位为一个与平台无关的 Web“拨号音”,使用户能够从任何地方将任何漫游的消费者智能设备连接到公司的网络。在发布时宣传该技术时,Sun 提高了人们的期望,即符合 Jini 标准的智能设备将很快得到广泛部署。
但这从未发生。然而,Jini 在开发者社区中取得了缓慢但稳步的进展。通过使程序员更容易将 Jini 连接能力集成到手机和 PDA 中,Sun 希望新一批 Jini 开发者工具包能够激发进一步开发者采用的关键规模。
开发人员可以从 http://wwws.sun.com/software/communitysource/jini/download.html 下载 Sun 的 Jini 技术工具包 2.0 版。V2.0 实施了新的 Jini 安全模型,支持 Jini 发现协议的第 2 版,并具有新的远程方法调用编程模型,每个协议堆栈层都有自定义 API。
最后,Sun 一直在扩展其无线 Java 硬件视野,超越手机,拥抱英特尔嵌入式处理器,这些处理器越来越多地在非手机设备(如手持计算机和 MP3 播放器)中得到应用。
此举涉及为英特尔的 XScale 处理器增加对 J2ME 的支持。Sun 专门针对 XScale 推出了一种优化的 HotSpot 即时 Java 编译器,并将其称为 CLDC HotSpot(在 J2ME 中的 CLDC 配置文件之后命名)。经过仔细检查,CLDC HotSpot 似乎是 Sun 旧式嵌入式 Java KVM(K 虚拟机)的更新实现。然而,这是扩大 Java 适用范围的重要举措,这在很大程度上是因为它是一个针对英特尔目标的免费工具。(在 http://java.sun.com/products/cldc/wp/CLDC_HI_WhitePaper.pdf 上有一篇关于 CLDC HotSpot 的有用白皮书)
1. Walko, J. TI, INRIA 在法国合作建立 Java 能力中心。EE Times,(2003 年 12 月 4 日); http://www.eetimes.com/story/OEG20031204S0021。
2. Wolfe, A. 微软的紧凑框架瞄准智能设备,”(2003 年 10 月),10–12 页。
3. Taft, D. K. Java 工具供应商联合起来对抗 .NET。EWeek,(2003 年 11 月 24 日); http://www.eweek.com/article2/0,4149,1394340,00.asp。
4. 参见参考文献 2。
5. 参见参考文献 3。
6. Sun 新闻稿。Sun 微系统公司推出新产品和计划,以团结无线 java 社区并加速移动数据服务的部署。(2003 年 6 月 10 日); http://www.sun.com/smi/Press/sunflash/2003-06/sunflash.20030610.2.html。
ALEXANDER WOLFE 获得了纽约市库珀联盟学院的电气工程学位。他是一位科学作家,常驻纽约州森林小山,曾为 IEEE Spectrum、EE Times、Embedded Systems Programming 和 Byte.com 撰稿。
工具包 2.1 beta 版本(免费下载)
http://java.sun.com/developer/earlyAccess/j2mewtoolkit
关于编写您的第一个应用程序并通过模拟器发送它
http://wireless.java.sun.com/midp/articles/wtoolkit/
下载 Jini 网络技术
http://wwws.sun.com/software/communitysource/jini/download.html
关于免费工具的有用白皮书
http://java.sun.com/products/cldc/wp/CLDC_HI_WhitePaper.pdf
由最大的手机供应商提供
http://ncsp.forum.nokia.com/support/?body=detail&aid=183
最近成立的、松散的、协作的、主要由开源项目组成的集合
Java.net 上无线工具兴趣的中心
https://communications.dev.java.net/
主要的 Java.net 项目
https://cellphonejava.dev.java.net/
Sendo 为在其网站 http://www.sendo.com/dev/ 免费注册的开发人员提供工具和技巧
最初发表于 Queue vol. 1, no. 10—
在 数字图书馆 中评论本文
Matt Godbolt - C++ 编译器中的优化
在向编译器提供更多信息方面需要权衡:这会使编译速度变慢。诸如链接时优化之类的技术可以使您两全其美。编译器中的优化在不断改进,并且即将到来的间接调用和虚函数分派的改进可能很快就会带来更快的多态性。
Ulan Degenbaev, Michael Lippautz, Hannes Payer - 作为合资企业的垃圾回收
跨组件跟踪是解决跨组件边界的引用循环问题的一种方法。只要组件可以形成任意对象图,并且跨 API 边界具有重要的所有权,就会出现此问题。CCT 的增量版本已在 V8 和 Blink 中实现,从而能够以安全的方式有效且高效地回收内存。
David Chisnall - C 不是一种低级语言
在最近的 Meltdown 和 Spectre 漏洞之后,值得花一些时间研究根本原因。这两种漏洞都涉及处理器推测性地执行超出某种访问检查的指令,并允许攻击者通过侧信道观察结果。导致这些漏洞以及其他几个漏洞的功能被添加进来是为了让 C 程序员继续相信他们正在使用低级语言进行编程,而这种情况在几十年前就已不复存在。
Tobias Lauinger, Abdelberi Chaabane, Christo Wilson - 你不应该依赖我
大多数网站都使用 JavaScript 库,其中许多库已知是易受攻击的。了解问题的范围以及包含库的许多意外方式只是改进情况的第一步。这里的目标是,本文中包含的信息将有助于为社区提供更好的工具、开发实践和教育工作。