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

637 lines
24 KiB
TeX
Raw Normal View History

% 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}