マイナーalt js百花繚乱

56
マイナーAltJS百花繚乱 esehara shigeo

Upload: esehara-shigeo

Post on 06-May-2015

5.633 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: マイナーAlt JS百花繚乱

マイナーAltJS百花繚乱

esehara shigeo

Page 2: マイナーAlt JS百花繚乱

スライドが50枚以上あるので高速でやります。気になるところはあとでスライドで読んでください

!! WARNING !!

Page 3: マイナーAlt JS百花繚乱

開始

Page 4: マイナーAlt JS百花繚乱

Douglas CrockfordJavaScript: The Good Parts

JavaScript::

The World's Most Misunderstood Programming Language

(もっとも誤解された

プログラミング言語)

Page 5: マイナーAlt JS百花繚乱

The World's Most Misunderstood Programming Language Has Become the World's Most Popular Programming Language.

Page 6: マイナーAlt JS百花繚乱

But….

Page 7: マイナーAlt JS百花繚乱

未知との-prototype-遭遇

Page 8: マイナーAlt JS百花繚乱

大規模化

Page 9: マイナーAlt JS百花繚乱

疲労するコーダー

Page 10: マイナーAlt JS百花繚乱
Page 11: マイナーAlt JS百花繚乱

Help…(もうJavaScriptは書きたくない)

Page 12: マイナーAlt JS百花繚乱

CoffeeScriptを汝に捧げよう

Page 13: マイナーAlt JS百花繚乱

救いはTranslator

Page 14: マイナーAlt JS百花繚乱

光main stream

Page 15: マイナーAlt JS百花繚乱

CoffeeScriptJavaScript Translatorの元祖かつ本命

Page 16: マイナーAlt JS百花繚乱

Microsoftの本気

TypeScript

Page 17: マイナーAlt JS百花繚乱

マルチプラットフォームかつ堅牢な型システム

Haxe

Page 18: マイナーAlt JS百花繚乱

人間を超える機械の最適化

JSX

Page 19: マイナーAlt JS百花繚乱

But….

Page 20: マイナーAlt JS百花繚乱

闇sub stream

Page 21: マイナーAlt JS百花繚乱

その前に

Page 22: マイナーAlt JS百花繚乱

お前誰だ

Page 23: マイナーAlt JS百花繚乱

esehara shigeo趣味:言語いじり

PythonistaClojuren←New!!

JavaScript歴 :: jQuey plugin書いたり

Page 24: マイナーAlt JS百花繚乱

こういうのを書いて遊んでます

Page 25: マイナーAlt JS百花繚乱

闇AltJSとは?

Page 26: マイナーAlt JS百花繚乱

個性豊かなダイアの原石のような

Alternative JavaScript(No main)

Page 27: マイナーAlt JS百花繚乱

彼らに光を

Page 28: マイナーAlt JS百花繚乱

GorillaScriptニンニクヤサイSyntaxマシマシ

Page 29: マイナーAlt JS百花繚乱

Thus, one of GorillaScript's main goals is to optimize human thought by relieving as much stress and ceremony of coding as possible while simultaneously enabling the writing of beautiful code.

目的

Page 30: マイナーAlt JS百花繚乱

const fizzbuzz_strings = * "Fizz" * "Buzz" * "FizzBuzz"

let is_fizzbuzz(x) x % 15 == 0

let is_fizz(x) x % 3 == 0

let is_buzz(x) x % 5 == 0

現実(FizzBuzz)

let fizzbuzz (x) switch case is_fizzbuzz(x) fizzbuzz_strings[2] case is_fizz(x) fizzbuzz_strings[0] case is_buzz(x) fizzbuzz_strings[1] default x

for i in 1 til 100 console.log fizzbuzz(i)

Page 31: マイナーAlt JS百花繚乱

Syntaxを見てみよう

Let’s view syntax.

Page 32: マイナーAlt JS百花繚乱

constは文字通り定数です

そしてアスタリスクは配列を作るためです

const fizzbuzz_strings = * "Fizz" * "Buzz" * "FizzBuzz"

解説

Page 33: マイナーAlt JS百花繚乱

letは宣言です。関数を定義する場合は、イコール

を使わず、インデントだけにします。変数の場合

は"=”を使う。ちなみにこの宣言はimmutable(変更不可)なので、mutable(変更可能)にしたいとき

は let mutableという宣言にしないといけない。

let is_fizzbuzz(x) x % 15 == 0

解説

Page 34: マイナーAlt JS百花繚乱

馴染み深いswitch文ですが、最初のswitchに変数を指定しな

いことで、簡易版if-elseとしても使えます。

let fizzbuzz (x) switch case is_fizzbuzz(x) fizzbuzz_strings[2] case is_fizz(x) fizzbuzz_strings[0] case is_buzz(x) fizzbuzz_strings[1] default x

解説

Page 35: マイナーAlt JS百花繚乱

Kal非同期時代の申し子

