3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[WIP][私的メモ] Chicken SchemeからJavascript生成実験

Last updated at Posted at 2019-08-03

#はじめに
Chicken SchemeのようにCへコンパイルする処理系ならば、Clang → LLVM → emscripten → javascriptが可能なはずと実験作業の私的メモ。
間違いやもっと良い方法があるなどの指摘は大歓迎。

#インストール
まずclang版chickenのインストール。
言語処理系としては珍しく問題もなく普通にコンパイル可能。
https://wiki.call-cc.org/chickenista-guide

Install
$ wget https://code.call-cc.org/releases/5.1.0/chicken-5.1.0.tar.gz
$ tar xvf chicken-5.1.0.tar.gz
$ cd chicken-5.1.0
$ make PLATFORM=linux PREFIX=$HOME/chicken/chicken-5.1.0-llvm C_COMPILER=clang #システム用と混ぜないためにPREFIXを指定。
$ make PLATFORM=linux PREFIX=$HOME/chicken/chicken-5.1.0-llvm C_COMPILER=clang install

Clang版のインストール後確認ハロワ。

Hello
$ $HOME/chicken/chicken-5.1.0-llvm/bin/csc -version
$ mkdir $HOME/tmp && cd $HOME/tmp #適当な作業ディレクトリに移動
$ echo '(print "Hello World.")' > hello.scm
$ $HOME/chicken/chicken-5.1.0-llvm/bin/csc hello.scm
$ ./hello

Libraryであるeggのインストール。cscバイナリを指定すればPREFIX指定などは不要。

$ $HOME/chicken/chicken-5.1.0-llvm/bin/chicken-install utf8

#Cへのコンパイル
ここを参考にCへのコンパイルをします。ただし必要ファイルに変更があるようです。また最適化をかけないと実行に失敗します。
https://wiki.call-cc.org/man/5/Deployment#distributing-compiled-c-files

$ cd $HOME/chicken-5.1.0 #解凍してビルドしたディレクトリに移動。pushdの方が便利。
$ cp chicken-syntax.c chicken.h extras.c modules.c build-version.c eval.c internal.c runtime.c chicken-config.h expand.c library.c $HOME/tmp
$ cd $HOME/tmp
$ $HOME/chicken/chicken-5.1.0-llvm/bin/csc -t hello.scm

#Javascriptへのコンパイル

#最適化しないとnodeでエラーが出ます。
$ emcc hello.c -I$HOME/chicken/chicken-5.1.0-llvm/include/chicken/ -DHAVE_CHICKEN_CONFIG_H -DSEARCH_EXE_PATH build-version.c eval.c expand.c internal.c library.c modules.c runtime.c chicken-syntax.c -s WASM=0 -Wno-implicit-function-declaration -Wno-c99-extensions -O2 -o hello.html
$ node --stack-size=65500 hello.js #--stack-sizeを指定しないとnodeでエラーが出ます。

#気が向いたらのTodo
文体。
emscriptenのインストール手順。
emscripten関連のFFI。
eval機能削除等の小型化。
最適化関連の実験。

#未検証の技術的な疑問点と現時点の予想メモ
気が向いたらそのうち検証する
csc -tによる生成Cコードの処理系依存;おそらく古めのC標準とLLVM準拠と予想
r5rsへの互換性準拠チェック;そこそこ動くと予想、何かチェック用ライブラリありませんか?
ChickenとCとjavascriptのFFI部分;ChickenとCは苦労しないと予想、Javascipt関連は苦労するのではないか
同期処理などemscriptenの特殊性関連;おそらくマニュアル等に記載があるので普通に調べる

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?