Rapidusの進捗を記していく。逐次更新
どんなJSエンジンを目指してるのか
- 自作ブラウザ(Naglfar)に組み込めるようなもの
- ↑でも当分はNodeJSみたいなのを目指すと思う (それ単体で使えるような物、という意味)
- JITに対応し、速い (LLVM使う?)
課題
- グローバル変数の呼び出し、遅い
- ネストした関数、実装してない
- VMとVMのコード生成に関するコードのテストを書いてない
- よく考えたら、字句解析器がコメントに対応してない
進捗
日数は、Gitでコミットした日を数えてます。(7/1 7/2 7/5 とコミットしていたら、7/5は3日目としてカウント)
1日目
- 字句解析器がほぼ完成
function f() { return 1 + 2; }
みたいなのをトークンごとに分解できる感じ。
2日目
- (Circle)CIを使いはじめる
- パーサを作り始める
- 簡単な数式のパースに対応
1 + 2 * 30
みたいな
3日目
- パーサ、
== !=
に対応 - 字句解析器、
=== !==
が正しくトークンに分解できなかったので修正
4日目
- パーサ、
=== !== > < >= <=
に対応 - テストを追加し始めた
5日目
- パーサ、
?: && || & ^ | << >> >>> ** =
, 単項演算子, 関数呼び出し構文, メンバ呼び出し?(something.x
みたいな)に対応 - VMを作り始める
6日目
- VMの仕様で苦戦する (現時点(7/10/2018)でも苦戦してるけど)
7日目
- VMのバグ修正
8日目
- パーサ、
,
(コンマ演算子),var
での変数定義, に対応
9日目
- VMで、高速化のために生ポインタを使う
- パーサ、ブロック構文(
{ }
)に対応
10日目
- VM向けコードをASTから生成するコードを書き始める
- いくつかのJSコードがVM上で動き始める
console.log(1)
みたいなのとか。
11日目
- VM(& CodeGen)、四則演算+Mod, ジャンプ命令に対応
- パーサ,
if, while
に対応 - ↑上記により、
while
とかif
とか使ったJSコードが動き始める
12日目
- ローカル変数, 関数定義に対応
function f(x) {
var i = x+1;
return i;
}
console.log( f(1) )
が動く。
13日目 (7/9)
- VMが少し速くなった