scm2js

http://hop.inria.fr/usr/local/share/hop/weblets/home/articles/scheme2js/article.html
この辺とかを読む。メモ

Abstract

SchemeからJavaScriptコンパイルする事は出来るんだけど、Continuations,exact numbers(これ何?),partial treatment of tail recursions(これも何?)は扱う事が出来ない。


その代わりと言ってはなんだけど、Scheme <-> JavaScriptで便利な感じにconnection出来る様にしましたってのと、SchemeJavaScriptのコードを混ぜて書けますよ、という話。


気になるのは、continuationsらの欠落が、生成されたJS側で起こっているのか、このコンパイラがcontinuationsを含むSchemeコードを取り扱う事が出来ないのか、という事。前者だと、どうにか出来る気がするんですけど・・・っていう。
2章見て分かったのは、コンパイラ側はSchemeのコードでcall/cc,evalを使う事が出来ないという事。

Introduction

JavaScriptSchemeに影響受けたらしい。まぁ確かに受けてるとは思うけど、Schemeだけでは無いのも当然。
で、この二つの言語はsyntaxによって違うし、Schemeはcontinuationがあるけど、JSはprototypesに基づくobject layerを持っていますよ、そして小さい部分で色々違うらしい。

2,3

SchemeJavaScriptの違いについてもうちょっと詳しくとか。
closureの取り扱いや、最適化の話とベンチマークとか。
ベンチマーク見た感じだと、非常に酷く成っている部分だけを修正すれば、十分使えるレベルでは無いかと思われる。

JavaScript Integration

prototype周りを如何にして処理するかという話。

で残りはHop

実際に組み合わせて使ってみたとかそういう感じの話。

Related

client sideでのJavaScriptの置き換えというのは他にもいくつかあって、3つの種類に分けられる。

1.ある言語をブラウザレベルでサポートさせる
2.既存のプラグインへとcompiling
3.直接JavaScriptにcompileする。

ブラウザの拡張関しては、JavaFlashが成功を納めている。
scm2jsに似たものとしてはOpenSchemeがある。


Biglooなんかは、JavaByteCodeへのcompileで恩恵に授かった例。


ただ、JavaPluginは全てのクライアントにあるわけでは無いので、その場合はJavaScriptに直接compileした方が良い。
その例では、scm2jsの他に
netzstaub » ParenScript


3に関しては、scm2jsの如く俺言語をJavaScriptにtranslateするっていうのと、俺言語をJavaScriptで実装するっていうのに分かれるんだろうね。
JavaScriptにtranslateするのは、どっちかっていうと2っぽいか。

あと

このpaperは07年のもので、今現在はどこまで進んだかというのは気になる。
Future workに、evalの改善とcall/ccの実装の話があるし。


凄いかっ飛ばして読んだ、というか英語読むのキツい。