天下一altJS武闘会(#tenka1altJS) @渋谷プライムプラザ四階
- κeen
- 東大数学科の4年生
- Twit : @blackenedgold
- Github : KeenS
- Blog : κeenのHappy Hacκing Blog
- Shibuya.lispにいます。(2014-06〜運営になりました)
- Lisp, Ruby, OCaml, Shell Scriptあたりを書きます
- (ボツ) Shen.js
- (ボツ) Embedable Common Lisp with Emscripten
- (ボツ) Picrin with Emscripten
- (ボツ) オレオレaltJSの作り方の話
- ParenScript
Shenの公式ページより
- パターンマッチ
- λ計算ベース
- マクロ
- 遅延評価も可能
- 静的型検査
- 関数的なPrologの統合
- ビルトインコンパイラコンパイラ
これのJS実装もある。
(define factorial
0 -> 1
X -> (* X (factorial (- X 1))))
そもそもaltJSじゃない…
ボツ
- ANSI Common Lisp準拠のCommon Lisp処理系
- LispをコンパイルしてCを吐く
- Emscriptenでコンパイルすれば…
#include <ecl/ecl-cmp.h>
が悪さをしてコンパイル出来ない
ボツ
- R7RS small準拠を目指すScheme処理系
- R7RS準拠の中では唯一Emscriptenで コンパイル出来るらしい
- SDLもEmscriptenで動くらしいから 組み合わせればウハウハじゃね?
コンパイル出来ない… (va_argsは64bit x Clang3.3では コンパイル出来ないとか言われる。回避策も効かない)
ボツ
escodegenを使う
{
type: 'BinaryExpression',
operator: '+',
left: { type: 'Literal', value: 40 },
right: { type: 'Literal', value: 2 }
}
→40 + 2
オレオレaltJS(S式) ↓ read リスト ↓ 変換 (find-file “~/Lisp/translate.lisp”) リスト ↓ cl-json JSON ↓ escodegen JS
escodegenのドキュメントがあんまりない…
ボツ
- Common Lisp製
- Weblocks(WAF)に採用されるなどの実績/伝統
- Common LispのサブセットをJSにコンパイル
- 実際はCommon Lispのマクロなので Common Lispに組み込んで使える
- ランタイムライブラリは必要ない
- Lispを無理矢理変換するというより LispっぽくJSを書ける感じ
~/Lisp/parenscript.lisp
(@ obj property)
でプロパティ参照
(chain obj function/property)
でメソッドチェーン
など
以上