% 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のネイティブEXE(LLVM/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}