TypeNovelは、制約と注釈の組み合わせによって、型付きの小説を記述するための言語です。
参考:プロとアマの小説の特徴を数値化して比較してみたらやっぱり差があったので、それを埋めるための型付き小説記述用言語 TypeNovel を公開した件について
これまでF#で開発してきたのですが、今後はTypeScriptで開発することになりました。
これによって、コンパイラのインストールは
npm install -g typenovel
で、完了します。
インストールが成功すると、/usr/local/bin/tnc
が使えるようになるはずです。
[foo@local] tnc --version v1.0.0
書き直した理由
一言でいうと「TypeNovelReaderのファイルサイズが大きくなってしまうから」です。
F#のアプリケーションを配布するときには、.NETCoreのランタイムも一緒に配布しないといけないのですが、これが80Mbyte近くあります。
これを除外して、ファイルサイズを削減したかった、というのが主な理由です。
しかしMac/Linux用のバイナリを100Mb以下にする、という当初の目標は達成できませんでした…つまりGithub(100MBの制約がある)にはMac/Linux版をアップロードできません。
その他にも「コンパイラの配布が簡単になる」とか「メジャーな言語なので開発者を募りやすくなる」とかもありますが…
Fsharpの良かった点
- パーサーが書きやすい
Fsharpの辛かった点
- 開発者が少ない(ように感じる)
- ドキュメントが少ない
- paket周りの運用が少し面倒に感じた
- ランタイムがでかい(80M前後)
- プログラムの立ち上がりが少し遅い
TypeScriptの良い点
- TypeNovelReaderのファイルサイズが減る(20Mbyte近く削減)
- npmで簡単に配布できる(インストーラーを配布する必要がない)
- 書ける人がたくさんいる
TypeScriptにして辛い点
変わった仕様について
- コンパイルオプションの
--release
は--minify
に変更されました。 --format
オプションを指定することで、出力フォーマットとして、html
だけではなくtext
も選べるようになりました。tnconfig.json
において、warnXXX系のフラグは、compilerOptions
というフィールドで記述する仕様に変更されました。
// 変更前 { warnUndefinedConstraint: true, ... } // 変更後 { "compilerOptions": { warnUndefinedConstraint: true, ... } }