科学技術計算用プログラミング言語:Sci-Lispの自作(1日目):計画
私はLispという言語に興味があり、Common LispやClojureという言語を趣味の範囲で学びました。これらの言語に美しさや楽しさを感じると同時に、Pythonのような科学技術計算のエコシステムが欲しいなと感じたり、C++のような高速性が欲しいなと感じたりしました。
実現可能性は置いておいて、自身の要望を満たす処理系を作りたいと思ったので、その要件やポイントを書き出していきます(壮大な夢です)
- S式で記述する
- REPLが充実
- シングルバイナリにコンパイルし高速実行が可能
- C++コンパイラの最適化の恩恵を最大限に受ける
- C++の標準ライブラリはシームレスに使える
- Clojure風のシンタックス[]、{}を使える
- numpy、matplotlib、pandas、scipyの機能を標準で持つ
- numpy風の添え字アクセス([2:-1, -3:] array2d)
- VSCode拡張機能との協調を標準にする - シンタックスハイライト - リンタ・フォーマッタ - 補完 - デバッガ
- 型付きかつ強力な型推論
- forループに寛容になる
- 代入に寛容になる
- 信号処理•時系列分析も標準で盛り込む
- 線形代数・微分積分・統計関数は盛り込む
- ドキュメントは実装と同等に大切にする
- オブジェクト指向の多態性を活用
- 関数型プログラミングを強くサポート
- 例外処理をサポート
取り組むにあたり自分の中でモチベーションというのは非常に大切なので、書き出していきます。
- C++の仕様理解
- numpy, matplotlib, pandas, scipyの仕様理解
- 信号処理、時系列分析のドメイン知識獲得
- VSCode拡張機能開発による開発体験向上
- GitHub上でのOSS活動に参入
メモ書き
- 科学技術計算に用いるのにincludeやimportが面倒
- 型定義はデータの設計を一望できるのでありがたい
- コンパイラ:C++のコードに変換し、既存のコンパイラの最適化の恩恵を十分に受ける
- スクリプト言語としても実行できる
リポジトリ
さっそく簡単なS式は実行できるようなインタプリタを組んでみました。私にとって初めてのOSS活動参加です。せっかくなので、ある程度成果が出るまで挫折せず息長く続けたいなと思います。