テクノロジー

Lispインタープリター「Liyad」へのコンパイラ搭載(作業中)

現在、Lispインタープリター「Liyad」にコンパイラ搭載を進めている。 まだ、公開リポジトリにはpushしていないが、現在、技術検証用のプロトタイプを作成している。 同インタープリターはJavaScriptで書かれているので、コンパイラといっても、ホスト環境の…

Object.assign はプロトタイプ汚染攻撃に対して安全

古いlodash#merge()にはプロトタイプ汚染に対する脆弱性(修正済み)がありましたが、Object.assign() の動作について調べてみました。 var a = {}; console.log(Object.assign({},JSON.parse(`{"__proto__":{"foo":"bar"},"a":"b"}`))); console.log(a.foo); …

Lispインタープリター「Liyad」における末尾再帰最適化

拙作のLispインタープリター「Liyad」においても、 (無いとLisp処理系として格好が付かないので) 非常に限定的に末尾再帰最適化を実装しています。 Liyadにおける末尾再帰最適化 Liyadでは、単純にASTのS式が特定のパターン(1種類)に合致するときのみ末尾再…

各言語におけるクロージャー

Liyad v0.0.13をリリースしました。 今回のリリースでは、クロージャー(関数閉包)関連のオペレーターが追加になりました。 ($closure (arg1 argN) use (var1 varM) expr) (|-> (arg1 argN) use (var1 varM) expr) ($capture (var1 varM) ($lambda (arg1 argN…

🚧RawGitからjsDelivrへの切り替え🚧

Qiitaに書きましたが、RawGitが終了する模様です😿 最近作った、Ménneu Markdown Notebookで使っていたので、参照先をjsDelivrに切り替えました。 記事も直さないと…

進行中のプロジェクト

現在、私の進めているプロジェクトの概要と当面のゴールについて説明したいと思います。 Ménneu Markdownやhtmlのドキュメントテンプレートから、動的にドキュメント生成するためのCLIおよびAPIです。 ドキュメントはhtml、画像、pdfとして出力できます。 後…