kujirahand / nadesiko3

Japanese Programming Language Nadesiko v3 (JavaScript/TypeScript)
https://nadesi.com/
MIT License
240 stars 19 forks source link

nako_genの実装まわりでの相談事 #1634

Open weyk opened 6 months ago

weyk commented 6 months ago

cnakoのstandalone生成まわりと、nako_genの派生を試している中でいくつか上げておきます。 いまのとこの目標は、snakoでweb用standalone(hogehoge.js+runtime-folder)を生成することとして ちょっと試しています(snakoに-cに似た-Cとして追加)

A)nako_genの派生を作成する場合にnako_genへの依存が発生する。  ほぼ同じサイズだとWebpackで1ファイルにした際に単純に2倍程度のサイズになる。

B)nako_genの派生を作成すると、nako_errorsとnako_gen(のstatic関数)がバンドルされ、  取り込みもとのcnakoやwnakoに付随するcoreと異なるコンストラクタ関数で混ざり込む。  上の件と合わせてcoreからgeneratorとして呼び出される際にI/Fをもらって呼び出せないか。

C)nako_genの派生を作成する際、optionがisTestしか受け取れずにnode/browser等を  既定の取り込みするものが生成できない。nakogenoptionを受け取るgeneratorのI/Fもほしい。

D)nako_genはplatform非依存のハズがstandaloneだとimport from 'path'をしていてnode依存してる。  取り込みpluginの指定のように引数による指定(opts.standalonecodeのような?)に移動できないか。

E)node用、browser用のstandaloneを生成ようにした場合に、plugin_browserとplugin_nodeを  webpackで生成したものをreleaseに置くようにするとimportが楽になる(node_modulesの別途  コピーが要らない)。standaloneを使わないなら不要ファルになるので微妙といえば微妙。

F)nako_genの派生を作成した場合、pluginほどお手軽に呼び出せないが改善できると嬉しい。  →wnakoの場合、scriptタグでの良い込が必要(取り込みではコンパイルを過ぎてしまう)  →cnakoの場合、node -r でとりこめるものの、navigater.nako3的なGlobalなインスタンスが   ないのでgen.registorを呼び出せない。gen_asyncのように内部でimportしないと使えない。  事前のregistorさえできれば、「!"simple"にモード設定」で効くのは確認済み。

kujirahand commented 6 months ago

せっかく、リポジトリを、二つに分けて言語部分だけをcoreに分離させたので、なでしこのコアを依存性を排除して派生しやすく修正したいですね。

kujirahand commented 6 months ago

一気に修正するのは大変そうなので、少しずつ依存性を排除していきたいです。

weyk commented 6 months ago

依存性おいといて、とりあえずstanaloneのファイルを出力できるものを 自分とこのbranchに上げました(PRは未)

nadesiko3 のfix_standalone nadesiko3core のfix_standalone_import_path ,adesiko3simple のmain

nadesiko3のcoreとnadesiko3simpleのnode_modules/naesiko3coreは、 それぞれのbuildの前にfix_standalone_import_pathのもので上書きする必要があります。

cnako3にオプションが少し増えます。 -W:ターゲットをnodeからbrowserに切り替える -G [file]:CodeGeneratorのファイルを指定する。selfRegistorに対応していること。実際の利用にはnakoソースでの「!""にモード設定」も必要。

-gには、naesiko3simpleのrelease/nako_gen_simple.js を指定すると「!"simple"にモード設定」が使用可能になります。 -W指定の際、-cのコード生成は可能ですが、-c無しや-c -rでnode上で実行してもエラーになります(環境違うため) -c -Wで主力したコードは.mjs拡張子のファイルがあるため、サーバがapplication/javascriptを返す設定が必要です。

weyk commented 5 months ago

cnako3のstandalone周りの変更は、まとめてnadesiko3buildという名前で 別出ししてみました。

https://github.com/weyk/nadesiko3build.git

ソースは2ファイルで、元はcnako3.mtsとcnako3mod.mtsです。 その他のリソースはDependencyのnadesiko3とcoreをそのまま参照しています。 変更のうち、-gでgeneratorを取り込みと-Pでjs形式のpluginを取り込むのはcnako3にもあっても良いかもしれません。

kujirahand commented 5 months ago

@weyk おぉー、良いですね!