Mozilla 2

Brendan Eich 的这篇 Mozilla 2,过了一个多月我才来看。还是有些新内容的。

现在“Mozilla”这个词比较怪,它不再指以前那个“Mozilla Suite”浏览器 (自从 SeaMonkey 分出去之后),也不专指“Firefox”,更不仅限于“Gecko”渲染引擎 (虽然现在给 Mozilla 起的版本号还是和 Gecko 同步的),按我的理解,指的是 Mozilla 组织这面大旗下的整个平台的统称,Web 渲染,XUL, XBL, JavaScript, XML/XSL 等许多引擎的统称,而其招牌产品就是 Firefox。

其中,Mozilla 1.9 将对应着 Firefox 3.0,其路线大致已经确定了。Brendan 讨论的是在架构上将有巨大变化的 Mozilla 2,它预期在 2008 年出现。

最引人注目的是基于 JIT 的 JavaScript 虚拟机的出现,加上改进的垃圾回收,将给 JavaScript 的效率 (在 DOM 访问和内存占用方面) 带来巨大提升,据说。同时,它支持的语言会是 ECMAScript 4 (俗称 JavaScript 2)。

其他的改进对普通用户则不大可见,比如放弃 XPCOM,而更多的依赖标准 C++ 的特性来写程序,去掉一些为了兼容性遗留的旧 API,简化代码组织,放弃 CVS 换用新的版本管理工具,等等。

Author: jjgod

A software engineer from China, working on text rendering for a fruit company. Interested in typography and science fiction.

4 thoughts on “Mozilla 2”

  1. 放弃 XPCOM?? 那跨平台跨语言的优势怎么办?

    用 C++ 来保证跨平台可以理解,但用 JavaScript/Python 实现 XPCOM 也是很有意义的啊.

  2. qyb:

    不好意思,我没说清楚,他们的趋势应该是慢慢减少 XPCOM 的使用,尤其是多余的一些 API。举的一个例子是,原来的:

    PRBool
    nsXULDocument::OnDocumentParserError()
    {
    // don't report errors that are from overlays
    if (mCurrentPrototype && mMasterPrototype != mCurrentPrototype) {
        nsCOMPtr<nsIURI> uri;
        nsresult rv = mCurrentPrototype->GetURI(getter_AddRefs(uri));
        if (NS_SUCCEEDED(rv)) {
        PRBool isChrome = IsChromeURI(uri);
        if (isChrome) {
            nsCOMPtr os(
            do_GetService("@mozilla.org/observer-service;1"));
            if (os)
            os->NotifyObservers(uri, "xul-overlay-parsererror",
                                EmptyString().get());
        }
        }
        return PR_FALSE;
    }
    return PR_TRUE;
    }
    

    可以简化为:

    bool
    XULDocument::OnDocumentParserError()
    {
    // don't report errors that are from overlays
    if (mCurrentPrototype && mMasterPrototype != mCurrentPrototype) {
        IURI *uri = mCurrentPrototype->GetURI();
        if (IsChromeURI(uri)) {
        GetObserverService()->NotifyObservers(uri, "xul-overlay-parsererror");
        }
        return false;
    }
    return true;
    }
    

    另外,能说说“用 JavaScript/Python 实现 XPCOM”的思路吗?在 Mozilla 的核心代码还是用 C++ 写的情况下。

  3. ActivePython 有一个项目叫 PyXPCOM,事实上一直在 mozilla 的 cvs 里 extensions 目录下。我曾经在 win32 下编译过一次,试了试用 python 去连接 XPCOM 服务,但没尝试写一个 xpcom service. 但肯定是可用的。 用 JavaScript 编写 XPCOM 服务我是以前听我的同事说的,”基于Mozilla 的扩展开发”就是他写的,我认为他是这个领域的专家,所以有此一说。

Leave a Reply

Your email address will not be published. Required fields are marked *