JSXへのファーストインプレッションのメモ

サンプルコードをひたすら読んだ。その感想。
http://jsx.github.com/try-on-web/#

読んだだけなのでコードはまだ書いてません。
言わなきゃいけない前提として、僕はJavaが嫌いです。

以下雑文

coffee-scriptっぽさはほとんど感じない(あえていうとコンストラクタが constructor なのぐらい)


function というシンタックスが冗長な気がする
# 自分がGoLang触ってて気に入ったのが関数定義が func で、高階関数への抵抗がものすごく減る

末尾 セミコロン冗長な気がする (LL脳)
ハッシュ定義のカンマ省略したいなー(Coffee脳)

abstract class 必要なのかなーうーん
overrideのシンタックス必要だろうか

  override function say() : void {

interfaceとmixinよいかも

interface Say {
  abstract function say() : void;
}

mixin SayName {
  abstract var _name : string;
  override function say() : void {
    log "I am " + this._name;
  }
}

class Human implements Say, SayName {
  var _name : string;
  function constructor(name : string) {
    this._name = name;
  }
}

と思ったがやっぱ冗長な気がしてきた


型付き Lambda
Haskell感高まってきた

  static function lambda(x : number) : function (: number) : number {
    return function (y : number) : number {
      return x + y;
    };
  }
  static function run() : void {
    var f = Test.lambda(3);
    log f(1);
    log f(2);
  }
}


仕様としてimportもってるのはいい

import "059.import/hello.jsx";
import "059.import/sub/goodbye.jsx";

import時に名前空間を作れる

import "062.import-as/foo.jsx" into foo;

python っぽい import ~ from~

import _Private1, _Private2 from "063.import-by-name/foo.jsx";

ワイルドカードで読み込んだり

import "118.import-all/*.jsx";
import "119.import-all-into/*.jsx" into N;
import "135.ignore.dot-files/*.jsx";


言語仕様として do-while必要かなー(Pythonユーザーとして)


継承とインターフェース周りは非常によく考えられてる

失敗する可能性があるメソッド

var x : MayBeUndefined.<number> = a.pop();

HaskellのMaybe型を参考にしたんだろうけどシンタックス気持ち悪い



__noconvert__ って冗長…

Test.say(Test.ok() as __noconvert__ string);


Error型があるのはいいなー



また急にHaskellっぽく…

    var f: (int) -> int = function(x : int) : int { return x + 10; };
    log f(32);


## 全体的に

importがいい。これだけでも使う理由にはなるかもしれない。
エントリポイントがクラスなのはJavaの一番ださいところだと思っているけど引きずってるのがイケてないしかなり抵抗を感じる

static functionに対するなんらかのシンボリックなエイリアスというかシンタックスが欲しい。function何度も書かせられるのが嫌でcoffee-script使ってるので…。
型がないのを前提にしたコードに対して型を当てだすと辛い。
全体的にJavaのださいところ引きずっててカッコ悪い

あと自分はとにかくJavaが嫌いだということを再確認した