280Slides in Objective-J
280Slides という Web サービスがすごい。
- Dru’s Blog » New Web Site in Objective-C via Javascript
- New 280 Slides Web Site translates Objective-C to Javascript | reddit
Keynote 風のプレゼンテーションツールとしての UI も素晴らしいが、圧巻なのは、その実装技術。
「どんな JavaScript や Flash を使ってるんだ?」と思うだろう。さあ、FireBug なり Safari の Web インスペクタなりで、ページに読み込まれているスクリプトを確認してみよう。その大半が馴染みのない拡張子 .j であることに驚くに違いない。
上にあげたのは、.j ファイルの一例だが、あなたが Mac OS X の開発者であれば、見覚えのある名前ばかりだろう。これは Mac OS X の MVC フレームワーク Cocoa を構成するクラス名と酷似している。
Objective-J
試しに DocumentController.j を覗いてみようか。
//
// DocumentController.j
// Editor
//
// Created by Francisco Tolmasky.
// Copyright 2005 - 2008, 280 North, Inc. All rights reserved.
//
import <AppKit/CPDocumentController.j>
import "OpenPanel.j"
import "Themes.j"
import "ThemePanel.j"
import "WelcomePanel.j"
@implementation DocumentController : CPDocumentController
{
BOOL _applicationHasFinishedLaunching;
}
- (void)applicationDidFinishLaunching:(CPNotification)aNotification
{
// FIXME
// Check [CPApp arguments][0] for "docs" and [self openPresentationWithFilename: args[2]];
[CPApp runModalForWindow:[[WelcomePanel alloc] init]];
_applicationHasFinishedLaunching = YES;
}
どう見ても Objective-C です。
もちろん、ブラウザがこんな独自言語をコンパイルできるわけがない。これらのスクリプトは Objective-J.js によって、実行時に JavaScript へと変換(コンパイル)される。
どんなふうになるかは、プリコンパイルされた AppKit.sj もあるので、参考に覗いてみるといいだろう。
DSL and Framework
Domain-Specific Language (DSL) の有効性は散々言い古されてきたけど、Objective-J が Cocoa という、すでに GUI アプリケーションの分野で定評のあるフレームワークを土台としていることは興味深い(もしかすると今後、このような流れが他にも起こるだろうか?)。
そして、なにより、こんなことを妄想しこそすれ、本当にやってしまう心意気は賞賛に値する。
P.S.
(2008.06.06 追記)この記事を書いたあとで、Room 101: java'scrypt という記事を思い出した。
Javascript is the assembly language of the internet platform (and the browser is the OS).
この記事では他にも Google Web Toolkit に言及している。そういえば、Google Web Toolkit (GWT) も Java で書かれたプログラムが(サーバ側で)JavaScript に「コンパイル」されるのだった。