メモ:C#/JS/RustでUIロジックを書いてからネイティブコードが実行されるまでに行われること
よく知られていそうな用語があれば、個別の名前を避けなるべく用語を使ってメモする
UIロジックとは:
MVVMパターンのVないしVMとか、MVCパターンのVないしCの部分のソースコードの一部のこと
SvelteKit
jsが読み込まれてから
Unity Engine
- IL2CPPが有効のとき
アプリが読み込まれてから
- IL2CPPが有効のとき
foobar.exeがfoobarサービスそのもの
バンドラーとリゾルバーとリンカー
Javasciptではバンドルするときに名前をチェックをする?
C#(共通言語ランタイムの世界)ではそもそもバンドルという概念がないという理解?
たぶん、それぞれのフェーズで解く問題があって、その解放のセットにバンドラーとかリゾルバーとかリンカーとかいった名前がついている
空欄が増えるかもしれないが同じ方法でコード生成についても説明できるかも
解く問題 | バンドラー | リゾルバー | リンカー | コード生成器 | + | コメント | + |
---|---|---|---|---|---|---|---|
baz problem | ✔️ | ✔️ | ? | ||||
qux problem | ✔️ | ? | |||||
quux problem | ✔️ | ✔️ | ? | ||||
corge problem | ✔️ | ? | |||||
grault problem | ✔️ | ✔️ | ✔️ | ? | |||
garply problem | ✔️ | ? |
その解かれる問題まで把握すれば像がはっきりしそう
キーワードだけ
ランタイムとモジュール
- 実行するために必要なモジュール
- 開発時だけ必要なモジュール
インタプリター
自分の知るインタプリターはプログラミング言語を読んで即時機械語を話すプログラムのこと
プログラミング言語を読んで中間表現を話すプログラムのことはインタプリターと言う?
ともかくインタプリターという語はこのスクラップでは使わないこととする
JITとAOT
これもインタプリターと同じように扱いに気を付けないといけない言葉かも
どういった文脈で使えるのか理解があいまい
ほとんどJavaとC#(CLR)の文脈でしか使われていないか?
Slint
cargoからビルドするとき
Unity Engine
Unity Editorからスクリプトをリロード(変更を検知して再ビルド)するとき
ビルドスクリプトとコード生成器
目的となるプロジェクトに対して先行してビルド&実行されることが保証されている機能がある。
Slintではcargoの仕様によって、UnityではmsbuildのようなEditorの仕様に基づいている。
この2つのケースでは、異なるプログラミング言語の間や、同じプログラミング言語であっても繰り返しになるパターンのものといった、
規則的なつながりのあるコードの間で、
人間が書く代わりにコンピュータが書いてくれるような使い方に合っているように見えた。
msbuildのオプションでは何かが決定的かどうかを設定するフィールドが用意されている[1]がその値が何と関係しているかまでは調べられていない
ジェネレーターが決定的かどうかとは無関係のフィールド?
条件付きコンパイル
SlintやUnityのようなマルチプラットフォーム対応をうたうソリューションでは、
サービス/アプリ/ゲームをリリースする際に、
(プラットフォーム依存のコードを書かない限り)意識の外で条件付きコンパイルが行われている。
Rustではtarget_*マクロによって実現できる。
C#には「プラットフォームに応じた条件付きコンパイル」という専用機能はない。
MAUIにおいてプラットフォーム依存のコードを書く際はpartial
を使うことと、プラットフォームごとに .csファイルを作成するといったレイアウト等についてドキュメントで触れられている[2]。
Javscriptにおける条件付きコンパイルという概念はバンドラーかそれを支援するソフトウェアに内包されてそうだが、解像度が低いので言葉がでてこない。
DSL
ハードウェア記述言語としてのDSL。
プログラミング言語を記述(生成)する言語としてのDSL。
今の調べている範囲ではDSLの特徴に共通しているのは宣言的であることくらいな気がする。
このスクラップでの「ドメイン」とはUIロジックを宣言的に書くこととする。
SvelteやSlintのようなUIフレームワークにiced-rsがあるがDSLを採用していない[1]。
ただ、viewの部分をRustの言語仕様としての宣言的マクロだけを使って書くことは可能だと思う。
キーワード
ネイティブ寄りのコード
- シェル
- WASIとEmscripten
UI寄りのコード
- DTD
- xml scheme [1]
未分類
- CILレベルの動的コード生成
- ホットモジュールリプレースメント
- C#の
Attribute
の機能- [LibraryImport]
- [DllImport]
- [Burst] (Unity)
APIレベルの話と、コンセプトの話が混ざってしまっている?
一旦この方向で調べ上げようとした試みは中断する