Skip to content

[Resarch Article] A process of research and reflection on the following: 1. Explore some ways to use Common Lisp from a web browser 2. Organize useful use cases.

License

Notifications You must be signed in to change notification settings

TheR1ddle/If-i-have-a-Common-Lisp-in-the-browser

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

"If I have a common lisp in the browser."

[Resarch notes NOT A SOLUTION]

A process of research and reflection on the following:

  1. Organize useful use cases.
  2. Explore some ways to use Common Lisp from a web browser.

Use Cases

  • Common Lisp で作った関数やアプリケーションをJavaScript に変換し、ブラウザ上で実行できる

    • as a Portable way.
  • Common Lisp のREPL 環境をブラウザから使う

  • ブラウザを仮想マシン(Lisp マシン)とみなす。そのホスト言語としてJavaScript の代わりにCommon Lisp で書けるようにする。ブラウザをOS とみなしAPI を駆使する。

  • Common Lisp のライブラリが使える

  • JavaScript のライブラリが使える

  • Bidirectional evaluation(双方向評価) by Baku Hashimoto https://baku89.com/2020/06/26/c-activity https://github.com/baku89/glisp/

  • ブラウザからCommon Lisp がどのように見えるべきか?

    • 陰に
      • 必要な時にREPL やエディタを立ち上げることができる
      • JavaScript のConsole のように
        • JavaScript のConsole からCommon Lisp が使える
    • 陽に
      • ブラウザーがまるごとREPL 環境となり、JavaScript の開発環境となる
  • Web サービス開発

    • SPA etc.
    • React etc.
    • From Backend to Frontend.
      • バックエンド側のCommon Lisp コードと、フロントエンド側のJavaScript にコンパイルされるコード開発はすべてサーバー上で行う
        • →今回はブラウザーでCommon Lisp を動かす環境の話題だからこの利用例ではない
  • ブラウザーからサーバー側Common Lisp のREPL でSBCL として使え、SBCL で作ったJavaScript がブラウザー側にもってこれて動く。こういうユースケースが自然じゃないだろうか?

    • すべてのCommon Lisp がJS に変換できなくてもよいと思う
    • であればJupyter でこれが実現できているかな?
      • デバッガーはどうだ?
  • もし、Common Lisp がJavaScript にコンパイルされるというとき、それは処理系まるごとがJavaScript 上で動くことも意味する

    • この場合、Emscripten によるWebAssembly 書き出しということになるが、現在実現されていない他、デメリットも考えられる
      • SBCL のイメージをダウンロードするのに時間がかかる
      • それはCommon Lisp そのものであり、JavaScript やJavaScript で叩くWebAPI が使えない
        • したがってそのSBCL 上でParenscript を読み込んでJavaScript コード書き出しを行い、それをなにかの方法でブラウザー側に渡し実行する手段が必要となる
      • ホストOSがないのでファイル保存などもできないのではないか?
  • ポイント

    • ニーズの観点
      1. Common Lisp でJavaScript のコーディングができること
        • Common Lisp で(サーバー実装は当然できるが) Web のフロントエンド開発もできる
      2. ブラウザー上でCommon Lisp 処理系(更に開発環境)を持てる
    • 技術の観点
      • サーバーとクライアント側の役割分担をどうするか
      • JavaScript にコンパイルする内容に、Common Lisp そのものを含めるのかどうか(ex: デバッガー, GC, スペシャル変数, etc.)

How to use Common Lisp in a web browser

Project Jupyter

Subset of Common Lisps

JSCL

Parenscript

Using with WebSocket?

FullSpec Common Lisp by WebAssembly

Common Lisp to JavaScript Compiler

👎 CPU Emulator by JavaScript

SBCL ではx86_64(多分x86も) のネイティブコードにコンパイルされる。 そのバイナリーをJavaScript 側で受け取り、x86 として実行できればいいのか?と考えた。 - 👎 この考え方は筋が悪い。OSのシステムコールやDynamic Link Library 等も用意せねばならないのではないか。

x86 Emulator

この場合OS のイメージ読み込みから必要であり、読み込みに時間がかかる。 更に、仮想マシン側からホスト(ブラウザー)側で実行するJavaScript コードが書き出せればよいのだが、そこまでの仕組みがあるかどうか。 なければただの仮想マシンでしかない。

Other Lisps in the Browser (NOT A COMMON LISP)

Refs

About

[Resarch Article] A process of research and reflection on the following: 1. Explore some ways to use Common Lisp from a web browser 2. Organize useful use cases.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published