GitHub の ATOM が CoffeeScript で書かれているのはどうなの?

http://discuss.atom.io/t/why-coffeescript/131

5 comments | 2 points | by noto 3年弱前 edited


noto 3年弱前 edited | ▲upvoteする | link

先日 GitHub が発表したエディタ ATOM のディスカッション・フォーラムで、なぜ CoffeeScript で書かれていて ECMAScript 6 (ES6) じゃないの? node.js/V8 を利用するデスクトップアプリケーションなら ES6 をすぐに使うほぼ完璧な機会なのに、という問題提起があり、それについて議論があったようです。

前提として、GitHub の JavaScript Styleguide

  • 新たに JS を書く時は CoffeeScript で書くこと
  • 新たに .js ファイルを追加することは避けること

と書かれていて、GitHub の中の人としては CoffeeScript が合理的な選択であるようです。

以下、like が多いものだけピックアップします。

ES6, JavaScript 賛成派:

  • JavaScript 開発者のほうが CoffeeScript より多いから、コントリビュートする際の障壁が上がってしまうのではないか。

  • Express 開発者の visionmedia (TJ Holowaychuk) 氏

    • CoffeeScript 開発で使われるイディオムは JS の世界の基準と大きく異なることが多く、通常の JavaScript とインターフェースを取るとちょっと奇妙 な API になりがち。
    • ES6 に賛成。ES6 が使えるようになると、CoffeeScript 独自で提供される機能はすごく少なくなる。
    • 失うものが多い割に得るものが少ないんじゃないか。
  • CSON を使うのはコメントが使えてよい。ただ、JSON5 を使わないのはなぜ?

    • CSON より YAML のような、CoffeeScript の外側でも適用できるものを使って欲しい。

CoffeeScript 擁護派:

  • CoffeeScript は readability を改善させるのでよいのではないか。参入障壁が上がっても、コントリビューションの質が上がるかもしれないし、そうなると読みやすくてメンテしやすくなる。

  • GtiHub の人たちが大量にコードを読んだりメンテするなら、彼らが決めれば良いこと。好みを押し付けるのは正しいと思わない。プロジェクトが便利で良いものなら、コントリビューションというのは言語に関わらず集まるもの。開発者自身に何で書くか決めさせれば、彼らはよりハッピーに感じられてより生産的になるから、よりすばらしいエディタが使えるようになる確率が格段に上がると思う。

    • CoffeeScript だとわかってすぐ手を引いた、という人も、もしそのエディタがすばらしく気に入って、バグに悩まされるようになれば、十中八九コードに dive するようになると思うよ。
    • CoffeeScript の生成する JavaScript が ES6 で動かないというけど、それは真実じゃない。ES6 のいくつかの機能が、すでに CoffeeScript にあり、CoffeeScript から直接的に利用できないということ。ネイティブ JavaScript の方がパフォーマンスが良いかもしれないけど、ES6 の文法で CoffeeScript の既存機能が実装できないということでもないから、それほど大きな問題じゃないんじゃないの?

さて、もともとこのディスカッションについて知ったのは @ryukbk さんの tweet 経由なのですが、この中に「node.jsベースでChromiumのUIというパーフェクトジオングみたいなAtom」という表現があって、じわじわ来ますw


Feb/2014: ワザノバTop25アクセスランキング


#github

noto 3年弱前 edited | ▲upvoteする | link

@naoya_ito さんの tweet を、ご本人の許可を得て掲載します:

hidden 3年弱前 | ▲upvoteする | link

アローファンクションとかクラスシンタックスとか、V8はまだまだES6の構文ベースの機能に全然対応していません。 だから前提がおかしいと思います。

noto 3年弱前 | ▲upvoteする | link

各実装での ES6 対応状況は http://kangax.github.io/es5-compat-table/es6/ にまとまっていて、 V8 での開発状況は https://code.google.com/p/v8/issues/list?q=label:Harmony が参考になるようです。

ご指摘のとおり V8 / Node Harmony でもまだまだ未実装のものが多いようです。TJ Holowaychuk さんも「ES6 が使えるようになると」と言ってますが、そういう意味ではこの議論、今使えるものと近い将来使えるようになるものが若干ごっちゃになっていると思います。

あともう一つ補足で、ES6 で予定されている機能の説明は https://github.com/lukehoban/es6features がわかりやすくて、現在も頻繁にメンテされています。英語ですが、サンプルコードが多いので概要つかみやすいと思います。

JS でブロックスコープが使えるようになるといいなぁと思う人がけっこういるのではないかと推測しますが、それを実現する let はすでに Node Harmony / V8 で実装されているようです。

Back