Page 36: マイナーAlt JS百花繚乱

task is_buzz (x) return x mod 5 == 0

task is_fizz (x) wait for buzz from is_buzz(x) fizz = x mod 3 == 0 return [fizz, buzz]

task fizzbuzz (x) wait for fizzbuzz from is_fizz(x) when fizzbuzz[0] and fizzbuzz[1] return "FizzBuzz" when fizzbuzz[0] return "Fizz" when fizzbuzz[1] return "Buzz" otherwise return x

FizzBuzzx = 0until x is 99 x += 1 wait for result from fizzbuzz x print result

Page 37: マイナーAlt JS百花繚乱

Syntaxを見てみよう

Let’s view syntax.

Page 38: マイナーAlt JS百花繚乱

taskとは、非同期処理が発生するfunction専門の宣言。

wait for foo from bar は、処理が返ってくるまで待機せよという

こと。

task is_buzz (x) return x mod 5 == 0

task is_fizz (x) wait for buzz from is_buzz(x) fizz = x mod 3 == 0 return [fizz, buzz]

解説

Page 39: マイナーAlt JS百花繚乱

このような非同期処理の最中に、処理を

一回ブロックして待ち受ける実装は、Go言語のChannel、Clojureのcore.asyncなど

で採用されていたりする。

ちなみに

Page 40: マイナーAlt JS百花繚乱

Roy関数型JavaScriptのニューカマー

Page 41: マイナーAlt JS百花繚乱

data Option a =

Some a | None

let is_fizz x =

if x % 3 == 0 then

Some "Fizz"

else

None ()

let is_buzz x m =

if x % 5 == 0 then

match m

case (Some a) = Some (a ++ "Buzz")

case None = Some "Buzz"

else

m

FizzBuzzlet optionMonad = {

return: \x ->

Some x

bind: \x f -> match x

case (Some a) = f a

case None = None ()

}

let fizzbuzz x y = if x > y then console.log("") else let fizz = is_fizz x let result = (do optionMonad buzz <- is_buzz x fizz return buzz ) match result case (Some a) = console.log a case None = console.log x fizzbuzz (x + 1) y

fizzbuzz 1 100

Page 42: マイナーAlt JS百花繚乱

Syntaxを見てみよう

Let’s view syntax.

Page 43: マイナーAlt JS百花繚乱

RoyではHaskell likeの型を宣言することが出来ます。この場合は、SomeかNoneの型を取るOption型を宣言しています。この場合、値を持つSomeか、あるいは値を持たないNoneのいずれかの型を持つということになります(Scalaとかでも見ますね)

data Option a = Some a | None

解説

Page 44: マイナーAlt JS百花繚乱

型を宣言したら、オブジェクトリテラルで使用することができます

let optionMonad = { return: \x -> Some x bind: \x f -> match x case (Some a) = f a case None = None ()}

解説

Page 45: マイナーAlt JS百花繚乱

あとは、<-という記法で結果を束縛したり、case文で型による分岐をしたりすることができます

let fizzbuzz x y = if x > y then console.log("") else let fizz = is_fizz x let result = (do optionMonad buzz <- is_buzz x fizz return buzz ) match result case (Some a) = console.log a case None = console.log x fizzbuzz (x + 1) y

解説

Page 46: マイナーAlt JS百花繚乱

Royの作者は、アメリカのJSCONF 2012のときに、Monad SyntaxはCallback地獄に対してすっきりすると述べている(実

はRoyのMonad Syntaxはコールバック

に変換される。例としてAjax Monad(!!)のアプローチなどを紹介している)

ちなみに

Page 47: マイナーAlt JS百花繚乱

おまけ

Page 48: マイナーAlt JS百花繚乱

ClojureScriptKing of 闇のAltJS

Page 49: マイナーAlt JS百花繚乱

ClojureScript

Page 50: マイナーAlt JS百花繚乱

ClojureScriptいいところ

LISP

Page 51: マイナーAlt JS百花繚乱

ClojureScriptわるいところ

LISP

Page 52: マイナーAlt JS百花繚乱

元々、JVM言語であるClojureを元に実装

しており、Clojure公式のGitHub Groupでもポートされているので、Clojureが死なな

ければたぶんClojureScriptも死なない

冗談はおいておくとして

Page 53: マイナーAlt JS百花繚乱

さらに言えば、Clojure + ClojureScriptで使えるライブラリもそこそこあったりするの

で、他の言語のエコシステムと比較しても

面白い

冗談はおいておくとして

Page 54: マイナーAlt JS百花繚乱

ただ自分の場合、まだ上手い感じで書け

ないのでJavaScriptがでかくなる(ただし

ロジックは書きやすい)

冗談はおいておくとして

Page 55: マイナーAlt JS百花繚乱

以上

Page 56: マイナーAlt JS百花繚乱

Happy Hacking JavaScript Life!!

良きJavaScript lifeを!