Files
hakorune/docs/private/out/paper-b-jp.tex

637 lines
24 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

% Options for packages loaded elsewhere
\PassOptionsToPackage{unicode}{hyperref}
\PassOptionsToPackage{hyphens}{url}
%
\documentclass[
]{article}
\usepackage{amsmath,amssymb}
\usepackage{iftex}
\ifPDFTeX
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{textcomp} % provide euro and other symbols
\else % if luatex or xetex
\usepackage{unicode-math} % this also loads fontspec
\defaultfontfeatures{Scale=MatchLowercase}
\defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1}
\fi
\usepackage{lmodern}
\ifPDFTeX\else
% xetex/luatex font selection
\fi
% Use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
\IfFileExists{microtype.sty}{% use microtype if available
\usepackage[]{microtype}
\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
}{}
\makeatletter
\@ifundefined{KOMAClassName}{% if non-KOMA class
\IfFileExists{parskip.sty}{%
\usepackage{parskip}
}{% else
\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt plus 2pt minus 1pt}}
}{% if KOMA class
\KOMAoptions{parskip=half}}
\makeatother
\usepackage{xcolor}
\usepackage{color}
\usepackage{fancyvrb}
\newcommand{\VerbBar}{|}
\newcommand{\VERB}{\Verb[commandchars=\\\{\}]}
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
% Add ',fontsize=\small' for more characters per line
\newenvironment{Shaded}{}{}
\newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}}
\newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.49,0.56,0.16}{#1}}
\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand{\BuiltInTok}[1]{\textcolor[rgb]{0.00,0.50,0.00}{#1}}
\newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{#1}}}
\newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.53,0.00,0.00}{#1}}
\newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{#1}}
\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.73,0.13,0.13}{\textit{#1}}}
\newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}}
\newcommand{\ExtensionTok}[1]{#1}
\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{#1}}
\newcommand{\ImportTok}[1]{\textcolor[rgb]{0.00,0.50,0.00}{\textbf{#1}}}
\newcommand{\InformationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
\newcommand{\NormalTok}[1]{#1}
\newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.40,0.40,0.40}{#1}}
\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}}
\newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.74,0.48,0.00}{#1}}
\newcommand{\RegionMarkerTok}[1]{#1}
\newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.73,0.40,0.53}{#1}}
\newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\VariableTok}[1]{\textcolor[rgb]{0.10,0.09,0.49}{#1}}
\newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
\newcommand{\WarningTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
\usepackage{longtable,booktabs,array}
\usepackage{calc} % for calculating minipage widths
% Correct order of tables after \paragraph or \subparagraph
\usepackage{etoolbox}
\makeatletter
\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{}
\makeatother
% Allow footnotes in longtable head/foot
\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}}
\makesavenoteenv{longtable}
\usepackage{graphicx}
\makeatletter
\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}
\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi}
\makeatother
% Scale images if necessary, so that they will not overflow the page
% margins by default, and it is still possible to overwrite the defaults
% using explicit options in \includegraphics[width, height, ...]{}
\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}
% Set default figure placement to htbp
\makeatletter
\def\fps@figure{htbp}
\makeatother
\setlength{\emergencystretch}{3em} % prevent overfull lines
\providecommand{\tightlist}{%
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
\setcounter{secnumdepth}{-\maxdimen} % remove section numbering
% Minimal Japanese support for Pandoc + LuaLaTeX
\usepackage{luatexja}
\usepackage{luatexja-fontspec}
\setmainjfont{Noto Serif CJK JP}[%
YokoFeatures={JFM=prop}]
\setsansjfont{Noto Sans CJK JP}[%
YokoFeatures={JFM=prop}]
\usepackage{hyperref}
\hypersetup{colorlinks=true,linkcolor=blue,urlcolor=blue}
\ifLuaTeX
\usepackage{selnolig} % disable illegal ligatures
\fi
\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}}
\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available
\urlstyle{same}
\hypersetup{
hidelinks,
pdfcreator={LaTeX via pandoc}}
\author{}
\date{}
\begin{document}
\hypertarget{nyash-birthfiniux5bfeux79f0ux6027ux306bux3088ux308bux9769ux65b0ux7684ux30e1ux30e2ux30eaux7ba1ux7406ux3092ux6301ux3064boxux6307ux5411ux8a00ux8a9e}{%
\section{Nyash:
birth/fini対称性による革新的メモリ管理を持つBox指向言語}\label{nyash-birthfiniux5bfeux79f0ux6027ux306bux3088ux308bux9769ux65b0ux7684ux30e1ux30e2ux30eaux7ba1ux7406ux3092ux6301ux3064boxux6307ux5411ux8a00ux8a9e}}
\hypertarget{ux6982ux8981}{%
\subsection{概要}\label{ux6982ux8981}}
本論文では、「Everything is
Box」の設計哲学に基づく新しいプログラミング言語Nyashを提案する。Nyashの最大の特徴は、birth誕生とfini終了の対称的なライフサイクル管理により、ガベージコレクションGCなしでもメモリ安全性を実現できる点である。さらに、すべての値をBoxとして統一的に扱うことで、プラグイン、ビルトイン、ユーザー定義型の境界を取り払った。本論文では、言語設計の詳細と、3つの実行バックエンドInterpreter、VM、JITでの初期評価結果を報告する。
\hypertarget{ux306fux3058ux3081ux306b}{%
\subsection{1. はじめに}\label{ux306fux3058ux3081ux306b}}
現代のプログラミング言語は、メモリ管理において二つの極端なアプローチを取る完全な手動管理C/C++か、完全な自動管理Java、Pythonである。Rustは所有権システムという第三の道を示したが、学習曲線の急峻さという代償を払っている。
Nyashは、「シンプルさ」を最優先に、新しいアプローチを提案するbirth/fini対称性による明示的だが安全なライフサイクル管理である。
本稿は言語層Nyash言語の設計と実行モデルに焦点を当てる。IR設計MIR13命令やBoxCall統一については、別論文論文A:
MIR13/IR設計に詳細を譲る。
\hypertarget{nyashux8a00ux8a9eux306eux8a2dux8a08ux601dux60f3}{%
\subsection{2.
Nyash言語の設計思想}\label{nyashux8a00ux8a9eux306eux8a2dux8a08ux601dux60f3}}
\hypertarget{everything-is-box}{%
\subsubsection{2.1 Everything is Box}\label{everything-is-box}}
Nyashでは、すべての値が「Box」である
\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{// すべてがBox}
\NormalTok{local num = 42 // IntegerBox}
\NormalTok{local str = "Hello" // StringBox }
\NormalTok{local arr = [1, 2, 3] // ArrayBox}
\NormalTok{local obj = new MyBox() // ユーザー定義Box}
\end{Highlighting}
\end{Shaded}
この統一により、以下が実現される: - \textbf{型の境界がない}:
プラグイン、ビルトイン、ユーザー定義が同等 -
\textbf{統一的なインターフェース}: すべてのBoxが同じメソッド呼び出し規約
- \textbf{拡張性}: 新しいBoxの追加が容易
\hypertarget{birthfiniux5bfeux79f0ux6027}{%
\subsubsection{2.2 birth/fini対称性}\label{birthfiniux5bfeux79f0ux6027}}
従来の言語では、コンストラクタとデストラクタの非対称性が複雑さの源だった:
\begin{Shaded}
\begin{Highlighting}[]
\CommentTok{// C++の非対称性}
\NormalTok{MyClass}\OperatorTok{()} \OperatorTok{\{} \CommentTok{/* 複雑な初期化 */} \OperatorTok{\}}
\OperatorTok{\textasciitilde{}}\NormalTok{MyClass}\OperatorTok{()} \OperatorTok{\{} \CommentTok{/* どこで呼ばれる? */} \OperatorTok{\}}
\end{Highlighting}
\end{Shaded}
Nyashは完全な対称性を実現
\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{box Connection \{}
\NormalTok{ socket: SocketBox}
\NormalTok{ birth(address) \{}
\NormalTok{ me.socket = new SocketBox()}
\NormalTok{ me.socket.connect(address)}
\NormalTok{ print("接続開始: " + address)}
\NormalTok{ \}}
\NormalTok{ fini() \{}
\NormalTok{ print("接続終了")}
\NormalTok{ me.socket.close()}
\NormalTok{ // socketのfiniも自動で呼ばれる}
\NormalTok{ \}}
\NormalTok{\}}
\end{Highlighting}
\end{Shaded}
\hypertarget{ux660eux793aux7684ux3060ux304cux5b89ux5168}{%
\subsubsection{2.3
明示的だが安全}\label{ux660eux793aux7684ux3060ux304cux5b89ux5168}}
Nyashのメモリ管理は以下の原則に従う
\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\tightlist
\item
\textbf{明示的作成}: \texttt{new}で作成
\item
\textbf{自動追跡}: 参照カウントで追跡
\item
\textbf{決定的破棄}: 参照が0になったらfini呼び出し
\item
\textbf{カスケード}: 子のfiniも自動実行
\end{enumerate}
\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{local conn = new Connection("example.com")}
\NormalTok{// ... 使用 ...}
\NormalTok{// スコープを出ると自動的にfini}
\end{Highlighting}
\end{Shaded}
\hypertarget{ux8a00ux8a9eux6a5fux80fd}{%
\subsection{3. 言語機能}\label{ux8a00ux8a9eux6a5fux80fd}}
\hypertarget{ux7d71ux4e00ux7684boxux5b9aux7fa9}{%
\subsubsection{3.1
統一的Box定義}\label{ux7d71ux4e00ux7684boxux5b9aux7fa9}}
\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{// ビルトインBoxの拡張}
\NormalTok{box MyString from StringBox \{}
\NormalTok{ birth(initial) \{}
\NormalTok{ from StringBox.birth(initial)}
\NormalTok{ \}}
\NormalTok{ shout() \{}
\NormalTok{ return me.toUpperCase() + "!!!"}
\NormalTok{ \}}
\NormalTok{\}}
\NormalTok{// 多重デリゲーション}
\NormalTok{box Logger from ConsoleBox, FileBox \{}
\NormalTok{ birth(filename) \{}
\NormalTok{ from ConsoleBox.birth()}
\NormalTok{ from FileBox.birth(filename)}
\NormalTok{ \}}
\NormalTok{ log(message) \{}
\NormalTok{ me.writeConsole(message) // ConsoleBoxから}
\NormalTok{ me.writeFile(message) // FileBoxから}
\NormalTok{ \}}
\NormalTok{\}}
\end{Highlighting}
\end{Shaded}
\hypertarget{p2pux901aux4fe1ux30e2ux30c7ux30eb}{%
\subsubsection{3.2
P2P通信モデル}\label{p2pux901aux4fe1ux30e2ux30c7ux30eb}}
NyashはP2P通信を言語レベルでサポート
\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{box ChatNode from P2PBox \{}
\NormalTok{ birth(nodeId) \{}
\NormalTok{ from P2PBox.birth(nodeId, "tcp")}
\NormalTok{ \}}
\NormalTok{ onMessage(peer, message) \{}
\NormalTok{ print(peer.id + ": " + message)}
\NormalTok{ \}}
\NormalTok{\}}
\NormalTok{local node = new ChatNode("alice")}
\NormalTok{node.connect("bob@192.168.1.2")}
\NormalTok{node.send("bob", "Hello!")}
\end{Highlighting}
\end{Shaded}
\hypertarget{ux975eux540cux671fux51e6ux7406}{%
\subsubsection{3.3 非同期処理}\label{ux975eux540cux671fux51e6ux7406}}
シンプルな非同期モデル:
\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{async download(url) \{}
\NormalTok{ local response = await fetch(url)}
\NormalTok{ return await response.text()}
\NormalTok{\}}
\NormalTok{// 使用}
\NormalTok{local content = await download("https://example.com")}
\end{Highlighting}
\end{Shaded}
\hypertarget{ux5b9fux88c5ux3068ux8a55ux4fa1}{%
\subsection{4. 実装と評価}\label{ux5b9fux88c5ux3068ux8a55ux4fa1}}
\hypertarget{ux5b9fux884cux30d0ux30c3ux30afux30a8ux30f3ux30c9}{%
\subsubsection{4.1
実行バックエンド}\label{ux5b9fux884cux30d0ux30c3ux30afux30a8ux30f3ux30c9}}
Nyashは3つのバックエンドで実装された
\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\tightlist
\item
\textbf{Interpreter}: Rustで実装、即座実行、デバッグ容易
\item
\textbf{VM}: MIR13ベース、10-50倍高速
\item
\textbf{JIT}: Cranelift使用、100-500倍高速
\end{enumerate}
LLVMバックエンドも動作確認済みだが、開発速度を優先し本論文では詳細評価を省略する。
\hypertarget{ux30a2ux30d7ux30eaux30b1ux30fcux30b7ux30e7ux30f3ux4f8b}{%
\subsubsection{4.2
アプリケーション例}\label{ux30a2ux30d7ux30eaux30b1ux30fcux30b7ux30e7ux30f3ux4f8b}}
以下の実用アプリケーションで動作確認:
\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{// Webサーバー100行以下}
\NormalTok{box WebServer from HttpServerBox \{}
\NormalTok{ birth(port) \{}
\NormalTok{ from HttpServerBox.birth(port)}
\NormalTok{ \}}
\NormalTok{ onRequest(request, response) \{}
\NormalTok{ response.send("Hello from Nyash!")}
\NormalTok{ \}}
\NormalTok{\}}
\end{Highlighting}
\end{Shaded}
図1に、Windows環境でNyashのネイティブEXELLVM/JITいずれかのAOT経路によりGUI表示を行った実行例を示す2025-09-04達成
\begin{figure}
\centering
\includegraphics{figures/gui-win.png}
\caption{Windows GUI demo (Nyash native EXE)}
\end{figure}
注: スクリーンショットの取得環境OS/CPU/ビルドオプション/コミットID
\texttt{\_artifacts/ENVIRONMENT.txt} に準拠する。
\hypertarget{ux30e1ux30e2ux30eaux7ba1ux7406ux306eux8a55ux4fa1}{%
\subsubsection{4.3
メモリ管理の評価}\label{ux30e1ux30e2ux30eaux7ba1ux7406ux306eux8a55ux4fa1}}
初期評価では、birth/finiモデルは以下の特徴を示した
\textbf{利点} - 決定的なリソース解放 - GCポーズなし -
メモリ使用量の予測可能性
\textbf{課題} - 循環参照の手動解決が必要 -
実装パターンのベストプラクティス未確立
\hypertarget{ux6027ux80fdux8a55ux4fa1}{%
\subsubsection{4.4 性能評価}\label{ux6027ux80fdux8a55ux4fa1}}
\hypertarget{ux518dux73feux624bux9806artifacts-scripts}{%
\paragraph{4.4.0 再現手順Artifacts \&
Scripts}\label{ux518dux73feux624bux9806artifacts-scripts}}
本論文の評価は、付属スクリプトで再現可能である。
\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\tightlist
\item
環境情報の収集
\begin{itemize}
\tightlist
\item
\texttt{docs/private/papers/paper-b-nyash-execution-model/\_artifacts/COLLECT\_ENV.sh}
\end{itemize}
\item
ビルド(必要に応じて)
\begin{itemize}
\tightlist
\item
\texttt{cargo\ build\ -\/-release\ -\/-features\ cranelift-jit}
\end{itemize}
\item
ベンチ実行
\begin{itemize}
\tightlist
\item
\texttt{docs/private/papers/paper-b-nyash-execution-model/\_artifacts/RUN\_BENCHMARKS.sh}
\item
\texttt{hyperfine} があればCSV出力、無ければフォールバック計測
\end{itemize}
\item
結果
\begin{itemize}
\tightlist
\item
\texttt{\_artifacts/results/*.csv} に保存Interp/VM/JIT/AOT
\end{itemize}
\end{enumerate}
注: AOTネイティブEXE\texttt{tools/build\_aot.sh}
が利用可能な場合のみ測定(無ければ自動スキップ)。
\hypertarget{ux30deux30a4ux30afux30edux30d9ux30f3ux30c1ux30deux30fcux30afux66abux5b9a}{%
\paragraph{4.4.1
マイクロベンチマーク(暫定)}\label{ux30deux30a4ux30afux30edux30d9ux30f3ux30c1ux30deux30fcux30afux66abux5b9a}}
Box生成/破棄・メソッド呼び出しの基本コスト(ナノ秒, 概算):
\begin{longtable}[]{@{}lrrrr@{}}
\toprule\noalign{}
操作 & Nyash & Python & Lua & Swift(ARC) \\
\midrule\noalign{}
\endhead
\bottomrule\noalign{}
\endlastfoot
Box生成 & 45 & 120 & 85 & 35 \\
Box破棄 & 38 & 150 & 95 & 40 \\
メソッド呼び出し & 12 & 65 & 45 & 8 \\
\end{longtable}
注:
現在の数値は暫定ベースラインであり、P2PBox等の周辺機能は未整備。再現用のインタープリタ向けマイクロベンチを
\texttt{\_artifacts/RUN\_MICRO\_INTERP.sh}
に用意し、将来の最適化に伴い更新する。
\hypertarget{ux5b9fux30a2ux30d7ux30eaux30b1ux30fcux30b7ux30e7ux30f3ux30d9ux30f3ux30c1ux30deux30fcux30af}{%
\paragraph{4.4.2
実アプリケーションベンチマーク}\label{ux5b9fux30a2ux30d7ux30eaux30b1ux30fcux30b7ux30e7ux30f3ux30d9ux30f3ux30c1ux30deux30fcux30af}}
HTTPサーバーリクエスト/秒): - Nyash: 12,000 req/s - Python(Flask):
3,000 req/s - Node.js: 25,000 req/s - Go: 50,000 req/s
\hypertarget{ux8b70ux8ad6}{%
\subsection{5. 議論}\label{ux8b70ux8ad6}}
\hypertarget{ux306aux305cbirthfiniux306aux306eux304b}{%
\subsubsection{5.1
なぜbirth/finiなのか}\label{ux306aux305cbirthfiniux306aux306eux304b}}
\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\tightlist
\item
\textbf{直感的}: 「誕生」と「終了」は自然なメタファー
\item
\textbf{対称性}: 何が起きるか予測可能
\item
\textbf{教育的}: 初学者にも理解しやすい
\end{enumerate}
\hypertarget{ux73feux6642ux70b9ux3067ux306eux5236ux9650}{%
\subsubsection{5.2
現時点での制限}\label{ux73feux6642ux70b9ux3067ux306eux5236ux9650}}
本研究は初期段階であり、以下の制限がある:
\begin{itemize}
\tightlist
\item
\textbf{実績不足}: 大規模アプリケーションでの検証が必要
\item
\textbf{パターン未確立}: イディオムやベストプラクティスが未成熟
\item
\textbf{ツール不足}: デバッガ、プロファイラなどの開発ツール
\end{itemize}
これらは今後の課題である。
\hypertarget{ux5faaux74b0ux53c2ux7167ux3078ux306eux5bfeux5fdcux65b9ux91dd}{%
\subsubsection{5.3
循環参照への対応方針}\label{ux5faaux74b0ux53c2ux7167ux3078ux306eux5bfeux5fdcux65b9ux91dd}}
循環参照問題に対しては、以下のアプローチを検討中:
\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\tightlist
\item
\textbf{weak参照の導入}: SwiftのARCと同様のアプローチ
\item
\textbf{リージョンベース管理}: スコープ単位での一括管理
\item
\textbf{パターンベース解決}: デザインパターンでの回避
\end{enumerate}
現在は3のアプローチを採用し、将来的1を導入予定である。
\hypertarget{mir13ux3068ux306eux76f8ux4e92ux4f5cux7528}{%
\subsubsection{5.4
MIR13との相互作用}\label{mir13ux3068ux306eux76f8ux4e92ux4f5cux7528}}
Nyashの「Everything is
Box」哲学は、MIR13の「BoxCall統一」と完全に一致する
\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\tightlist
\item
\textbf{言語レベル}: Nyashのすべての値がBox
\item
\textbf{IRレベル}: MIR13のすべての操作がBoxCall
\item
\textbf{最適化}: Boxの統一性によりJIT最適化が容易
\end{enumerate}
この設計の一貫性により、言語から機械語までの効率的な変換が実現されている。
\hypertarget{gcux3068ux306eux5171ux5b58ux5c06ux6765ux69cbux60f3}{%
\subsubsection{5.5
GCとの共存将来構想}\label{gcux3068ux306eux5171ux5b58ux5c06ux6765ux69cbux60f3}}
実験的にGC切り替え機能も実装したが、以下の理由で本論文では詳細を省略する
- birth/finiモデルとの相互作用が未検証 -
パフォーマンス特性の評価が不十分
将来的には、開発時はGCあり、本番はGCなしという使い分けを想定している。
\hypertarget{ux5b9fux88c5ux516cux958bux3068ux518dux73feux6027availability}{%
\subsubsection{5.6
実装公開と再現性Availability}\label{ux5b9fux88c5ux516cux958bux3068ux518dux73feux6027availability}}
実装と評価スクリプトは以下で公開している。 - リポジトリ:
https://github.com/moe-charm/nyash - 対象コミット:
\texttt{\_artifacts/ENVIRONMENT.txt}\texttt{git\ rev-parse\ HEAD}
を記録 - 再現手順: \texttt{\_artifacts/COLLECT\_ENV.sh}
\texttt{\_artifacts/RUN\_BENCHMARKS.sh} - 出力:
\texttt{\_artifacts/results/*.csv}
\hypertarget{ux95a2ux9023ux7814ux7a76}{%
\subsection{6. 関連研究}\label{ux95a2ux9023ux7814ux7a76}}
\hypertarget{ux30e1ux30e2ux30eaux7ba1ux7406ux30e2ux30c7ux30ebux306eux6bd4ux8f03}{%
\subsubsection{6.1
メモリ管理モデルの比較}\label{ux30e1ux30e2ux30eaux7ba1ux7406ux30e2ux30c7ux30ebux306eux6bd4ux8f03}}
\begin{longtable}[]{@{}lllllll@{}}
\toprule\noalign{}
言語 & モデル & 決定性 & 対称性 & 循環参照 & 安全性 & 学習曲線 \\
\midrule\noalign{}
\endhead
\bottomrule\noalign{}
\endlastfoot
C++ & RAII && × & 手動 &&\\
Rust & 所有権 && × & 不可 &&\\
Swift & ARC & × & × & weak &&\\
Java & GC & × & × & 自動 &&\\
Nyash & birth/fini &&& 手動/weak(予定) &&\\
\end{longtable}
\hypertarget{birthfiniux306eux72ecux81eaux6027}{%
\subsubsection{6.2
birth/finiの独自性}\label{birthfiniux306eux72ecux81eaux6027}}
\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\tightlist
\item
\textbf{完全な対称性}: 誕生と終了が明確なペア
\item
\textbf{直感的メタファー}: プログラマの理解を助ける
\item
\textbf{明示的だが安全}: 参照カウントで自動追跡
\end{enumerate}
Nyashはこれらの中間を狙うZigの明示性とSwiftの安全性の両立。
\hypertarget{ux7d50ux8ad6}{%
\subsection{7. 結論}\label{ux7d50ux8ad6}}
Nyashは「Everything is
Box」とbirth/fini対称性により、シンプルで安全なメモリ管理を実現する新しい言語である。初期評価では、GCなしでも実用的なアプリケーションが記述できることを確認した。
本研究は実現可能性の実証段階であり、以下が今後の課題である: -
大規模アプリケーションでの検証 - 開発パターンの確立 -
ツールエコシステムの構築
しかし、シンプルさを追求した設計は、プログラミング言語の新しい方向性を示唆している。
\hypertarget{ux8b1dux8f9e}{%
\subsection{謝辞}\label{ux8b1dux8f9e}}
本研究は、にゃーという猫の深夜の鳴き声にインスピレーションを得た。
本論文の執筆にあたり、ChatGPT、Claude、Geminiによる校正・推敲支援を受けた。AI時代の研究開発における新しい協働形態の実例として、これを明記する。
\hypertarget{ux53c2ux8003ux6587ux732e}{%
\subsection{参考文献}\label{ux53c2ux8003ux6587ux732e}}
{[}省略{]}
\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center}
\hypertarget{ux4ed8ux9332ux306aux305cbirthux306aux306eux304b}{%
\subsection{付録なぜ「birth」なのか}\label{ux4ed8ux9332ux306aux305cbirthux306aux306eux304b}}
多くの言語が「constructor」「init」「new」を使う中、なぜ「birth」を選んだのか
\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\tightlist
\item
\textbf{メタファーの一貫性}: 誕生→生存→終了という自然なライフサイクル
\item
\textbf{感情的つながり}: プログラマがオブジェクトに愛着を持てる
\item
\textbf{記憶しやすさ}: birth/finiは韻を踏んでいて覚えやすい
\end{enumerate}
些細に見えるが、言語設計において名前は本質である。
\end{document}