Closed10

メモ:C#/JS/RustでUIロジックを書いてからネイティブコードが実行されるまでに行われること

mars2nicomars2nico

よく知られていそうな用語があれば、個別の名前を避けなるべく用語を使ってメモする
UIロジックとは:
MVVMパターンのVないしVMとか、MVCパターンのVないしCの部分のソースコードの一部のこと

mars2nicomars2nico

Unity Engine

  • IL2CPPが有効のとき

アプリが読み込まれてから

  • IL2CPPが有効のとき
    foobar.exeがfoobarサービスそのもの
mars2nicomars2nico

バンドラーとリゾルバーとリンカー

Javasciptではバンドルするときに名前をチェックをする?
C#(共通言語ランタイムの世界)ではそもそもバンドルという概念がないという理解?

たぶん、それぞれのフェーズで解く問題があって、その解放のセットにバンドラーとかリゾルバーとかリンカーとかいった名前がついている
空欄が増えるかもしれないが同じ方法でコード生成についても説明できるかも

解く問題 バンドラー リゾルバー リンカー コード生成器 + コメント +
baz problem ✔️ ✔️ ?
qux problem ✔️ ?
quux problem ✔️ ✔️ ?
corge problem ✔️ ?
grault problem ✔️ ✔️ ✔️ ?
garply problem ✔️ ?

その解かれる問題まで把握すれば像がはっきりしそう

キーワードだけ

ランタイムとモジュール

  • 実行するために必要なモジュール
  • 開発時だけ必要なモジュール
mars2nicomars2nico

インタプリター

自分の知るインタプリターはプログラミング言語を読んで即時機械語を話すプログラムのこと
プログラミング言語を読んで中間表現を話すプログラムのことはインタプリターと言う?

ともかくインタプリターという語はこのスクラップでは使わないこととする

JITとAOT

これもインタプリターと同じように扱いに気を付けないといけない言葉かも
どういった文脈で使えるのか理解があいまい

ほとんどJavaとC#(CLR)の文脈でしか使われていないか?

mars2nicomars2nico

Slint

cargoからビルドするとき

Unity Engine

Unity Editorからスクリプトをリロード(変更を検知して再ビルド)するとき

mars2nicomars2nico

ビルドスクリプトとコード生成器

目的となるプロジェクトに対して先行してビルド&実行されることが保証されている機能がある。
Slintではcargoの仕様によって、UnityではmsbuildのようなEditorの仕様に基づいている。

この2つのケースでは、異なるプログラミング言語の間や、同じプログラミング言語であっても繰り返しになるパターンのものといった、
規則的なつながりのあるコードの間で、
人間が書く代わりにコンピュータが書いてくれるような使い方に合っているように見えた。

msbuildのオプションでは何かが決定的かどうかを設定するフィールドが用意されている[1]がその値が何と関係しているかまでは調べられていない
ジェネレーターが決定的かどうかとは無関係のフィールド?

条件付きコンパイル

SlintやUnityのようなマルチプラットフォーム対応をうたうソリューションでは、
サービス/アプリ/ゲームをリリースする際に、
(プラットフォーム依存のコードを書かない限り)意識の外で条件付きコンパイルが行われている。

Rustではtarget_*マクロによって実現できる。
C#には「プラットフォームに応じた条件付きコンパイル」という専用機能はない。
MAUIにおいてプラットフォーム依存のコードを書く際はpartialを使うことと、プラットフォームごとに .csファイルを作成するといったレイアウト等についてドキュメントで触れられている[2]

Javscriptにおける条件付きコンパイルという概念はバンドラーかそれを支援するソフトウェアに内包されてそうだが、解像度が低いので言葉がでてこない。

脚注
  1. C# コンパイラ オプション - コード生成オプション - C# | Microsoft Learn ↩︎

  2. プラットフォーム コードを呼び出す .NET MAUI - .NET MAUI | Microsoft Learn ↩︎

mars2nicomars2nico

DSL

ハードウェア記述言語としてのDSL。
プログラミング言語を記述(生成)する言語としてのDSL。
今の調べている範囲ではDSLの特徴に共通しているのは宣言的であることくらいな気がする。

このスクラップでの「ドメイン」とはUIロジックを宣言的に書くこととする。
SvelteやSlintのようなUIフレームワークにiced-rsがあるがDSLを採用していない[1]
ただ、viewの部分をRustの言語仕様としての宣言的マクロだけを使って書くことは可能だと思う。

脚注
  1. JSX/HTML-like declarative macros to construct Element · Issue #414 · iced-rs/iced ↩︎

mars2nicomars2nico

APIレベルの話と、コンセプトの話が混ざってしまっている?
一旦この方向で調べ上げようとした試みは中断する

このスクラップは2024/04/14にクローズされました