JSXを使ってみたよ
朝起きたらJSX!JSX!なんてTwitterのTLに流れてるものだからなんだろうと思ったら、
静的型付けでOOPなJava風のコードを「速い」JavaScriptのコードに変換してくれるコンパイラみたい(あってるのかな?)
んで、さっそく試してみたのですよー。
環境:WindowsXP SP3 / node 0.6.17 / npm 1.1.21
リポジトリを持ってくる
gitで持ってくるですよー。
$ git clone http://github.com/jsx/JSX.git
$ cd JSX/
$ npm install
npm installでモジュールを入れているけど、本当はmake setupするところなのです……
でも中でperlを使っているようなので直にnpm installを叩いてます。
コードを書いてみる
// aaa.jsx class _Main { static function main(args: string[]): void { log "Hello, World!"; } }
チュートリアルにあったコードをそのまま書いてみた。
型の書き方がPascal, Scalaぽい。括弧省けるならセミコロンも省けると良かったかな……
まだちゃんと調べてないから本当は省けるのかもしれないけど。
コンパイルする
shebangも書いてあるのだけど、Windowsなのでアレなので直にnode.jsから実行します。
$ node bin/jsx aaa.jsx
これで実行すると標準出力に表示されます。
出力されたコード
var JSX = {}; (function () { /** * copies the implementations from source interface to target */ function $__jsx_merge_interface(target, source) { for (var k in source.prototype) if (source.prototype.hasOwnProperty(k)) target.prototype[k] = source.prototype[k]; } /** * defers the initialization of the property */ function $__jsx_lazy_init(obj, prop, func) { function reset(obj, prop, value) { Object.defineProperty(obj, prop, { value: value, enumerable: true, writable: true, configurable: true }); return value; } Object.defineProperty(obj, prop, { get: function () { return reset(obj, prop, func()); }, set: function (v) { reset(obj, prop, v); }, enumerable: true, configurable: true }); } /* * global functions called by JSX as Number.* (renamed so that they do not conflict with local variable names) */ var $__jsx_parseInt = parseInt; var $__jsx_parseFloat = parseFloat; var $__jsx_isNaN = isNaN; var $__jsx_isFinite = isFinite; var $__jsx_ObjectToString = Object.prototype.toString; var $__jsx_ObjectHasOwnProperty = Object.prototype.hasOwnProperty; /* * public interface to JSX code */ JSX.require = function (path) { var m = $__jsx_classMap[path]; return m !== undefined ? m : null; } /** * class _Main extends Object * @constructor */ function _Main() { } _Main.prototype = new Object; /** * @constructor */ function _Main$() { }; _Main$.prototype = new _Main; /** * @param {Array.<undefined|!string>} args */ _Main.main$AS = function (args) { console.log("Hello, World!"); }; _Main$main$AS = _Main.main$AS; var $__jsx_classMap = { "..\aaa.jsx": { _Main: _Main, _Main$: _Main$ } }; }());
こんな感じ。みたい。
Windowsだからなのかな、LFのファイルなんだけどCRが最初の方にまじってる。
Vimな人はjsx.vimでシンタックスハイライト出来るみたい。
jsx-mode.elもどこかにあるみたいだけど……
デバッグも--enable-source-mapを指定するとChromeで出来るみたい。
多人数での開発はやっぱりこういう言語の方がいいのかなー。